步进电机(ULN2003 驱动)
四相五线制 · 相序脉冲控制 · 整步/半步模式
一、理论基础
1.1 器件概述
步进电机是一种将电脉冲信号转换为角位移或线位移的执行机构。每输入一个脉冲信号,步进电机就转动一个固定的角度(步距角)。通过控制脉冲的个数、频率和相序,可以精确控制步进电机的转角、转速和方向。
本实验系统采用四相五线制步进电机,由 ULN2003 达林顿管阵列驱动。
1.2 工作原理
步进电机内部有多个绕组(相位),通过按特定顺序给各相绕组通电,产生旋转磁场,带动转子转动。
四相步进电机的工作模式:
| 模式 | 说明 | 特点 |
|---|---|---|
| 整步模式(单相) | 每次只给一相通电 | 步距角大,力矩小 |
| 整步模式(双相) | 每次给两相同时通电 | 步距角大,力矩大 |
| 半步模式 | 交替使用单相和双相 | 步距角减半,精度高,运行平稳 |
半步模式脉冲分配(4 相 8 拍):
| 序号 | 当前状态 | 正转脉冲 | 反转脉冲 |
|---|---|---|---|
| 1 | 0100 | 0101 | 0001 |
| 2 | 0101 | 0001 | 0100 |
| 3 | 0001 | 1001 | 0101 |
| 4 | 1001 | 1000 | 0001 |
| 5 | 1000 | 1010 | 1001 |
| 6 | 1010 | 0010 | 1000 |
| 7 | 0010 | 0110 | 1010 |
| 8 | 0110 | 0100 | 0010 |
整步模式脉冲分配(4 相 4 拍,双相):
| 序号 | 当前状态 | 正转脉冲 | 反转脉冲 |
|---|---|---|---|
| 1 | 0101 | 1001 | 0110 |
| 3 | 1001 | 1010 | 1010 |
| 5 | 1010 | 0110 | 1001 |
| 7 | 0110 | 0101 | 0101 |
1.3 关键参数
| 参数 | 规格 |
|---|---|
| 电机类型 | 四相五线制步进电机 |
| 驱动芯片 | ULN2003(7 路达林顿管阵列) |
| 控制口 | P1.4~P1.7(4 相控制) |
| 步距角 | 5.625°/64(减速后) |
| 供电 | VCC5 |
| 控制方式 | 相序脉冲 + 延时控制转速 |
1.4 典型应用
- 3D 打印机、CNC 机床
- 机器人关节、机械臂
- 智能小车(精确里程计)
- 摄像头云台、自动对焦
- 纺织机、印刷机、包装机
- 自动阀门、风门控制
- 教学实验(电机控制原理)
二、实验实例:步进电机控制
2.1 实验目的
- 掌握步进电机的工作原理
- 掌握步进电机控制程序的编程方法
2.2 实验内容
在 IAR 集成开发环境中编写步进电机控制程序,通过循环控制 4 个相序使步进电机旋转。
2.3 预备知识
- 了解 C 语言的基本知识
- 了解 IAR 中编写和调试程序的方法
- 了解步进电机相序控制原理
2.4 实验设备
- 硬件:WSN-V 教学实验箱(带电机扩展板)、PC 机
- 软件:Windows + IAR EW for 8051
2.5 驱动电路
ULN2003 为驱动芯片,提供控制步进电机所需的驱动电流。CC2530 的 P1.4~P1.7 输出相序控制信号,经 ULN2003 放大后驱动步进电机的 4 个绕组。

电路说明:
- U1(ULN2003)为 7 路达林顿管阵列驱动芯片
- P1.4~P1.7 连接 ULN2003 输入端(1B~4B)
- ULN2003 输出端(1Q~4Q)连接步进电机 M2 的 4 个绕组
- VCC5 为电机供电,COM 端接 VCC5
- ULN2003 内部集成续流二极管,保护驱动管
2.6 关键代码
c
unsigned char pluse_table_1[] = {
0x05, 0x09, 0x0a, 0x06, // 整步双相模式:0101, 1001, 1010, 0110
};
void main(void)
{
unsigned char i;
P0DIR = 0xf1; // P0.0, P0.4~P0.7 为输出
P1DIR = 0xf1; // P1.0, P1.4~P1.7 为输出
P2DIR |= 0x01; // P2.0 为输出
P0_6 = 0; // 停止直流电机
while(1)
{
for(i=0;i<4;i++){
P1 = (pluse_table_1[i] << 4); // 输出相序到 P1.4~P1.7
delay(); // 延时控制转速
}
P0_0 = ~P0_0; // 反转 LED 指示
P2_0 = ~P2_0;
}
}2.7 实验步骤
- 连接好仿真器,及带电机扩展板的通用调试母板
- 新建工程 StepMotor,添加相应文件并修改工程设置
- 创建 StepMotor.c 并加入到工程中
- 编写 StepMotor 相关函数,控制步进电机循环旋转
- 编译下载运行,观察步进电机的循环旋转速度
2.8 实验现象
- 步进电机按设定的相序和延时循环旋转
- 改变延时函数的时间可以改变电机转速(延时越短,转速越快)
- 反转脉冲表可以使电机反转
- 半步模式(8 拍)比整步模式(4 拍)运行更平稳、步距角更小
知识点
步进电机的转速由脉冲频率决定(频率越高,转速越快),转角由脉冲个数决定,方向由相序顺序决定。步进电机存在启动频率限制:如果启动时脉冲频率过高,电机可能无法启动(丢步)。实际应用中通常需要"加速—匀速—减速"的曲线控制。ULN2003 是达林顿管阵列,只能提供单向驱动(吸电流),适合驱动小功率步进电机;大功率电机需要使用专用步进电机驱动芯片(如 A4988、DRV8825)。
内容来源:《WSN-V 物联网综合教学实验指导书》第 7 章·7.3 步进电机实验,结合课程教学经验整理。