基于双闭环PID控制的一阶倒立摆控制系统设计.docx
《基于双闭环PID控制的一阶倒立摆控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于双闭环PID控制的一阶倒立摆控制系统设计.docx(20页珍藏版)》请在冰豆网上搜索。
基于双闭环PID控制的一阶倒立摆控制系统设计
本科生课程设计
题目:
基于双闭环PID控制的一阶倒立摆控制系统设计
姓名:
学号:
系别:
电气工程系
专业:
电气工程和自动化
年级:
07级
指导教师:
2010年4月28日
1、系统模型的建立…………………………………………………3.
2、模型验证……………………………………………….……….4.
3、设计的内外环的PID控制器………………………………………10.
4、SIMULIN仿真…………………………………………………...13.
5、检测系统的鲁棒性………………………………………………16.
6、遇到问题…………………………………………………………19.
7、心得体会…………………………………………………………..20.
8、结论…………………………………...…………………………21.
9、参考文献…………………………………………………………..22.
1.系统模型的建立
如图01所示的“一阶倒立摆控制系统”中,设计一个能通过检测小车的位置和摆杆的摆动角,来适当控制电动机驱动力的大小的控制系统。
图01
1)对模型的理论分析建立一阶倒立摆的精确模型(实际模型)如下所示:
2).点进行线性化后得到(近似模型):
若只考虑摆角在工作点等零附近的细微变化,这是可以将模型线性化,得到近似模型,将J=m(l^2)/3,M=1kg代入即可得到要求的关于参数m、l的模型,让后再进行线性化表达式在模型验证中。
二.模型验证
1)子系统的建立
实际模型
图1
Fcn:
(((4*m*(l^2))/3)*u[1]+l*m*((4*m*(l^2))/3)*sin(u[3])*(u[2]^2)-10*(m^2)*(l^2)*sin(u[3])*cos(u[3]))/(((4*m*(l^2))/3)*(1+m)-(m^2)*(l^2)*power(cos(u[3]),2))
Fcn1:
(m*l*cos(u[3])*u[1]+(m^2)*(l^2)*sin(u[3])*cos(u[3])*(u[2]^2)-10*(1+m)*m*l*sin(u[3]))/((m^2)*(l^2)*power(cos(u[3]),2)-(1+m)*(4*m*(l^2))/3)
线性模型
图2
Fcn2:
(30*(1+m*u[2]-3*u[1])/(l*(4+m)
Fcn3:
(5*u[1]-30*m*u[2])/(4+m)
做完以上之后点击鼠标左键不放对图形进行选定,接着右击creatsubsystem如下图所示:
图3
2)模型的封装:
倒立摆的振子质量m和倒摆长度L作为子系统的参数:
图4
双击函数模块:
图5
欲改变其中的任一个参数只要点击其中二者之一的函数方块就行,在其中的m,l改就行了。
有两种实现的方法:
一种是利用示波器观察如下图所示,另一种是采用绘图程序实现。
1)示波器实现如图6:
图6
示波器显示结果如图7所示
图7
2)用程序实现:
%Inertedpendulum
%Modeltestinopenloop
%Signalsrecuperation
%将导入到xy.mat中的仿真试验数据读出
loadxy.mat
t=signals(1,:
);%读取时间信号
f=signals(2,:
);%读取作用力F信号
x=signals(3,:
);%读取精确模型中的小车位置信号
q=signals(4,:
);%读取精确模型中的倒摆摆角信号
xx=signals(5,:
);%读取简化模型中的小车位置信号
qq=signals(6,:
);%读取简化模型中的倒立摆摆角信号
%Drawingcontrolandx(t)responsesignals
%画出在控制力的作用下的系统响应曲线
%定义曲线的纵坐标、标题、坐标范围和曲线的颜色等特征
figure
(1)%定义第一个图形
hf=line(t,f(:
));%连接时间-作用力曲线
gridon;
xlabel('Time(s)')%定义横坐标
ylabel('Force(N)')%定义纵坐标
axis([0100.12])%定义坐标范围
axet=axes('Position',get(gca,'Position'),...
'XAxisLocation','bottom',...
'YAxisLocation','right','Color','None',...
'XColor','k','YClor','k');%定义曲线属性
ht=line(t,x,'color','r','parent',axet);%连接时间-小车位置曲线
ht=line(t,xx,'color','r','parent',axet);%连接时间-小车速度曲线
ylabel('Evolutionofthexposition(m)')%定义坐标名称
axis([0100.1])%定义坐标范围
title('Responsexandx''inmetertoaf(t)pulseof0.1N')%定义曲线标题名称
gtext('\leftarrowf(t)'),gext('x(t)\rightarrow'),gtext('\leftarrowx''(t)')
%drawingcontrolandtheta(t)responsesingals
figure
(2)
hf=line(t,f(:
));
gridon
xlabel('Time')
ylabel('ForceinN')
axet=axes('Position',get(gca,'Position'),...
'XAxisLocation','bottom',...
'YAxisLocation','right','Color','None',...
'XColor','k','YClor','k');
ht=line(t,q,'color','r','parent',axet);
ht=line(t,qq,'color','r','parent',axet);
ylabel('Angleevolution(rad)')
axis([01-0.30])
title('Response\theta(t)and\theta''(t)inradtoaf(t)pulseof0.1N')
gtext('\leftarrowf(t)'),gext('\theta(t)\rightarrow'),gtext('\leftarrow\theta''(t)')
在·m文件里写入如上程序,在运行该程序之前,先运行系统。
之后再运行此程序得出波形图如图所示。
观察结果如图8所示:
图8
三、设计的内外环的PID控制器
一阶倒立摆系统为“自不稳定的非最小相位系统”。
将系统小车位置作为“外环”,将摆杆摆角作为“内环”,设计的内外环的PID控制器。
其模型图如图9所示:
图9
3.1内环控制器设计
对系统内环采用反馈校正进行控制,其方框图如图6所示。
图6内环反馈校正方框图
反馈校正采用PD控制器,设其传递函数为
,为了抑制干扰,在前向通道上加上一个比例环节
。
设
的增益
,则内环控制系统的闭环传递函数为:
令
则内环控制器的传递函数为
内环控制系统的闭环传递函数为:
3.2外环控制器设计
图7外环系统结构图
由图7可知外环系统前向通道的传递函数为:
可见,系统开环传递函数为一个高阶且带不稳定零点的“非最小相位系统”。
因此,首先对系统外环模型进行降阶处理,若忽略W2(s)的高次项,则可近似为一阶传递函数为:
其次,对模型1G(s)进行近似处理,则1G(s)的传递函数为:
外环控制器也采用PD形式,其传递函数为
为了使系统有较好的跟随性,采用单位反馈构成外环反馈通道,即1D’'(s)=1,则系统的开环传递函数为
采用第十章基于Bode图法的希望特性设计方法,得K3=0.12,τ=0.877,取τ=1,则外环控制器的传递函数为:
一级倒立摆双闭环控制系统的方框图如图8所示。
图8一级倒立摆双闭环控制系统的方框图
4、在单位阶跃输入下,进行的SIMULINK仿真如下以及用示波
器观察的结果:
1)用示波器现实结果如图10所示:
图10
2)程序结果:
loadPID.mat
t=signals(1,:
);
q=signals(2,:
);
x=signals(3,:
);
%drawingx(t)andtheta(t)responsesignals
%画小车位置和摆杆角度的响应曲线
figure
(1)
hf=line(t,q));
gridon;
xlabel('Time(s)')
ylabel('Angleevolution(rad)')
axis([010-0.31.2])
axet=axes('Position',get(gca,'Position'),...
'XAxisLocation','bottom',...
'YAxisLocation','right','Color','None',...
'XColor','k','YClor','k');
ht=line(t,x,'color','r','parent',axet);
ylabel('Evolutionofthexpotion(m)')
axis([01-0.31.2])
title('\theta(t)and\x(t)Responsetoastepinput')
gtext('\leftarrowx(t)'),gext('\theta(t)\uppwrrow')
同上可知,得出的波形图如图11所示:
图11
3)编程求解系统性能指标:
最大超调量(max_overshoot)、
调节时间(settling_time)、上升时间(rise_time)。
LoadPID2049.mat
t=ans(1,:
);
y=ans(2:
3,:
);
figure
(1)
hf=line(t,q(:
));
gridon
axis([010-0.31.2])
ht=line(t,y,'color','r');
C=1;
C=dcgain(y);
max_overshoot=100*(max_y-C)/C%超调量计算
s=length(t);%调整时间计算
whiley(s)>0.98*C&&y(s)<1.02*C
s=s-1;
end
settling_time=t(s)
r1=1;%上升时间计算,以从稳态值的10%上升到90%定义
while(y(r1)<0.1*C)
r1=r1+1;
end
r2=1;
while(y(r2)<0.9*C)
r2=r2+1;
end
rise_time=t(r2)-t(r1)
step(sys)
运行完原理图之后,打开程序PID2049.m文件运行。
之后会出现波形,把波形图复制在word里,而在MATLAB中会出现x和theta的最大超调量(max_overshoot)、调节时间(settling_time)、上升时间(rise_time)。
数据,把这些数据记录在报告书中。
y_max_overshoot=
15.7314
y_rise_time=
1.2981
y_settling_time=
7.8013
q_max_overshoot=
0.0979
q_rise_time=
1.3267
q_settling_time=
4.2530
五、检验系统的鲁棒性
将对象作如下变换后,同样在单位阶跃的输入下,检验所设计控制系统的鲁棒性能,列表比较系统地性能指标(最大超调量、调节时间、上升时间)。
倒摆长度L不变,倒立摆的振子质量m从1kg分别改变为1.5kg、2kg、2.5kg、0.8、0.5kg
。
m=1,L=0.3
m=1.5,L=0.3
m=2,L=0.3
m=2.5,L=0.3
m=0.8,L=0.3
m=0.5,L=0.3
m=1,L=0.5
m=1,L=0.6
m=1,L=0.1
m=1,L=0.2
倒摆长度L不变,倒立摆的振子质量m从1kg分别改变为1.5kg、2kg、2.5kg、0.8kg、0.5kg;
(2)质量m不变,倒摆长度L从0.3m分别改变为0.5m、0.6m、0.2、0.1m。
对象参数
性能指标
振子质量
m/kg
倒摆长度
L/m
最大超调量
调节时间
上升时间
X
θ
X
θ
X
θ
1
0.3
13.8198
0.1261
7.0010
4.0524
1.2957
1.3401
1.5
0.3
10.1848
0.1415
5.0256
3.7754
1.2957
1.3564
2
0.3
5.0282
0.1638
3.9987
3.3237
1.0388
1.4957
2.5
0.3
9.0921
0.1954
5.0528
4.8528
1.0511
1.5257
0.8
0.3
15.1014
0.1205
7.7064
4.0823
0.6866
1.3316
0.5
0.3
16.8904
0.1127
8.2282
4.2166
1.3856
1.3200
1
0.5
11.8928
0.1558
5.4176
3.8193
1.3438
1.4314
1
0.6
11.9434
0.1696
5.5831
4.5831
1.1333
1.4787
1
0.2
14.8577
0.1104
7.4949
4.1335
1.1993
1.3432
1
0.1
15.7314
0.0979
7.8013
4.2530
1.2981
1.3267
六、遇到的问题及解决
1.函数表达式语法的错误。
比如u[3]^2*cos(u[3]),应该改为(u[3]^2)*cos(u[3])
2.在仿真之前应该对m和l的值进行相应的赋值,不然会出现错误。
3.xy.mat文件中的variablename和程序中的变量取名要一直,比如xy.mat文件中的variablename的名字是ans而程序中的变量名是signals,则系统会提示找不到signals变量值。
要查看空间变量可以用who命令。
4.起先以为说是按照课本的要求画图就可以了,于是就按照课本画出模型的原理图和利用子系统封装后的框图。
而且还按照课本要求把函数输入进去。
可是运行的时候发现错误。
提示说是函数输入有误,于是就很认真的对照课本跟自己输入的函数是否一致。
发现算是粗心大意了,原来该模型的函数算是比较繁琐的,在输函数的时候一定要注意认真的对待每个括弧。
5.在画模型图时,由于对SIMULINK有一点点的熟悉,所以画图比较快,但是却忘记在输出端加入示波器而按照课本里面的图形进行运行,发现运行出来不懂哪里去看波形,我百般不得起解,于是课余,我问同学,同学跟我说得在输出端加入示波器,运行的时候才能自动跳出波形图。
6.模型验证完之后,就是采用程序进行绘图,事先我糊里糊涂的桉书上程序照搬,可是发现程序好像有错。
之后问同学才知道说要在封装的系统双击把“ans”改成“signals”才能把程序运行出来。
7.做到PID内外环设计的时候,首先遇到的就是比例系数如何确定,这边也是在老师的提示下我才明白要用公式去推,其实真正的意义上是要懂得他代表什么。
还有就是所用的函数快要的是精确的模型才是正确。
8.在进行编程实现性能指标(超调量、上升时间、调整时间、终值)的要求上,对程序的编写以及理解能力提出了要求整个过程下来,还是懵懵懂懂的,我想这些都需要的是时间,最终在终值的问题上为难了我,不过还是同学帮我解决了。
七、心得体会
在设计的过程中,遇到了很多问题,在经过一次次测试、认真思考和讨论的过程中得到了解答。
总之一周的课设,让我觉得很累,但从中收获了很多,最终的成功让我觉得累也是值得的。
在此,感谢同学们的帮助以及老师在此次实验中的指导。
到大三下学期了,已经做过很多课程设计,而且也都是跟软件有关系的,发现像工科的课程每一门都有一款软件和之关系。
我们在平时的学习当中只是存在在教室里面,看着老师PPT上面的每个窗口,而没有亲身体验,我觉得是得不到知识,得不到动手自己实现输出结果的东西的。
每天坐在教室里只会让我们纸上谈兵而已,以上我犯的错误我认为都是没有平时亲身体验的结果,导致了做课设的时候按照课本按部就班的操作着,而后才知道是错误的,有的也是多此一举的。
matlab跟其他语言不一样(我用的比较多的编程语言,除了matlab就应该是c或c++了,VB和Delphi也接触过,我想版面(matlab版)大部分人也差不多),如果你抱着“把其他语言的思想运用在matlab里面”的话,那么我想,即使程序运行不出错,也很难把握matlab的精髓,也就很难发挥matlab的作用了。
所以,如果你是希望matlab作为VC的附属品,即你不想在matlab上面花太多功夫,只纯粹想用matlab来完成VC做不了或很难做成的任务的话,那么,这篇文章你也不需要再阅读下去了;如果你是希望掌握一门语言、一个工具,使它更有效为你服务的话,那么,希望本文对你有所帮助。
Matlab是一个基于矩阵运算的软件,这恐怕是众所周知的事情了,但是,真正在运用的时候(就是在编程的时候),许多人(特别是初学者)往往没有注意到这个问题,因此,for循环(包括while循环)满天飞…………..这不仅是暴殄天物(没有发挥matlab所长),还浪费了你宝贵的时间。
八、结论
(1)从理论上证明了所设计的“一阶倒立摆”双闭环控制的方案是可行的。
(2)“一阶倒立摆”的控制问题是一个非常典型且具有明确物理意义的运动控制系统问题,对其深入的分析和使用研究,有助于我们分析问题和解决问题的能力。
(3)不难得到所设计PID控制器可以是系统有较好的稳定性,抗干扰能力较强。
我认为该控制器下的校正系统达到比较合适的动态和稳定性能,能够保证系统正常工作,取得较好的控制性能。
通过该系统的设计,也说明了PID控制系统设计的一般步骤,提供了一套利用matlab进行控制器设计的有效方法,对PID控制系统设计具有借鉴意义。
九、参考文献
1.MATLAB5.3精要、编程及高级使用/程卫国/机械工业出版社
2.MATLAB5.0语言和程序设计/高俊斌/华中理工大学出版社
3.控制系统数字仿真和cad/张晓华/哈尔滨工业大学
4.