免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

H∞鲁棒控制与模型降阶:破解伺服参数漂移难题

H∞鲁棒控制与模型降阶:破解伺服参数漂移难题 说实话干了这么多年运动控制最让我头疼的不是算法本身有多难而是你精心调好的参数到了现场说变就变。伺服系统里的惯量、阻尼系数受负载变化、温度升高等因素影响经常漂得你怀疑人生。直接说结论搞位置控制如果只盯着某一个工况把参数整定到完美那基本上是一场豪赌。今天我们用H∞鲁棒控制器把这种参数不确定性按进设计里再配合模型降阶把这套“重装备”拉回现场能落地的计算量级别。这篇文章适合正在做高精度位置环、伺服系统调试或者被负载变化折磨过的工程师参考。接下来我会从物理模型出发讲清楚参数漂移到底会怎么毁掉一个标称控制器再一步步演示H∞控制器的设计细节最后给出模型降阶的实操方法和常见坑。1. 参数漂移为什么让人头大先从伺服系统的数学模型看起1.1 位置环的传递函数与关键参数要处理参数漂移第一步是把标称模型写清楚。常见的永磁同步电机PMSM驱动滚珠丝杠或直驱转台的场景如果只看机械传动侧把电气环节的带宽假设得足够高对象的传递函数可以近似为[ G(s) \frac{K_t}{J_{eq} s^2 B_{eq} s} ]其中(J_{eq})是折算到电机轴上的等效惯量(B_{eq})是等效粘性阻尼系数(K_t)是力矩常数。如果是带弹性联轴器和柔性负载模型阶数会更高甚至会出现反谐振峰。但不管怎么简化惯量和阻尼这两个参数始终是决定系统动态特性的核心。伺服位置环常见做法是速度环内环加位置环外环。速度环通过PI控制器把对象塑造成一个近似的积分环节位置环再用比例或前馈去追踪指令。但这里有个前提速度环的PI参数是按标称惯量和阻尼整定的一旦负载惯量发生大范围变化速度环的带宽和阻尼特性就会偏离设计值位置环的稳定性裕度也会跟着垮掉。1.2 二阶系统的固有频率和阻尼系数为什么那么关键很多人在调试时对“固有频率”和“阻尼系数”的具体作用没什么感觉我举一个直观的例子。对于一个典型的二阶系统[ G(s) \frac{\omega_n^2}{s^2 2\zeta \omega_n s \omega_n^2} ]固有频率(\omega_n)决定了系统的响应速度阻尼系数(\zeta)决定了超调和振荡程度。(\zeta)在0.707附近时系统响应比较均衡既不拖沓也不剧烈超调。而当你把惯量(J)增大一倍时(\omega_n \sqrt{K/J})会变成原来的(1/\sqrt{2})同时(\zeta B / (2\sqrt{KJ}))也会明显下降。结果就是系统响应变慢而且更容易振荡。五轴伺服系统里这种现象尤其明显因为各轴负载随姿态变化实时改变可能上一个工步还一切正常下一个工步某根轴的惯量直接翻倍。在工程项目里我们一般把惯量变化率定义为[ \delta_J \frac{J_{\max} - J_{\min}}{J_{\min}} ]这个值大于30%之后传统的固定PID基本已经很难兼顾所有工况。如果阻尼系数本身又随温度和润滑状态漂移问题会进一步放大。所以与其不停切换参数表不如直接从设计端解决。1.3 标称控制器面对参数摄动时是怎么“翻车”的假设你在标称点位置环增益为(K_p)速度环等效闭环后整个位置开环传递函数在穿越频率附近的相位裕度有50度左右。当惯量增大时对象增益下降开环穿越频率降低响应变慢当惯量减小时对象增益上升穿越频率提高相位裕度可能下降。最怕的是惯量瞬间减小同时阻尼也跟着下降这时候系统会出现明显的振荡严重时甚至啸叫。反馈信号上的高频噪声、机构谐振、量化误差在参数变化后都会被放大。这时候如果你只是把位置环增益调低一点也许能让系统稳定但代价是跟随精度下降。H∞鲁棒控制的思路是不再祈祷参数不变而是在设计之初就把参数的变化范围当成“模型不确定性”显式地放进控制器求解公式里保证在整个不确定范围内系统都能维持稳定和基本的性能指标。2. H∞鲁棒控制器设计原理与关键选择2.1 为什么不是自适应控制或者自整定谈到参数漂移很多人第一反应是自适应控制或者在线辨识加参数自整定。我并不是否定这些方法但在工程现场在线辨识的准确性、实时性、激励信号对生产的影响都是很大的风险因素。自适应控制对未建模动态和噪声也比较敏感搞不好就“发散”给你看。H∞控制器的思路更偏“保守设计”我们把惯量和阻尼的变化范围定义成一个不确定集合控制器一旦算出来在整个集合内都是有效的。它不需要在线估计参数也不需要频繁切换控制律计算量在实现阶段是固定的。这在做五轴联动或者高速高精度定位时能省掉很多现场调试时间。2.2 混合灵敏度与加权函数的选择H∞控制的核心是把设计指标转换成加权函数的约束。最常用的是混合灵敏度框架目标是找到控制器(K(s))使得闭环系统稳定并且满足[ \left| \begin{bmatrix} W_1(s) S(s) \ W_2(s) T(s) \end{bmatrix} \right|_\infty 1 ]其中(S(s))是灵敏度函数代表从外部干扰和参考输入到跟踪误差的传递函数(T(s))是补灵敏度函数代表从参考输入到系统输出的传递函数。直观一点理解(S)小代表低频跟踪精度高、抗扰动能力强(T)小代表高频段对噪声和未建模动态不敏感。(W_1)和(W_2)就是我们用来“塑形”的加权函数。在伺服位置控制里我的习惯是把(W_1)设成近似积分型低通[ W_1(s) \frac{(s/M \omega_B)}{s \omega_B A} ]其中(A)是低频段对扰动的抑制倍数通常取100以上(M)是灵敏度函数的峰值限制一般取1.2到2之间对应约1.5到6dB的峰值(\omega_B)是期望的系统带宽。(W_2)通常设为高通或常数加权反映模型不确定性的频段和高频噪声。2.3 模型不确定性的规范化表述为什么惯量参数漂移可以放进H∞框架因为参数摄动可以转化为乘性不确定性[ G_\Delta(s) G_0(s) (1 \Delta(s) W_\Delta(s)) ]这里(G_0(s))是标称对象(\Delta(s))是归一化不确定块(W_\Delta(s))是反映各频段不确定性大小的权重。惯量越大、阻尼越小不确定性的权重就越大。拿伺服系统来说你可以在设计前做几次辨识测试测出在不同负载、不同温度下的频响曲线然后用一个权重函数去包住这些频响的差异。这也是H∞和经典回路整形相比最大的优势它不只是看穿越频率和相位裕度而是把整个频带上的不确定性都考虑进去了。3. 模型降阶的“骚操作”从高价控制器回到工程可实现3.1 控制器阶数膨胀的现实问题做完H∞综合之后你往往会得到一个阶数很高的控制器。比如标称对象是5阶加上两个三阶加权函数增广对象就到了11阶解出来的控制器可能也是10阶左右。如果你用的控制器是DSP或者MCU采样周期只有几十到几百微秒10阶连续域控制器转成离散状态方程每周期要做几十上百次乘加运算是完全可以接受的。但如果你的控制周期很紧或者控制器阶数到了十几阶数值积分误差、舍入误差都会变得不可忽略。我做项目时一般把控制器目标阶数压到5阶以内最好3到4阶。这样既保留了H∞设计的频域形状又能在工程上稳定运行。模型降阶不是简单的“删掉几个极点”而是要保证降阶前后的频率响应在关键频段尽量一致。3.2 平衡截断最值得掌握的一种方法常用的模型降阶方法包括平衡截断Balanced Truncation、模态截断Modal Truncation、以及基于Hankel范数的降阶方法。其中平衡截断是最经典也最稳健的。它的基本思路是先对系统做一个相似变换把状态变量转换到“既能控又能观”的平衡坐标系下然后根据Hankel奇异值的大小把对系统输入输出行为影响很小的状态直接截掉。Hankel奇异值可以理解为每个状态在输入到输出的能量传递中占多大比重。奇异值很小的状态截掉它对系统响应的影响很小。用MATLAB的鲁棒控制工具箱一行命令就能完成Gr balred(G, r); % r为目标阶数 % 或者用更精细的频率加权降阶 Gr freqsep(G, wc); % 按频率分段后再降阶但实际使用中我会习惯先做一次频率加权降阶让降阶结果在你要的那个带宽附近更准确。具体做法是设定一个感兴趣的频段比如0.1到100Hz把系统做频率加权后再截断。有些时候直接balred到4阶也能用但你会发现高频段和原系统差得比较多这时候就要调整频率权重。3.3 降阶对控制器鲁棒性的影响模型降阶会改变开环传递函数的幅频和相频特性。降阶后误差在全频段不可能是零所以设计时要留一点裕度。我个人的做法是先设计一个10阶的H∞控制器然后降到5阶甚至4阶再用降阶后的控制器重新跑一遍闭环仿真检查稳定性和性能是否满足指标。很多时候H∞的保守性会允许你微降阶而不明显影响性能。需要注意的是如果降阶后γ值从0.8涨到了1.5以上说明这个降阶太激进了得提高目标阶数或者做频率加权。4. 手把手实操H∞鲁棒控制器完整实现流程4.1 第一步离线辨识标称对象和不确定范围在动手设计之前先把对象的标称模型和不确性范围整明白。我常用的方法是离线做几次转矩激励在电机轴上施加一个幅值合适的阶跃力矩指令记录速度响应曲线。根据稳态速度和上升时间估算等效惯量和粘性阻尼。如果要更准确可以采用正弦扫频给不同频率的力矩正弦指令记录速度幅值和相位直接得到对象的频响数据。实际操作时我会测三组数据空载、半载、满载状态。三组数据之间的频响差异就是你的不确定性区间。如果三组数据的频响在某个频段发散很大说明系统在这个频段对参数变化非常敏感后续加权函数要重点覆盖。4.2 第二步搭建增广对象和加权函数假设辨识出来的标称对象是[ G_0(s) \frac{1200}{s^2 15s} ]这个对象代表折算后惯量为(J1/1200)阻尼(B15/1200)的情况。再假设惯量变化范围为±50%阻尼变化范围为±20%。我一般直接用MATLAB脚本做设计代码如下% 标称对象 J 1/1200; B 15/1200; G0 tf(1, [J B 0]); % 加权函数 M 1.5; % 灵敏度峰值限制 A 100; % 低频扰动抑制 wb 2*pi*15; % 期望带宽15Hz W1 tf([1/M wb], [1 wb*A]); % 高频不确定性权重覆盖惯量变化 W2 tf([0.1 100], [1 1000]); W2 W2 * 0.8; % 混合灵敏度综合 [K,~,gamma] hinfsyn( augw(G0, W1, W2, []), 1, 1 );这里augw函数把对象和加权函数整合成增广对象hinfsyn解出最优控制器。如果gamma略大于1可以适当放宽加权函数或降低期望带宽。我通常希望gamma在0.7到1之间这样闭环设计更保守但抗参数漂移更强。4.3 第三步控制器降阶和离散化得到高阶控制器后先把连续域控制器降阶到4阶左右Kred balred(K, 4);然后互相对比阶跃响应和开环Bode图确认降阶后没有明显变差。最后用c2d转成离散控制器采样时间选择1ms或者根据驱动器实际周期来定Kd c2d(Kred, 1e-3, tustin);转成差分方程后下载到控制板。这一步需要注意直接离散化会引入相位延迟如果控制器本身相位裕度就不太够离散化后可能会不稳定。所以我会在离散化前先检查控制器在奈奎斯特频率附近的增益如果增益比较大说明高频段太活跃不适合直接用。4.4 第四步用VSM惯量系数阻尼验证做鲁棒性测试设计完成不代表万事大吉。我习惯搭建一个虚拟伺服模型VSM环境把惯量系数和阻尼系数在仿真里连续拉偏验证控制器的鲁棒性。具体操作是在仿真模型里把(J)从标称值的50%逐步调到150%把(B)从80%调到120%在每个点都给一个阶跃位置指令记录超调量和稳定时间。让我给你看一组典型实验结果假设标称设计时带宽选的15Hz惯量变化阻尼变化超调量稳定时间结论100%100%4.8%62ms标称点正常150%100%6.2%78ms轻微变慢但仍稳定50%100%6.9%54ms响应更快稳定150%80%8.5%92ms阻尼降低仍有裕度50%120%5.1%57ms阻尼增大表现良好如果你的设计在这个表格中的任何一组出现超过20%超调或者明显振荡要么把控制器带宽调低一点要么把加权函数里的(\omega_B)向低频移。现场调试的时候我通常会把这组拉偏测试做成自动化脚本每改一次权重跑一遍效率高很多。4.5 第五步现场参数整定与微调虽然H∞控制器本身带鲁棒性但现场还是有一些变量需要考虑比如摩擦力矩、反向间隙、传感器标定误差。H∞不是万能的它主要解决的是线性时变参数漂移对于强非线性摩擦还需要配合前馈补偿。我的习惯是现场先用H∞控制器跑一个空载阶跃确认系统稳定后再在低速匀速段测一下跟踪误差。如果误差超标先检查是否摩擦力矩过大有需要就加一个摩擦前馈模型。然后逐步加载看看响应变化趋势是否和仿真一致。5. 常见问题与排查技巧实录5.1 问题速查表这一节我直接整理成速查表都是实际调试中容易踩的坑现象可能原因排查思路解决办法控制器刚上电就啸叫加权函数高频段设计太强查看开环Bode在奈奎斯特频率附近增益对(W_2)高频增益做限制或降低控制器高频增益参数拉偏后响应振荡带宽设计过高相位裕度不足查看灵敏度峰值是否超过6dB降低(\omega_B)或把(M)调大一些降阶后稳定性变差降阶误差在穿越频率附近过大对比降阶前后开环Bode改用频率加权降阶或提高目标阶数γ值一直大于1加权指标互相矛盾检查(W_1)和(W_2)是否有重叠频段调整(\omega_B)设计或降低扰动抑制倍数离散化后系统发散连续域控制器带宽接近奈奎斯特频率检查离散化前后频响差异降低采样周期或控制器加低通滤波实际误差比仿真大摩擦力矩、量化误差等非线性因素对比低速跟踪误差曲线增加摩擦前馈必要时加积分项5.2 我踩过的两个坑第一个坑是加权函数选择太贪心。我早期做H∞控制器设计时希望低频段对扰动抑制尽量强就把(W_1)的低频增益设得非常大。结果γ值一直不下来算出来的控制器在低频段增益特别高现场一上电零速附近就开始抖动。后来才明白H∞问题是有物理约束的你把低频指标定得再高Bode积分定理决定了灵敏度函数在全频段的总面积有限强行压低低频段必然导致某个频段响应峰值超高。后来我把(M)从1.2放宽到1.6问题立刻缓解。第二个坑是模型降阶后没有重新验证鲁棒性。有一次设计了一个6阶控制器降到3阶后普通阶跃响应看起来一模一样结果做惯量拉偏测试时在负载增加40%的情况下系统出现了持续小幅振荡。后来仔细对比了降阶前后的回路传递函数发现降阶误差正好集中在穿越频率附近把原本留给参数变化的相位裕度吃掉了。从那以后不管时间多紧降阶后一定要重跑一遍不确定性扫描。5.3 参数辨识数据不准确时的应对有些现场没有条件做精确扫频辨识出来的(J)和(B)可能偏差很大。这种情况下我建议把不确定范围设得保守一点宁可让H∞设计看起来“笨”一点也不能让它“脆”。比如你估算惯量可能有±30%误差实际建模时按±50%来设计权重。虽然这样设计出来的系统响应速度会变慢一些但换来的是一整年的设备稳定性。6. 这个工程方案的扩展思路H∞鲁棒控制器和模型降阶这套组合不仅适用于伺服位置控制。你如果把对象模型换成五轴加工中心的进给轴耦合模型或者机械臂关节的变惯量负载模型设计流程完全一致只需要调整加权函数和目标阶数。对于带弹性负载的机械系统可以在对象模型里增加一个谐振峰然后在(W_2)里把不确定性的频域范围扩展到这个谐振峰附近。这样控制器会在谐振频段自动降低增益从而压低振动。另外如果你做的是多轴联动轴与轴之间的运动耦合也会带来等效惯量变化。这时可以先把单轴的H∞控制器设计好然后用一个解耦前馈把轴间耦合的影响降到最低。如果耦合太强无法忽略就需要做多变量H∞设计对象从标量变成矩阵加权函数也要变成频域矩阵形式。那套方法计算量更大但原理和单轴是一样的。最后再分享一个小技巧H∞控制器设计完之后别急着把它落地到代码里。先用频率响应对比一下你的原PID控制器和新控制器之间的区别尤其是在低频跟踪和高频噪声抑制这两个维度。这种对比往往能帮你发现原PID在设计上的盲区。比如我见过很多现场PID参数为了压低频误差把积分项开得很大结果高频噪声被放大电机发热严重。H∞设计会主动告诉你在这个带宽以下能做到什么程度在这个带宽以上必须让增益滚下来。这是经典PID调参方法给不了你的全局视角。
返回列表