1. 为什么选择A3910+STM32F215ZG组合
在电机控制领域,这个组合堪称黄金搭档。A3910是Allegro MicroSystems推出的全桥MOSFET驱动器,最大持续输出电流达3A,峰值电流可达5A。而STM32F215ZG则是ST的Cortex-M3内核微控制器,带有丰富定时器和通信接口。它们的配合就像赛车手与领航员的关系——A3910负责执行高强度的动力输出(相当于赛车的引擎),STM32则处理复杂的路径规划(相当于导航系统)。
实际项目中,我常用这个组合驱动12-24V直流有刷电机。A3910的集成电荷泵功能特别实用,它能在单电源供电下生成足够的栅极驱动电压,省去了额外升压电路的麻烦。记得去年做AGV小车项目时,这个特性让PCB面积减少了30%。
2. 硬件设计关键细节
2.1 电源架构设计
典型供电方案如下表所示:
| 模块 | 电压需求 | 电流需求 | 设计要点 |
|---|---|---|---|
| STM32F215ZG | 3.3V | <100mA | 需LDO稳压,注意退耦电容布局 |
| A3910逻辑部分 | 3.3-5V | 10mA | 可与MCU共用电源 |
| A3910驱动部分 | 电机电压 | 3A持续 | 必须独立铺铜,加装TVS二极管 |
重要提示:电机电源与逻辑电源必须隔离!我曾因共地导致PWM信号被干扰,电机出现异常抖动。建议使用磁珠或0Ω电阻单点接地。
2.2 PCB布局避坑指南
- 热管理:A3910的底部散热焊盘必须充分连接覆铜区。实测在2A持续电流下,不加散热片时芯片温度会升至85℃
- 信号走线:PWM输入线要远离电机功率线。有次为了省空间平行走线,导致电机启动时MCU复位
- 退耦电容:在A3910的VM引脚就近放置100μF电解电容+100nF陶瓷电容组合,能有效抑制电压毛刺
3. 软件驱动开发实战
3.1 STM32定时器配置
使用TIM1产生互补PWM的代码片段:
// 时钟配置省略... TIM_TimeBaseInitTypeDef TIM_BaseStruct; TIM_BaseStruct.TIM_Prescaler = 0; TIM_BaseStruct.TIM_CounterMode = TIM_CounterMode_Up; TIM_BaseStruct.TIM_Period = 999; // 10kHz PWM TIM_BaseStruct.TIM_ClockDivision = 0; TIM_TimeBaseInit(TIM1, &TIM_BaseStruct); TIM_OCInitTypeDef TIM_OCStruct; TIM_OCStruct.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCStruct.TIM_OutputState = TIM_OutputState_Enable; TIM_OCStruct.TIM_Pulse = 500; // 初始占空比50% TIM_OCStruct.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM1, &TIM_OCStruct); TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); // 互补通道配置 TIM_BDTRInitTypeDef TIM_BDTRStruct; TIM_BDTRStruct.TIM_OSSRState = TIM_OSSRState_Enable; TIM_BDTRStruct.TIM_OSSIState = TIM_OSSIState_Enable; TIM_BDTRStruct.TIM_LOCKLevel = TIM_LOCKLevel_1; TIM_BDTRStruct.TIM_DeadTime = 72; // 1us死区时间@72MHz TIM_BDTRStruct.TIM_Break = TIM_Break_Disable; TIM_BDTRStruct.TIM_BreakPolarity = TIM_BreakPolarity_Low; TIM_BDTRStruct.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; TIM_BDTRConfig(TIM1, &TIM_BDTRStruct); TIM_Cmd(TIM1, ENABLE);3.2 电机控制算法实现
速度闭环控制流程:
- 通过编码器或霍尔传感器获取实际转速
- 计算与目标转速的误差
- 应用PID算法调整PWM占空比
- 限制输出范围防止过冲
实测参数整定经验:
- 采样周期建议5-10ms(对应100-200Hz控制频率)
- 先调P再调I,D项通常可设为0
- 24V/100W电机典型参数:Kp=0.5, Ki=0.1
4. 典型问题排查手册
4.1 电机不启动排查流程
检查基础供电:
- 测量VM引脚电压是否正常
- 确认逻辑电源3.3V/5V存在
验证信号通路:
- 用示波器查看PWM输入波形
- 检查A3910的nSLEEP引脚是否为高
诊断保护机制:
- 测量nFAULT引脚状态
- 检查TSD(过热关断)是否触发
4.2 异常噪音处理方案
高频啸叫通常源于:
- PWM频率与机械共振点重合 → 调整PWM频率(建议8-20kHz)
- 死区时间不足导致直通 → 增加TIM_BDTRStruct.TIM_DeadTime
- 电源阻抗过大 → 加强退耦电容或缩短电源走线
去年调试伺服系统时,发现15kHz PWM会引发特定负载共振。最终将频率改为12.5kHz后问题消失,同时加入了加速度前馈补偿。
5. 进阶应用场景拓展
5.1 四轮独立驱动方案
通过4个A3910+1个STM32实现:
- TIM1/TIM8生成4路PWM
- 使用CAN总线接收控制指令
- 霍尔传感器反馈轮速
关键点在于定时器同步:通过TIM1作主模式,TIM8为从模式,确保所有电机控制时序严格同步。我们在自动导引车上采用此方案,直线行走偏差<2cm/m。
5.2 能量回馈制动
利用A3910的慢衰减模式实现:
- 检测电机反电动势
- 切换至慢衰减模式
- 通过MOSFET体二极管整流
- 在电源端接入储能电容
实测24V/200W系统可回收约15%动能。注意要监控VM电压,超过36V需启用泄放电路。