控制系统CAD案例
- 格式:doc
- 大小:679.00 KB
- 文档页数:42
1 控制系统CAD案例2
【例1】 已知单位反馈系统的被控对象的开环单位阶跃响应数据(存在随机扰动)在文件SourseData.mat中,tout是采样时间点,yout是对应于采样时间点处的单位阶跃响应数据。
试设计串联补偿器,使得:① 在单位斜坡信号ttr)(的作用下,系统的速度误差系数Kv≥30sec-1;② 系统校正后的截止频率ωc≥2.3sec-1;③ 系统校正后的相位稳定裕度Pm≥40°。
设计步骤:
1 根据原始数据得到被控对象的单位阶跃响应
被控对象的开环单位阶跃响应数据在文件SourseData.mat中。
在MATLAB指令窗中键入:
>> load SourseData
>> plot(tout,yout)
>> xlabel('tout')
>> ylabel('yout')
>> title('原始响应曲线')
2 由所给数据可看出,仿真步长为0.05s,仿真时间为10s。以时间tout为横坐标,输出yout为纵坐标,得到单位阶跃响应随时间的变化曲线如图1所示。
图1 被控对象的单位阶跃响应
2 系统模型的辨识
由于被控对象模型结构未知,题中仅给出了被控对象的单位阶跃响应。因此需要根据原始的数据分析得出原系统的基本结构。至于结构以及参数的最终确定,将使用MATLAB的系统辨识工具箱来实现。
3 (1) 预处理
由图1可以看出被控对象模型中含积分环节,因此,对响应输出求导后进行辨识,即去积分。再对辨识出的模型积分,即得被控对象模型。
对给定输出进行求导处理:
ttyttyty)()(dd
在MATLAB指令窗中键入:
>> dy=(yout(2:end,:)-yout(1:end-1,:))/0.05;
% 差分代替导数
>> t=tout(1:end-1,:);
>> plot(t,dy)
>> xlabel('t')
>> ylabel('dy/dt')
>> title('原始响应的导数曲线')
以时间t为横坐标,输出dy为纵坐标,得到单位阶跃响应的导数随时间的变化曲线如图2所示。
4
图2 被控对象的单位阶跃响应的导数
(2) 系统模型结构的估计
系统辨识工具箱提供的模型结构选择函数有struc、arxstruc和selstruc。
函数struc 生成arx结构参数,调用格式为:
nn=struc (Na, Nb, Nk)
其中,Na、Nb 分别为arx模型多项式A(q)、B(q) 的阶次范围;Nk为arx模型纯滞后的大小范围;nn为模型结构参数集构成的矩阵。
5 函数arxstruc用来计算arx模型结构的损失函数,即归一化的输出预测误差平方和,调用格式为:
v=arxstruc (ze, zv, nn)
其中,ze=[y u]为模型辨识的I/O数据向量或矩阵。zv=[yr
ur]为模型验证的I/O数据向量或矩阵。nn为多个模型结构参数构成的矩阵,nn的每行都具有格式:nn=[na nb nk]。v的第一行为各个模型结构损失函数值,后面的各行为模型结构参数。
函数selstruc 用来在损失函数的基础上进行模型结构选择,调用格式为:
[nn, vmod]=selstruc (v, c)
其中v 由函数arxstruc获得的输出矩阵,为各个模型结构的损失函数。c为可选参数,用于指定模型结构选择的方式。
根据图2所示曲线的形状初步估测被控对象的模型应该为二阶系统或者更高阶系统。并且可以看出,纯滞后为0,故Nk恒为零。
在MATLAB指令窗中键入:
>> u=ones(size(dy));
>> Z=[dy,u];
>> v2=arxstruc(Z,Z,struc(2,0:2,0));
>> nn2=selstruc(v2,0);
6 >> v3=arxstruc(Z,Z,struc(3,0:3,0));
>> nn3=selstruc(v3,0);
>> v4=arxstruc(Z,Z,struc(4,0:4,0));
>> nn4=selstruc(v4,0);
得到如下结果:
nn2 = 2 1 0
nn3 = 3 2 0
nn4 = 4 1 0
于是,去除积分环节后的模型阶数为:二阶系统[2 1 0]、三阶模型[3 2 0]和四阶模型[4 1 0]。
(3) 系统模型结构的确定
为了确定模型结构以及参数,使用MATLAB的系统辨识工具箱中已有的辨识函数arx()。辨识函数arx()的使用方法是:如果一直输入信号的列向量u,输出信号的列向量y,并选定了系统的分子多项式阶次m-1,分母多项式阶次n及系统的纯滞后d,则可以通过下面的指令辨识出系统的数学模型:
T=arx([y,u],[ n,m,d])
该函数将直接显示辨识的结果,且所得的T为一个结构体,其中T.A和T.B分别表示辨识得到的分子和分母多项式。由给定的观测数据建立系统数学模型后,还需要进行检验,看模
7 型是否适用,如果不适用,则要修改模型结构,重新进行参数估计等。MATLAB的系统辨识工具箱中用于模型验证和仿真的函数主要有compare、resid、pe、predict 和idsim。此次实验主要用的是函数compare对模型进行验证。函数compare可将模型的预测输出与对象实际输出进行比较。验证过程与结果如下所示。
① 对二阶系统的验证
在MATLAB指令窗中键入:
>> Z=iddata(dy,u,0.05);
>> M=arx(Z,[2,2,0]);
>> compare(M,Z)
得到图3所示结果。
8
图3 二阶模型的匹配结果
② 对三阶系统的验证
在MATLAB指令窗中键入:
>> Z=iddata(dy,u,0.05);
>> M=arx(Z,[3,3,0]);
>> compare(M,Z)
得到图4所示结果。
9
图4 三阶模型的匹配结果
③ 对四阶系统的验证
在MATLAB指令窗中键入:
>> Z=iddata(dy,u,0.05);
>> M=arx(Z,[4,2,0]);
>> compare(M,Z)
得到图5所示结果。
10
图5 四阶模型的匹配结果
④ 模型阶次的选取
从图3~图5可以看出,三阶和四阶模型的拟合率已高达90%,并且相差不大。因此,为简便起见,本次试验选用三阶系统模型。
在MATLAB指令窗中键入:
>> M=oe(Z,[3,2,0]);
>> H=tf(M)
得到如下结果:
11 Transfer function from input "u1" to output "y1":
0.02835 z^2 + 0.02835 z + 0.02835
---------------------------------
z^2 - 1.395 z + 0.4799
Transfer function from input "v@y1" to output "y1":
0.009445
Input groups:
Name Channels
Measured 1
Noise 2
Sampling time: 0.05
上述模型为离散时间系统模型,为了得到连续时间系统模型,在MATLAB指令窗中键入:
>> G=d2c(H(1))
得到如下结果:
Transfer function from input "u1" to output "y1":
0.02835 s^2 + 1.037 s + 48.5
----------------------------
s^2 + 14.68 s + 48.51
Input groups:
Name Channels
12 Measured 1
(4)传递函数模型系数的修正
得到模型的传递函数后,需要查看其开环单位阶跃响应,并与原始数据进行对比,看看是否吻合。为此,建立仿真模块analyse.mdl,如图6所示。
图6 辨识模型的Simulink模块
并在MATLAB指令窗中键入:
>> num=[0.02835,1.037, 48.5];
>> den=[1 ,14.68 ,48.51];
>> sim('analyse',9.99)
>> plot(t,dy,'r'),hold on
>> plot(ymdl.time,ymdl.signals.values)
>> legend('原始数据', '辨识模型数据')
得到图7所示结果。
13
图7 原始数据与辨识模型数据的比较
从图7可以看出,由oe模型得到的传递函数的阶跃响应曲线并不能与原始数据很好的拟合。故考虑在该传递函数的基础上,对其系数进行修改。
① 由于传递函数分子的高次项系数远小于其一次项系数,因此将其忽略。取分子为一次多项式,经验证对响应曲线影响并不大,但可以大大简化系统结构。
在MATLAB指令窗中键入:
>> num=[1.037 48.5];
>> den=[1 14.68 48.51];
14 >> sim('analyse',9.99)
>> plot(t,dy,'r'),hold on
>> plot(ymdl.time,ymdl.signals.values)
>> legend('原始数据', '辨识模型数据')
得到图8所示结果。
图8 原始数据与去除分子高次项的辨识模型数据的比较
② 调整系统的零点和极点。由于系统零点的作用为减小峰值时间,使系统响应速度加快,并且零点越接近虚轴,这种作用越显著。然而只对分子一次项的系数进行修改时,效果并不理想。因此,综合考虑,调节系统各个参数。经过多