ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PMSM电流环速度环PI参数优化:从能转到转好的工程策略

PMSM电流环速度环PI参数优化:从能转到转好的工程策略 上篇把电流环和速度环的PI参数初算方法走了一遍按那套流程算完电机一般都能转起来转速也稳得住。但“能转”和“转得好”之间的距离就是这篇文章要填的坑。前阵子一个做伺服的朋友找我说参数按初算值设进去空载调试一切正常一带负载电流就开始高频啸叫示波器上看iq波形全是毛刺转速稍微给快一点还会触发过流保护。他问是不是Kp、Ki算错了我说不全是。初算参数只是给了你一个能用的起点从“能用”到“好用”中间还隔着一串容易被忽略的工程细节数字控制延迟、离散化误差、积分饱和、解耦不彻底、负载扰动以及实机上那些仿真里根本看不见的噪声和非线性因素。这篇文章继续围绕PMSM的电流环与速度环把初算之后真正决定控制性能的优化策略拆开讲。内容主要面向已经能把FOC跑起来、但还在为动态响应和稳定性头疼的工程师也会兼顾刚接触矢量控制的同学把底层逻辑解释清楚。你不用把每个公式背下来但最好理解每个参数调整背后到底在跟谁博弈。1. 基础参数定完为什么电机还是“不听话”1.1 你遇到的十有八九是这三种现象先对对症状基本跑不出这三类空载正常一带载电流就开始啸叫相电流波形上有明显的高频毛刺甚至触发硬件过流保护。速度环阶跃响应超调很大或者响应慢吞吞的给定从500rpm升到1500rpm要晃好几下才能稳住。突加负载时转速跌落很猛恢复时间长恢复过程中还会出现一次反向过冲。这三种现象我都实际遇到过。最迷惑的是第一种因为空载调试时电流波形非常干净PI参数看起来没有任何问题一带上负载就原形毕露。这里面有逆变器死区、电流采样噪声、PWM延迟等多种因素叠加但最根本的问题在于初算参数只保证了系统在理想模型下的稳定性没有针对实际系统中的非理想因素做补偿也没有把电流环和速度环的带宽分配真正拉开。1.2 根因初算解决的是“稳定”优化解决的是“性能”上篇用电机模型推导的PI参数本质上是基于线性化模型做零极点对消。这种方法的假设条件包括忽略数字控制延迟、认为逆变器是理想的比例放大环节、电流反馈没有噪声、电机参数恒定。这些假设在仿真里成立在实机上一条都不成立。典型的问题是相位裕度。理想模型里你按60度相位裕度去设计参数但因为采样到PWM更新之间至少存在一拍延迟实际系统在穿越频率附近的相位滞后比模型多出几十度相位裕度可能只剩20度到30度。相位裕度不够的直接表现就是阶跃响应振荡、带载后更容易激发出谐振峰。所以初算参数给你的只是一个稳定域中心的起点。优化策略的目标是把相位裕度找回来把积分饱和控制住把交叉耦合压下去把负载扰动前馈掉。后文按电流环、速度环、实测整定、特殊工况四条线展开这些手段是层层递进的。2. 电流环的进阶调节不只算PI还要管延迟和离散化2.1 一拍延迟相位裕度的隐形杀手数字控制里有一个很憋屈的事实你这一拍采样到的电流计算出来的占空比最快也要到下一个PWM周期才能更新到比较器里。假设PWM频率10kHz这一拍就是100us的延迟。当电流环带宽设计在1kHz附近时100us的延迟在穿越频率附近贡献的相位滞后大约是2 * pi * 1000 * 0.0001 * 180/pi 36度。加上逆变器零阶保持器的固有滞后实际相位裕度比模型少40度以上是常事。这意味着什么你按理想模型算出来的Kp直接上机电流环大概率会振荡只是振荡幅度和阻尼程度不同。有的系统勉强稳定但阶跃响应会有明显振铃有的系统直接啸叫因为高频分量接近了谐振点。处理策略有三个层次最保守的做法把初算的Kp往下调20%到30%用牺牲带宽换稳定。适合对动态要求不高的应用比如风机、水泵。中等做法在设计带宽时就把延迟的相位损失算进去。比如目标相位裕度60度那就按“60度 延迟相位损失”来设计反推Kp。激进做法做一拍延迟补偿用模型预测或者Smith预估器把延迟环节抵消掉。这个在工业伺服里很常见但对模型精度要求高参数变了补偿效果就劣化。我的习惯是先用第2种把延迟的相位损失做成一张表根据开关频率和目标带宽快速查Kp的修正系数。实测下来这个修正系数通常在0.7到0.85之间。2.2 离散化方法同一组连续PI参数三种变换三种手感上篇的PI参数是在连续域推出来的你最终要跑在DSP或者MCU里必须离散化。很多人直接套用位置式PID的标准差分方程认为离散化只是形式上的差异这在高带宽的电流环里会翻车。离散化方法差分方程形式高频特性使用建议前向欧拉y[k]y[k-1]KiTse[k-1]相位超前容易不稳定尽量别用在电流环后向欧拉y[k]y[k-1]KiTse[k]相位滞后比前向欧拉稳一点简单系统可用双线性变换Tustiny[k]y[k-1]KiTs/2(e[k]e[k-1])频域形状保持最好电流环推荐同一个Kp、Ki用前向欧拉离散后在穿越频率附近的相位会变得比连续域还乐观实际系统却达不到这个相位所以振荡风险更高。双线性变换保持了连续域的频域特性代价是实现稍微复杂一点但稳定性和一致性明显更好。电流环的PI我基本只用Tustin变换。速度环带宽低时间常数大离散化方法的影响没那么明显用标准的后向欧拉也问题不大。一条实用原则离散周期和系统最小时间常数的比值越大离散化方法的差异越显著。电流环就是这个比值最大的地方。2.3 电流环的抗饱和输出限幅不等于积分限幅电流环的PI输出是d轴和q轴的电压指令最终要送到SVPWM里做限幅。三相逆变器能输出的最大相电压受母线电压限制不可能超过六边形内切圆对应的电压。当你的电压指令超过限幅值时PI输出被截断但积分项还在继续累积这个状态就是积分饱和。积分饱和在电流环里比很多人想象的要常见。比如突加大iq指令PI输出瞬间顶到电压限幅积分项一直在涨等电流真正追上来时积分项已经攒了一大堆要把这个多余的量泄掉需要好几个周期结果是电流先超调一大截再慢慢回落。处理积分饱和有几种常用方案积分限幅给积分项单独设一个上限输出限幅多大积分项限幅就设多大。条件积分当PI输出超过限幅值时冻结积分项不再累加。反算抗饱和back-calculation检测饱和深度饱和输出 - 未饱和输出把这个差值乘以一个系数反馈到积分输入端让积分项自动退回。反算抗饱和的代码结构大致长这样// 反算抗饱和Kaw 取 1/Ti 量级Ti 是积分时间常数 float v_unlimited Kp * err integral; float v_sat clamp(v_unlimited, -v_max, v_max); integral Ki * err * Ts Kaw * (v_sat - v_unlimited) * Ts; output v_sat;这个Kaw系数我一般取Ki的量级甚至略大一点太小了退饱和太慢太大了积分项会被压得过死稳态精度反而受影响。需要实际调试时看着阶跃响应调。2.4 解耦补偿PI参数救不了的交叉耦合PMSM在同步旋转坐标系下的电压方程里d轴和q轴之间存在交叉耦合项而且这两项都包含电角速度。转速越高耦合越严重。很多人刚开始调电流环时会发现q轴电流给个阶跃d轴电流也会跟着波动转速一高d轴电流甚至会偏移。这是正常现象不是参数没调好是耦合项在作怪。解耦补偿的基本思路是用前馈把耦合项抵消掉。理想的前馈电压vd_ff -omega_e * Lq * iq vq_ff omega_e * (Ld * id psi_f)把这个前馈加在PI输出之后电流环的等效被控对象就从耦合的PMSM模型退化成两个近似独立的RL一阶系统PI参数就可以按解耦后的模型来设计控制难度大幅下降。这里有个容易踩的坑解耦项依赖电感值Ld、Lq而电感的磁路饱和效应在不同电流下变化很大。小电流时你测到的Ld、Lq和大电流时的实际值可能差30%以上。解耦补偿不干净的后果是带宽越高残余耦合越明显。如果发现高速高负载时解耦效果变差不要急着怀疑PI先检查是不是该电流点上的电感值和标称值偏离太大。3. 速度环的高阶手段从抗积分饱和到扰动前馈3.1 速度环的积分饱和比电流环更难缠速度环的积分饱和通常更隐蔽。因为速度环带宽低响应慢积分项累积的过程在示波器上看不明显但它造成的后果非常具体突加负载时转速跌落速度环为了把转速拉回去积分项不断累积负载突然卸掉时这个已经累积起来的积分项会把转速高高抛起形成一个明显过冲有时候还会触发过速保护。比电流环更难处理的原因是速度环的被控对象包含机械惯量这个惯量的响应比电气时间常数慢一个数量级。在惯量积分的时间里积分项有充足的时间累积到很大。我的处理办法分三步速度环的积分限幅不要超过额定转矩对应的iq指令一般是额定电流的80%到100%。超过这个值说明系统已经深度饱和积分项继续累积只会让恢复过程更难控制。条件积分只在误差较大的时候冻结积分项让比例项先发挥作用等误差回落到一个阈值区间再恢复积分。如果系统需要频繁的加减速考虑积分分离策略误差超过设定值时积分项直接清零避免大幅超调。条件积分的阈值选额定转速的2%到5%比较合适太小了起不到作用太大了稳态精度会受影响。3.2 速度/加速度前馈让环“抢跑”而不是“追着跑”速度环的PI本质上是根据速度误差来产生转矩指令这是一种事后纠正。位置环给速度环的速度指令在变化时速度环的理想输出其实是可以根据指令提前算出来的。速度前馈的物理含义很直白如果指令速度在匀速上升那么电机需要提前获得一个与加速度成正比的转矩。这个转矩对应的电流就是加速度前馈iq_ff J * d(omega_ref)/dt / Kt其中J是折算到电机轴的总惯量Kt是转矩系数。把这个前馈加到速度环PI输出上PI只需要处理前馈不准的那部分误差负担大幅减轻。在位置跟踪系统里速度前馈和加速度前馈能把跟踪误差减小一个数量级这是单纯调PI很难达到的。前馈的参数依赖惯量J但负载惯量变化时前馈效果会打折。一个工程上的折中方案是做一个低通滤波后的前馈只补偿低频段的主要加速度高频段让PI去处理。这样即使惯量辨识不完全准确也不会因为前馈引入新的振荡。3.3 扰动观测与转矩前馈把负载突变变成“看得见”的量速度环的扰动主要来自负载转矩变化。PI调节器对扰动的抑制是被动的要等转速跌落之后才反应过来天生滞后。扰动观测器的思路是把负载转矩估算出来直接补偿到电流指令上让速度环提前知道该输出多大的转矩。简化的一阶扰动观测器模型J * d(omega_hat)/dt Te - TL_hat - B * omega_hat G * (omega - omega_hat)这个式子里的G是观测器增益决定观测器跟踪转速的实际速度。TL_hat就是估算出的负载转矩。把TL_hat前馈到速度环输出负载突变引起的转速跌落能显著减小。我实测的一个典型案例某惯量下的速度环负载突变时转速跌落了300rpm恢复时间400ms加上扰动观测器后跌落减小到80rpm左右恢复时间压缩到150ms以内。代价是要标定惯量J和阻尼系数B这两个值不准的话观测器的估算会偏向错误的方向。好在J和B对观测器带宽内的误差不敏感用经验值加上一点在线修正就能用。4. 仿真重放一百遍不如上电一次实测整定的完整链路4.1 仿真和实机之间隔了什么很多人从Simulink切到实机调试时都会有一个落差期。仿真里把PI参数调到阶跃响应完美无瑕上电之后却完全对不上号。主要原因是仿真模型里没有这些环节逆变器死区时间尤其是死区引起的电流波形畸变和零电流钳位现象电流采样环节的噪声、偏置、增益误差以及采样滤波器的相位延迟编码器量化误差和测速延迟母线电压波动电机温度变化引起的定子电阻、永磁磁链漂移这些非理想因素中有些可以通过PI参数优化来缓解比如电流采样噪声可以通过降低带宽来压制但有些只能通过结构手段解决比如死区补偿、采样偏置校准。如果硬件层面的问题没有处理好你在软件里调参数只会越调越糊涂甚至为了压制噪声把带宽压到很低导致动态性能完全丧失。4.2 电流环实测三步走电流环是最适合先做实机验证的环节因为它的动态速度快波形信息量大。我的整定顺序基本固定第一步断开速度环直接给iq一个阶跃指令id保持为0用示波器采集dq轴电流的阶跃响应波形。看超调量、上升时间和是否有振荡。超调在10%以内上升时间接近设计带宽对应的理论值且没有振铃这就是健康状态。第二步如果波形不理想按这个决策表处理现象优先调整超调大、有振铃降低Kp检查是否没做一拍延迟修正稳态误差明显加大Ki但注意积分饱和风险电流噪声大、波形毛糙先查采样滤波和死区补偿不要只靠降Ki压制带宽不够、响应慢提高Kp同时确认相位裕度是否够第三步录制带载状态下的相电流波形做FFT看频谱。开关频率及其边带附近如果出现明显的非调制谐波分量说明有谐振或振荡被激发这时候要退回检查相位裕度和电流环离散化方式。4.3 速度环实测看阶跃更看负载跌落速度环的实测分两个场景空载阶跃和带载突变。空载阶跃时主要看速度从静止到目标转速的过程。速度环带宽低响应曲线相对平缓重点看有没有超调和振荡。速度环如果出现明显的超调先不急着调Kp看看是不是电流环带宽太低或者速度环积分限幅设得过大。带载突变是速度环的核心测试。给电机加上额定负载的突变记录转速跌落深度和恢复时间。理想情况下跌落深度控制在额定转速的3%以内恢复时间在100ms到300ms之间视惯量而定。如果跌落太深优先考虑扰动观测器和负载前馈而不是一味增大速度环增益。速度环Kp增大虽然能减小跌落但会放大测速噪声而且容易在机械谐振频率处激发振荡。实测还有一个容易被忽略的点测速滤波器的相位延迟。速度环的反馈信号如果用了高截止频率的IIR滤波延迟会明显吃掉速度环的相位裕度。测速滤波器的截止频率应该和速度环带宽保持一个合理的比例我习惯设在速度环带宽的10倍以上必要时用编码器原始计数值直接算速度。4.4 一次完整整定的流程参考整定一套参数我一般按下面的顺序走校准电流采样偏置和增益启动前验证。电流环开环测试用开环电压扫频确认电机的电感和电阻是否符合设计值。电流环闭环整定完成dq轴阶跃响应测试。速度环空载整定完成速度阶跃测试。速度环带载整定完成负载突变测试。全工况验证包括正反转、高低速、加减速循环。每一步都要记录参数版本和对应的波形截图。这个习惯救过我很多次——有一次调完一组参数后系统出现奇怪的低频振荡翻看之前的波形记录才发现是某次调整积分限幅时引入的问题。参数版本管理虽然看起来多了一步但遇到问题时能省下半天排查时间。5. 特殊工况下的参数适应性负载突变、弱磁区与正反转5.1 负载突变与惯量比同样一组PI换台电机就不一样速度环的PI参数本质上是针对一个特定惯量设计的。负载的惯量如果发生变化速度环的等效被控对象就变了。惯量比对速度环的影响很大惯量比越大系统的机械时间常数越大同样的PI参数下超调越明显、响应越慢。如果你的应用场景负载惯量变化范围很大比如空载和满载相差几倍固定的速度环PI参数很难两头兼顾。实际项目里常用的做法是增益调度根据负载状态或当前转速区间在几组预设的PI参数之间切换。也可以用惯量辨识算法在线估计惯量自动调整速度环增益但这需要额外的辨识逻辑和足够的激励信号不是所有场合都适合。5.2 弱磁区的电流环电压饱和下的参数失效PMSM进入弱磁区之后电压极限成为硬约束。此时电流环的PI输出很容易长时间顶在电压限幅上积分在不断饱和电流环的线性调节能力基本失效。这时候你会发现在恒转矩区调得好好的PI参数在弱磁区完全没法用电流跟踪容易出现振荡甚至失控。弱磁区的处理不能只靠PI参数。常用手段是电压反馈控制检测电压指令的饱和程度动态调整id、iq的电流指令让电流指令沿着电压极限圆滑行。即使这样做了弱磁区的电流环PI也应该比恒转矩区更保守——带宽低一点积分限幅需要根据电压裕度来裁剪。我的实际经验是在弱磁区不要过于依赖单一的电流环PI参数。如果项目允许做一个基于电压裕度的参数软切换让PI参数随着电压饱和度平滑调整比固定参数在全局范围内表现更好。5.3 正反转与零速附近摩擦和测速死区正反转和零速附近是速度环PI参数另一个容易出问题的区域。空载状态下电机从正转切换到反转要经过转速过零的阶段。在这个区间测速信号的信噪比很低如果测速分辨率不够速度反馈会出现很大的量化噪声速度环会把这些噪声放大成转矩波动听起来就像电机在零速附近“咯噔咯噔”响。处理这个问题的关键在测速而不在PI参数。低速时用M法测速分辨率不够高速时T法测速响应慢。工程做法是M/T法自适应切换保证全速段都有足够的测速分辨率。如果只在软件里调参数效果非常有限。摩擦补偿也要单独做尤其是在零速附近静摩擦和库仑摩擦会导致速度过零时出现“呆滞”现象靠PI参数很难消除需要额外的摩擦前馈。最后再分享一个小技巧。如果你发现自己调来调去Ki不断增大但稳态误差始终降不下来去查电流采样偏置和逆变器死区补偿大概率是硬件层面的问题。PI参数能处理的是系统动态和稳定性的折中采样系统本身的偏置误差不是靠增益能消除的。先把底层的问题解决干净再回头做参数优化你会有一种豁然开朗的感觉。
返回列表