ARTICLE DETAIL

资讯详情

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

永磁同步电机FOC双闭环PI参数整定:从理论到实战

永磁同步电机FOC双闭环PI参数整定:从理论到实战 说句实话搞过永磁同步电机FOC控制的人应该都有这种体会算法框架搭起来不难Clarke变换、Park变换、SVPWM这些模块资料一抓一大把代码烧进去电机也能转但一转起来问题就全来了——电流波形毛刺多、转速一上去就啸叫、带载就抖、响应慢得像蜗牛。折腾到最后十有八九都卡在同一个环节上电流环和速度环的PI参数整定。这篇文章我想把这块内容掰开揉碎了讲透从数学模型到工程实操从理论计算到现场试凑把我这几年来调FOC踩过的坑和沉淀下来的方法完整梳理一遍给正在跟PI搏斗的工程师朋友们一个可以照着抄的路径。这篇内容的适用对象有两类一类是刚开始接触FOC、被双闭环参数搞到头大的硬件/嵌入式工程师另一类是已经能跑通代码、但总觉得系统性能差口气想在动态响应和稳定性上再精进的老手。整篇文章不会绕弯子以表贴式三相永磁同步电机SPMSM、id0控制策略为大前提全程围绕“参数的物理含义——理论计算——离散化修正——现场调试——问题排查”这条主线展开保证你看完可以直接回到工位上操作。1. FOC控制系统拆解先看清你要整定的两个环1.1 内环与外环的职责划分FOC控制的核心思想是把三相静止坐标系下的交流电流经过Clarke变换和Park变换转换到与转子同步旋转的dq坐标系下让原本耦合的三相交流量变成两个相对独立的直流量d轴电流id和q轴电流iq。在表贴式永磁同步电机中电磁转矩的表达式很关键Te 1.5 * p * ψf * iqp为极对数ψf为永磁体磁链也就是说转矩只和q轴电流成正比所以id0控制策略由此而来——把d轴电流控制在0让所有电流都用来产生转矩。整个双闭环系统是一个标准的嵌套式级联结构。内环是电流环工作频率最高负责快速跟踪q轴电流指令保证实际电流能迅速达到期望值同时抑制母线电压波动、反电动势扰动等干扰外环是速度环工作频率相对低负责根据转速误差输出q轴电流指令也就是给内环“派任务”。位置环在这个架构之上又是另一层本文先不展开。理解这个分工是第一位的电流环负责“快和准”速度环负责“稳和精”。1.2 为什么先调电流环再调速度环级联结构的调试顺序在工程上没有任何商量余地必须先调好内环再去碰外环。原因从传递函数上看非常直白——速度环的被控对象中包含了电流环的闭环动态如果内环还没收敛外环拿到的是一个随时在抖的执行器参数整定根本没有意义。从时间尺度上看电流环的响应带宽通常设计在500~2000rad/s而速度环带宽一般只有它的1/10到1/5也就是50~200rad/s。这种几十倍的带宽差距是级联系统稳定运行的基本前提。调试时如果发现速度环怎么调都发抖先别怀疑速度环参数回头看一眼电流环是不是已经快振铃了。我实测过的项目里有一种高频噪声特别典型带着示波器抓电流波形发现高频尖刺频率恰好在电流环带宽附近这就是内环相位裕度不足引发的“亚振荡”这时候动速度环参数是徒劳的。2. 整定前必须摸清的家底电机参数与系统建模2.1 关键电机参数及其获取方法PI参数整定不是凭空拍脑袋它本质上是在对被控对象建模后做极点配置。而模型里最核心的物理量是那几组电机参数。你们看很多整定教程直接甩公式Kp...、Ki...但其实这些公式的输入就是电机参数参数拿错了公式再漂亮也是白搭。需要准备的核心参数有四类定子电阻Rs、d/q轴电感Ld/Lq、永磁体磁链ψf或者反电动势常数Ke、转动惯量J。Rs可以用直流伏安法大致测到——给电机两相之间通一个较小的直流电流测端电压除一下精确做法是离线参数辨识比如注入低频或直流偏置信号再解算。Ld/Lq的相对难度大一些常见做法有高频信号注入法、基于暂态响应的RL回路时间常数测量法等。磁链可以通过反电动势法估计用另一台电机把被测电机拖到某个转速测线电压反电动势峰值再由公式推导。转动惯量是一个老大难参数如果是自己搭的台架最实用的办法是空载加减速实验法给电机一个已知阶跃转矩指令记录转速斜率根据转矩平衡方程反推J这一点在后面的速度环整定里特别关键。2.2 电流环与速度环的被控对象模型电流环的被控对象是电机的电气子系统在dq同步旋转坐标系下电压方程为ud Rs·id Ld·(did/dt) - ωe·Lq·iquq Rs·iq Lq·(diq/dt) ωe·(Ld·id ψf)可以看到d/q轴之间存在交叉耦合项-ωe·Lq·iq 和 ωe·Ld·id转速越高耦合越明显。但做电流环设计的时候我们通常先假设已经做了前馈解耦工程上在PI输出端加上补偿项即可这样d/q轴就可以各自近似成一个独立的一阶RL惯性环节G(s) 1 / (L·s Rs)这就是电流环PI整定的最核心模型它对应一个时间常数τ L/Rs。速度环的被控对象是电机的机械子系统。转矩平衡方程J·(dωm/dt) Te - TL - B·ωm其中ωm是机械角速度B是粘滞摩擦系数一般很小可以忽略。把Te 1.5·p·ψf·iq代入从iq到ωm可近似看成由一个比例环节转矩系数Kt 1.5·p·ψf串联一个积分环节1/(J·s)组成。也就是说速度环被控对象本质上是一个积分型对象这是它和电流环最大的区别——电流环对象自稳速度环对象不自稳这决定了两个环的PI参数方向完全不同。2.3 数字控制带来的延时躲不开的建模误差教科书上的连续域设计是理想化的实际数字控制器里电流环一个控制周期内要完成采样、变换、PI计算、SVPWM更新这个过程至少引入一拍的系统延时SVPWM本身在零阶保持器作用下等效于0.5拍的采样保持延时。加起来大约1.5个开关周期的等效纯延时。假设开关频率10kHz等于0.15ms的延时对应频率约1000rad/s。也就是说如果你试图把电流环带宽设计到2000rad/s以上这个延时就已经和带宽在同一量级相位裕度会被吃掉非常大系统必然振荡。所以精确的电流环设计必须把这1.5拍延时建模进去常见做法是在连续域对象上串联一个e^(-1.5Ts·s)的延时项。这也是为什么工程上电流环带宽一般取开关频率的1/20~1/1010kHz载频下取500~1000rad/s是个安全区间。先把这条底线记住后面算参数时心里有数。3. 电流环PI参数整定从理论公式到现场调参3.1 基于带宽设计的电流环PI计算电流环PI控制器采用经典的零极点对消策略。PI控制器的传递函数是Gc(s) Kp Ki/s Kp·(s Ki/Kp) / s我们希望控制器引入的零点能够对消掉被控对象的极点也就是让 Ki/Kp Rs/Ls这样开环传递函数就变成了一个纯积分环节拼接一个比例环节G(s)·Gc(s) ≈ Kp/(L·s)闭环传递函数就简化成一阶低通滤波器Gcl(s) 1 / (1 (L/Kp)·s)一阶系统的带宽截止频率就是 ωc Kp / L。反过来我们就可以用期望带宽来反推PI参数Kp L·ωcKi Rs·ωc这两个公式是整个电流环整定的核心。举个例子某电机Rs0.8ΩLs表贴式取LdLq约600μH开关频率10kHz取电流环带宽ωc1000rad/s那么Kp 0.0006 × 1000 0.6 (V/A) Ki 0.8 × 1000 800 (V/(A·s))离散化之后Ki还要乘以控制周期Ts也就是数字域里 Ki_digital 800 × 0.0001 0.08 (V/A)这是后话。用这套公式算出来的参数理论上能实现约1250Hz的电流环带宽但前面提到数字延时没有完全建模所以实际会留一些余量初始上机时把Kp降到理论值的70%~80%比较稳妥。3.2 离散化方法别忽视那个TsFOC是基于DSP/MCU的数字控制PI参数最终是以离散形式实现。最常用的离散化方法是后向欧拉法把连续积分近似为累加。离散PI的增量式实现如下u[k] u[k-1] Kp·(e[k] - e[k-1]) Ki_digital·e[k]其中 Ki_digital Ki·Ts。很多新手在这儿会犯一个很经典的错误拿连续域的Ki直接写代码结果积分项作用被放大了整整10000倍10kHz载频下电机一上电就冲飞。我见过好几个工程师栽在这上面现象是电流没加上去就过流报错排查半天最后发现是Ki忘了乘Ts。另一个需要注意的细节是增量式PI天然自带抗饱和效果因为积分状态是隐含在u[k-1]里的只要对输出限幅windup问题就轻得多。但如果你用的是位置式PIu Kp·e Ki·Σe就必须额外做积分限幅或抗饱和处理这一点在速度环里更突出后面专门展开。3.3 电流环现场调试步骤与波形判读理论上限算好了接下来是上机实测。推荐的电调步骤如下第一步把速度和位置环全部断开给q轴电流指令加载一个较小的阶跃信号比如额定电流的5%~10%d轴电流指令保持0。用示波器或上位机抓取实际iq的响应波形观察电流是否平滑地跟随指令有没有超调、振荡、噪音。此时一个很重要的判断标准是响应上升时间约等于 4.4 / ωc如果按1000rad/s带宽计算期望上升时间大概在4~5ms量级这里的上升时间指2%~98%建立时间近似为4.4/带宽有时用1.8/带宽算10%~90%上升时间更直观大概1.8ms不同习惯都有关键是看趋势我一般用1.8倍法。第二步如果响应太慢逐渐增加Kp。每次增加10%左右观察电流波形直到开始出现明显的振铃或高频啸叫然后退回上一次参数这个点就是当前调试条件下的Kp上限。挂这个“临界参数”的2/3左右作为工作参数留出稳定裕度。第三步单独增加Ki看稳态误差收敛情况。如果电流稳态值和指令值之间有静差说明Ki过小或积分项没生效。加大Ki直到静差消失同时关注低频振荡。Ki太大时电流波形会出现幅度缓慢起伏的“呼吸感”频率一般在几十赫兹这就得往回调了。调试过程中有一个非常实用的工具判断用滞环比较或者直接对数波数据进行FFT分析看频谱峰值是否集中在电流环带宽附近。如果峰值在带宽频率附近基本就是相位裕度不够如果峰值在开关频率附近那就是PWM死区或采样噪声问题这时再调PI也没用。4. 速度环PI参数整定让电机稳、准、快地转起来4.1 速度环PI设计的工程思路速度环的传递链是速度误差 → PI控制器 → q轴电流指令 → 电流环闭环近似为1→ 转矩系数Kt → 电磁转矩 → 1/(J·s) → 机械角速度。由于电流环带宽比速度环高很多整定速度环时可以把电流环近似当成一个增益为1的快速跟随环节。这样一来速度环的开环被控对象简化为 Kt/(J·s)。这是一个纯积分对象用PI控制器补偿后速度环的开环传递函数为Kp·(s Ki/Kp) / s × Kt / (J·s)把速度环的零点放在积分对象的低频段就可以把它整形成典型的二阶系统。如果按临界阻尼或略欠阻尼来配置常用的设计公式是Kp_v 2·ζ·ωcv·J / KtKi_v ωcv²·J / Kt其中ωcv是期望的速度环带宽ζ一般取0.8~1.0。举个例子J0.00015 kg·m²Kt直算一下假设极对数4、磁链0.08WbKt1.5×4×0.080.48 N·m/A期望速度环带宽50rad/sζ取0.9则Kp_v 2 × 0.9 × 50 × 0.00015 / 0.48 0.028125 (A/(rad/s)) Ki_v 50² × 0.00015 / 0.48 0.78125 (A·s/rad) 应该是A/rad再离散化时乘以采样周期注意这里面最大的坑就是J的准确性。J测不准的情况下Kp_v和Ki_v的公式结果会整体偏离实际。所以工程上更常见的做法是把J当成一个可调系数先按估算值算一组参数试转后再用临界灵敏度法修正。整定速度环时可以从低速阶跃转速开始比如额定转速的20%用示波器抓速度波形观察超调量目标0~10%依工况而定和调节时间目标通常在几十到几百毫秒量级。4.2 抗积分饱和工程上最容易被忽视的一环速度环和电流环最大的差别在于限幅的存在。电流环的输出dq电压有明确的上限受母线电压和SVPWM限制速度环的输出iq指令也有上限受电流限幅保护限制。当速度误差很大时比如突然给一个大阶跃指令或者电机堵转PI积分项会以极快的速度累积到非常大的值导致输出固定在限幅值上。此时如果误差开始回缩那坨积攒了很久的积分值不会瞬间清零电机就会持续输出满转矩直到积分慢慢吐干净。现象就是大幅超调、震荡甚至过流停机。抗积分饱和有很多种工程实现。最粗暴的是积分钳位法积分结果超出上下限就冻结积分或者把积分直接钳到某个预设最大值。略微优雅一点的是反向计算法back-calculation当输出饱和时把实际输出和未饱和输出的差值按一定增益反馈回去衰减积分项。还有一种比较实用的是条件积分法当误差大于某个阈值时暂停积分误差进入小范围后再恢复。调试中怎么判断你的系统有没有积分饱和问题做一个简单实验让电机空载下以某转速稳定运行突然给一个非常大的阶跃速度指令比如从200rpm跳到2000rpm如果出现首次大超调后又跟一个小幅回落波形像“双峰”基本就是积分饱和在作祟。解决方式就是把积分限幅缩到电流指令上限的20%~50%或者有条件积分的直接加条件。这个细节比Kp和Ki本身更影响手感我做过一个项目速度环超调从35%压到5%以内靠的不是调Kp而是调积分限幅。4.3 速度环现场调试步骤从低带宽起步速度环的调试有一个铁律永远从低带宽起步逐步往上加。这和电流环的逻辑一致但理由略有不同——速度环的低带宽意味着它对整个机械系统包括负载刚度、联轴器间隙、编码器噪声的动态不敏感。一上来就整高增益系统极容易激起机械共振。那种高频的金属啸叫或电机底座嗡嗡响十有八九不是电流环问题而是速度环增益过高激发了机械模态。建议这样操作第一步把速度环Kp_v从非常小计算值的10%~20%开始Ki_v先设为0纯比例控制跑一个低转速阶跃。如果速度稳态存在静差这是正常的因为纯比例控制对积分型对象会留下稳态误差严格来说积分型对象比例控制实际无静差但因为摩擦、死区、离散化误差等实际会有残差这里为了调试方便先让它静差存在。这里要插一句速度环被控对象是积分环节理论上比例控制就足够消除阶跃扰动下的稳态误差因为对象自带积分但实际系统的摩擦、量化、死区会造成残余静差所以Ki仍然必须存在。调试中你会发现纯比例时总有一个几rpm到十几rpm的稳态偏差这正是摩擦和死区造成的。第二步逐步增加Kp_v直到速度响应中出现振荡边界然后退回当前值的70%。第三步加入Ki_v从Ki_v Kp_v×ωcv/20这种小值开始逐步增大直到静差消失、阶跃超调可接受。注意每加一次Ki都要重新测一次大阶跃因为积分项对超调的贡献非常直接。第四步根据实际负载情况调整。空载调好的参数带上负载后通常会有一个明显的速度跌落恢复过程这个性能很大程度上靠Ki拉回来。负载扰动下的恢复速度指标工程上也是一个重要参考。5. 常见问题与排查技巧实录5.1 电流环高频振荡先怀疑相位裕度再怀疑采样电流环振荡最常出现的形式是示波器上电流波形叠加高频正弦分量频率通常在数百Hz到1kHz以上伴随电机发出刺耳的啸叫声。按经验这类问题的排查顺序有讲究先看反馈是否正常再看解耦和模型最后才动PI参数。有一个非常经典的坑是编码器角度偏置没校准准。角度偏置误差会影响Park变换的准确性导致q轴命令被分解到d轴上反馈的iq永远追不上指令这时PI输出会持续增大电流波形表现出奇特的“胀缩”现象。很多人遇到这种情况拼命降Kp结果越降越乱。正确的做法是先校准编码器零位偏置——低速开环模式下通过自整定代码或手动偏移扫描找到使得q轴电压为零的偏置角。另一个常见问题是采样时刻和PWM的同步关系。电流采样应该在PWM载波的中心或边沿触发避免在开关管开关瞬间采到di/dt噪声尖峰。如果采样点不对电流反馈里会混入开关噪声电流环看到的就是一个高频抖动的反馈信号PI参数明明合理也会振荡。这种问题在硬件和驱动层排查换软件参数治标不治本。5.2 速度环超调大、静差消不掉速度环超调大的原因通常可以归为三类积分饱和、带宽过高、机械共振激发。先说硬件层面的机械共振当速度环带宽接近机械系统某个固有频率时系统会呈现出非常典型的中频振荡转速波形上像“打了马赛克”一样高频率跳动。排查方法是用FFT看转速数据频谱如果有一个峰值频率和结构件模态吻合就检查联轴器刚度、负载惯量比或者通过陷波滤波器notch filter把这个频率压下去。工程上很多伺服驱动器自带陷波器就是干这个的。静差消不掉的原因则相对集中一是Ki太小积分增益不足它需要较长的时间把静差积攒掉二是积分项压根没参与控制比如误用了纯比例控制器三是系统存在难以克服的摩擦/死区尤其低速工况下“爬行”现象就是摩擦和积分之间的战争。排查时可以先做一个空载低速运行的长时间观察如果转速最终停在指令以下的一个固定偏差处先用大一点的Ki试一次能收敛就是增益不够如果怎么加Ki都不顶用就要考虑给速度环输出iq指令增加死区补偿或者改用带前馈的控制结构。5.3 参数辨识结果和实际对不上怎么办电机铭牌参数和实测参数不一致是常态尤其是电感参数极易受饱和效应影响。大电流工况下磁路饱和会让实际电感比小信号测量值低20%~40%这时如果用小信号参数计算的Kp偏大系统在大负载下可能振荡。所以工程上有一个技巧整定电流环时用大信号工况激励出的等效电感参数而不是小信号电桥测量的值。具体操作是对电机施加1.5倍左右的额定电流阶跃从电流上升斜率估算大信号电感这样出来的PI参数在高负载下才有参考价值。转动惯量的辨识也是类似道理。空载辨识出来的J只包含转子本身惯量带上负载后总惯量可能是空载的几倍。如果速度环是空载调好的带载去跑很可能出现过渡过程慢、超调变大等问题。我一般建议根据负载惯量比负载J/转子J做一个表不同工况下切换不同的Kp_v、Ki_v参数或者至少保证Kp_v和J的估算值成比例地放上去。在参数辨识和整定这条路上我个人的体会是理论计算给你的是一个起点和安全边界最终参数一定是在示波器上“看”出来的。每次加增益都要带着问题去测测阶跃、测带载、测高转速、测低速爬行把你应用场景里的极端工况都跑一遍这套参数才能在真实环境里站得住。如果后续你的项目涉及弱磁控制、无感FOC或者MTPA这套整定方法依然适用只是被控对象的模型会变化PI参数的基准点相应移动——把今天这篇的基础打牢后面那些进阶控制策略才有地方落脚。
返回列表