PMSM双闭环控制与ADRC算法:从SVPWM到参数整定全解析
做电机控制的都知道从零开始把一个PMSM永磁同步电机转到稳最绕不开的一道坎就是双闭环控制。很多教程喜欢把FOC、SVPWM、PI整定这些词叠在一起弄得像玄学。但说穿了它就是一套先管住电流、再管住转速的组合拳而ADRC这种新玩法本质上是把传统PI对扰动的被动挨打换成了先观测再补偿的主动拦截。这篇文我想用工程师之间聊天的口气把从SVPWM到ADRC这条路每一步的底层原因、参数怎么算、现场有哪些坑一次性讲透。适合刚入门电机控制的学生也适合在实验室调了半天还是抖的工程师朋友。1. 先把手里的玩具看清楚PMSM双闭环到底在闭环什么1.1 从abc到dq电流表装在转子轴上很多人一上来就盯着PI参数调但电流环都调不明白因为根本坐标系没搞清。PMSM三相定子绕组里流的是三相交流电而转子是旋转的直接看abc轴的电流波形是三个互差120度的正弦波控制器对着正弦波去追误差带宽再高也追不上随时变号的目标。所以要干的第一件事是坐标变换。把三相静止坐标系先通过Clark变换变成两相静止αβ轴再用转子角度做Park变换变成旋转的dq轴。这一步的核心意义在于从旋转的转子视角看过去原本随时间变化的交流量会变成两个直流量。d轴叫励磁轴q轴叫转矩轴控制目标就简单粗暴了——用id控制磁场强弱用iq控制转矩大小。做过实际项目的都知道Park变换用的角度一旦有偏差d轴和q轴会串味表现就是id和iq在稳态时还有高频纹波。这里我想多说一句编码器零位偏置如果没校准你调的PI再完美力矩也会忽大忽小。1.2 电流内环要快速度外环要稳双闭环的结构是内外嵌套速度环在外面输出的是q轴电流给定值电流环在里面负责把实际电流快速拉到给定值。为什么内环必须快因为电机转矩正比于q轴电流你速度环想要多大转矩电流环就要在最短时间内把电流怼上去。电流环的响应带宽决定了整个系统能承受多快的负载突变。如果电流环慢半拍外环的速度误差反馈过来时转矩还没建立速度就继续往下掉控制器就会越调越猛最后积分饱和。速度环相对电流环要忍得住。它既然站在外层看到的已经是被电流环平滑过的对象带宽可以放低一般取电流环的1/5到1/10。这样做的好处是内外环不会互相激励否则电流和速度两个环抢着响应系统容易在某个频率上形成谐振表现出来就是电机中低速时突突突的抖动。1.3 带宽分配与采样频率的硬约束电流环带宽不是想设多高就多高。数字控制有香农采样定理兜底PWM开关频率决定电流采样频率10kHz的开关频率你电流环带宽最多做到500Hz到1kHz再往上相位裕度就压没了。我实测的经验是电流环带宽设在开关频率的1/10到1/20之间最稳速度环带宽再取电流环的1/5左右。另外一个经常被忽略的问题电流采样触发点。电流在PWM周期的中点最平稳此时续流结束、开关动作刚完成采样到的值最接近周期平均值。如果你随便找一个边沿去采采到的是尖峰电流那电流环看到的反馈噪声大得离谱PI控制器会一直在那紧张参数根本没法往上加。2. SVPWM的底层逻辑从扇区判断到七段式发波2.1 为什么要用SVPWM母线电压利用率直接多15%FOC算出来的是dq轴电压给定经过逆Park变换变成Uα、Uβ接下来要干的活是怎么用逆变器的六个开关管把这两个电压发出来。最原始的方法是SPWM三相各自用三角波和正弦波比较但SPWM的母线电压利用率只有约86.6%。SVPWM的思路完全不同——它把逆变器八个开关状态当成八个基本电压矢量用相邻两个矢量去合成任意方向、任意大小的目标电压矢量利用率可以直接拉满到100%的调制比。别小看这15%在母线电压受限的场合比如48V低压伺服、锂电池供电的移动机器人多出的电压意味着更高的最高转速和更大的弱磁空间。2.2 扇区判断三个式子一次判断SVPWM第一步是判断目标电压矢量落在哪个扇区。用Uα和Uβ组合出三个量v1 Uβ v2 (√3/2)·Uα - (1/2)·Uβ v3 -(√3/2)·Uα - (1/2)·Uβ然后看v1、v2、v3的正负得到N值判断扇区。这段逻辑纯粹是几何问题不用背画一下六边形扇区图观察边界角度就能推导出来。不同芯片厂商的电机库对扇区编号定义略有差异但核心都是这套符号判断逻辑。2.3 作用时间计算X、Y、Z的由来知道在哪个扇区后需要算出相邻两个基础矢量的作用时间T1、T2。工程上会预计算三个中间变量X √3·Uβ·Ts / Udc Y (1.5·Uα 0.866·Uβ)·Ts / Udc Z (-1.5·Uα 0.866·Uβ)·Ts / UdcTs是PWM周期Udc是母线电压。然后查表得到T1、T2。这里有个细节如果T1T2大于Ts说明目标电压已经超出逆变器能输出的最大范围过调制要做比例压缩T1 T1·Ts / (T1T2) T2 T2·Ts / (T1T2)这一步不做的话发波时间溢出PWM占空比会饱和在畸形状态线电流里会冒出大量低次谐波电机噪音明显变大。2.4 七段式发波与死区每次只动一个桥臂算出T1、T2后还剩下零矢量时间T0 Ts - T1 - T2。怎么分配T0是门艺术。常用的是七段式一个PWM周期内从零矢量开始中间插入两个有效矢量再结束于零矢量并且把矢量序列对称排布。这样做的好处是每次开关状态切换时只有一个桥臂动作开关损耗低电流谐波也小。比如第一扇区的七段式顺序是000→100→110→111→110→100→000这就是000-U4-U6-111-U6-U4-000。死区时间也不能忽视。同一桥臂上下管不能同时导通要插入一小段死区几百纳秒到几微秒。死区会导致实际输出电压偏低电流越大影响越明显。高级一点的方案是电流极性补偿但绝大多数项目里选用合适的死区时间并加一个低通滤波就够用了。3. 双闭环PI参数整定用带宽法把玄学变成科学3.1 电流环先对消极点再定带宽电流环对象简化下来就是一阶惯性环节时间常数由电感和电阻决定传递函数近似为 1/(LsR)。PI控制器有一个零点最合理的做法是用PI的零点去抵消对象的极点Ki / Kp Rs / L这样电流环就变成纯积分加比例的结构可以用一阶低通模型直接设计带宽。给定电流环带宽ωc后Kp ωc · L Ki ωc · Rs参数怎么来用LCR表量电机相电感和相电阻。没有LCR表也没关系可以用一台逆变器往绕组里注入一个低频电压记下电流上升斜率反推电感或者直接用电桥几十块钱的手持款就够用。3.2 速度环转动惯量和转矩系数两个坎速度环的对象是积分环节电机轴上的净转矩除以转动惯量J就是角加速度。速度环PI参数和J直接挂钩转矩系数Kt 1.5 · p · ψfp为极对数ψf为永磁磁链 Kp ≈ J / (Kt · τ_eq) Ki ≈ Kp / (4·τ_eq)τ_eq是电流环等效小时间常数。麻烦的是J是负载惯量现场经常不知道。经验做法是先给一个偏小的Kp让系统稳定不振荡然后每次增加Kp直到速度环出现等幅振荡前的临界值再取它的一半。Ki也在同一轮试验里试探确保稳态没有静差。有个口诀我一直在用速度环调Kp看动态调Ki看稳态。Kp不够指令突变时速度爬得慢Ki过大低速时会有持续的低频摆头。3.3 限幅、抗积分饱和与微分先行保命细节电流环输出直接是电压指令这个指令必须限幅否则逆变器就过调制了。但限幅之后PI积分项还在累计这就是所谓的积分饱和。速度发生大阶跃时积分项猛涨反馈回来后指令还死死卡在限幅值上超调就来了。解决办法是做一个抗积分饱和anti-windup——积分项只在未饱和时才累加或者饱和时把积分项往回拉。微分项需要小心。速度反馈本身噪声不小直接对带噪声的测速值做微分容易把噪声放大成指令抖动。工业上常用的是微分先行即只对给定值微分或者干脆在速度环不用微分。老实说在我调试的绝大多数PMSM速度环里一个PI已经够用D加不加意义不大。4. ADRC的暴力美学用观测器把扰动一锅端4.1 传统PI的痛点挨了打才知道疼传统PI控制是基于误差的控制——先有扰动造成误差PI才去消除它。这就像开车时等车已经偏了才修方向盘反应永远滞后。对电机来说负载突变、摩擦力变化、参数漂移都会先让速度掉下来PI才追着补。某些场合这种滞后不可接受。比如带齿轮间隙的机械臂关节负载方向突变瞬间传统PI会先看到转速跌落再补偿表现出来就是咚一下的顿挫感速度环越调越硬机械冲击越大。4.2 ESO扩张状态观测器把总扰动变成可测状态ADRC的思路是把所有不确定的东西——包括模型误差、负载转矩、摩擦、参数变化——统一塞进一个总扰动项f里然后通过扩张状态观测器ESO把这个f实时估计出来并且在控制量里直接减掉。对速度环来说对象的简化方程是J·dω/dt Kt·iq - TlTl为负载还可以写成dω/dt b0·u fb0 Kt/J是已知的控制增益f就是总扰动。ESO把f当成一个额外的状态变量去观测z1 z2 b0·u β1·(ω - z1) z2 β2·(ω - z1)z1跟踪转速ωz2跟踪总扰动f。只要观测器带宽给够z2就能在几个毫秒内把负载变化估计出来。4.3 LADRC参数整定两个带宽一路通透线性ADRCLADRC的好处是参数少且物理意义明确只有两个观测器带宽ωo和控制器带宽ωc。观测器增益按下式配置β1 2·ωo β2 ωo²ωo越大扰动估计越快但噪声也会被放大一般取3到5倍的ωc不要贪。控制律写出来非常干净u (ωc·(ω_ref - z1) - z2) / b0前一项是让系统呈现一阶惯性的PD控制后一项是直接把观测到的总扰动抵消掉。这就是暴力美学所在——你不需要精确建模负载和摩擦观测器会把它们打包成一个量估出来然后一刀切掉。4.4 PI与ADRC怎么选一张表说清楚对比维度传统PILADRC模型依赖低但调试靠经验需要b0即Kt与J的粗估扰动处理滞后补偿实时估计并前馈抵消参数数量2组PI共4个只需2个带宽抗扰性能一般积分扛不住突变强负载突变几乎无速降噪声敏感度较低高ωo过大会引入测量噪声调试难度手感积累型带宽法思路清楚我的建议是普通伺服可以用PI成熟稳定够用如果做的是高动态加减速、强扰动场景比如机械臂、AGV驱动、高速吹瓶机LADRC的收益非常明显。还有一个折中方案——速度环外环用PI加扰动前馈电流环保持PI这在很多量产项目里也够长。5. 从仿真到实机那些踩过的坑和排查技巧实录5.1 仿真很顺、实机就飞先查这六件事仿真里跑得风生水起的SVPWM双闭环一上实验台板子就冒烟的人我见过不下十个。仿真用的是理想开关器件没有死区没有采样延迟没有编码器量化误差逆变器模型是理想的——实机全都要面对。先查起来相序对不对三相线接反电流跟转矩对不上号系统会直接发散或严重倒转。编码器零位Park变换的角度有偏差id和iq稳态纹波会很大。采样时刻确认电流采样在PWM中心触发别用边沿。死区是否设置合理死区太大低载时电流波形明显削顶声音发闷。母线电压是否稳SVPWM的过调制计算依赖Udc母线电压波动大时电压利用率会突变。ADS加滤波但控制器没延时补偿滤波带来的相位滞后会让电流环带宽白白降低。5.2 常见问题速查表现象可能原因排查方向启动时电流冲击大编码器零位偏、积分初值错误校准零位积分器启动前清零速度环低频摆头积分过大、速度反馈噪声降低Ki、加大测速滤波时间常数高速时力矩不足母线电压利用率不够、弱磁没做检查SVPWM调制比、是否存在过调制电机啸叫死区引起谐波、PWM频率落在听觉范围提高PWM频率、增加死区补偿突加负载转速掉得厉害速度环带宽太低或ADRC扰动补偿没生效先加ωc再查ESO的β系数电流环跑飞相电感/相电阻参数错误重测L和R确认Ki/Kp比例5.3 实测调试顺序从开环到双闭环的五步走我最推荐的调试验收顺序是开环发固定电压矢量确认电机能转、相序和方向正确。只调电流环给一个固定的iq指令看电流响应能不能快速稳到目标。电流环稳后再启用速度环用PI的Kp从小到大试探。确认空载性能后加负载测试扰动响应。这一步最能区分PI和ADRC的差距。整个系统跑稳定性测试观察低频振荡、过温、过流保护是否都能正确触发。这五步每一步都有明确的通过标志别跳步。跳过电流环直接调速度环出了问题你连锅在哪儿都找不到。写在最后的一点个人体会做了这么多电机控制项目我越来越觉得所谓暴力美学其实是一种工程取舍的智慧。很多人对ADRC的第一印象是那玩意很玄但拆开看它不过是用一个观测器把麻烦事兜住再用一个简简单单的反馈律收尾。反而是那些看起来最标准、最经典的控制结构里面堆满了经验补偿和条件分支。如果你现在的项目还在用PI先把电流环带宽和速度环带宽整明白再用表格里的对比维度判断要不要上ADRC。建议先从仿真搭一个LADRC速度环用阶跃负载测一下速度跌落幅度再决定是否移植到实机这套流程我实测下来既能直观看到效果也不容易翻车。