第5章基于扰动观测器的PID和谐振控制器 5.1引言 第1~4章讨论了具有明确的比例控制、积分控制、微分控制功能的PID控制系统。由于积分控制在控制器结构中嵌入了临界稳定模式,当控制信号达到饱和限值时会使积分器饱和,因此在PID控制系统实现时,需要加以改进,以克服这一问题。谐振控制器也面临类似问题,而且情况更糟。 本章从与前几章不同的角度研究PID控制器和谐振控制器的设计。通过扰动估计引入积分模态和谐振模态,使设计变得更简单。更重要的是,PID和谐振控制器的实现可自然地从具有抗饱和机制的设计中获得。这种改进对谐振控制器特别重要,因为对于实际应用而言,抗饱和机制实现的简单性至关重要。 5.2基于扰动观测器的PI控制器 本节介绍扰动估计的思想,这会产生一个等价的PI控制系统。本节使用的数学模型为一阶模型,若系统具有更高阶传递函数,则需要进行近似。 5.2.1带有控制的扰动估计 假设存在一个恒定的未知输入扰动d(t),那么用于描述一阶系统的微分方程可表示为: y·(t)=-ay(t)+bu(t)+d(t)(5.1) 其中a和b为模型系数,u(t)和y(t)为输入和输出变量。图5.1给出了基于估计器设计PI控制器的数学模型。 图5.1基于扰动观测器的PI控制器系统框图 假设d(t)为常数,有: d·(t)=0(5.2) 指定两个期望的闭环极点-α1和-α2,其中α1>0,α2>0。所提出的设计中,α1的取值主要影响比例增益K1,α2主要影响积分增益K2。 1. 比例控制器K1的选择 K1的选择很简单。首先定义: u~(t)=u(t)+d(t)(5.3) 式(5.1)变成: y·(t)=-ay(t)+bu~(t)(5.4) 加上比例控制: u~(t)=-K1y(t) 可得闭环系统为: y·(t)=-a+bK1y(t)(5.5) 使实际的闭环极点-(a+bK1)与期望的闭环极点-α1相等,求得比例增益K1为: K1=α1-ab(5.6) 2. 稳态误差补偿 大家知道,对于一个恒定的给定信号或扰动信号,比例控制会使闭环系统存在稳态误差。为了消除稳态误差,需要在控制系统中引入积分作用。这里,可估计稳态误差,并在控制信号中进行补偿。为此,从式(5.1)中提取扰动信息: bd(t)=y·(t)+ay(t)-bu(t)(5.7) 可以尝试使用式(5.7)直接计算未知扰动d(t),并在控制信号中对其进行补偿。然而,由于模型参数的不确定性和实际应用中的其他缺陷,很容易验证该方法不能产生所需的控制信号。我们估计扰动信号d(t)来对误差进行补偿。 令d^(t)表示扰动信号的估计。给定和估计值之间的误差为: ò(t)=bd(t)-bd^(t)= y·(t)+ay(t)-bu(t)-bd^(t)(5.8) 将误差ε(t)以增益K2加权,并假设d·(t)=0,构造估计值d^(t)为: dd^(t)dt=K2y·(t)+ay(t)-bu(t)-bd^(t)(5.9) 这就是所谓的观测器方程。选择增益K2,使误差d^(t)=d(t)-d^(t)收敛到零。 注意到: dd~(t)dt=-K2bd~(t)(5.10) 然后,选择参数K2使得-K2b=-α2,有: K2=α2b 因此, dd~(t)dt=-α2d~(t)(5.11) 对任意给定的初始条件|d^(0)|<∞和α2>0,随着t→∞,估计误差d~(t)→0。收敛速度取决于参数α2,α2越大,估计误差收敛到零的速度越快。 现在,为了计算具有稳态误差补偿的控制信号,将式(5.3)中的未知扰动d(t)替换为由式(5.9)得出的估计值d^(t),控制信号为: u(t)=-K1y(t)-d^(t)(5.12) 3. 闭环极点 为了验证控制系统的闭环极点确实是-α1和-α2,将式(5.12)代入式(5.1),得: y·(t)=-a+bK1y(t)+bd~(t)=-α1y(t)+bd~(t)(5.13) 其中d~(t)=d(t)-d^(t)。结合式(5.11),写出闭环系统方程: dy(t)dt dd~(t)dt=-α1b 0-α2Ay(t) d~(t)(5.14) 由于A为上三角矩阵,因此可以简单地将闭环极点(或特征值)作为特征方程的解来计算: det(sI-A)=(s+α1)(s+α2)=0 其中,I为维数2×2的单位矩阵,特征方程的解为-α1和-α2。 4. 实现过程 由于估计方程(5.9)包含输出信号y(t)的微分,直接离散化需要采样时刻ti的信息y(ti+1),这无法得到。 定义一个变量z~(t)为: z~(t)=d^(t)-K2y(t)(5.15) 将该变量代入估计式(5.9),得: dz^(t)dt=-K2bz^(t)-K22b-K2ay(t)-K2bu(t) =-α2z^(t)-K2α2-ay(t)-α2u(t) (5.16) 如果给定信号r(t)≠0,则以y(t)-r(t)替换y(t)来修改式(5.15)和式(5.16)。此外,如果控制信号u(t)达到饱和限值,则饱和信息通过式(5.16)在扰动的估计d^(t)中更新。图5.2给出了使用扰动观测器的控制系统框图。为了离散化,在采样时刻ti处,导数dz^(t)dt使用一阶近似,为: dz^(t)dt≈z^(ti+1)-z^(ti)Δt 图5.2使用扰动观测器的控制系统框图 那么: z^(ti+1)=z^(ti)- α2z^(ti)+α2α2-aby(ti)-r(ti)+α2u(ti)Δt(5.17) 控制信号的计算过程总结如下。选择闭环运行开始时的初始条件z^(t0),如果没有其他可用信息,可取为零。利用采样时刻ti的给定信号r(ti)和输出信号y(ti),递归计算控制信号u(ti),控制信号限制在umin和umax之间。 (1) 计算采样时刻ti的扰动信号估计值,为: d^(ti)=z^(ti)+K2y(ti)-r(ti) (2) 用下式计算控制信号: u(ti)=-K1y(ti)-r(ti)-d^(ti) (3) 对控制信号加以饱和限制: u(ti)=uminif u(ti)<umin u(ti)if umin≤u(ti)≤umax umaxif u(ti)>umax (4) 更新下一个采样时刻的扰动估计d^(ti+1): z^(ti+1)=z^(ti)- α2z^(ti)+α2α2-aby(ti)-r(ti)+α2u(ti)Δt (5) 输出控制信号u(ti)加以实现。当下一个采样周期到来时,对输出进行新的测量,并从步骤(1)开始重复补偿过程。 5.2.2PI控制器的等价 为了计算等价PI控制器,拉氏变换z(s)表示为: z^(s)=-K2α2-a(s+α2)Y(s)-α2(s+α2)U(s) 其中K2=α2/b,D^(s)的拉氏变换为: D^(s)=z^(s)+K2Y(s)=K2(s+a)s+α2Y(s)-α2s+α2U(s)(5.18) 控制信号的拉氏变换U(s)变成: U(s)=-K1Y(s)-K2(s+a)s+α2Y(s)+α2s+α2U(s) 即 U(s)=-K1(s+α2)s+K2s+K2α2sY(s)(5.19) 由此可知,等效PI控制器为: C(s)=K1(s+α2)s+K2s+K2α2s =K1+K2+K1α2+K2as (5.20) PI控制器参数为: Kc=K1+K2 Kcτ1=K1α2+K2a 其中K1=(α1-a)/b,K2=α2/b。可以验证闭环极点位于-α1和-α2处,这正是设计指标。 定义系数c1=Kc,c0=KcτI,饱和限制器为∑,图5.3给出了具有抗饱和机制的PI控制器的传递函数实现,该控制器根据给定信号R(s)和输出信号Y(s)计算控制信号U(s)。 图5.3基于估计器的PI控制器的传递函数实现(∑为饱和限制) 5.2.3通过估计实现PI控制器的MATLAB教程 在Simulink环境下对估计的嵌入式PI控制器进行仿真研究。 教程5.1本教程旨在说明如何实时实现基于估计器的PI控制算法。教程的核心是产生一个MATLAB内嵌函数,该函数可用于Simulink仿真,也可以在MATLAB中实时实现。MATLAB内嵌函数完成了控制信号的一个计算周期。对于每个采样周期,将重复相同的计算过程。 步骤 (1) 创建一个新的Simulink文件,命名为PIEstimate.slx。 (2) 在Simulink“用户定义函数”目录,找到MATLAB内嵌函数图标,并将其复制到PIEstim模型中。 (3) 单击内嵌函数图标,定义PIEstim模型的输入变量和输出变量,使内嵌函数具有如下形式: function uCur = PIEstim(r,y,K1,K2,alpha2,a,deltat,umin,umax) 其中uCur为计算出的采样时刻tk控制信号,输入变量中的前两个元素(r和y)为采样时刻ti给定信号和输出信号的测量值,K1和K2是控制器增益和估计器增益,deltat是采样间隔,umin和umax为控制信号uCur的下限和上限。 (4) 在内嵌功能顶部的“工具”中找到“模型资源管理器”。打开“模型资源管理器”,“更新”方法选“离散”,在“采样时间”中输入deltat。选择“支持”维数可变数组; 整数溢出选择“饱和”; 选择“定点”。单击“应用”保存更改。 (5) 编辑输入和输出数据端口,使内嵌函数知道哪些输入是实时变量,哪些是参数。该编辑任务使用“模型资源管理器”完成。  单击r,“示波器”选择为“输入”,“端口”指定为“1”,“大小”选为“-1”,“复杂度”选为“继承”,“类型”选为“继承: 与Simulink相同”。对输出信号y重复相同的编辑过程。  内嵌函数的其余5个输入是计算所需的参数。单击K1,在“示波器”上选择“参数”,依次单击“可调”→“应用”保存更改。对其余参数重复相同的编辑过程。  编辑内嵌函数的“输出端口”,单击uCur,在“示波器”上选择为“输出”,“端口”选为“1”,“大小”选为“-1”,“采样模型”选为“基于样本”,“类型”选为“继承: 与Simulink相同”,然后单击“应用”按钮保存更改。 (6) 程序将声明每次迭代存储在内嵌函数中的变量,以获取它们的维数和初始值。zhat为采样时刻ti时的扰动估计,它需要一个初始值,赋值为零。在文件中输入以下程序: persistent zhat if isempty(zhat) zhat=0; end (7) 更新z^(ti+1)的估计。在文件中输入以下程序: dhat=zhat+K2*(y-r); (8) 结合比例控制和扰动估计更新控制信号。在文件中输入以下程序: Cur=-K1*(y-r)-dhat; (9) 使用抗饱和机制实现饱和限制。在文件中输入以下程序: if (uCur>umax) uCur=umax; end if (uCurumax) uCur=umax;end if (uCurumax) uCur=umax;end if (uCur