运动控制第三篇之直流电机参数辨识

前言

在博客<运动控制第一篇之直流电动机建模> 中,已经介绍了电机模型形式。但是在实际系统中,若电机添加负载或者其他应用中,电机的模型就会发生转变。仅仅通过电机厂家提供的参数建立模型在精度上是无法满足需求的。所以,我们要对电机进行系统辨识。

本文将忽略系统辨识的理论知识,直接介绍如何通过matlab实现电机参数辨识过程。
实验环境:

  • 直流电机以及支持的硬件设备
  • matlab 2012B

电机模型

若电机的负载是一个普通的惯性环节,则我们可以将其和电机建立在一个模型中。在博客<运动控制第一篇之直流电动机建模> 中,我们已经知道电机的模型如下图所示。
运动控制第三篇之直流电机参数辨识
将负载和电机看做为一个整体,则可以忽略负责的作用。那么,可以将上图转化为传递函数为:

M(s)=KTlTms+Tms+1 M(s)=\frac{K}{T_lT_ms+T_ms+1}
其中,
{K=1CeTl=LRTm=JRCm2 \left\{ \begin{aligned} K&=\frac{1}{C_e}\\ T_l&=\frac{L}{R}\\ T_m&=\frac{JR}{C_m^2} \end{aligned} \right.

所以,我们可以知道 TlT_l 是不会随着负载变化而变换的,且其一般很小。所以,一般可以直接根据电机参数计算得出。通过查询电机手册,可以获得
{L=6.7mHR=10.4Ω \left\{ \begin{aligned} L&=6.7 \rm{mH} \\ R&=10.4 \rm \Omega \end{aligned} \right.

所以,可以计算出电磁常数
Tl=LR=0.00064423s T_l=\frac{L}{R}=0.00064423s

辨识死区与K

根据终值定理,开环电机的阶跃响应的终值为:
limt+c(t)=lims0s1sM(s)=K {\lim_{t \to +\infty} {c(t)}}={\lim_{s\to 0}s \cdot \frac1 s \cdot M(s)}=K
所以,在理想的电机模型中,KK 就是电机稳定速度与电压的斜率。因此,第一步,需要检测电机的稳定特性。
我采用的方法是,将电机由负额定电压逐渐增加到正额定电压。具体来说,就是将电机的占空比由-40%逐渐增加到40%,让电机在每个整数占空比稳定旋转1min,最后输出电机的稳定旋转的速度。得到的曲线如下图所示:
运动控制第三篇之直流电机参数辨识
其中,横轴为占空比,纵轴为电机转速。
选取线性比较好的区域,拟合电机的特性线性曲线为:
运动控制第三篇之直流电机参数辨识
则根据上文分析可知,电机的死区就是两条直线与坐标横轴的焦点,而K值就是两条直线的斜率。通过matlab拟合曲线,可以轻易求出电机的死区为[-8,8];K=46;

辨识机电惯性

通常在电机系统中,Tm>>TlT_m>>T_l。因此,我们可以将电机传递函数近似改写成:
M(s)=KTlTms+Tms+1=KTlTms+(Tm+Tl)s+1=K(Tls+1)(Tms+1) M(s)=\frac{K}{T_lT_ms+T_ms+1}=\frac{K}{T_lT_ms+(T_m+T_l)s+1}=\frac{K}{(T_ls+1)(T_ms+1)}
因此,本系统近似为:
M(s)=K(Tls+1)(Tms+1)=46(0.00064423s+1)(Tms+1) M(s)=\frac{K}{(T_ls+1)(T_ms+1)}=\frac{46}{(0.00064423s+1)(T_ms+1)}

然后,通过Matlab中的系统辨识工具(System Identification Tool),即可以完成机电惯性TmT_m的辨识。