步进电机把电脉冲直接变成角位移:脉冲数 → 角度,脉冲频率 → 转速。开环就能精确定位,数控机床、3D 打印机都用它。

| 类型 | 特点 | 短板 |
|---|---|---|
| 反应式(磁阻式) | 结构简单,步距角可小至 1.2° | 噪声震动大 |
| 永磁式 | 动态性能好、力矩大 | 步距角大(7.5° 或 15°) |
| 混合式 | 兼顾两者优点,应用最广 | —— |
按绕组极性又分单极性(有中心抽头、电流单向,驱动简单但力矩小)与双极性(电流可反向,需 H 桥,力矩大)。

定子是 A/B 两相绕组,转子是永磁体。通电顺序决定转子停的角度:






| 参数 | 含义 |
|---|---|
| 相数 / 拍数 | 两相电机步距角 1.8°;四相四拍 AB-BC-CD-DA、四相八拍 |
| 步距角精度 | 误差 ÷ 步距角 × 100% |
| 定位转矩 | 不通电时转子被「锁住」的力矩 |
| 失步 / 失调角 | 负载过大或频率过快导致丢步;细分不能消除失调角 |
驱动器 ATK-2MD5050:12~50VDC 供电、峰值电流 5.0A、最大 256 细分、双极恒流 PWM 驱动、光耦隔离。接口三根线:ENA(脱机)、DIR(方向)、PUL(脉冲,≤200kHz)。细分拨码 SW1~SW4:8 细分 1600 脉冲/圈;电流拨码 SW5~SW8(SW8=ON 半流减半),实验统一设 8 细分、1.0A。42 电机引脚:1 脚 A+、3 脚 A−、4 脚 B−、6 脚 B+。
4 路接口:脉冲 TIM8_CH1~4(PI5/PI6/PI7/PC9)、方向 DIR(PF14/PF12/PB2/PH2)、使能 EN(PF15/PF13/PF11/PH3),与驱动器共阳接法(x=1 有效)。定时器 stepper_init(1000-1, 168-1) → 1MHz 计数、1ms 周期(初始 1kHz 脉冲,太快会丢步堵转)。
两种发脉冲方式:PWM 模式直接 Start/Stop;输出比较翻转模式在中断里改比较值持续翻转(两次中断 = 一个完整脉冲)。脉冲计数停机逻辑:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM8) {
g_run_flag = 1;
g_stepper.pulse_count--; /* 每个完整脉冲计数值-- */
if (g_stepper.dir == CW)
g_stepper.add_pulse_count++; /* 绝对位置++ */
else
g_stepper.add_pulse_count--; /* 绝对位置-- */
if (g_stepper.pulse_count <= 0) { /* 脉冲发完即到位 */
stepper_stop(STEPPER_MOTOR_1);
g_run_flag = 0;
}
}
}实验:KEY0 选接口 ID、KEY1 开启旋转、KEY2 关闭。接线顺序口诀:先控制线、再动力线、最后驱动器电源。
1.8° 电机 8 细分:每步 1.8° ÷ 8 = 0.225°,一圈 360 ÷ 0.225 = 1600 脉冲(PULSE_REV=1600.0、MAX_STEP_ANGLE=0.225)。角度转脉冲:
void stepper_set_angle(uint16_t angle, uint8_t dir, uint8_t motor_num)
{
g_stepper.pulse_count = angle / MAX_STEP_ANGLE; /* 角度 ÷ 0.225° */
if (g_stepper.pulse_count == 0)
stepper_stop(motor_num); /* 0° 则不动 */
else
stepper_star(motor_num, dir); /* 启动旋转 */
}实验:KEY0 正向 +90°、KEY1 反向 +90°、KEY2 启动。按两次 KEY0 再按 KEY2,电机顺时针转 180° 后稳稳停下,串口打印累计角度(累计脉冲数 × 0.225°)。