一、系统架构
Text
STM32F407 (主机, SPI Master) L6470 (从机, 运动引擎) 两相步进电机┌──────────────┐ SPI: CS/CK/SDI/SDO ┌──────────────┐ OUT1A/2A ┌─────┐│ 应用层:位置 │ ────────────────────→│ 内部寄存器 │──────────────→│ 绕组 ││ 流程/状态机 │ ←──── FLAG / BUSY ───│ +电机驱动桥 │ OUT1B/2B └─────┘└──────────────┘ └──────────────┘
- 分工 :F407 负责"发命令、读状态、做业务逻辑";L6470 负责"梯形速度曲线生成、128 细分正弦电流、保护检测"------主机不用实时打 STEP 脉冲,这是 L6470 与普通驱动芯片最大的区别。
- 硬件接口 :
- SPI:CS(片选)、CK(时钟 ≤5MHz)、SDI/SDO(数据),命令+参数整帧传输;
- BUSY:开漏输出,命令执行期间拉低,执行完释放------轮询此引脚或读 STATUS 的 BUSY 位判断运动结束;
- FLAG:开漏输出,发生故障(堵转/过流/过温/欠压等)时拉低,做中断或轮询;
- STBY/RST:复位;SW:外部限位开关(可选)。
二、上电初始化流程
c
11. GPIO/SPI 初始化(SPI 主模式,5MHz,8bit,CPOL=1/CPHA=2边沿按手册时序)22. STBY/RST 拉高释放复位 → 等待 t_logicwu + t_cpuwu(约1ms)稳定33. GetStatus() → 清除上电标志,确认芯片应答正常(检查UVLO/WRONG_CMD)44. SetParam 配置关键寄存器:5 - MAX_SPEED / MIN_SPEED 速度范围(上限约15610 step/s)6 - ACC / DEC 加减速度(step/s²)7 - KVAL_HOLD/RUN/ACC/DEC 各阶段电压幅值(决定力矩,按电机参数调)8 - STEP_MODE 细分(1/128 默认)9 - OCD_TH / STALL_TH 过流/堵转阈值10 - ALARM_EN 使能需要报 FLAG 的告警115. ResetPos() → ABS_POS 清零,定义原点
注意:多数寄存器要求电机停止时才能写,否则置 NOTPERF_CMD。
三、运动控制(三条典型路径)
1. 相对运动 ------ Move(DIR, N_STEP)
Text
发 Move 命令 → 等BUSY释放 → 完成
适合定长步进(如你项目里的"走 N 步到位")。
2. 绝对定位 ------ GoTo(ABS_POS) / GoTo_DIR(DIR, ABS_POS)
芯片按最短路径或强制方向自动规划梯形曲线。
3. 回零 ------ GoUntil + ReleaseSW(配合 SW 引脚)
Text
ReleaseSW(ACT,DIR):以最低速反向跑,直到SW释放(上升沿)→ HardStop + ABS_POS清零GoUntil(ACT,DIR,SPD):正转找开关,撞上(下降沿)→ SoftStop
这是 L6470 内置的原点校准机制,主机只需发起命令+等 BUSY。
四、命令执行与完成判断
每条命令的标准循环:
c
1L6470_SendCmd(MOVE, dir, nsteps); /* 整帧SPI:命令字节+参数字节 */2while (BUSY_PIN == LOW) { ... } /* 或轮询 GetStatus 的 BUSY 位 */3/* BUSY释放 = 运动结束(到速/到位/停稳) */
- BUSY 判断可用 GPIO 电平(开漏,需上拉)、STATUS 寄存器 BUSY 位、或外部中断(BUSY 上升沿);
- 运动过程中不要向 L6470 发新运动命令(会被拒绝,NOTPERF_CMD 置位)。
五、状态监控与故障处理
c
1uint16_t status = L6470_GetStatus(); /* 读STATUS,同时自动清除告警标志 */
关键位:STEP_LOSS_A/B(堵转)、OCD(过流)、TH_WRN/TH_SD(过温)、UVLO(欠压)、NOTPERF_CMD/WRONG_CMD(命令被拒/非法------调试 SPI 时序问题就看这两个位)。
故障处理闭环(如你项目里的堵转流程):
Text
FLAG拉低/STEP_LOSS → 停机(HardStop/HardHiZ) → 报错误码 → 置复位标志 → 等上位机复位 → 重新初始化
六、与你的工程的对应关系
| 通用流程 | 你的工程实现 |
|---|---|
| Move 定长步进 | Cond 流程各挡位运动(Task 30x,28800 步到 7 号位) |
| BUSY 轮询 | Motor_IsBusy() 读 BUSY |
| 外部验证 | 码齿光电 PA4 EXTI 计数(tooth_sensor)+ ToothMonitor 边沿校验 |
| 故障闭环 | reset_flag 清零 → 复位恢复机制 |
七、一句话总结
初始化配参数 → SPI 发运动命令 → 等 BUSY 完成 → GetStatus 查异常,四个环节循环;L6470 把脉冲生成和曲线规划全部包办,F407 只做调度、校验和故障管理。