管理入口

请输入管理密码。此密码门槛仅用于前端原型,不提供真正的仓库权限保护。

0%
TI小车实战

03|TB6612 电机驱动:方向、PWM 与安全使能

沿着 MSPM0G35XX 到 TB6612 的执行链,解释 GPIO 方向、双通道 PWM、STBY、极性统一和应用层安全输出。

TB6612 是控制器与直流电机之间的功率执行模块。MSPM0G35XX 不直接给电机供电,而是输出方向、PWM 和待机控制信号;TB6612 再按这些逻辑驱动左右电机。

文档属性内容
文档编号TI-CAR-03
设备TB6612 双路直流电机驱动
底层实现BSP/Src/Motor.c
应用入口Load_Motor_PWM()、set_motor_enable()、set_motor_disable()
❗ Important
TB6612 型号来自本项目硬件口径,方向、PWM 和 STBY 行为由代码确认。工程没有在同一证据链中给出板上电源电压、峰值电流和散热实测,因此本文不推断这些参数。

1. 控制接口如何分工

信号当前用途软件控制
AIN1 / AIN2左电机方向GPIO
BIN1 / BIN2右电机方向GPIO
PWMA / PWMB左右电机输出强度同一 PWM 定时器的两个通道
STBY驱动待机/使能GPIO

方向信号回答“往哪转”,PWM 回答“输出多少”,STBY 回答“驱动是否允许工作”。三者必须分别管理,不能只把 PWM 写成零就视为所有场景下都已安全关闭。

2. 底层初始化顺序

Motor_Start() 的顺序体现了安全上电思路:

  1. 启动电机 PWM 定时器。
  2. 配置并启动左右硬件 QEI。
  3. 将 STBY 配置为输出并先拉低。
  4. 将左右电机占空命令写为零。
  5. 最后拉高 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. 调试顺序

  1. 架空车轮,确认 STBY 在初始化阶段先保持禁止。
  2. 写入小幅正命令,确认左右轮都对应车体前进。
  3. 写入小幅负命令,确认方向切换一致。
  4. 分别驱动单轮,确认通道映射没有交叉。
  5. 才接入速度闭环,观察目标 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|编码器与运动反馈

输入标题、正文关键词或标签,查找文章。