如何进行电机动态模型的识别

一、为什么进行系统识别

系统建模有两种方法:

  • 机理分析法(First Principles Modeling),又称白箱(white-box)建模法:通过物理、化学、生物等学科的相关原理写书数学模型;
  • 辨识法(Identification),又称黑箱(black-box)建模法,根据测量得到的输入输出数据得到模型。

任何一个系统都有一个真实的模型,而且真实系统严格来说是非线性且时变的,因此只能用有限维线性时不变系统模型来近似。即便是近似,真实的模型在绝大多情况下通过机理分析法是很难获得的,即使能够获得,一般也及其复杂而无法使用的。在这种情况下,辨识法就成了我们为数不多的选择,目的是希望得到的模型是复杂度在可接受的范围内,能够基本反映真实系统的模型。


二、系统识别的基本思想

假设我们通过那次观察,测得系统的输入为: u[0],u[1],u[2],...u[n] ;

测得系统的输出为: y[0],y[1],y[2],...y[n] ;

假定系统的数学模型如下:

y[k]+ay[k-1]=bu[k-1]+v[k]

其中 v[k] 为扰动误差。显然,该模型的参数向量为 \theta=[a \quad b]^T ,一个很显然的想法就是对参数向量 \theta的最佳估计应当是对所有时刻的扰动的平方和最小的一组参数,即

\hat{\theta}=argmin\sum_{k=1}^nv^2[k]=argmin\sum_{k=1}^n\left\{ y[k]+ay[k-1]-bu[k-1]\right\}^2

要想取得极值,需要

\frac{\partial V(\theta)}{\partial a }=0,\frac{\partial V(\theta)}{\partial b }=0

便可以获得模型的参数估计值 ab ,这就是辨识法最简单的基本思想。当然,实际的模型识别要比这复杂一些,但本质没有变化。


三、如何识别直流电机系统模型

以下算例是对MATLAB案例的解释,原文请看Estimate Nonlinear Grey-Box Models

以简单的直流电机为例,一个典型的直流电机的数学模型如下:

其中 K_m 为力矩系数, K_b 为反电势系数, L 为线圈电感, R 为线圈电阻, J 为转子转动惯量, K_f 为转子阻尼系数, T_d 为负载, \omega 为转子速度, \theta 为转子位置, V_a 为端部电压,这就是理想直流电机的数学模型,注意这是开环的电机模型。

电压平衡方程式为: V_a(t)=Ri(t)+L\frac{di(t)}{dt}+V_{emf}(t)

反电势方程为: V_{emf}(t)=K_b\dot{\theta}(t)=K_b\omega (t)

力矩方程为: T_a(t)=K_m \cdot i(t)

转子的力矩平衡方程为: J\ddot{\theta}(t)=T_a(t)-T_d(t)-K_f\dot{\theta}(t)

因为 L 一般比较小,而且电气时间常数一般远比机械时间常数小,我们可以忽略电感 L ,即忽略电气瞬态过程,这样在建立状态方程时就可以减少一个状态变量

则可以得到直流电机的状态方程为:

\dot x(t)=\begin{bmatrix}  0 & 1 \\ 0 & -1/\tau  \end{bmatrix}x(t) +\begin{bmatrix}  0  \\ \frac{\beta}{\tau} \end{bmatrix}u(t) +\begin{bmatrix}  0 \\ \frac{\gamma}{\tau} \end{bmatrix}T_d(t)

其中状态变量为电机转角和转速: x(t)= \begin{bmatrix}  \theta(t) \\ \dot\theta(t) \end{bmatrix} =\begin{bmatrix}  \theta(t) \\ \omega(t) \end{bmatrix}

\tau=\frac{JR}{K_fR+K_mK_b}\beta=\frac{K_m}{K_fR+K_mK_b} , \gamma=-\frac{R}{K_fR+K_mK_b}

因为我们要识别电机模型,负载没有影响,因此可以假定 T_d(t) 恒为零。则状态方程简化为;

\dot x(t)=\begin{bmatrix}  0 & 1 \\ 0 & -1/\tau  \end{bmatrix}x(t) +\begin{bmatrix}  0  \\ \frac{\beta}{\tau} \end{bmatrix}u(t)

现在我们要通过模型识别来确定 \tau\beta ,模型处理来自Ljung, L. System Identification。

为了确定电机的动态模型,我们可以在开环状态下施加随机的PWM控制信号(输入),然后对输出进行采样记录,这样我们就有了输入输出以及模型三个必要的要素,这个过程要通过试验来获得,比如我们获得的电压和电机转角数据如下:

电压和电机转角之间曲线

电压和转速数据如下:

电压和电机转角之间曲线

速度一般是通过位置微分得到的,可见速度已经出现一定的噪音。在前面我们建立方程的时候,我们知道:

\tau=\frac{JR}{K_fR+K_mK_b}\beta=\frac{K_m}{K_fR+K_mK_b}

因此我们可以通过电机的基本参数来预估 \tau\beta ,我们将预估值带进状态方程进行计算,理想气矿来说,测量值和计算值应该很接近,我们不妨画出来看一下:

很不幸,由于建模的过程中很难面面俱到,实际通过机理分析得到的模型和实际的物理模型还是有较大的差别的。这时候就要用到我们的模型识别了!——识别的结果见下图:

可见,电机转角曲线基本吻合,速度曲线吻合度也非常高!误差如下:

误差基本呈白噪音形态,这属于测量噪音,通过软件层面(模型识别)是无法消除的,只能提高硬件水平(传感器精度)。值得一提的是,本算例中忽略了电感,当然我们还可以增加电流状态变量以及电流测量,对电感的影响也加以辨识,情况会复杂一些,感兴趣的可以试一下。

来源:知乎 www.zhihu.com

作者:J Pan

【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。
点击下载