TB6593FNG与ATSAME70的直流电机控制方案设计
1. 项目背景与核心器件选型
在工业自动化和小型机器人领域,直流电机控制一直是个经久不衰的话题。最近我在为一个自动化分拣项目设计电机驱动模块时,选择了TB6593FNG驱动芯片搭配ATSAME70Q21B微控制器的方案。这个组合在成本、性能和开发便利性上达到了不错的平衡点,特别适合需要精确控制的中小型直流电机应用场景。
TB6593FNG是东芝出品的一款H桥驱动器,最大支持44V/3A的驱动能力,内置了过流、过热和欠压保护电路。而ATSAME70Q21B则是Microchip旗下基于ARM Cortex-M7内核的高性能MCU,运行频率高达300MHz,带有浮点运算单元和丰富的定时器资源。这两个器件的搭配,既能满足实时控制的计算需求,又能提供可靠的功率输出。
提示:选择TB6593FNG的一个重要原因是它支持PWM频率高达100kHz,这对于需要精细调速的应用至关重要。市面上很多廉价驱动芯片只能支持20kHz以下的PWM,在高精度场合会出现明显的转矩波动。
2. 硬件设计关键细节
2.1 电源电路设计
电机驱动系统最容易被忽视的就是电源设计。我的方案采用了两级供电架构:
- 第一级:24V开关电源为主电源,为电机驱动供电
- 第二级:通过LDO降压到3.3V为MCU和逻辑电路供电
特别要注意的是,在TB6593FNG的VM引脚(电机电源)和VCC引脚(逻辑电源)之间,我增加了一个100Ω电阻和100μF电容组成的缓冲电路。这个设计可以有效抑制电机启停时产生的电压波动对逻辑电路的干扰。
2.2 PCB布局经验
电机驱动板的布局有几个黄金法则:
- 功率地(PGND)和信号地(SGND)必须单点连接,我选择在LDO的GND引脚处汇合
- TB6593FNG的散热焊盘要足够大,建议至少20mm×20mm的铜箔面积
- 电机输出线要尽量短而粗,我使用了2oz铜厚的PCB和2mm宽的走线
- ATSAME70的时钟电路要远离电机驱动线路,避免电磁干扰
3. 软件架构与核心算法
3.1 基础驱动实现
ATSAME70的PWM模块配置是关键。我使用了TC0定时器生成四路互补PWM,关键配置参数如下:
// PWM频率设置为20kHz(适合大多数直流电机) PMC->PMC_PCER0 = (1 << ID_TC0); // 启用定时器时钟 TC0->TC_CHANNEL[0].TC_CMR = TC_CMR_TCCLKS_TIMER_CLOCK1 | // MCK/2 = 150MHz TC_CMR_WAVE | // 波形模式 TC_CMR_WAVSEL_UP_RC | // 上升计数到RC TC_CMR_EEVT_XC0 | // 外部事件 TC_CMR_ACPA_CLEAR | // RA比较时清除 TC_CMR_ACPC_SET; // RC比较时设置 TC0->TC_CHANNEL[0].TC_RC = 7500 - 1; // 20kHz = 150MHz/7500 TC0->TC_CHANNEL[0].TC_RA = 3750; // 初始占空比50%3.2 速度闭环控制
我实现了一个基于增量式PID的调速算法,核心代码如下:
typedef struct { float Kp, Ki, Kd; float prev_error; float integral; } PID_Controller; float PID_Update(PID_Controller* pid, float error, float dt) { float derivative = (error - pid->prev_error) / dt; pid->integral += error * dt; // 积分抗饱和处理 if(pid->integral > INTEGRAL_LIMIT) pid->integral = INTEGRAL_LIMIT; else if(pid->integral < -INTEGRAL_LIMIT) pid->integral = -INTEGRAL_LIMIT; float output = pid->Kp * error + pid->Ki * pid->integral + pid->Kd * derivative; pid->prev_error = error; return output; }注意:在实际调试中发现,采样周期dt的精度对PID性能影响很大。建议使用硬件定时器触发ADC采样,而不是简单的软件延时。
4. 实测性能与优化技巧
4.1 基础性能测试
在24V供电、负载惯量0.01kg·m²的条件下,系统达到了以下指标:
- 速度响应时间:0-3000rpm加速时间120ms
- 稳态误差:<±5rpm(使用1000线编码器)
- 调速范围:50-3000rpm(超过这个范围转矩下降明显)
4.2 死区时间优化
TB6593FNG需要设置合适的死区时间以防止上下管直通。通过实验发现,死区时间与电机电流存在如下关系:
| 死区时间(ns) | 效率(%) | 温升(°C) |
|---|---|---|
| 200 | 92.1 | 45 |
| 400 | 90.3 | 38 |
| 600 | 88.5 | 35 |
| 800 | 85.2 | 32 |
最终我选择400ns作为平衡点,既保证了安全性,又不会明显降低效率。
4.3 电流采样技巧
利用ATSAME70的ADC同步采样功能,我实现了相电流重构。关键点包括:
- 在PWM周期中点采样(此时电流最稳定)
- 使用硬件触发ADC,与PWM定时器同步
- 添加RC滤波(我使用1kΩ+100nF组合)
- 在软件中做滑动平均滤波(窗口大小8)
5. 常见问题与解决方案
在实际项目中遇到了几个典型问题,这里分享排查过程:
问题1:电机低速抖动明显
- 现象:转速低于500rpm时出现周期性振动
- 排查:
- 检查PWM频率(确认是20kHz)
- 测量电流波形(发现谐波成分)
- 检查机械连接(排除机械原因)
- 解决:在PID输出增加死区补偿,当输出占空比<15%时强制设为0或15%
问题2:偶尔出现过流保护误触发
- 现象:正常运行时偶尔突然停机
- 排查:
- 示波器捕捉故障时刻电流(发现尖峰)
- 检查PCB布局(发现电流采样走线过长)
- 检查软件滤波参数(窗口太小)
- 解决:重新布线缩短采样路径,将软件滤波窗口扩大到16点
这个项目从硬件设计到软件调试总共耗时约3周,期间最大的收获是认识到电机控制是一个系统工程,需要统筹考虑电路设计、算法实现和机械特性的匹配。特别是PCB布局这种看似简单的环节,实际对系统稳定性有着决定性影响。
对于想尝试类似项目的开发者,我的建议是:先从现成的评估板入手,理解基本工作原理后再进行自主设计。Microchip为ATSAME70提供了完整的HAL库和示例代码,可以大大缩短开发周期。TB6593FNG虽然资料相对较少,但基本应用电路参考数据手册就能搭建成功。
