上一篇文章是一份pid的指南,目的是为pid建立一个整体的概念,这一篇简单介绍了pid建立模型的三种方法
根据元件性质直接得到模型
适用于简单的系统,需要关注整个系统的具体组成
通过欧姆定律等电路定律,为元件建模,最终得到系统模型
这种方式很麻烦,不在这里讨论
系统识别的方法
这种方法不需要关注系统的具体实现,将系统当做一个双端口的加工器,给定输入可以得到想要的输出
就好像图中所示的一个加热器,面包经过加热器后上升了10度,就可以给加热器建立相关的方程了,并不需要知道加热器是电阻加热还是红外光热
还需要注意的是,给定输入是否在系统输入范围,避免对系统造成损伤
MATLAB仿真
这里使用到了MATLAB的system identification的工具库
本次仿真是对一个电机建立模型
电机模型在这里提供
首先需要在matlab命令行初始化模型相关的以下变量
J = 0.01;
b = 0.1;
K = 0.01;
R = 1;
L = 0.5;
在simulink中运行一遍模型,回到matlab,这时候会发现工作区多了step_input和/img/matlab/motor_speed这两个变量
在matlab的工具箱中找到system identification这个工具,打开
import data下选择time domain data,在弹出的窗口填入下图中的信息,点击import
接下来在estimate的下拉框中选择transfer function model,点击estimate,运行完后,如图所示把结果tf1拖入to workspace
此时在MATLAB的工作区中应该能看见tf1这个变量,在命令行输入tf1,就能看见传递函数
>> tf1
tf1 =
From input "u1" to output "y1":
-1.042e-08 s + 2
------------------
s^2 + 12 s + 20.02
Name: tf1
Continuous-time identified transfer function.
Parameterization:
Number of poles: 2 Number of zeros: 1
Number of free coefficients: 4
Use "tfdata", "getpvec", "getcov" for parameters and their uncertainties.
Status:
Estimated using TFEST on time domain data "mydata".
Fit to estimation data: 100% (stability enforced)
FPE: 4.857e-33, MSE: 4.851e-33
回到simulink,修改DC Motor Transfer Fcn为对应的传递函数,开始仿真。
仿真结束后打开scope查看,结果如下图
从结果可以看出这个传递函数是正确的
对现有非线性模型线性化
这个方法和前面系统辨识的方法很类似,不过上一个方法使用的是模型的输入输出结果建立模型,这个是通过对系统线性化得到模型
MATLAB仿真
最终效果的模型在这里提供
如下图所示,先添加linear analysis points
在菜单栏打开Analysis->Control Design->Linear Analysis..
如下图所示,设置t=2,点击Step Plot 1,双击点开linsys1,显示线性化的选项选择Transfer Function
如下图所示,验证这个传输函数的正确性
可以看出这个传递函数是正确的
网友评论