5.2直流电机系统辨识实验:数据采集与保存¶
实验目标:掌握直流电机调速系统原理,能够搭建调速系统;掌握编码器原理;掌握最小二乘法,应用于直流电机模型辨识。
硬件参数¶
系统相关信号设定¶
设输入信号u为PWM波占空比,u∈[-1,1],当u<0时表示电机反转;电机输出y为转速,单位:转每秒(r/s),计算公式如下:
\[y = \frac{{num}}{{{\rm{500*}}30*4*T}}(r/s)\]其中:num表示当前周期脉冲数;500是编码器线数;30为电机减速比;4为采用编码器四倍频计数模式;T为采样周期(控制步长)。
步骤1:硬件连接¶
步骤3:直流电机及编码器测试¶
步骤4:离线辨识数据采集¶
离线辨识需要用到电机输入占空比u以及输出转速y的运行数据。
注解
Simulink运行数据两种保存方式见 5.4Sukung数据存储及绘图组件的使用 。
需要说明的是,Scope以及To Workspace模块的置入增加了单片机实时通信负担。为了保证控制步长准确和控制实时性,不推荐大量使用Scope及To Workspace模块。
步骤5:离线辨识算法设计¶
设电机模型为:
\[\frac{y}{u} = \frac{K}{{{s^2} + as + b}}\]离散化为:
\[y(k) = - \underbrace {(aT - 2)}_{{\theta _1}}y(k - 1) - \underbrace {(1 - aT + b{T^2})}_{{\theta _2}}y(k - 2) + \underbrace {K{T^2}}_{{\theta _3}}u(k - 2)\]其中,T为采样周期(控制步长),取0.002s。K、a、b为未知参数。构建数据向量 \(\varphi (k)\) 和参数向量 \(\theta (k)\) :
\[\begin{split}\left\{ \begin{array}{l} {\bf{\varphi }}(k) = {[ - y(k - 1), - y(k - 2),u(k - 2)]^T}\\ {\bf{\theta }} = {[{\theta _1},{\theta _2},{\theta _3}]^T} \end{array} \right.\end{split}\]构造输出向量Y和矩阵 \(\Phi\) :
\[\begin{split}{\bf{Y}} = \left[ {\begin{array}{*{20}{c}} {y(1)}\\ {y(2)}\\ \vdots \\ {y(L)} \end{array}} \right],{\bf{\Phi }}{\rm{ = }}\left[ {\begin{array}{*{20}{c}} {{{\bf{\varphi }}^T}(1)}\\ {{{\bf{\varphi }}^T}(2)}\\ \vdots \\ {{{\bf{\varphi }}^T}(L)} \end{array}} \right]\end{split}\]由批处理最小二乘法计算参数向量公式如下:
\[\mathord{\buildrel{\lower3pt\hbox{$\scriptscriptstyle\frown$}} \over \theta } = {\left( {{{\bf{\Phi }}^T}{\bf{\Phi }}} \right)^{ - 1}}{{\bf{\Phi }}^T}{\bf{Y}}\]根据系统辨识原理可知,模型参数辨识的精度依赖于输入信号。合理选用辨识输入信号,是保证获得理想辨识结果的关键之一。为简化描述,本次实验中仅采用了常值输入。建议使用者采用更合理的输入信号方案,推荐M序列。离线辨识结果如下图所示:
步骤6:离线辨识模型在线验证¶
步骤7:在线辨识算法设计¶
在具体应用批处理最小二乘法时,条件比较苛刻,往往需要庞大的数据量才能得出理想的辨识结果,且不能用于参数在线实时估计。在自适应控制系统中,常常要求对象参数能够在线实时估计。因此递推最小二乘法被广泛应用。其基本思想是:新的估计值 \({\bf{\hat \theta }}(k)\) =旧的估计值 \({\bf{\hat \theta }}(k - 1)\) +修正项。基本步骤如下:
已知: \({n_a}\) , \({n_b}\) , \(d\)
Step1:设置初值 \({\bf{\hat \theta }}(0)\) 和 \({\bf{P}}(0)\) ,输入原始数据;
Step2:采样当前输出 \(y(k)\) 和输入 \(u(k)\) ;
Step3:利用下式计算 \({\bf{K}}(k)\) 、 \({\bf{\hat \theta }}(k)\) 和 \({\bf{P}}(k)\) ;
Step4: \(k \to k + 1\) ,返回Step2,继续循环。
\[\begin{split}\left\{ \begin{array}{l} {\bf{K}}(k) = [{\bf{P}}(k - 1){\bf{\varphi }}(k)]/[1 + {{\bf{\varphi }}^T}(k){\bf{P}}(k - 1){\bf{\varphi }}(k)]\\ {\bf{\hat \theta }}(k) = {\bf{\hat \theta }}(k - 1) + {\bf{K}}(k)[y(k) - {{\bf{\varphi }}^T}(k){\bf{\hat \theta }}(k - 1)]\\ {\bf{P}}(k) = [{\bf{I}} - {\bf{K}}(k){{\bf{\varphi }}^T}(k)]{\bf{P}}(k - 1) \end{array} \right.\end{split}\]初值为:
\[\begin{split}\left\{ \begin{array}{l} {\bf{P}}(0) = \alpha {\bf{I}}\\ {\bf{\hat \theta }}(0) = {\bf{\varepsilon }} \end{array} \right.\end{split}\]其中, \(\alpha \) , \({\bf{\varepsilon }}\) 为零向量或充分小的正的实向量。
步骤8:在线辨识¶
步骤9:在线辨识模型验证¶
步骤10:离线-在线辨识的连续模型对比¶
小结¶
本实验搭建了直流电机调速系统,并通过Sukung实现了Simulink下的数据采集和系统测试;
采集了直流电机输入输出数据,采用最小二乘批处理算法,在MATLAB环境中实现了直流电机的离线参数辨识;
设计了递推最小二乘算法,并通过Sukung下载到目标机,实现了直流电机在线参数辨识;
离线辨识与在线辨识结果符合预期;
实验中,可进一步探讨M序列输入信号下的辨识效果,并研究各类系统辨识算法。