PID控制的一阶倒立摆

PID控制的一阶倒立摆
PID控制的一阶倒立摆

一.系统模型的建立

如图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])*co s(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)

做完以上之后点击鼠标左键不放对图形进行选定,接着右击creat subsystem如下图所示:

图3

2)模型的封装:

倒立摆的振子质量m和倒摆长度L作为子系统的参数:

图4

双击函数模块:

图5

欲改变其中的任一个参数只要点击其中二者之一的函数方块就行,在其中的m,l改就行了。

有两种实现的方法:一种是利用示波器观察如下图所示,另一种是采用绘图程序实现。

1)示波器实现如图6:

图6

示波器显示结果如图7所示

图7

2)用程序实现:

%Inerted pendulum

%Model test in open loop

%Signals recuperation

%将导入到xy.mat中的仿真试验数据读出

load xy.mat

t=signals(1,: ); %读取时间信号

f=signals(2,: ); %读取作用力F信号

x=signals(3,: ); %读取精确模型中的小车位置信号q=signals(4,: ); %读取精确模型中的倒摆摆角信号xx=signals(5,: ); %读取简化模型中的小车位置信号qq=signals(6,: ); %读取简化模型中的倒立摆摆角信号%Drawing control and x(t) response signals

%画出在控制力的作用下的系统响应曲线

%定义曲线的纵坐标、标题、坐标范围和曲线的颜色等特征

figure(1) %定义第一个图形

hf=line(t,f (:)); %连接时间-作用力曲线

grid on;

xlabel('Time (s)') %定义横坐标

ylabel('Force (N)') %定义纵坐标

axis([0 1 0 0.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('Evolution of the x position (m)') %定义坐标名称

axis([0 1 0 0.1]) %定义坐标范围

title('Response x and x'' in meter to a f (t)pulse of 0.1 N')%定义曲线标题名称

gtext ( '\leftarrow f (t)'),gext('x (t) \rightarrow'),gtext ( '\leftarrow x''(t)')

%drawing control and theta (t)response singals

figure (2)

hf=line (t, f (:));

grid on

xlabel('Time')

ylabel('Force in N')

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('Angle evolution (rad)')

axis([0 1 -0.3 0])

title('Response\theta (t) and \theta'' (t)in rad to a f (t)pulse of 0.1 N')

gtext ( '\leftarrow f (t)'),gext('\theta (t) \rightarrow'),gtext ( '\leftarrow\theta ''(t)')

在·m文件里写入如上程序,在运行该程序之前,先运行系统。之后再运行此程序得出波形图如图所示。

观察结果如图8所示:

图8

三、设计的内外环的PID 控制器

一阶倒立摆系统为“自不稳定的非最小相位系统”。将系统小车位置作为“外环”,将摆杆摆角作为“内环”,设计的内外环的PID 控制器。其模型图如图9所示:

图9

3.1 内环控制器设计

对系统内环采用反馈校正进行控制 ,其方框图如图6所示。

1.6

()

s θ2()

G s 2'()

D s -

-K

()

r s θ()

D s +

图6 内环反馈校正方框图

反馈校正采用PD 控制器,设其传递函数为2

'

12

()D s K s K =+,为了抑制干扰,

在前向通道上加上一个比例环节

2()D s K

=。

2()

D s 的增益20K =-,则内环控制系统的闭环传递函数为:

222'

2

212()64

()1()()

646440

s s K K G s W s K K G s D s s K s K =

=

+++-2644064

K -=??10.175

K =?

则内环控制器的传递函数为

内环控制系统的闭环传递函数为:

3.2 外环控制器设计

图7 外环系统结构图

由图7可知外环系统前向通道的传递函数为:

可见,系统开环传递函数为一个高阶且带不稳定零点的“非最小相位系统”。因此,首先对系统外环模型进行降阶处理,若忽略W 2 (s)的高次项,则可近似为

一阶传递函数为:

其次,对模型 1G (s)进行近似处理,则1G (s)的传递函数为:

外环控制器也采用 PD 形式,其传递函数为

为了使系统有较好的跟随性,采用单位反馈构成外环反馈通道,即1D’' (s) =1,则系统的开环传递函数为

0.7ξ=2'

()0.175 1.625

D s s =+22

64()11.264

W s s s =

++2

212

2

64(0.410)()()(11.264)

s W s G s s s s -+=

++264()11.264

W s s ≈

+12

10()G s s

13()(1)

D s K s τ=+

采用第十章基于 Bode 图法的希望特性设计方法,得K 3 = 0.12,τ = 0.877,取τ =1,则外环控制器的传递函数为:

一级倒立摆双闭环控制系统的方框图如图8所示。

图8 一级倒立摆双闭环控制系统的方框图

1()0.12(1)

D s s =+0.12(1)

s + 1.6

()

W s ()

X s ()

s θ()

F s ()

r X s --

一级倒立摆

-20

0.175 1.625

s +X 调节器

θ调节器

四、在单位阶跃输入下,进行的SIMULINK仿真如下以及用示波

器观察的结果:

1)用示波器现实结果如图10所示:

图10

2)程序结果:

load PID.mat

t=signals(1,: );

q=signals(2,: );

x=signals(3,: );

%drawing x(t)and theta(t) response signals

%画小车位置和摆杆角度的响应曲线

figure(1)

hf=line(t,q));

grid on;

xlabel('Time (s)')

ylabel('Angle evolution(rad)')

axis([0 10 -0.3 1.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('Evolution of the x potion(m)')

axis([0 1 -0.3 1.2])

title(' \theta (t) and \x (t)Response to a step input')

gtext ( '\leftarrow x (t)'),gext('\theta (t)\uppwrrow')

同上可知,得出的波形图如图11所示:

图11

3)编程求解系统性能指标:最大超调量( max_overshoot)、

调节时间(settling_time)、上升时间(rise_time)。Load PID2049.mat

t=ans(1,:);

y=ans(2:3,:);

figure(1)

hf=line(t,q(:));

grid on

axis([0 10 -0.3 1.2])

ht=line(t,y,'color','r');

C=1;

C=dcgain(y);

max_overshoot=100*(max_y-C)/C %超调量计算

s=length(t); %调整时间计算

while y(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

六、遇到的问题及解决

1.函数表达式语法的错误。比如u[3]^2*cos(u[3]),应该改为(u[3]^2)*cos(u[3])

2.在仿真之前应该对m和l的值进行相应的赋值,不然会出现错误。

3. xy.mat文件中的variable name 与程序中的变量取名要一直,比如xy.mat 文件中的variable name 的名字是ans 而程序中的变量名是signals ,则系统会提示找不到signals变量值。要查看空间变量可以用who命令。

4.起先以为说是按照课本的要求画图就可以了,于是就按照课本画出模型的原理图与利用子系统封装后的框图。而且还按照课本要求把函数输入进去。可是运行的时候发现错误。提示说是函数输入有误,于是就很认真的对照课本跟自己输入的函数是否一致。发现算是粗心大意了,原来该模型的函数算是比较繁琐的,在输函数的时候一定要注意认真的对待每个括弧。

5.在画模型图时,由于对SIMULINK有一点点的熟悉,所以画图比较快,但是却忘记在输出端加入示波器而按照课本里面的图形进行运行,发现运行出来不懂哪里去看波形,我百般不得起解,于是课余,我问同学,同学跟我说得在输出端

加入示波器,运行的时候才能自动跳出波形图。

6.模型验证完之后,就是采用程序进行绘图,事先我糊里糊涂的桉书上程序照搬,可是发现程序好像有错。之后问同学才知道说要在封装的系统双击把“ans”改成“signals”才能把程序运行出来。

7.做到PID内外环设计的时候,首先遇到的就是比例系数如何确定,这边也是在老师的提示下我才明白要用公式去推,其实真正的意义上是要懂得他代表什么。还有就是所用的函数快要的是精确的模型才是正确。

8.在进行编程实现性能指标(超调量、上升时间、调整时间、终值)的要求上,对程序的编写以及理解能力提出了要求整个过程下来,还是懵懵懂懂的,我想这些都需要的是时间,最终在终值的问题上为难了我,不过还是同学帮我解决了。

八、结论

(1) 从理论上证明了所设计的“一阶倒立摆”双闭环控制的方案是可行的。

(2) “一阶倒立摆”的控制问题是一个非常典型且具有明确物理意义的运动控制系统问题,对其深入的分析与应用研究,有助于我们分析问题与解决问题的能力。

(3)不难得到所设计PID控制器可以是系统有较好的稳定性,抗干扰能力较强。我认为该控制器下的校正系统达到比较合适的动态和稳定性能,能够保证系统正常工作,取得较好的控制性能。通过该系统的设计,也说明了PID控制系统设计的一般步骤,提供了一套利用matlab进行控制器设计的有效方法,对PID控制系统设计具有借鉴意义。

九、参考文献

1.MATLAB 5.3 精要、编程及高级应用 / 程卫国 / 机械工业出版社

2.MATLAB 5.0语言与程序设计 / 高俊斌 / 华中理工大学出版社

3.控制系统数字仿真与cad / 张晓华 / 哈尔滨工业大学

相关主题
相关文档
最新文档