前面我们学了点亮LED、显示文字、展示图片——这些都是让设备“表达”。但硬件开发的魅力不止于此,真正的乐趣在于让设备“动”起来。
今天这节课,我们就来学习如何用ESP32控制步进电机。步进电机最大的特点就是能够精确控制旋转角度——你想让它转多少度,它就转多少度,误差极小。
智能窗帘、3D打印机、机器人关节、自动门锁……这些设备背后,都有步进电机在默默工作。学会了这节课,你就掌握了“精确控制运动”的核心技能。
第一步:找到课程,看看成品效果
打开逗脑IDE,点击顶部 “教程”,在 “硬件” → “ESP32 + MicroPython” 分类下,找到控制步进电机。

打开课件,你会看到本节课的最终效果——步进电机在ESP32的控制下,一圈一圈平稳地旋转,精准而有力。

第二步:什么是步进电机?
步进电机是一种将电脉冲信号转换为角位移的执行元件。简单来说:
给它一个脉冲,它就转一个固定的角度。 脉冲越多,转得越多;脉冲频率越快,转得越快。
步进电机最大的优势:
- ✅ 精确控制角度:没有累积误差,说转多少就转多少
- ✅ 容易控制:只需要按顺序给四相线圈通电就行
- ✅ 自锁能力:不通电时也能保持当前位置
本节课用的是五线四相步进电机,配套ULN2003驱动板。驱动板的作用是放大ESP32引脚输出的信号,因为ESP32的GPIO引脚无法直接驱动电机。

第三步:步进电机的工作原理(简单理解)
步进电机内部有4个定子线圈(A、B、C、D四相),转子上有磁铁。通过按特定顺序给线圈通电,就能产生旋转磁场,吸引转子一步步转动。
三种工作模式:
| 模式 | 通电方式 | 特点 |
|---|---|---|
| 单拍模式 | A→B→C→D→A… | 每次只通一相,功耗小,力矩较小 |
| 双拍模式 | AB→BC→CD→DA→AB… | 每次通两相,力矩大,功耗较大 |
| 单双拍模式(八拍) | A→AB→B→BC→C→CD→D→DA→A… | 精度最高,步距角减半 |
本节课我们使用的是单拍模式——A→B→C→D依次通电,电机就会持续旋转。
第四步:动手接线——四根线搞定
接线依然很简单。ULN2003驱动板和ESP32之间的连接只需要4根信号线 + 2根电源线:
| 驱动板引脚 | 连接ESP32引脚 | 说明 |
|---|---|---|
| IN1 | GPIO15 | 控制A相 |
| IN2 | GPIO2 | 控制B相 |
| IN3 | GPIO4 | 控制C相 |
| IN4 | GPIO16 | 控制D相 |
| VCC | 5V | 驱动板电源(电机供电) |
| GND | GND | 公共地 |

💡 小提示: 驱动板的VCC一定要接5V,不能接3.3V,否则电机没有足够的动力旋转。
第五步:理解代码逻辑——按顺序通电
硬件连接好了,来看看控制代码。代码的逻辑非常简单:
四个引脚按顺序依次输出高电平,中间加一点延时,循环往复。
from machine import Pin
import time
# 定义四个相位引脚
a = Pin(15, Pin.OUT)
b = Pin(2, Pin.OUT)
c = Pin(4, Pin.OUT)
d = Pin(16, Pin.OUT)
# 初始状态:全部断电
a.value(0)
b.value(0)
c.value(0)
d.value(0)
delay_time_ms = 2 # 每步延时2毫秒,控制转速
while True:
# 第一步:A相通电
a.value(1)
b.value(0)
c.value(0)
d.value(0)
time.sleep_ms(delay_time_ms)
# 第二步:B相通电
a.value(0)
b.value(1)
c.value(0)
d.value(0)
time.sleep_ms(delay_time_ms)
# 第三步:C相通电
a.value(0)
b.value(0)
c.value(1)
d.value(0)
time.sleep_ms(delay_time_ms)
# 第四步:D相通电
a.value(0)
b.value(0)
c.value(0)
d.value(1)
time.sleep_ms(delay_time_ms)
# 然后回到第一步,循环
代码逻辑图解:
| 步骤 | A相(15) | B相(2) | C相(4) | D相(16) | 电机动作 |
|---|---|---|---|---|---|
| 1 | 1 | 0 | 0 | 0 | 转子被A吸引 |
| 2 | 0 | 1 | 0 | 0 | 转子被B吸引 → 转一步 |
| 3 | 0 | 0 | 1 | 0 | 转子被C吸引 → 转一步 |
| 4 | 0 | 0 | 0 | 1 | 转子被D吸引 → 转一步 |
四个步骤循环一次,电机就转过一个完整的步距角。 循环越快,电机转得越快;delay_time_ms 越小,转速越快。
第六步:一键打开代码,保存运行
找到课件中的示例代码块,点击 “打开” 按钮,代码自动加载到编辑器中。
按 Ctrl + S 保存,选择ESP32开发板设备,给文件命名(比如stepper_motor.py),点击保存。

保存成功后,点击运行按钮。
注意看——步进电机开始平稳地旋转起来!一圈、两圈、三圈……只要程序在运行,它就会一直转下去。

调整转速:改一个数字就行
想让电机转得快一点还是慢一点?只需要修改一个变量:
delay_time_ms = 2 # 数值越小,转得越快;数值越大,转得越慢
试试改成 delay_time_ms = 10,电机会明显变慢;改成 delay_time_ms = 1,电机会飞快旋转。
这就是步进电机控制的精髓——通过调整脉冲频率来控制转速。

步进电机能做什么?
步进电机的精确控制能力,让它成为许多设备的关键部件:
| 应用场景 | 为什么用步进电机 |
|---|---|
| 3D打印机 | 精确控制喷头XYZ三轴移动 |
| 智能窗帘 | 控制窗帘开合角度 |
| 机器人关节 | 精确控制每个关节的角度 |
| 云台/摄像头 | 控制镜头平稳旋转 |
| 自动门锁 | 控制锁芯旋转角度 |
| 数控机床 | 精确控制刀具位置 |
学会了步进电机控制,你就能做出这些真正“有用”的项目。
全程回顾
| 步骤 | 操作 | 效果 |
|---|---|---|
| 找到课程 | 教程→硬件→ESP32+MicroPython→控制步进电机 | 了解步进电机原理和效果 |
| 认识硬件 | 了解步进电机 + ULN2003驱动板 | 知道哪个是电机、哪个是驱动 |
| 动手接线 | IN1→GPIO15, IN2→GPIO2, IN3→GPIO4, IN4→GPIO16 | 硬件准备就绪 |
| 打开代码 | 点击“打开”按钮 | 完整代码进入编辑器 |
| 保存运行 | Ctrl+S → 选择ESP32 → 运行 | 步进电机开始旋转! |
| 调整转速 | 修改delay_time_ms值 | 电机转得快一点或慢一点 |
如果你对本节课感兴趣,去官网(www.dounao.cn)下载逗脑IDE,准备好ESP32和步进电机,跟着课件走一遍。
有任何问题或建议,欢迎在评论区留言告诉我们。

1081

被折叠的 条评论
为什么被折叠?



