【从零开始实现STM32步进电机驱动】(一)项目背景与选型思考
1. 项目背景
先说说为什么要写这些东西。
最近工作越来越忙,学的东西也越来越杂。今天看步进电机,明天看无刷电机,后天可能又在看PID算法。本来记性就不好,加上学得又杂,经常是上周刚弄明白的东西,这周就忘得差不多了。
这种“学了忘、忘了学”的死循环,真的很让人沮丧。
后来想了个办法:写下来。
写文章有几个好处:
-
写的过程就是梳理的过程:你以为你懂了,但一动笔就发现逻辑是乱的
-
写下来就不容易忘:即使忘了,翻翻自己的文章也能很快捡起来
-
写给别人看,能逼自己搞清楚:因为怕误导别人,所以不敢含糊
这篇文章记录的,是我从零开始学习STM32控制A4988驱动步进电机的全过程。从物料选型、新建工程开始,到运动控制这种稍微深入一点的内容,都会一步步写下来。
后面还会继续学习无刷电机、伺服电机等等。其实都是从零开始,走得慢,但希望能走得稳。
如果看到文章里有错误的地方,还请一定指正。 毕竟我也是学习者,不是专家。互相学习,一起进步,这才是写博客的意义。
2. 步进电机简介
2.1 最简单的理解
步进电机的工作原理,其实可以用一个电磁铁吸引磁铁的模型来理解。
想象一下:
-
中间有个可以转动的磁铁(这就是转子)
-
周围有四个电磁铁,两两相连(这就是定子线圈)
-
给不同的电磁铁通电,磁铁就会被吸引到对应的位置
步进电机的本质,就是用精确的顺序给线圈通电,让转子一步一步地转动。

2.2 转动过程分解
假设初始状态:N极朝上(定义为0°位置)
第1步:A相通电
电流方向:A+ → A- (上端流入,下端流出) 根据右手螺旋定则,产生的磁场方向:↑ (上端N极,下端S极) 结果:转子被吸引,N极朝上,停在0°
第2步:A相断电,B相通电
电流方向:B+ → B- (右端流入,左端流出) 磁场方向:→ (右端N极,左端S极) 结果:转子被吸引旋转90°,N极朝右
第3步:B相断电,A相通反向电流
电流方向:A- → A+ (下端流入,上端流出) 磁场方向:↓ (下端N极,上端S极) 结果:转子继续旋转到180°,N极朝下
第4步:A相断电,B相通反向电流
电流方向:B- → B+ (左端流入,右端流出) 磁场方向:← (左端N极,右端S极) 结果:转子旋转到270°,N极朝左
完成这4步,转子刚好转了一圈(360°)
3. 步进电机选型:42电机
3.1 步进电机的命名规则
步进电机通常按法兰尺寸命名,42电机代表电机外壳的直径约为42毫米,例如其它尺寸:
| 型号 | 法兰尺寸 | 典型应用 |
|---|---|---|
| 20电机 | 20mm | 小型摄像头云台 |
| 28电机 | 28mm | 玩具、小机械臂 |
| 35电机 | 35mm | 小型3D打印机 |
| 42电机 | 42mm | 最普及,3D打印机、CNC标配 |
| 57电机 | 57mm | 大型CNC、工业设备 |
| 86电机 | 86mm | 重型设备 |
3.2 42电机的特点
42电机是DIY圈子的标准件:
-
尺寸适中:42×42mm,不大不小刚好
-
力矩够用:0.4-0.5N·m,能带动大多数轻负载
-
价格便宜:20-30块钱一个,坏了不心疼
-
配件多:联轴器、皮带轮、支架,随便买
-
资料多:网上教程90%都是用42电机
3.3 步距角1.8°
上一节我们画的简化模型,4步转一圈,步距角90°。
这种电机如果造出来,能干嘛呢?
-
转个风扇?不行,一顿一顿的
-
做个机械臂?精度差到离谱
-
给3D打印机用?打印出来的东西估计没法看
90°步距角的电机,只能用在不在乎精度的场合。
那购物平台上常见的1.8°步进电机是怎么来的?
其实原理和我们的简化模型一模一样,只是在结构上做了改进:
-
转子不是简单的4个磁极,而是50个齿
-
定子也不是简单的4个线圈,而是更多极靴
结果就是:同样的四步控制,转子每次只转1.8°,而不是90°。
简化模型:4步转一圈 → 步距角 90° → 每圈4步 实际电机:4步转7.2° → 步距角 1.8° → 每圈200步
200倍的精度的提升!
3.4 选型结果
电机型号:42步进电机 步距角:1.8° 相数:2相 额定电流:1.2A
购物平台上随便买一个就行,二十元左右,只要知道这几个参数就可以了。
为什么选这个? 因为它是万能的——几乎所有教程都用它,所有配件都兼容它。
4. 主控选型:STM32F103C8T6
4.1 为什么用STM32F103C8T6?
说实话,主控芯片的选择,没那么玄乎。
STM32F103C8T6确实是个好选择:
-
便宜:10块钱出头,坏了不心疼
-
资料多:正点原子、野火、普中,教程多到看不完
-
性能够:72MHz主频 + 20KB RAM + 硬件FPU,跑步进电机控制绰绰有余
但如果你问我:一定要用STM32吗?
答案是:不一定。
用Arduino行不行?行。
用ESP32行不行?也行。
用别的STM32型号行不行?当然行。
主控就是个工具,重要的是你用得顺手。
4.2 硬件FPU的意义
另外提一句:STM32F103有硬件FPU。
这意味着:
-
浮点加减乘除,一个指令搞定
-
不像软件浮点,要几十上百个指令模拟
对于后面运动控制这种需要大量浮点计算的场景,有没有FPU,体验完全是两回事。
4.3 丰富的定时器资源
为什么定时器重要?因为步进电机控制的核心就是精确的脉冲。
STM32F103有4个定时器:
-
TIM1:高级定时器,带互补输出
-
TIM2/TIM3/TIM4:通用定时器
每个定时器都有:
-
PWM模式
-
单脉冲模式
-
编码器接口模式
-
输入捕获/输出比较
这意味着我可以:
-
用单脉冲模式产生STEP脉冲
-
用编码器模式接光电编码器做闭环
-
用输入捕获测速度
5. 驱动芯片选型:A4988
5.1 驱动芯片的作用
MCU出来的是3.3V的信号,电流只有几毫安。这点能量根本带不动电机。
驱动芯片的作用:
-
把弱信号放大成强电流
-
把简单的STEP/DIR信号转换成复杂的线圈通电顺序
-
提供过流、过热保护
5.2 候选芯片对比
| 芯片 | 最大细分 | 特点 | 价格 | 适用场景 |
|---|---|---|---|---|
| A4988 | 1/16 | 最普及,资料最多 | 低 | 学习、DIY |
| A4984 | 1/8 | 有NSNF保护 | 中 | 工业老设备 |
| DRV8825 | 1/32 | 电流大,细分高 | 中 | 需要更高精度的DIY |
| TMC2208 | 1/256 | 静音,带堵转检测 | 高 | 对噪音敏感的场景 |
5.3 为什么选A4988?
三个字:资料多。
-
随便一搜,就有几百篇教程
-
遇到问题,90%都能搜到解决方案
-
代码示例多到看不完
对于初学者来说,这是最大的优势。
其他理由:
-
便宜:模块才几块钱,烧了不心疼
-
简单:STEP/DIR两根线就能控制
-
够用:1/16细分,对学习来说足够了
-
标准:几乎所有开源项目都在用
类似芯片很多,比如上面列举的那些,几乎都是一样的,甚至有些还可以pin to pin替代,所以不用纠结,随便挑选一款都可以,控制逻辑上都是一样的。
5.4 A4988核心特性
供电电压:8-35V 输出电流:±2A (实际建议1.5A以下) 细分:1, 1/2, 1/4, 1/8, 1/16 控制方式:STEP/DIR 内置转换器:是的 (所以控制很简单) 保护:热关断、欠压锁定、短路保护 封装:QFN-28
5.5 细分的概念
什么是细分?
回到刚刚的图片,刚刚我们A相B相切换时,转子只能保持在0°、90°、180°、270°,硬件买回来是没办法改变了,但我想更精细的去控制,有办法吗?当然有,初始状态A相通电时,转子保持在0°,此时我们让A相保持通电,B相也启动通电,此时磁铁受到向上和向右的力,大小相同,根据力的矢量合成,磁铁应该会旋转到45°的位置,也就是说,我们通过控制AB相的通电,实现了2细分,由原来的一步90°细分成了一步45°,原理就是这么简单,8细分/16细分等等都一样。

细分的意义:
-
更平稳:振动减小
-
更精确:90°/步->45°/步
-
更安静:噪音降低
5.6 选型小结
在正式开始教程之前,想先说两句掏心窝子的话。
ONE:别自己画板子。
我知道,自己画板子很酷。原理图、Layout、打样、焊接、调试,一套流程走下来,成就感满满。
但是,学习阶段真的不建议。
原因很简单:
-
花时间:画板子等打样,一周就过去了
-
花钱:打样费、元器件费,加起来比买模块贵
-
花精力:焊完了还得debug,是电路问题还是程序问题?鬼知道
而一个A4988成品模块,几块钱包邮。焊好的、测试过的、引脚都给你标好了。
把省下来的时间和精力,花在学习思路上,不香吗?
TWO:别一上来就追高端芯片。
TMC2208静音,TMC5160大电流,确实好。但没必要。
学习阶段,你需要的不是静音,不是大电流,而是:
-
搞明白STEP/DIR是怎么回事
-
弄懂细分是怎么工作的
-
理解为什么需要加减速
-
踩一踩各种坑
这些基础,用A4988完全够学。等把这些都搞明白了,再考虑升级到TMC也不迟。
6. 软件开发环境
STM32CubeMX V6.10.0
STM32Cube FW_F1 V1.8.7
MDK keil V5.43.1.0
VS Code
7. 第一章小结
本章主要梳理了项目的基础知识。首先介绍了步进电机的工作原理——通过线圈轮流通电产生磁场,吸引转子一步一步转动;然后讲解了步距角的概念,从简化模型的90°讲到实际电机的1.8°;最后完成了核心器件的选型:42电机作为动力输出,STM32F103C8T6作为主控,A4988作为驱动芯片。选型原则也很简单:够用就好、资料要多、价格要便宜。基础打好了,下一章就开始动手搭建硬件。
注:本人原创,未经允许,不可转载。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)