第12章
非线性与实际问题
学完这一章你应该能
- 认出实际系统中常见的非线性:饱和、死区、间隙、摩擦、继电、量化,知道它们会造成什么现象;
- 理解极限环,会分析开关式(继电)控制,知道回差的作用;
- 用描述函数法预测极限环的幅值和频率,理解继电反馈自整定的原理;
- 针对每种非线性选择工程上的对策;
- 理解增益调度:工作点变化很大时怎么办。
前置知识:第5章 奈氏判据、第9章 PID 工程实践(抗饱和、继电自整定)、第2章 线性化。
前面的理论都建立在「系统是线性的」这个前提上。真实系统没有严格线性的:电机电压有上限,齿轮有间隙,传感器有分辨率,阀门有死区。大多数时候线性化够用,但有些现象只能用非线性来解释:明明参数调得很稳,却在设定值附近一直小幅振荡;小信号时好好的,大幅改变设定值时就超调很大。这一章讲怎样认出它们、怎样对付它们。
12.1 常见的非线性
| 非线性 | 特性 | 在哪里出现 | 典型后果 |
|---|---|---|---|
| 饱和 | 输入大到一定程度,输出不再增加 | 电机电压/电流上限、阀门全开、加热功率 100% | 积分饱和、大信号时超调大、响应变慢 |
| 死区 | 输入很小时没有输出 | 阀门、液压、电机启动电压、某些驱动器 | 小误差消不掉;配合积分会引起来回振荡 |
| 间隙(回差) | 反向运动时要先走过一段空程 | 齿轮、丝杠、联轴器 | 位置控制在设定值附近来回「找」,产生极限环 |
| 摩擦 | 静摩擦大于动摩擦;低速时摩擦力突变 | 导轨、轴承、密封件 | 低速爬行(走走停停)、定位时来回振荡 |
| 继电(开关) | 输出只有开、关两种状态 | 温控器、继电器、电磁阀、开关电源 | 输出在设定值附近持续振荡 |
| 量化 | 信号只能取离散的值 | 编码器、ADC、DAC | 小幅抖动;对量化信号做差分得到的速度很「毛糙」 |
线性系统的性质(叠加原理、响应形状和输入幅值无关、稳定性只取决于系统本身)对这些系统都不再成立。例如有饱和的系统,小阶跃时超调 5%,大阶跃时可能超调 50%。
12.2 相平面与极限环
二阶系统的状态可以用一个点 \((x,\dot x)\) 表示,系统运动时这个点在平面上画出一条曲线,这个平面叫相平面。稳定的线性系统,所有曲线最后都收敛到原点;不稳定的则发散。
非线性系统可能出现第三种情况:曲线最后收敛到一条闭合曲线上,对应一个幅值和频率都固定的持续振荡,而且基本不受初始条件影响。这叫极限环。线性系统里的等幅振荡只是临界情况,参数稍微变化就会消失或发散;极限环却是稳定存在的。
实际中遇到的「怎么调都在设定值附近小幅振荡」,多半就是极限环,原因通常是死区、间隙、静摩擦或量化,而不是增益太大。
12.3 开关控制与回差
最简单的控制方式:温度低于设定值就开加热,高于就关。家里的电热水器、冰箱、空调温控器都是这样。它不需要调参数,但输出一定在设定值附近振荡(极限环)。
如果严格在设定值处切换,测量噪声会让继电器在设定值附近疯狂地来回开关,很快烧坏触点。所以要加回差(滞环):低于 \(T_{set}-h\) 才开,高于 \(T_{set}+h\) 才关。
例 房间:时间常数 600 s,加热器全开时最终能比室外高 20 °C,加热有 30 s 延迟,室外 15 °C,设定 21 °C。仿真结果:
| 回差 | 温度范围 | 摆幅 | 开关周期 |
|---|---|---|---|
| 0 | 20.70~21.69 °C | 0.99 °C | 2.3 min |
| ±0.25 °C | 20.47~21.93 °C | 1.46 °C | 3.4 min |
| ±0.5 °C | 20.23~22.17 °C | 1.94 °C | 4.5 min |
| ±1 °C | 19.75~22.64 °C | 2.89 °C | 6.8 min |
- 回差越大,开关越少(继电器寿命长),但温度摆幅越大;
- 即使回差为 0,延迟也会让温度冲出设定值一段(这里最低低 0.3 °C、最高高 0.7 °C)。没有延迟、回差 ±0.5 时,温度正好在 20.5~21.5 °C 之间;
- 平均占空比约 30%,正好等于维持 21 °C 需要的平均功率 \((21-15)/20\)。
想要更平稳:改成连续控制,用 PI 算出 0~100% 的功率,再用时间比例输出(慢速 PWM)驱动继电器或固态继电器,例如每 2 s 为一个周期,PI 输出 30% 就开 0.6 s、关 1.4 s。只要周期远小于对象的时间常数,效果就和连续调节功率差不多。
12.4 描述函数法
怎样预测极限环的幅值和频率?描述函数法的思路:假设非线性环节的输入是正弦信号 \(A\sin\omega t\),它的输出虽然不是正弦,但可以只保留基波(一次谐波),因为后面的线性部分通常是低通的,会把高次谐波滤掉。基波和输入的幅值比(复数)就叫描述函数 \(N(A)\),它和幅值有关,和频率无关。
| 非线性 | 描述函数 \(N(A)\) |
|---|---|
| 理想继电器(输出 \(\pm M\)) | \(\dfrac{4M}{\pi A}\) |
| 饱和(线性段斜率 \(k\),在 \(\pm a\) 处饱和),\(A>a\) | \(\dfrac{2k}{\pi}\left[\arcsin\dfrac aA+\dfrac aA\sqrt{1-\left(\dfrac aA\right)^2}\right]\) |
| 死区(宽度 \(\pm\delta\),斜率 \(k\)),\(A>\delta\) | \(k-\dfrac{2k}{\pi}\left[\arcsin\dfrac\delta A+\dfrac\delta A\sqrt{1-\left(\dfrac\delta A\right)^2}\right]\) |
把非线性环节当成一个「增益随幅值变化」的环节 \(N(A)\),套用奈氏判据:闭环特征方程 \(1+N(A)G(j\omega)=0\),即
在奈氏图上画出 \(G(j\omega)\) 曲线和 \(-1/N(A)\) 曲线,两条曲线的交点就是可能的极限环:交点处的 \(\omega\) 是振荡频率,\(A\) 是振荡幅值。
例:继电器 + \(\dfrac{1}{(s+1)^3}\)。继电器的 \(-1/N(A)=-\dfrac{\pi A}{4M}\) 是负实轴。\(G(j\omega)\) 与负实轴的交点在 \(\omega=\sqrt3\),此时 \(|G|=1/8\),所以
仿真得到的幅值 0.163、周期 3.68 s,预测误差约 2%。反过来,测出振荡的幅值 \(a\),就能算出线性部分在该频率处的增益:\(|G|=\dfrac{\pi a}{4M}\),临界增益 \(K_u=\dfrac{1}{|G|}=\dfrac{4M}{\pi a}\)。这就是第9章继电反馈自整定的原理。
描述函数法是近似方法:线性部分的低通特性越好(阶数越高),预测越准。它也能分析饱和、死区、间隙引起的极限环,以及判断极限环是否稳定(曲线交点处,\(-1/N(A)\) 随 \(A\) 增大的方向是否从「被包围」走向「不被包围」)。
12.5 各种非线性的工程对策
| 问题 | 对策 |
|---|---|
| 饱和 | 抗积分饱和(第9章);设定值斜坡,避免大阶跃;执行器选型留余量;状态反馈时极点不要放得太远 |
| 死区 | 死区补偿:控制量不为零时,直接加上死区宽度那么大的偏置;减弱积分,或在误差很小时停止积分(积分分离) |
| 间隙 | 机械上消隙(预紧、双齿轮);电机端和负载端各装一个编码器(双反馈);降低位置环增益;定位时总从同一个方向接近目标 |
| 摩擦 | 摩擦前馈:按速度方向加上库仑摩擦力 \(F_c\,\mathrm{sign}(v)\),再加 \(bv\);提高速度环增益;必要时加高频小幅抖动(dither) |
| 量化 | 提高分辨率;速度不要直接对编码器计数做差分,用测周法、滤波或观测器(第11章)估计;在设定值附近允许一个小误差带 |
| 继电输出 | 加回差;改成 PI + 时间比例输出 |
判断「小幅振荡是不是非线性引起的」:把增益减半,如果振荡幅度变化不大、周期变长,多半是死区、间隙、摩擦造成的极限环;如果振荡明显减弱或消失,才是增益太大(线性意义上的稳定裕度不足)。
12.6 增益调度
线性化模型的参数随工作点变化(第2章)。工作点变化范围很大时,一组 PID 参数可能在一个工作点很好、在另一个工作点振荡或太慢。增益调度:在几个典型工作点分别建模、整定,运行时按当前工作点(或一个能反映工作点的量)切换或插值参数。
例:水箱液位。出水流量 \(Q_{out}=k\sqrt H\),水箱截面积 \(A_t\)。在液位 \(H_0\) 附近线性化:
液位越高,增益和时间常数都越大。用 SIMC 整定(假设延迟 \(L\)、目标时间常数 \(\tau_c\)):\(K_p=\dfrac{\tau}{K(\tau_c+L)}=\dfrac{A_t}{\tau_c+L}\) 与液位无关,而 \(T_i=\min(\tau,4(\tau_c+L))\) 随液位变化。所以这个系统只需要按液位调度积分时间。
其他常见例子:飞机按速度和高度调度增益;机械臂按负载和姿态调度;电机按转速调度(弱磁区)。
本章小结
- 饱和、死区、间隙、摩擦、继电、量化是最常见的非线性;它们会造成极限环、大信号时性能变差等线性理论解释不了的现象。
- 极限环是稳定存在的自激振荡;开关控制一定有极限环,回差在开关次数和摆幅之间折中。
- 描述函数法:\(G(j\omega)=-1/N(A)\) 的交点给出极限环的频率和幅值;继电器 \(N(A)=4M/(\pi A)\),这正是继电反馈自整定的原理。
- 每种非线性都有对应的工程对策;工作点变化大时用增益调度。
练习
1. 一台位置控制的机床,在目标位置附近一直以很小的幅度来回振荡,把 \(K_p\) 减半后振荡幅度几乎不变、只是变慢了。最可能的原因是什么?
间隙或静摩擦造成的极限环,而不是增益太大。可以检查机械间隙,加摩擦补偿,或者在误差很小时减弱积分作用。
2. 继电反馈测试:继电器输出 ±5(单位为控制量),输出振荡幅值 0.4,周期 12 s。估算临界增益和临界周期。
\(K_u=\dfrac{4\times5}{\pi\times0.4}\approx15.9\),\(T_u=12\) s。
3. 一个只能开关的加热器,希望温度波动小于 ±0.3 °C,同时继电器每小时最多动作 60 次,可能做到吗?怎么做?
取决于对象的时间常数和延迟。本章例子里即使回差为 0,延迟本身就让摆幅接近 1 °C,开关控制做不到。可以改用 PI + 时间比例输出(比如 10 s 一个周期,每小时 360 次切换,对固态继电器没问题;机械继电器则要用更长的周期),或者减小加热功率(加热器功率越大,同样延迟下冲得越多)。
4. 为什么说「有饱和的系统,大阶跃和小阶跃的响应形状不同」?这和线性系统有什么区别?
小阶跃时控制量不会碰到限幅,系统按线性方式响应;大阶跃时控制量顶到限幅,相当于开环以最大能力推动,响应速度受限,积分还可能饱和,超调会大得多。线性系统满足叠加原理,响应形状与输入幅值无关,只是按比例放大。