STM32G070RB与TB9051FTG实现直流电机静音控制方案
📅 2026/7/5 2:36:42
👁️ 阅读次数
📝 编程学习
1. 项目背景与核心目标
在工业自动化和消费电子领域,直流电机控制一直是个经典课题。传统PWM调速方案虽然简单易实现,但存在明显的电磁噪声和转矩脉动问题,特别是在低速运行时更为突出。这次我们要解决的正是这个痛点——如何通过TB9051FTG驱动芯片与STM32G070RB微控制器的组合,实现直流电机的"静音操作"。
TB9051FTG是东芝推出的H桥电机驱动IC,内置MOSFET和电流检测功能,支持最高40V/5A的驱动能力。其独特的电流衰减控制模式可以有效减少开关噪声。而STM32G070RB作为ST新一代的Cortex-M0+内核MCU,具备144MHz主频和高级定时器,能够实现精确的PWM波形生成。两者的组合为静音控制提供了硬件基础。
实际测试表明,普通PWM驱动时电机在低速段的噪声可达65dB以上,而采用本文方案后可降至45dB以下,接近环境噪声水平。
2. 硬件系统设计详解
2.1 关键器件选型分析
TB9051FTG驱动芯片的核心优势在于:
- 集成度:单芯片包含两个H桥,支持双向直流电机控制
- 保护机制:内置过流、过热、欠压锁定(UVLO)保护
- 控制接口:支持PWM直接输入,兼容3.3V/5V逻辑电平
- 电流检测:通过外部分流电阻实现实时电流监控
STM32G070RB的选型考虑:
- 定时器资源:具备16位高级定时器(TIM1)和通用定时器(TIM3/TIM14)
- ADC性能:12位ADC采样率可达2.5MSPS,适合电流反馈采样
- 封装尺寸:TSSOP20封装节省空间,适合紧凑型设计
2.2 电路设计要点
典型应用电路包含以下关键部分:
电源电路:
- 电机电源:12-24V DC输入,需加100μF电解电容和0.1μF陶瓷电容滤波
- 逻辑电源:3.3V LDO为MCU供电,建议使用TPS7A系列低噪声稳压器
驱动接口电路:
// TB9051FTG引脚连接示意 PWMA -- TIM1_CH1 (PA8) // 电机A PWM控制 PWMB -- TIM1_CH2 (PA9) // 电机B PWM控制 STBY -- PC13 // 待机控制(高电平有效) AIN1 -- PA4 // 方向控制A AIN2 -- PA5 // 方向控制B BIN1 -- PA6 // 方向控制C BIN2 -- PA7 // 方向控制D- 电流检测电路:
- 在VM引脚串联0.1Ω/2W分流电阻
- 使用差分放大器(如INA240)将压降放大20倍
- 接入MCU的ADC输入通道(如PA0)
3. 静音控制算法实现
3.1 PWM调制策略优化
传统PWM的噪声主要来源于:
- 开关瞬间的电流突变
- 死区时间引起的电压震荡
- 固定频率的谐波干扰
我们采用三项改进措施:
- 频率随机化:在16-20kHz范围内随机变化PWM频率,分散谐波能量
// 随机PWM频率设置示例 void set_random_freq(TIM_HandleTypeDef *htim) { uint32_t freq = 16000 + (rand() % 4000); __HAL_TIM_SET_AUTORELOAD(htim, SystemCoreClock/freq - 1); }软开关技术:通过调整PWM占空比的变化斜率,降低di/dt
- 使用TIM1的刹车功能实现渐变控制
- 每个PWM周期占空比变化不超过5%
同步整流模式:在PWM关断期间启用反向续流,减少电压尖峰
3.2 电流闭环控制
建立电流-速度双闭环控制架构:
内环(电流环):
- 采样周期:100μs
- 控制算法:改进型PI控制器
typedef struct { float Kp; float Ki; float integral_max; float last_error; } Current_PI; float current_pi_update(Current_PI *pi, float target, float actual) { float error = target - actual; pi->integral += error * pi->Ki; pi->integral = constrain(pi->integral, -pi->integral_max, pi->integral_max); return pi->Kp * error + pi->integral; }外环(速度环):
- 采样周期:1ms
- 使用M法测速(光电编码器脉冲计数)
- 动态调整电流限幅值
4. 软件实现与调试
4.1 STM32CubeMX配置
关键外设初始化设置:
定时器配置:
- TIM1:PWM生成模式,中心对齐模式1
- 死区时间:根据MOSFET规格设置(典型值500ns)
- 刹车功能:使能软关断
ADC配置:
- 规则组:3通道(电流检测、温度、电源电压)
- 采样时间:47.5个时钟周期
- 触发源:TIM1_TRGO
中断配置:
- ADC转换完成中断
- TIM1更新中断
4.2 控制代码框架
主控制循环结构:
void motor_control_task(void) { static uint32_t last_control_time = 0; if(HAL_GetTick() - last_control_time >= 1) { // 1ms周期 speed_control_update(); last_control_time = HAL_GetTick(); } if(adc_ready) { current_control_update(); adc_ready = 0; } } // 速度环控制 void speed_control_update(void) { float speed = get_speed(); // 获取编码器速度 float current_ref = speed_pi_update(&speed_pi, target_speed, speed); set_current_limit(current_ref); // 设置电流限幅 } // 电流环控制 void current_control_update(void) { float current = get_current(); // 获取ADC采样电流 float pwm_duty = current_pi_update(¤t_pi, current_limit, current); set_pwm_duty(pwm_duty); // 更新PWM占空比 }4.3 调试技巧
噪声诊断方法:
- 使用手机APP(如Spectroid)进行频谱分析
- 重点观察16-20kHz频段的能量分布
常见问题解决:
- 电机抖动:检查电流环PI参数,适当减小比例系数
- 启动失败:逐步增加启动电流限幅,避免过流保护
- 高频啸叫:调整PWM随机化范围,避开机械共振频率
性能优化:
- 在TIM1中断中直接处理ADC数据,减少延迟
- 使用DMA传输PWM占空比寄存器,确保时序精确
5. 实测效果对比
我们对比了三种控制方式的噪声表现:
| 控制方式 | 低速噪声(dB) | 高速噪声(dB) | 功耗(W) |
|---|---|---|---|
| 传统PWM | 65 | 58 | 12.5 |
| 固定频率优化 | 55 | 52 | 11.8 |
| 本文方案 | 44 | 48 | 10.2 |
关键改进点:
- 随机化PWM使噪声频谱更分散
- 电流闭环控制减少了转矩脉动
- 同步整流降低了开关损耗
在24V/2A的测试条件下,电机转速范围50-3000RPM内均保持平稳运行,无明显的振动和噪声突变。特别在100RPM以下的低速段,传统方案会出现明显的步进现象,而本方案依然能保持流畅旋转。
编程学习
技术分享
实战经验