我很熟悉使用PID在只有一个输出和一个错误信号的情况下执行闭环控制,以了解输出如何达到所需的设定点。多个控制回路,每个回路有一个输出和一个误差信号,但是回路不是完全独立的。特别是,当一个回路增加其执行器信号时,这会改变系统中其他回路的输出影响。

举一个具体的例子,设想一个与电阻串联的电压源,施加一个六个并联可调电阻组成的系统两端的电压。我们可以测量通过每个电阻器的电流,并希望通过调节电阻来独立控制每个电阻器的电流。当然,这里的技巧是,当您调节一个电阻器的电阻时,它会改变并联组的整体电阻,这意味着它会改变分压器与电压源电阻的压降,从而改变流经其他电阻器的电流现在,显然,我们已经有了该系统的理想模型,因此我们可以通过求解一组线性方程式来预测应同时对所有电阻器使用的电阻值。但是,闭环控制的全部目的是我们要纠正偏离理想模型的系统中的各种未知错误/偏差。那么问题是:当您拥有具有这种交叉耦合的模型时,实现闭环控制的一种好方法是什么?

#1 楼

通常,对于多输入多输出(MIMO)系统,控制工程师会使用状态反馈控制器。这种样式的控制器利用系统的状态空间模型,通常采用以下形式:

$$
\ dot {x} = \ mbox {A} x + \ mbox {B} u \\
y = \ mbox {C} x + \ mbox {D} u \\
$$

其中$ x $是状态向量,$ u $是输入的向量,$ y $是输出的向量,状态的时间导数$ \ dot {x} $显示状态如何随时间演变,由状态$ \ mbox { A} $,然后输入$ \ mbox {B} $。输出也由状态和输入之间的交互作用确定,但是输出可以是任何组合,因此输出状态和输入矩阵是不同的-$ \ mbox {C} $和$ \ mbox {D} $。

我不会在状态反馈控制方面做大量的介绍,但是总的来说,矩阵$ \ mbox {A} \ rightarrow \ mbox {D} $“ map”或关联一个特定状态或输入到另一个状态或输入。例如,如果要对不相关的微分方程组建模,将得到类似以下内容的东西:

$$
\ dot {x} = \ left [\ begin {array} { ccc}
\ dot {x} _1 \\
\ dot {x} _2 \\
\ dot {x} _3 \ end {array} \ right] = \ left [\ begin {array} {ccc}
k_1&0&0 \\
0&k_2&0 \\
0&0&k_3 \ end {array} \ right] \ left [\ begin {array} {ccc}
x_1 \\
x_2 \\
x_3 \ end {array} \ right]
$$
代表:
$$
\ dot {x} _1 = k_1 x_1 \\
\ dot {x} _2 = k_2 x_2 \\
\ dot {x} _3 = k_3 x_3 \\
$$

如果要将输入$ u_1 $添加到$ \ dot {x} _1 $的等式中,然后将$ u_2 $输入到$ \ dot {x} _3 $,则可以添加$ \ mbox {B} u $术语:

$$
\ dot {x} = \ left [\ begin {array} {ccc}
\ dot { x} _1 \\
\ dot {x} _2 \\
\ dot {x} _3 \ end {array} \ right] = \ left [\ begin {array} {ccc}
k_1&0&0 \\
0&k_2&0 \\
0&0&k_3 \ end {array} \ right] \ left [\ begin {array} {ccc}
x_1 \\
x_2 \\
x_3 \ end {array} \ right] + \ left [\ begin {array} {ccc}
1&0 \\
0& 0 \\
0&1 \ end {array} \ right] \ left [\ begin {array} {ccc}
u_1 \\
u_2 \ end {array} \ right]
$$

如果您想保留此内容,但您认为状态$ x_1 $会影响$ x_2 $的更改方式,则可以添加该交互: $$
\ dot {x} = \ left [\ begin {array} {ccc}
\ dot {x} _1 \\
\ dot {x} _2 \\
\ dot {x} _3 \ end {array} \ right] = \ left [\ begin {array} {ccc}
k_1&0&0 \\
\ boxed {k_ {x_1 \ rightarrow x_2}}&k_2&0 \\
0&0&k_3 \ end {array} \ right] \ left [\ begin {array} {ccc}
x_1 \\
x_2 \ \
x_3 \ end {array} \ right] + \ left [\ begin {array} {ccc}
1&0 \\
0&0 \\
0& 1 \ end {array} \ right] \ left [\ begin {array} {ccc}
u_1 \\
u_2 \ end {array} \ right]
$$

现在将其写出后,您将得到:

$$
\ begin {array} \\
\ dot {x} _1&=&k_1 x_1 + u_1 \\
\ dot {x} _2&=&k_ {x_1 \ r ightarrow x_2} x_1 + k_2 x_2 \\
\ dot {x} _3&=&k_3 x_3 + u_2 \ end {array}
$$

您可以继续建立系统需要的复杂性。有了模型后,对于状态反馈控件,您需要确保系统是线性的,因为系统没有触发函数或一个自身相乘的状态或另一个状态,并且要确保其是时不变的,因为矩阵$ \ mbox {A} \ rightarrow \ mbox {D} $不会随时间变化-在其中没有(t)的功能。您可能可以进行一些简化,例如小角度近似,以帮助将$ \ mbox {A} $矩阵转换为下一步所需的LTI形式。

现在,您可以将整个系统“屏蔽”到首先显示的两个方程中,用字母“ A”隐藏整个$ \ mbox {A} $矩阵,等等。使用Laplace变换,您可以(手波)求值系统不受控制的开环动力学。您可以通过找到系统的极点来完成此操作,这些极点表示系统的响应。

您还可以评估系统,以查看系统是否可控,这意味着您可以使用输入以独特的方式更改所有状态,并查看系统是否可观察,这意味着您可以实际上可以确定状态的值是什么。

如果系统是可控制的,则可以获取有关状态的信息$-\ mbox {G} x $,并使用有关状态的信息来将其输入系统达到理想值。为了清楚起见,仅使用两个初始方程式,将控制信号添加到输入时,您将得到:

$$
\ dot {x} = \ mbox {A} x + \ mbox {B}(u-\ mbox {G} x)\\
y = \ mbox {C} x + \ mbox {D} u \\
$$

变为:

$$
\ dot {x} = \ mbox {A} x-\ mbox {BG} x + \ mbox {B} u \\
$$

,可以重新排列为:

$$
\ dot {x} = [\ mbox {A}-\ mbox {BG}] x + \ mbox {B} u \\
$$

在以前,系统响应是由$ \ mbox {A} $矩阵驱动的,而现在它是由$ \ mbox {A-BG} $驱动的。您可以再次通过拉普拉斯变换评估极点,但是现在有了增益矩阵$ \ mbox {G} $,您可以用来调整控制器,将极点放置在任意位置,从而将时间响应设置为所需。

该过程继续进行,观察者进行设置以将实际系统输出$ y $与模型的预测输出$ \ hat {y} $进行比较。在这里需要特别注意的是,输出不必与状态微分方程中使用的状态相同。在这些状态中,状态可能是电流,输出可能是电压($ R \ I ),因此您可以与实际系统上的可测量信号进行比较。

就像我说的那样,建模系统和状态反馈控制器的设计涉及大量信息,我只是概述了一般过程,因为我认为这是您所要解决的问题。

评论


$ \ begingroup $
谢谢,这是进行进一步研究的良好基础。
$ \ endgroup $
–丹·布莱恩特
2015年9月23日20:07在

$ \ begingroup $
好答案,tl; dr;描述SISO系统的标量值成为MIMO系统的矩阵,可以在矩阵的非对角值中看到“交叉耦合”。
$ \ endgroup $
–弯曲单元22
15年9月26日在18:06