
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配置关键外设初始化设置定时器配置TIM1PWM生成模式中心对齐模式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(current_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)传统PWM655812.5固定频率优化555211.8本文方案444810.2关键改进点随机化PWM使噪声频谱更分散电流闭环控制减少了转矩脉动同步整流降低了开关损耗在24V/2A的测试条件下电机转速范围50-3000RPM内均保持平稳运行无明显的振动和噪声突变。特别在100RPM以下的低速段传统方案会出现明显的步进现象而本方案依然能保持流畅旋转。