使用状态空间解决电气问题

状态空间方法是控制理论中用于建模和分析系统的一种强大方法。与仅关注输入-输出关系的传递函数方法不同,状态空间方法将系统表示为一组一阶微分方程。

系统的状态空间表示可以写成:

x˙(t)=Ax(t)+Bu(t)y(t)=Cx(t)+Du(t)

其中 x(t) 是状态向量,u(t) 是输入向量,y(t) 是输出向量,ABCD 是定义系统动态的矩阵。

以下是一些示例,演示如何使用 StateSpace 解决电气问题。

示例 1

../../../_images/Electrical_Problems_Q1.svg

在串联 RLC 电路中,我们有一个电阻 R ,一个电感 L ,和一个电容 C 与输入电压 vin(t) 串联。状态变量是通过电感的电流 i(t) 和电容两端的电压 vC(t)

在上图的回路中应用 基尔霍夫电压定律 (KVL) 得到:

vin(t)=Ri(t)+Ldi(t)dt+VC(t)

其中:vin(t) 是输入电压,i(t) 是通过电感的电流,vC(t) 是电容器两端的电压。

此方程将输入电压与RLC电路的元件联系起来。

电容器电压方程

电容器两端的电压可以通过以下公式与电流相关联:

VC(t)=1Ci(t)dt

对两边取时间导数,我们得到电容器电压的变化率:

v˙C(t)=dvC(t)dt=i(t)C

这个方程表明电容器电压的变化率与电路中的电流成正比。

从KVL方程中,求解电流的导数得到:

di(t)dt=RLi(t)1LvC(t)+1Lvin(t)

这是一个描述电路元件和输入电压下电流变化率的微分方程。

状态空间表示法通过状态变量来表达系统,这些状态变量通常是描述电路元件中存储的能量(如电流和电压)的变量。

我们将状态向量 X(t) 定义为:

X(t)=[x1(t)x2(t)]=[i(t)vC(t)]

这里 x1(t)=i(t) 是通过电感的电流,x2(t)=vC(t) 是电容器两端的电压。

输入向量 U(t) 是输入电压:

U(t)=vin(t)

以状态变量表示的微分方程系统变为:

  1. 当前的导数:

    x˙1(t)=RLx1(t)1Lx2(t)+1Lvin(t)
  2. 电容器电压的导数:

    x˙2(t)=x1(t)C

串联RLC电路的矩阵为:

A=[RL1L1C0],B=[1L0],C=[01],D=[0]

因此,串联RLC电路的状态空间表示为:

X˙(t)=[RL1L1C0][x1(t)x2(t)]+[1L0]Vin(t)Y(t)=[01][x1(t)x2(t)]+[0]Vin(t)

状态空间表示法通过使用矩阵来描述系统的动态特性,提供了一种紧凑的串联RLC电路建模方法。矩阵 ABCD 捕捉了电路状态变量、输入和输出之间的关系。这种表示法特别适用于分析系统在时域中的行为以及设计控制系统。

解决方案

>>> from sympy import Matrix, symbols, pprint
>>> from sympy.physics.control import *
>>> R, L, C = symbols('R L C')
>>> A = Matrix([[-R/L, -1/L], [1/C, 0]])
>>> B = Matrix([[1/L], [0]])
>>> C = Matrix([[0, 1]])
>>> D = Matrix([[0]])
>>> ss = StateSpace(A, B, C, D)
>>> ss
StateSpace(Matrix([
[-R/L, -1/L],
[ 1/C,    0]]), Matrix([
[1/L],
[  0]]), Matrix([[0, 1]]), Matrix([[0]]))

我们可以通过重写方法将状态空间转换为传递函数。

>>> tf = ss.rewrite(TransferFunction)[0][0]
>>> tf
TransferFunction(1, C*L*s**2 + C*R*s + 1, s)

示例 2

../../../_images/Electrical_Problems_Q2.svg

获取如图所示的电气系统所表示的系统的状态模型

系统通过两个状态变量 x1(t)x2(t) 进行建模,它们分别与节点 v1(t)v2(t) 处的物理电压相关。

定义两个状态变量为:

v1(t)=x1(t)v2(t)=x2(t)

通过在节点 v1(t)v2(t) 处应用基尔霍夫电流定律(KCL),推导出控制方程。

在节点 v1(t) 应用 KCL:

v1(t)u(t)R+Cdv1(t)dt+v1(t)v2(t)R=0

替换状态变量:

x1(t)u(t)R+Cdx1(t)dt+x1(t)x2(t)R=0

简化:

Cx1˙(t)=2x1(t)R+x2(t)R+u(t)R

因此,x1(t) 的状态方程变为:

x1˙(t)=2x1(t)RC+x2(t)RC+u(t)RC

在节点 v2(t) 应用 KCL:

Cdv2(t)dt+v2(t)v1(t)R=0

替换状态变量:

Cdx2(t)dt+x2(t)x1(t)R=0

简化:

Cx2˙(t)=x1(t)Rx2(t)R

因此,x2(t) 的状态方程变为:

x2˙(t)=x1(t)RCx2(t)RC

状态空间表示法由以下矩阵方程给出:

[x1˙(t)x2˙(t)]=[2RC1RC1RC1RC][x1(t)x2(t)]+[1RC0]u(t)

电路的输出定义为:

y(t)=v2(t)=x2(t)

因此,输出方程可以写成:

y(t)=[01][x1(t)x2(t)]

解决方案

>>> from sympy import symbols, Matrix
>>> from sympy.physics.control import *
>>> R, C = symbols('R C')
>>> A = Matrix([[-2/(R*C), 1/(R*C)], [1/(R*C), -1/(R*C)]])
>>> B = Matrix([[1/(R*C)], [0]])
>>> C = Matrix([[0, 1]])
>>> ss = StateSpace(A, B, C)
>>> ss
StateSpace(Matrix([
[-2/(C*R),  1/(C*R)],
[ 1/(C*R), -1/(C*R)]]), Matrix([
[1/(C*R)],
[      0]]), Matrix([[0, 1]]), Matrix([[0]]))

参考文献

  1. bmsce.ac.in 的链接