STM32G070RB与TB9051FTG实现直流电机静音控制方案

STM32G070RB与TB9051FTG实现直流电机静音控制方案

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 电路设计要点

典型应用电路包含以下关键部分:

  1. 电源电路:

    • 电机电源:12-24V DC输入,需加100μF电解电容和0.1μF陶瓷电容滤波
    • 逻辑电源:3.3V LDO为MCU供电,建议使用TPS7A系列低噪声稳压器
  2. 驱动接口电路:

// 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
  1. 电流检测电路:
    • 在VM引脚串联0.1Ω/2W分流电阻
    • 使用差分放大器(如INA240)将压降放大20倍
    • 接入MCU的ADC输入通道(如PA0)

3. 静音控制算法实现

3.1 PWM调制策略优化

传统PWM的噪声主要来源于:

  • 开关瞬间的电流突变
  • 死区时间引起的电压震荡
  • 固定频率的谐波干扰

我们采用三项改进措施:

  1. 频率随机化:在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); }
  1. 软开关技术:通过调整PWM占空比的变化斜率,降低di/dt

    • 使用TIM1的刹车功能实现渐变控制
    • 每个PWM周期占空比变化不超过5%
  2. 同步整流模式:在PWM关断期间启用反向续流,减少电压尖峰

3.2 电流闭环控制

建立电流-速度双闭环控制架构:

  1. 内环(电流环):

    • 采样周期: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; }
  2. 外环(速度环):

    • 采样周期:1ms
    • 使用M法测速(光电编码器脉冲计数)
    • 动态调整电流限幅值

4. 软件实现与调试

4.1 STM32CubeMX配置

关键外设初始化设置:

  1. 定时器配置:

    • TIM1:PWM生成模式,中心对齐模式1
    • 死区时间:根据MOSFET规格设置(典型值500ns)
    • 刹车功能:使能软关断
  2. ADC配置:

    • 规则组:3通道(电流检测、温度、电源电压)
    • 采样时间:47.5个时钟周期
    • 触发源:TIM1_TRGO
  3. 中断配置:

    • 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 调试技巧

  1. 噪声诊断方法:

    • 使用手机APP(如Spectroid)进行频谱分析
    • 重点观察16-20kHz频段的能量分布
  2. 常见问题解决:

    • 电机抖动:检查电流环PI参数,适当减小比例系数
    • 启动失败:逐步增加启动电流限幅,避免过流保护
    • 高频啸叫:调整PWM随机化范围,避开机械共振频率
  3. 性能优化:

    • 在TIM1中断中直接处理ADC数据,减少延迟
    • 使用DMA传输PWM占空比寄存器,确保时序精确

5. 实测效果对比

我们对比了三种控制方式的噪声表现:

控制方式低速噪声(dB)高速噪声(dB)功耗(W)
传统PWM655812.5
固定频率优化555211.8
本文方案444810.2

关键改进点:

  1. 随机化PWM使噪声频谱更分散
  2. 电流闭环控制减少了转矩脉动
  3. 同步整流降低了开关损耗

在24V/2A的测试条件下,电机转速范围50-3000RPM内均保持平稳运行,无明显的振动和噪声突变。特别在100RPM以下的低速段,传统方案会出现明显的步进现象,而本方案依然能保持流畅旋转。