极点配置
极点配置(Pole Placement) 或 完全状态反馈 是控制理论中的一种设计方法,用于通过 适当选择控制器增益,使得闭环系统的极点(也即系统特征方程的根)位于预定的位置,从而达到所需的动态性能和稳定性要求。极点的位置直接影响系统的响应特性,如稳定性、速度、阻尼等。
现在,极点配置本身在工业中并没有得到广泛的应用。你可能会更常使用其他方法,例如 LQR 或 H ∞ H_\infin H∞,但是极点配置值得花一些时间,因为它能让你更好地理解 使用状态空间方程进行反馈控制 的一般方法,这是进入其他方法的垫脚石。
从 PID 到极点配置
首先,我们有一个具有输入 u u u 和输出 y y y 的装置(Plant),目标是 开发一个反馈控制系统,将输出驱动到某个期望值。
你可能熟悉的一种方法是将输出与参考信号进行比较以获得控制误差,然后你可以开发一个控制器,该控制器使用该误差来生成输入到装置的信号,目标是将误差驱动到零。
但对于极点配置,我们将以不同的方式解决这个问题,我们 将反馈 状态向量中每个状态变量的值,而不是反馈输出 y y y。
现在,我们要 假设我们知道每个状态的值,即使它不一定是输出 y y y 的一部分,然后 取状态向量并将其乘以一个由一堆不同增益值组成的矩阵 K K K,并 将结果从缩放的参考信号 K r K_r Kr 中减去,并将此结果直接输入到我们的装置中作为输入。
这里没有像在反馈结构框图中标记为控制器的块,图中绿圈整个部分都是控制器。
通过极点配置 可以 计算适当的增益矩阵 K K K 以 确保系统稳定性,参考上的缩放项用于确保稳态误差性能在可接受范围内。
状态方程中的第一项 A x Ax Ax 捕获线性系统的动态特性,第二项是 系统如何响应输入,但系统中的能量如何存储和移动是由 A x Ax Ax 项捕获的,所以你可能会认为在控制器设计方面, A A A 矩阵有一些特殊之处。
是的!反馈控制器都必须 修改 A A A 矩阵才能改变系统的动态特性,尤其是在稳定性方面,
A
A
A 矩阵的特征值是系统的极点,极点的位置决定了线性系统的稳定性,这是极点配置的关键,通过移动极点或闭环
A
A
A 矩阵的特征值来生成所需的闭环稳定性。
举例说明特征值如何影响系统
看下面这个例子, A A A 矩阵转换为使用另一组状态变量来描述系统的矩阵,此转换是使用 变换矩阵 完成的,其列是 A A A 矩阵的特征向量。
转换后我们得到的是一个修改后的
A
A
A 矩阵,由对角线上的复数特征值和其他所有位置的零组成,现在 绿色箭头所指的这两个模型代表完全相同的系统,它们具有 相同的特征值和相同的动态,只是第二个模型使用一组彼此独立变化的状态变量来描述。
当 A A A 矩阵以对角形式写出时,很容易看出我们剩下的是 一组一阶微分方程,其中每个状态的导数仅受该状态的影响,而不受其他任何影响。
很酷的是,像这样的微分方程的解的形式是 Z = C e λ T Z=C e^{\lambda T} Z=CeλT,其中 λ \lambda λ 是给定状态变量的特征值。
看几个不同的 λ \lambda λ 值,这样你就可以直观地看到 能量是如何根据复平面内特征值的位置变化的,
- 如果 λ \lambda λ 是负实数,那么这是一个稳定的特征值,因为解是 e λ t → 0 e^{\lambda t} \rightarrow 0 eλt→0 当 t → ∞ t \rightarrow \infin t→∞,任何初始能量都会随时间消散;
- 但如果 λ \lambda λ 是正数,那么它是不稳定的,因为能量只会随时间增长;
- 如果有一对 虚数特征值,那么这种模式下的能量将 振荡,因为 e e e 的虚数部分会产生 s i n sin sin 和 c o s cos cos;
- 而实数和虚数的任意组合都会产生振荡和指数能量耗散。
极点配置如何移动
现在我们可以陈述我们要解决的问题了。如果对象的特征值位于复平面中不理想的位置,那么我们可以使用极点配置将它们移动到其他地方。
当然,如果它们位于右半平面,这是理想的,因为它们不稳定,但非理想位置也可能意味着存在振荡,你想消除它,或者只是加速或减缓特定模式下的能量耗散。
我们现在可以讨论极点配置如何移动特征值。记住我们一开始画的控制器结构,这会导致输入 u = r K r − K x u= rK_r - K x u=rKr−Kx,其中 r K r r K_r rKr 是缩放参考值, K x Kx Kx 是状态向量,将其反馈 x x x 乘以增益矩阵 K K K。
现在,如果 将此控制输入代入状态方程,将 闭合循环,得到以下状态方程,注意 A A A 和 − B k -Bk −Bk 都作用于状态向量,因此我们可以将它们组合起来,得到一个修改后的 A A A 矩阵,这是 闭环 A A A 矩阵,可以通过 选择适当的 K K K 来移动特征值。
二阶系统示例
对于简单的系统,这很容易手动完成,让我们尝试一个具有单个输入的二阶系统的示例,
我们可以通过将 det ( A − λ I ) = 0 \text{det} (A - \lambda I) = 0 det(A−λI)=0 来找到特征值,然后求解 λ \lambda λ,它们分别位于 − 2 -2 −2 和 + 1 +1 +1 处,由于存在正的实特征值,其中一个模式将爆炸到无穷大,因此整个 系统是不稳定的。
让我们使用极点配置设计一个反馈控制器,通过将不稳定的极点移动到左半平面来稳定该系统,我们的闭环 A A A 矩阵是 A − B k A-Bk A−Bk,增益矩阵 K K K 是 1 × 2 1\times 2 1×2,因为有一个输出 两个状态。
对得到的新 A − B k A-Bk A−Bk 进行,像以前一样求解特征值,得到这个特征方程,它是两个增益值的函数。现在 假设我们 希望闭环极点位于 − 1 -1 −1 和 − 2 -2 −2,这样特征方程为 λ 2 + 3 λ + 2 = 0 \lambda^2 + 3 \lambda + 2 = 0 λ2+3λ+2=0,此时很容易找到合适的 k 1 k_1 k1 和 k 2 k_2 k2,使这两个方程相等,我们 只需将系数设置为相等并求解,得到 k 1 = 2 k_1 = 2 k1=2 和 k 2 = 1 k_2 = 1 k2=1。
就是这样,如果我们将这两个增益放在该系统的状态反馈路径中,它将在特征值位于 − 1 -1 −1 和 − 2 -2 −2 时保持稳定。
对于具有两个以上状态的系统,所涉及的数学运算开始变得难以理解。想法一样的,只是求解行列式变得不切实际,但在 MATLAB 几乎只用一个命令。
% Define state matrices
A = [0 1; 2 -1];
B = [1; 0];
C = [1 0];
D = 0;
% Create state space object
sys = ss(A, B, C, D);
% Check open loop eigenvalues
E = eig(A);
% Desired closed loop eigenvalues
P = [-2 -1];
% Solve for K using pole placement
K = place(A, B, P);
% Check for closed loop eigenvalues
Acl = A - B*K;
Ecl = eig(Acl);
% Create closed loop system
syscl = ss(Acl, B, C, D);
% Check step response
step(sys)
% Create colsed loop system
syscl = ss(Acl, B, C, D);
% Check step response
step(syscl)
可以预见的是,开环系统的阶跃是不稳定的,
而 闭环系统的阶跃响应看起来要好得多,但它并不完美,而不是像我们预期的那样上升到 1,预计稳态输出仅为 0.5,这最终就是缩放项发挥作用的地方。