1. 项目背景与硬件选型
直流减速电机在智能小车、自动化运输装置等项目中非常常见,它结构简单、成本低,而且控制起来也相对容易。虽然在一些高精度场合需要编码器反馈,但对于大多数基础应用来说,我们只需要实现PWM调速和正反转控制就足够了。
我在最近的一个智能运输小车项目中就遇到了这样的需求:需要让小车带着货物移动到指定位置。最开始我选用了最简单的两线直流减速电机,就像下面这种:

这种电机只有两根线,通过改变电压极性来控制正反转,通过PWM占空比来调节转速。听起来很简单对吧?但实际调试过程中却遇到了意想不到的问题。
最开始我尝试直接用HT32F52352的GPIO引脚输出PWM信号来驱动电机,结果电机纹丝不动。用万用表测量后发现,PWM输出峰值只有3.3V,但直接用3.3V电源给电机供电时,电机却能正常转动。仔细研究电路才发现,原来是单片机引脚的驱动能力不足——虽然电压够了,但输出电流太小,无法提供电机启动时所需的大电流。
这就是为什么我们需要电机驱动芯片。我选择了TB6612这款驱动芯片,它能够提供足够的驱动电流,还集成了正反转控制逻辑,使用起来非常方便。TB6612的最大输出电流可以达到1.2A,完全满足小型直流电机的需求。
2. 硬件连接与电路设计
TB6612电机驱动芯片有16个引脚,但核心功能引脚并不多。最重要的是以下这几个:
- VM:电机电源输入(建议5-12V)
- VCC:逻辑电源输入(3.3V或5V)
- GND:接地
- AIN1/AIN2:电机A控制输入
- BIN1/BIN2:电机B控制输入
- PWMA/PWMB:电机A/B的PWM输入
- AO1/AO2:电机A输出
- BO1/BO2:电机B输出
接线时需要注意几个关键点:首先,电机电源和逻辑电源一定要分开供电。电机电源根据电机额定电压选择,我一般用7.4V锂电池;逻辑电源用3.3V,直接从HT32F52352开发板取电即可。
其次,控制信号的连接要正确。AIN1和AIN2决定电机的转向,PWMA控制电机速度。具体的逻辑关系如下:
| AIN1 | AIN2 | PWMA | 电机状态 |
|---|---|---|---|
| 0 | 0 | X | 停止 |
| 1 | 0 | PWM | 正转 |
| 0 | 1 | PWM | 反转 |
| 1 | 1 | X | 刹车 |
在实际布线时,建议使用杜邦线将HT32F52352的GPIO引脚与TB6612的控制引脚连接。电机输出端要用较粗的导线,因为电流较大。如果电机功率较大,最好在电源输入端加上滤波电容,这样可以减少对单片机的干扰。
3. HT32F52352的PWM配置详解
HT32F52352的定时器功能非常强大,支持多种PWM输出模式。我选择使用GPTM0(通用定时器0)的通道2来产生PWM信号,具体配置过程如下:
首先需要开启相关的外设时钟。HT32F52352的时钟系统设计得很灵活,每个外设的时钟都可以独立控制:
CKCU_PeripClockConfig_TypeDef CKCUClock = {
{ 0 }};
CKCUClock.Bit.PA = 1; // 开启GPIOA时钟
CKCUClock.Bit.GPTM0 = 1; // 开启GPTM0时钟
CKCUClock.Bit.AFIO = 1; // 开启复用功能时钟
CKCU_PeripClockConfig(CKCUClock, ENABLE);
接下来配置引脚复用功能。我要把PA6引脚配置为GPTM0_CH2功能:
AFIO_GPxConfig(GPIO_PA, AFIO_PIN_6, AFIO_MODE_4);
GPIO_DirectionConfig(HT_GPIOA, GPIO


被折叠的 条评论
为什么被折叠?



