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作为驱动芯片。选型原则也很简单:够用就好、资料要多、价格要便宜。基础打好了,下一章就开始动手搭建硬件。

注:本人原创,未经允许,不可转载。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐