【零基础轻松玩转STM32】TB6612FNG直流电机驱动教程:手把手实践指南
系列文章目录
1.元件基础
2.电路设计
3.PCB设计
4.元件焊接
5.板子调试
6.程序设计
7.算法学习
8.编写exe
9.检测标准
10.项目举例
11.职业规划
文章目录
一、硬件认知篇
1.1 TB6612FNG是什么?
这是一款双通道直流电机驱动芯片(可同时控制2个电机),相比传统的L298N:
1.2 核心引脚说明(重点!)
VM : 电机电源(建议6-12V)
VCC : 逻辑电源(3.3V-5V)
GND : 公共地
AIN1/AIN2 : 电机A转向控制
BIN1/BIN2 : 电机B转向控制
PWMA/PWMB : PWM调速输入
STBY : 待机控制(高电平工作)
1.3 H桥原理揭秘
通过四颗MOS管组成"桥臂",控制电流方向:
二、硬件连接篇
2.1 STM32接线示意图
/* 以STM32F103C8T6为例 */
TB6612引脚 -> STM32引脚
PWMA -> PA6(TIM3_CH1)
AIN1 -> PB0
AIN2 -> PB1
STBY -> PB5
GND -> GND(必须共地!)
2.2 电源注意事项
三、软件编程篇
3.1 CubeMX配置
- 使能TIM3_CH1(PWM生成)
- 设置PSC=71,ARR=999 → 10kHz PWM
- 配置PB0、PB1、PB5为GPIO_Output
3.2 核心代码解析
// PWM初始化
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
// 电机控制函数
void MotorA_Ctrl(uint8_t dir, uint16_t speed)
{
if(dir == FORWARD){
HAL_GPIO_WritePin(AIN1_GPIO_Port, AIN1_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(AIN2_GPIO_Port, AIN2_Pin, GPIO_PIN_RESET);
}
else if(dir == BACKWARD){
HAL_GPIO_WritePin(AIN1_GPIO_Port, AIN1_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(AIN2_GPIO_Port, AIN2_Pin, GPIO_PIN_SET);
}
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, speed);
}
// 启用驱动芯片
HAL_GPIO_WritePin(STBY_GPIO_Port, STBY_Pin, GPIO_PIN_SET);
四、进阶知识
4.1 PWM调速原理
通过调节占空比控制平均电压:
4.2 死区时间(重要!)
当PWM频率超过10kHz时,需在CubeMX中:
TIM3->CCER |= TIM_AUTOMATIC_OUTPUT_ENABLE;
TIM3->BDTR |= 0x30; // 设置死区时间
防止H桥上下管直通短路
五、调试技巧
5.1 常见问题排查
| 现象 | 可能原因 | 解决方法 |
|–|
| 电机不转 | STBY未使能 | 检查STBY引脚电平 |
| 单方向转动 | 方向控制线接反 | 交换AIN1/AIN2接线 |
| 电机抖动 | PWM频率过低 | 提高至8-20kHz范围 |
5.2 示波器调试建议
测量PWMA引脚波形:
六、项目实战
实现智能小车基础运动:
void Car_Move(uint8_t dir, uint16_t speed)
{
MotorA_Ctrl(dir, speed); // 右轮
MotorB_Ctrl(dir, speed); // 左轮
// 添加延时可实现定时运动
}
结语
通过本文您已掌握:
- TB6612FNG的底层驱动原理
- STM32的PWM配置方法
- 完整的电机控制实现
作者:【云轩】