1. 永磁同步电机控制的技术脉络
十年前我第一次接触PMSM控制时,面对FOC、SVPWM这些术语完全摸不着头脑。直到在实验室烧毁了第三个IPM模块后,才真正理解双闭环控制的精妙所在。现代电机控制就像在钢丝上跳舞——既要保证动态响应速度,又要维持系统稳定,而ADRC(自抗扰控制)的出现,给传统PID控制带来了一场思维革命。
这次我们要搭建的是一套完整的PMSM双闭环控制系统,从基础的SVPWM调制开始,逐步引入ADRC算法替代传统PI调节器。这个方案特别适合需要快速响应且负载多变的场景,比如工业机械臂、电动汽车驱动等。整个系统将在STM32H7平台上实现,配合TI的DRV8323驱动芯片,最终达到200us的控制周期。
2. 硬件架构设计要点
2.1 功率电路关键设计
主电路采用典型的三相全桥拓扑,但有几个细节需要特别注意:
-
母线电容选型:根据最大相电流计算纹波电流,我常用多个470uF/100V电解电容并联,搭配10uF薄膜电容抑制高频噪声。某次测试中,电容ESR过大导致开关管过压击穿的教训至今难忘。
-
电流采样方案比较:
- 分流电阻:成本低但引入损耗,建议使用50mΩ/1%的合金电阻
- 霍尔传感器:推荐ACS712系列,注意带宽要大于PWM频率的5倍
- 隔离运放:AMC1300系列性能优异,但布局时要远离功率走线
重要提示:电流采样相位补偿不可忽视!我曾因忽略PCB走线延迟导致采样时刻偏差,造成电流环震荡。
2.2 控制器选型策略
STM32H743的硬件加速单元能完美支持SVPWM计算:
- 定时器配置为中央对齐模式,死区时间建议设置为PWM周期的5-8%
- ADC采用双通道交替采样,触发信号与PWM中点对齐
- 使用DMA传输ADC数据,避免CPU干预
下表对比了不同控制器的性能表现:
| 型号 | 主频 | FPU | 控制周期 | 适用场景 |
|---|---|---|---|---|
| STM32F103 | 72MHz | 无 | >500us | 低成本简易方案 |
| STM32F407 | 168MHz | 单精度 | 300us | 通用型方案 |
| STM32H743 | 480MHz | 双精度 | 200us | 高性能复杂算法 |
3. 核心算法实现解析
3.1 SVPWM的工程化实现
传统七段式SVPWM虽然谐波性能好,但在低调制区会有电流畸变。我的改进方案是:
- 电压矢量分区判断改用查表法,省去实时三角函数计算
- 引入过调制处理,当参考电压超出六边形时:
c复制if(Uref > Udc/sqrt(3)){ theta_corr = atan2(Ubeta, Ualpha); Ualpha = Udc/sqrt(3)*cos(theta_corr); Ubeta = Udc/sqrt(3)*sin(theta_corr); } - 加入死区补偿,通过检测电流方向动态调整占空比
实测表明,这种实现方式在10%调制比时仍能保持THD<5%。
3.2 ADRC参数整定实战
ADRC由三部分组成:
-
跟踪微分器(TD):
python复制# 离散化实现 v1 = v1 + h*v2 v2 = v2 + h*fhan(v1-r, v2, r0, h0)其中fhan()是最速控制综合函数,参数r0决定跟踪速度
-
扩张状态观测器(ESO):
c复制// 三阶ESO实现 e = z1 - y; z1 = z1 + h*(z2 - beta01*e); z2 = z2 + h*(z3 - beta02*e + b0*u); z3 = z3 + h*(-beta03*e); -
非线性状态误差反馈(NLSEF):
matlab复制% 非线性组合 u0 = beta1*fal(e1,alpha1,delta) + beta2*fal(e2,alpha2,delta);
参数整定经验:
- 先调TD的r0,使输出能快速跟踪指令且不过冲
- 再调ESO的beta系列,观测带宽应为系统带宽的3-5倍
- 最后调整NLSEF参数,从线性组合(alpha=1)开始试
4. 系统联调避坑指南
4.1 电流环调试步骤
- 先开环运行,确认相序正确:我曾因UVW接反导致电机反转损坏联轴器
- 注入直流分量测试采样极性:某次发现电流采样增益设置反了,导致电流环正反馈
- 从低带宽开始调节:
- 先设Ki=0,逐步增加Kp至出现轻微震荡
- 然后加入Ki,取值约为Kp的1/10
- 最后加入ADRC,观察抗负载扰动能力
4.2 常见故障排查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 电机抖动不转 | 霍尔相位错误 | 检查编码器安装偏移量 |
| 高速时电流畸变 | 死区时间不足 | 增加死区至1us以上 |
| ADRC响应迟缓 | ESO带宽过低 | 增大beta参数 |
| 启动时过流保护 | 初始位置检测错误 | 改用高频注入法辨识 |
| PWM输出不对称 | 定时器配置模式错误 | 检查CNT计数方向 |
5. 性能优化进阶技巧
5.1 最小拍控制实现
在机械臂关节控制等场景,可以结合ADRC与最小拍控制:
- 设计期望的闭环传递函数:
$$ G_{cl}(z) = \frac{z^{-d}B^+(z)}{A_m(z)} $$ - 计算控制器参数:
$$ D(z) = \frac{A_m(z)G_p^{-1}(z)}{1-z^{-d}B^+(z)} $$ - 用ADRC补偿模型误差和扰动
实测表明,这种混合控制方式能使定位时间缩短30%。
5.2 参数自整定方案
开发了一套基于极限环法的在线整定方法:
- 先让系统进入稳态振荡
- 测量振荡周期Tu和幅值Au
- 根据Ziegler-Nichols规则计算初始参数:
python复制Kp = 0.6*Ku Ti = 0.5*Tu Td = 0.12*Tu - 通过梯度下降法微调参数
在负载惯量变化大的场合,这套算法能自动保持最佳控制效果。记得那次在注塑机上测试,系统自动适应了从空载到满模的剧烈参数变化,省去了手动调节的麻烦。