TB6612 是控制器与直流电机之间的功率执行模块。MSPM0G35XX 不直接给电机供电,而是输出方向、PWM 和待机控制信号;TB6612 再按这些逻辑驱动左右电机。
| 文档属性 | 内容 |
|---|---|
| 文档编号 | TI-CAR-03 |
| 设备 | TB6612 双路直流电机驱动 |
| 底层实现 | BSP/Src/Motor.c |
| 应用入口 | Load_Motor_PWM()、set_motor_enable()、set_motor_disable() |
1. 控制接口如何分工
| 信号 | 当前用途 | 软件控制 |
|---|---|---|
| AIN1 / AIN2 | 左电机方向 | GPIO |
| BIN1 / BIN2 | 右电机方向 | GPIO |
| PWMA / PWMB | 左右电机输出强度 | 同一 PWM 定时器的两个通道 |
| STBY | 驱动待机/使能 | GPIO |
方向信号回答“往哪转”,PWM 回答“输出多少”,STBY 回答“驱动是否允许工作”。三者必须分别管理,不能只把 PWM 写成零就视为所有场景下都已安全关闭。
2. 底层初始化顺序
Motor_Start() 的顺序体现了安全上电思路:
- 启动电机 PWM 定时器。
- 配置并启动左右硬件 QEI。
- 将 STBY 配置为输出并先拉低。
- 将左右电机占空命令写为零。
- 最后拉高 STBY。
先禁止功率输出、再建立已知方向和零占空比,能减少初始化瞬间的不确定动作。这里能确认软件顺序,但电机电源接线、共地和上电浪涌仍需硬件侧验证。
3. Motor_SetDuty() 做了什么
应用层传入一个带符号的控制量。驱动先把它限制到 -1000 到 1000,再按左右电机的安装极性进行变换:
应用控制量 ↓ 限幅左右轮输出极性修正 ↓符号 → AIN/BIN 方向绝对值 → PWM 比较值左右电机镜像安装,因此同样的“车体前进”可能需要不同的电气方向。代码用 MOTOR_LEFT_OUTPUT_POLARITY 和 MOTOR_RIGHT_OUTPUT_POLARITY 把机械差异封装在驱动层,上层只使用统一的正负语义。
4. 方向与幅值必须解耦
Motor_SetDirc() 只切换方向 GPIO,DL_TimerG_setCaptureCompareValue() 只写 PWM 幅值。控制量为正时选择前进方向,为负时选择后退方向,定时器始终接收绝对值。
这种设计让应用层可以使用统一的有符号命令:
Load_Motor_PWM(left_command, right_command);应用层无需直接知道 AIN1、AIN2、BIN1、BIN2 的组合,也不需要为右轮镜像安装编写特殊分支。
5. 应用层如何到达 TB6612
当前主链不是“按键直接改 PWM”,而是:
任务模式 / 位置目标 / 循迹偏差 ↓ 左右目标速度 RPM ↓ SpeedPID_Update() ↓ 左右带符号 PWM 命令 ↓ Load_Motor_PWM() ↓ TB6612 → 左右电机Task_PID() 是控制输出的统一出口。位置模式、循迹模式最终都形成左右目标 RPM,再由各自的速度环生成 PWM。这避免多个功能同时争夺同一个电机外设。
6. STBY 与统一停机
set_motor_disable() 先写零 PWM,再拉低 STBY,并清除电机使能状态。Task_StopAll() 还会清理位置控制、循迹状态、目标斜坡、蜂鸣器和外部运行信号。
这说明“停机”不是一个寄存器动作,而是系统级事务:
| 层级 | 停机动作 |
|---|---|
| 任务层 | 清除运行模式与阶段状态 |
| 控制层 | 清目标、斜坡和 PID 历史 |
| 执行层 | 左右 PWM 归零 |
| 功率层 | 必要时拉低 STBY |
| 协同层 | 撤销外部运行信号 |
如果只在某处写零 PWM,而不清除上层目标,下一次控制周期可能再次生成非零输出。
7. 模块接口的工程化要求
TB6612 驱动应对上层提供稳定语义,而不是暴露零散引脚:
Motor_SetDuty():单轮有符号命令,并完成限幅与极性修正。Load_Motor_PWM():原子语义上的左右轮统一出口。set_motor_enable():允许驱动工作并更新软件状态。set_motor_disable():零输出、待机和状态清理。
后续若更换电机驱动芯片,只要这些接口语义保持稳定,位置控制和循迹应用不应需要理解新芯片的方向真值表。
8. 调试顺序
- 架空车轮,确认 STBY 在初始化阶段先保持禁止。
- 写入小幅正命令,确认左右轮都对应车体前进。
- 写入小幅负命令,确认方向切换一致。
- 分别驱动单轮,确认通道映射没有交叉。
- 才接入速度闭环,观察目标 RPM、实际 RPM 和 PWM。
测试时必须设置物理断电手段。软件停机不能替代保险、限流、电源开关和机械防护。
9. 常见问题如何定位
| 现象 | 优先检查 |
|---|---|
| 两轮方向相反 | 输出极性与 AIN/BIN 映射 |
| 单轮完全不动 | STBY、PWM 通道、方向 GPIO 与接线 |
| 一上电就转 | 初始化顺序、PWM 初值、STBY 上拉状态 |
| 反转瞬间冲击 | 目标斜坡与换向先回零逻辑 |
| 控制器输出饱和 | 机械阻力、供电、编码器反馈和 PID 参数 |
本篇总结
- MSPM0G35XX 通过方向 GPIO、双通道 PWM 和 STBY 控制 TB6612,不直接驱动电机。
Motor.c封装了限幅、左右极性、方向真值和 PWM 输出,上层使用统一的有符号命令。- 电机输出由
Task_PID()统一生成,位置与循迹功能不直接争用硬件。 - 安全停机必须同时处理应用状态、控制历史、PWM、STBY 和外部协同信号。
上一篇:02|非抢占式调度器
下一篇:04|编码器与运动反馈