电池模型的状态空间方程

之前学习如何使用卡尔曼滤波器进行电池SoC估计的时候,跳过了一个很重要的问题——电池模型系统方程的建立。电池模型的种类有很多,最常用的还是二阶RC电路模型。通过基本的电工学知识可以很容易地建立起电路的方程,得到输出电压与输入电流激励的关系。但是在使用卡尔曼滤波器进行SoC估算的时候,我们需要建立起关于这个电路模型的状态空间方程、并得到该方程的离散形式。

控制系统的分类

————————————————————————

连续系统与离散系统

控制系统可以分为连续系统和离散系统。一般研究中通过拉普拉斯变化或建立微分方程的方法,都是针对与连续控制系统。它所有变量的变化都是连续的。但是由于现今控制系统需要计算机参与计算。举个例子,当控制系统中某个变量需要通过传感器来测量时,只能是每间隔一个时间段来对传感器的数据进行采样。这样计算机处理的数据就不是一段连续的数据而是一串数据点,相应的也要将连续的系统方程进行离散化。

连续系统一般通过微分或者偏微分方程进行建模,而离散系统一般通过差分方程进行建模。求解微分方程,可以采用对微分方程进行拉普拉斯变换的方法将微分方程转换为代数方程,对代数方程求解并进行拉普拉斯反变换得到最终的微分方程的解。对于差分方程,可以通过类似的Z变换的方法求解。

线性与时变

对于微分方程的系数不随时间发生改变的系统,称为定常系统,反之称为时变系统。
一个线性系统是可以进行叠加的,也就是说:$f\left(x_1+x_2\right)=f\left(x_1\right)+f\left(x_2\right)$,故可以单独计算一部分输入导致的系统响应,再将所有部分的系统响应叠加得到全部输入导致的系统响应。非线性系统可以通过泰勒展开等方式转换为线性系统进行分析。
对于线性时不变系统,其响应可以表示为输入与系统单位脉冲响应的卷积。

线性时不变系统、卷积积分、传递函数与拉普拉斯变换

————————————————————————

卷积积分

对于线性时不变系统,可以先将一般的输入分解为简单的基本信号,再运用叠加原理求出系统在各种基本信号下的响应之和。通常一般所运用的基本信号是脉冲信号和指数函数信号(线性无关,构建一个空间的基向量)。
脉冲信号可以用脉冲函数$\delta \left( \tau \right)$表示:
$$ \int_{-\infty }^{+\infty }f\left( \tau \right) \delta \left( t-\tau \right) d\tau =f\left( t\right) $$
相应地,输入信号$u(t)$也可以看作是这样的一串脉冲信号。叠加原理表明,只要求出系统单位脉冲响应,则系统响应可以表示为输入信号和单位响应的乘积的积分。
如果$h\left( t,\tau \right)$表示$\tau$时刻的输入脉冲在t时刻的响应(如果你在$\tau$时刻被打了一个力度的耳光,那t时刻你脸上的火辣程度),$u\left(\tau\right)$表示$\tau$时刻的系统输入(你在$\tau$时刻被打了几个力度的耳光),则$\tau$时刻输入脉冲的t时刻系统响应是$u\left(\tau\right)h\left( t,\tau \right)$。对$\tau$在整段时间求积分,则在t时刻的系统响应是:
$$ y\left(t\right)=\int_{-\infty }^{+\infty }u\left(\tau\right)h\left( t,\tau \right)d\tau $$
由于系统是时不变的,则在$\tau$时刻加入输入,在t时刻获得的响应只取决于输入的大小和这两个时刻之间的间隔,即$h\left( t,\tau \right)=h\left( t-\tau \right)$。故:
$$ y\left(t\right)=\int_{-\infty }^{+\infty }u\left(\tau\right)h\left( t-\tau \right)d\tau $$
或者,
$$ y\left(t\right)=\int_{-\infty }^{+\infty }u\left(t-\tau\right)h\left( \tau \right)d\tau $$
该式便是卷积积分。

传递函数

根据上式,若输入的形式为指数函数,假设$u\left(t\right)=e^{st}, s=\sigma +j\omega$,则:
$$ y\left(t\right)=\int_{-\infty }^{+\infty }h\left( \tau \right)u\left(t-\tau\right)d\tau=\int_{-\infty }^{+\infty }h\left( \tau \right)e^{s\left(t-\tau\right)}d\tau=\int_{-\infty }^{+\infty }h\left( \tau \right)e^{st}e^{-s\tau}d\tau=\int_{-\infty }^{+\infty }h\left( \tau \right)e^{-s\tau}d\tau e^{st} $$
令$H\left(s\right)=\int_{-\infty }^{+\infty }h\left( \tau \right)e^{-s\tau}d\tau$, $H\left(s\right)$则为该系统的传递函数。

拉普拉斯变换

在此定义$f\left(t\right)$的拉普拉斯变换为:
$$ F\left(s\right)=\int_{-\infty }^{+\infty }f\left( \tau \right)e^{-s\tau}d\tau $$

卷积积分、传递函数与拉普拉斯变换的关系

将拉普拉斯变换应用于卷积积分的$u\left(t\right)$和$y\left(t\right)$,可得:
$$ Y\left(s\right)=H\left(s\right)U\left(s\right) $$
其中,$Y\left(s\right)$和$U\left(s\right)$分别为$y\left(t\right)$和$u\left(t\right)$的拉普拉斯变换。
由于单位脉冲的拉普拉斯变换为1,故系统的传递函数为系统的单位脉冲响应的拉普拉斯变换。

z变换与离散等价设计

————————————————————————
z变换之于离散系统,就如同拉普拉斯变换之于连续系统。若$f\left(k\right)$为$f\left(t\right)$的采样值,则其z变换为:
$$ F\left(z\right)=\sum _{k=0}^{\infty }f\left( k\right) z^{-k} $$
$z$为前移算子,若$U\left(z\right)$为$u\left(kT\right)$的z变换,则$zU\left(z\right)$就是$u\left(kT+T\right)$的z变换。

通过系统建模,建立连续的状态空间模型后,如何将连续实现转换为离散实现呢?

Tustin

一种非常常用的离散等价设计方法为Tustin法。
假设一个$\dfrac{1}{s}$过程,即一个积分器:
$$ \dfrac{U\left(s\right)}{E\left(s\right)}=D\left(s\right)=\dfrac{1}{s} $$
则有($T$是采样周期):
$$ u\left(kT\right)=\int_{0}^{kT-T}e\left(t\right)dt+\int_{kT-T}^{kT}e\left(t\right)dt $$
即:$u\left(kT\right)=u\left(kT-T\right)+$最后一个周期内$e\left(t\right)$所包围的面积。
Tustin法是将最后一个周期内$e\left(t\right)$所包围的面积近似地用两个采样点之间所夹梯形的面积来表示,即(用$u\left(k-1\right)$代替$u\left(kT-T\right)$, $u\left(kT\right)$同样):
$$ u\left(k\right)=u\left(k-1\right)+\dfrac{T}{2}\left[e\left(k-1\right)+e\left(k\right)\right] $$
将上式进行z变换得到:
$$ \dfrac{U\left(z\right)}{E\left(z\right)}=\dfrac{T}{2}\left(\dfrac{1+z^{-1}}{1-z^{-1}}\right)=\dfrac{1}{\dfrac{2}{T}\left(\dfrac{z-1}{z+1}\right)} $$
对于其他种类的控制器也有类似的情况,即将传递函数中的每一处$s$替换为$\dfrac{2}{T}\left(\dfrac{z-1}{z+1}\right)$便可以实现近似的离散等价设计。

欧拉法

Tustin法是通过采用梯形近似的方法实现离散等价设计,更简单一点的操作还可以使用矩形进行。即最后一个周期内$e\left(t\right)$所包围的面积使用$Te\left(k-1\right)$代替。
类似的推导过程,得到的替换结果为:
$$ s=\dfrac{1}{T}\left(z-1\right) $$
前一篇笔记里提到的电池模型的连续状态空间方程的离散化就是通过欧拉法完成的。这是一种形式较为简单的近似化方法。

状态空间设计方法与离散化

————————————————————————
如上篇笔记中所做的那样,我们使用一组一节矩阵微分方程来对电池模型进行建模:
$$ \dfrac{dx}{dt}=Fx+Gu $$
其中$x$为系统状态向量,$u$为系统输入向量。输出方程:
$$ y=Hx+Ju $$
将这个状态空间方程离散化的途径之一就是使用上文中的欧拉法等离散等价设计方法将各微分方程离散化。但是还可以通过另一种状态空间方程离散设计的方法,不需要求解$D\left(s\right)$, 即实现离散化。
采用零阶保持器,假定从kT到(k+1)T零阶保持器输出(系统输入值)恒定不变,且等于kT时刻的采样值。跳过推论步骤,直接上结论($L^{-1}$表示拉式反变换):
$$ \phi \left( T\right) =L^{-1}\left[ \left( SI-F\right) ^{-1}\right] $$
$$ H\left( t\right) =\int _{0}^{T}\phi \left( t\right) dt\cdot G $$
离散化结果为
$$ x\left(k+1\right)=\phi\left(T\right)x\left(k\right)+H\left(T\right)u\left(k\right) $$

二阶RC模型的离散化状态空间方程

————————————————————————
对电池的二阶RC模型构建的一阶线性微分方程组如下:
$$ \begin{cases} \dfrac{dSoC}{dt}=-\dfrac{i}{C_{cap}}\\ \dfrac{du_{1}}{dt}=-\dfrac{1}{R_{1}C_{1}}u_{1}+\dfrac{1}{C_{1}}i\\ \dfrac{du_{2}}{dt}=-\dfrac{1}{R_{2}C_{2}}u_{1}+\dfrac{1}{C_{2}}i \end{cases} $$
写成矩阵形式:
$$ \left[ \begin{matrix} SoC^{‘}\\ u_{1}^{‘}\\ u_{2}^{‘}\end{matrix} \right]= \left[ \begin{matrix} 0& & \\ & -\dfrac{1}{R_{1}C_{1}}& \\ & & -\dfrac{1}{R_{2}C_{2}}\end{matrix} \right]\left[ \begin{matrix} SoC\\ u_{1}\\ u_{2}\end{matrix} \right]+\left[ \begin{matrix} -\dfrac{1}{C_{cap}}\\ \dfrac{1}{C_{1}}\\ \dfrac{1}{C_{2}}\end{matrix} \right]i $$

欧拉法

使用欧拉方法对其进行离散等价设计,只拿第二个方程示例一下:

  1. 将输入$i$与输出$u_{1}$进行拉普拉斯变换并求得传递函数:
    $$ \dfrac{U\left(s\right)}{I\left(s\right)}=H\left(s\right)=\dfrac{R_{1}}{R_{1}C_{1}s+1} $$
  2. 进行算子替换:
    $$ H\left(z\right)=\dfrac{R_{1}}{R_{1}C_{1}\left(\dfrac{z-1}{T}\right)+1} $$
  3. 进行z反变换:
    $$ U\left(z\right)\left[R_{1}C_{1}\left(z-1\right)+T\right]=I\left(z\right)TR_{1} $$
    $$ R_{1}C_{1}u_{1}\left(k+1\right)-\left(R_{1}C_{1}-T\right)u_1\left(k\right)=TR_{1}i\left(k\right) $$
    最终:
    $$ u_{1}\left(k+1\right)=\left(1-\dfrac{T}{R_{1}C_{1}}\right)u_{1}\left(k\right)+\dfrac{T}{C_{1}}i\left(k\right) $$
  4. 结果:
    $$ \left[ \begin{matrix} SoC_{k+1}\\ u_{k+1}^{1}\\ u_{k+1}^{2}\end{matrix} \right]= \left[ \begin{matrix} 1& & \\ & 1-\dfrac{T}{R_{1}C_{1}}& \\ & & 1-\dfrac{T}{R_{2}C_{2}}\end{matrix} \right]\left[ \begin{matrix} SoC_{k}\\ u_{k}^1\\ u_{k}^2\end{matrix} \right]+\left[ \begin{matrix} -\dfrac{T}{C_{cap}}\\ \dfrac{T}{C_{1}}\\ \dfrac{T}{C_{2}}\end{matrix} \right]i_{k} $$

离散设计

使用离散设计对状态空间方程进行离散化,按照上文所示步骤,结果为:
$$ \left[ \begin{matrix} SoC_{k+1}\\ u_{k+1}^{1}\\ u_{k+1}^{2}\end{matrix} \right]= \left[ \begin{matrix} 1& & \\ & e^{-\dfrac{T}{R_{1}C_{1}}}& \\ & & e^{-\dfrac{T}{R_{2}C_{2}}}\end{matrix} \right]\left[ \begin{matrix} SoC_{k}\\ u_{k}^1\\ u_{k}^2\end{matrix} \right]+\left[ \begin{matrix} -\dfrac{T}{C_{cap}}\\ R_{1}\left(1-e^{-\dfrac{T}{R_{1}C_{1}}}\right)\\ R_{2}\left(1-e^{-\dfrac{T}{R_{2}C_{2}}}\right)\end{matrix} \right]i_{k} $$
自学不易。

参考文献:
Gene F.Franklin等. 自动控制原理与设计(第5版)[M]. 人民邮电出版社, 2007.