从线圈到代码:单极性步进电机原理拆解,单相 / 双相 / 半步驱动全讲透
1.步进电机基本知识
步进电机是一种特殊的电动机,它可以将输入的电脉冲信号转换成角度或位置的离散变化,从而实现精确的角度控制。步进电机主要有以下特点:
- 步进式运转:步进电机通过控制线圈的通电顺序,使转子以固定的角度(步距角)转动,从而实现位置控制。常见的步距角有 1.8°、0.9° 等。
- 高定位精度:步进电机可以精确地控制转动角度,定位精度高,一般可达 ±3% 以内。
- 开环控制:步进电机的位置控制是通过开环控制实现的,无需反馈信号即可精确控制。
- 高扭矩:步进电机在低速时具有较高的输出扭矩,适合驱动负载较重的场合。
- 快速响应:步进电机的启动、停止和转向速度快,响应迅速。
步进电机广泛应用于各种自动化设备,如打印机、数控机床、机器人、3D 打印机等,是实现精确位置控制的理想选择。通过控制脉冲信号的频率和顺序,可以精确地控制电机的转速、角度和方向。
这里,我们使用的电机型号为 28BYJ-48 五线四相步进电机:

它具有以下主要特点:
- 小型号码盘式结构:28BYJ-48 尺寸较小,直径仅 28mm,长度约 34mm,非常紧凑。
- 低压供电:工作电压范围为 5V-12V,可直接接入单片机等低压电路。
- 低功耗:典型工作电流仅 12-14mA,非常节能。
- 高扭矩:输出扭矩可达 34.3mN·m,足以驱动各种小型负载。
- 低速高精度:步距角为 0.0625°,每转可达 4096 步,精度很高。
- 5 根引线:包括两相绕组的 4 根线和 1 根共地线。
这种 28BYJ-48 步进电机广泛应用于各种小型机电设备中,如门锁、玩具、自动化设备等。由于其尺寸小、功耗低、扭矩足够,非常适合与单片机配合使用。28BYJ-48 五线四相步进电机的工作原理可以简述为:通过控制定子上总共 4 对 8 个绕组的通断(正对着的 2 个绕组总是会同时导通或关断),利用绕组导通时产生的电磁力吸引转子上 6 个使用永磁体材料制成的齿来控制中间转子的转动。
这里,驱动 28BYJ-48 步进电机时需要配合 ULN2003 驱动器 IC,ULN2003 一款常见的 7 路开关驱动器集成电路,我们可以使用 GPIO 驱动内部的达林顿管(达林顿管也称复合管,即使用两个三极管复合成一个三极管来提供更大的驱动电流从而驱动大负载)控制其通断从而实现 GPIO 输出小电流控制电机运转大电流,它主要用于驱动不同类型的电子负载,如步进电机、继电器、LED 和其他小型电磁设备。

ULN2003 具有两种封装:DIP-16 插件和 SOP-16 贴片。

步进电机的控制方式主要有以下几种:



- 单相驱动:每次只控制电机旋转一个步距角度(每次只有一相绕组通电),适用于较简单的运动控制,但精度较低、扭矩较小。
- 双相驱动:每次只控制电机旋转半个步距角度(每次有两相绕组通电),扭矩较大,但结构和控制略复杂。
- 半步驱动:每次控制电机旋转半个步距角度(采用单相和双相交替通电的方式),实现更高的控制精度。
2.应用实验
这里,我们使用单相驱动方式驱动步进电机,简单来说,单相驱动方式原理为:


- 4 相绕组结构:28BYJ-48 步进电机有 4 个独立的绕组相,分别用 IN1、IN2、IN3、IN4 这 4 个引脚控制。
- 顺序通电驱动:通过依次给这 4 个相绕组通电,可以实现转子的步进旋转。每次切换一个相绕组的通断,转子就会移动一个步距角。
- 磁滞式结构:转子采用磁滞式结构,即转子由一圈永磁体组成,定子则由 4 个电磁铁绕组构成,当定子的某个相绕组通电时,会产生一个磁极,吸引或排斥转子的磁极,从而带动转子旋转。
- 减速机构:28BYJ-48 内部集成了减速机构,步距角从电机本身的 7.5°,减小到 0.0625°,从而大大提高了角度分辨率。
这里,我们使用 风雅一号板-通用兼容扩展板 上的长排针连接 风雅一号板-步进电机驱动板 上逻辑输入部分接口,使用引脚如下表所示:
| 单片机引脚 | 电机驱动引脚 | 步进电机引脚 |
|---|---|---|
| GPIO2 | IN1 | A |
| GPIO3 | IN2 | B |
| GPIO4 | IN3 | C |
| GPIO5 | IN4 | D |
| GND | GND | NC |
| VBUS | VCC | COMMON |
然后使用步进电机驱动板上逻辑输出部分接口与步进电机连接:
同时,打开 风雅一号板-步进电机驱动板 上的拨码开关:

整体连接情况如下图所示:

示例代码如下,在配套资料的文件夹:elegance-devkit v1\Demo\04 GPIO_StepMotor 中:
# Python env : MicroPython v1.23.0
# -*- coding: utf-8 -*-
# @Time : 2024/7/27 上午10:23
# @Author : 李清水
# @File : main.py
# @Description : GPIO类实验,通过GPIO控制步进电机转动
# ======================================== 导入相关模块 ========================================
# 硬件相关模块
from machine import Pin
# 时间模块
import time
# ======================================== 全局变量 ============================================
# 初始化 GPIO 引脚元组,每个元素为 Pin 对象
pins: tuple[Pin, ...] = (
Pin(2, Pin.OUT),
Pin(3, Pin.OUT),
Pin(4, Pin.OUT),
Pin(5, Pin.OUT)
)
# ======================================== 功能函数 ============================================
def control_step_motor(step: int) -> None:
"""
控制步进电机的步进逻辑。
按照当前步进索引,将对应引脚电平拉高,其余引脚电平拉低,
实现步进电机的顺序控制。
Args:
step (int): 当前步进索引,取值范围为 0 ~ 3。
Returns:
None
"""
for index, pin in enumerate(pins):
# 索引等于当前步值的引脚拉高,其他引脚拉低
pin.value(index == step)
# ======================================== 初始化配置 ==========================================
# 上电延时 3 秒
time.sleep(3)
# 打印调试消息
print("FreakStudio: Using GPIO to control step motor")
# ======================================== 主程序 =============================================
while True:
# 遍历 0 ~ 3 共 4 个步进值
for step in range(4):
# 调用步进控制函数
control_step_motor(step)
# 每步延时 4 毫秒
time.sleep_ms(4)
烧录代码,可以看到步进电机转动同时步进电机驱动模块上的指示灯顺序亮起。


这里,涉及到的关于 Python 元组数据结构的知识点可以查看如下链接:
https://mp.weixin.qq.com/s/crZBcEEBKBfDfWA9ub-d-A
关于单极性步进电机驱动详细原理讲解可以查看如下视频:
【从硬件到代码】I2C 总线单极性步进电机驱动板设计全解 | 标准化接口 + 电机原理 + 实战测试,看这一篇就够了!_哔哩哔哩_bilibili

步进电机是一种特殊的电动机,它可以将输入的电脉冲信号转换成角度或位置的离散变化,从而实现精确的角度控制。步进电机主要有以下特点:
浙公网安备 33010602011771号