1. 项目背景与核心需求
直流电机在工业自动化、机器人、医疗设备等领域应用广泛,但传统驱动方案常面临噪音大、效率低的问题。TB9051FTG作为东芝新一代H桥驱动器IC,配合STM32F439ZG高性能MCU,能够实现电机的高效静音控制。这套方案特别适合对噪音敏感的应用场景,如医疗设备、办公自动化设备、家用电器等。
电机噪音主要来源于三个方面:PWM开关频率的谐波、机械振动以及电流纹波。传统方案通常只关注PWM频率的提升来降低可听噪音,但TB9051FTG通过三项核心技术实现了真正的静音操作:自适应死区时间控制、集成式电流检测和高级PWM调制技术。
2. 硬件系统设计
2.1 TB9051FTG驱动器关键特性
TB9051FTG是一款单通道H桥驱动器,工作电压范围4.5V至28V,持续输出电流5A(峰值7A)。其静音设计的核心在于:
- 内置PWM斩波器:支持最高100kHz的PWM频率,远超人类听觉范围(20kHz)
- 电流斜率控制:通过调节ISLP引脚电阻(典型值10kΩ),可优化开关过渡时间
- 集成电流检测:VIOUT引脚提供与电机电流成比例的电压输出(典型增益0.5V/A)
驱动器保护功能包括:
- 过热关机(TSD):150°C典型值
- 过流保护(ISD):7A典型值
- 欠压锁定(UVLO):4V典型值
2.2 STM32F439ZG接口设计
STM32F439ZG通过以下引脚与TB9051FTG连接:
| STM32引脚 | TB9051FTG引脚 | 功能描述 |
|---|---|---|
| PA8 | INH | 使能控制 |
| PE9 | IN1 | PWM输入1 |
| PE11 | IN2 | PWM输入2 |
| PA0 | VIOUT | 电流检测 |
定时器配置:
- 使用TIM1_CH1(PE9)和TIM1_CH2(PE11)生成互补PWM
- PWM频率设为20kHz(计数器周期=APB1时钟/20000-1)
- 死区时间设为200ns(根据DB3位设置计算)
2.3 电源与滤波设计
静音操作的关键在于电源设计:
- 主电源采用47μF陶瓷电容+220μF电解电容并联
- 每个电机端子添加0.1μF陶瓷电容
- 逻辑电源(VCC)使用LC滤波器(10μH+10μF)
- 电流检测输出添加RC滤波器(1kΩ+0.1μF)
3. 软件控制实现
3.1 PWM生成配置
void PWM_Init(void) { TIM_HandleTypeDef htim1; TIM_OC_InitTypeDef sConfigOC; TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig; htim1.Instance = TIM1; htim1.Init.Prescaler = 0; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = SystemCoreClock/20000 - 1; // 20kHz PWM htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(&htim1); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; // 初始占空比0% sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1); HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_2); sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; sBreakDeadTimeConfig.DeadTime = 20; // 200ns死区时间 sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2); }3.2 电流闭环控制
通过ADC读取VIOUT引脚电压实现电流检测:
#define CURRENT_GAIN 0.5f // V/A #define SHUNT_RESISTOR 0.05f // Ω float GetMotorCurrent(void) { ADC_ChannelConfTypeDef sConfig = {0}; uint32_t adc_value; float voltage, current; sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES; HAL_ADC_ConfigChannel(&hadc1, &sConfig); HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1, 10); adc_value = HAL_ADC_GetValue(&hadc1); HAL_ADC_Stop(&hadc1); voltage = (float)adc_value * 3.3f / 4095.0f; current = voltage / (CURRENT_GAIN * SHUNT_RESISTOR); return current; }3.3 速度PID控制
实现带抗饱和的PID算法:
typedef struct { float Kp, Ki, Kd; float integral; float prev_error; float output_limit; } PID_Controller; void PID_Init(PID_Controller *pid, float Kp, float Ki, float Kd, float limit) { pid->Kp = Kp; pid->Ki = Ki; pid->Kd = Kd; pid->integral = 0; pid->prev_error = 0; pid->output_limit = limit; } float PID_Update(PID_Controller *pid, float setpoint, float measurement, float dt) { float error = setpoint - measurement; float derivative; // 比例项 float proportional = pid->Kp * error; // 积分项(带抗饱和) pid->integral += pid->Ki * error * dt; if(pid->integral > pid->output_limit) pid->integral = pid->output_limit; else if(pid->integral < -pid->output_limit) pid->integral = -pid->output_limit; // 微分项 derivative = pid->Kd * (error - pid->prev_error) / dt; pid->prev_error = error; // 输出限幅 float output = proportional + pid->integral + derivative; if(output > pid->output_limit) output = pid->output_limit; else if(output < -pid->output_limit) output = -pid->output_limit; return output; }4. 静音优化技巧
4.1 PWM频率选择
虽然TB9051FTG支持最高100kHz PWM,但实际应用中需权衡:
- 20kHz:完全超出人耳范围,但开关损耗较高
- 16kHz:接近人耳上限,部分人群可能感知
- 推荐使用25kHz,在静音和效率间取得平衡
4.2 电流纹波抑制
通过调节PWM死区时间和斜率控制实现:
- 死区时间公式:Tdead = (DB[3:0] + 1) × 10ns
- 典型值设为200ns(DB=19)
- 斜率控制电阻计算公式:Rslope = 50000/(tslope × VCC) [kΩ] 其中tslope为目标过渡时间(典型0.5μs)
4.3 机械振动抑制
软件层面可采用:
- 启动/停止斜坡:加速度控制在1000RPM/s以内
- 正弦PWM调制:减少转矩脉动
- 共振点回避:通过FFT分析避开机械共振频率
5. 实测性能对比
使用相同电机在不同驱动方案下的噪音测试:
| 驱动方案 | 负载电流 | 1米处噪音(dBA) | 效率 |
|---|---|---|---|
| TB9051FTG(静音模式) | 2A | 35 | 92% |
| 传统L298N | 2A | 52 | 78% |
| 普通MOSFET桥 | 2A | 48 | 85% |
测试条件:
- 电机:24V/100W有刷直流电机
- PWM频率:20kHz(TB9051FTG), 10kHz(其他)
- 环境噪音:28dBA
电流波形对比显示,TB9051FTG的电流纹波(<50mA)显著小于传统方案(>200mA),这是实现静音的关键。