资源描述
1.一阶倒立摆建模
在忽略了空气流动阻力,以及各种摩擦之后,可将倒立摆系统抽象成小车和匀质杆组成的系统,如下图所示,其中:
M:小车质量
m:为摆杆质量
J:为摆杆惯量
F:加在小车上的力
x:小车位置
θ:摆杆与垂直向上方向的夹角
l :摆杆转动轴心到杆质心的长度
根据牛顿运动定律以及刚体运动规律,可知:
(1) 摆杆绕其重心的转动方程为
(2) 摆杆重心的运动方程为
得
(3)小车水平方向上的运动为
联列上述4个方程,可以得出
一阶倒立精确气模型:
式中J为摆杆的转动惯量:
若只考虑θ在其工作点附近θ0=0附近()的细微变化,则可以近似认为:
2.2 模型建立及封装
1、建立以下模型:
图2 模型验证原理图
2、 由状态方程可求得:
Fcn:(4/3*u[1]+4/3*m*l*sin(u[3])*power(u[2],2)-10*m*sin(u[3])*cos(u[3]))/(4/3*(1+m)-m*power(cos(u[3]),2))
Fcn1:(cos(u[3])*u[1]+m*l*sin(u[3])*cos(u[3])*power(u[2],2)-10*(1+m)*sin(u[3]))/(m*l*power(cos(u[3]),2)-4/3*l*(1+m))
Fun2:(4*u[1]-30*m*u[3])/(4+m)
Fun3:(u[1]-10*(1+m)*u[3])/(m*l-4/3*l*(1+m))
(其中J =mL^2/3,小车质量M=1kg,倒摆振子质量m=1Kg,倒摆长度l=1m,重力加速度g=10m/s^2)
将以上表达式导入函数。
3、匡选要封装区后选择[Edit>>Create Subsystem]便得以下系统:
图3 子系统建立
4、鼠标右击子系统模块,在模块窗口选项中选择[Edit>>Edit Mask>>Parameters],则弹出如下窗口,添加参数m和l。
图4 添加参数
5、将精确模型subsystem和简化模型subsystem1组合成以下系统以供验证(输入信号是由阶跃信号合成的脉冲,幅值及持续时间为0.1s)。
图5 系统模块封装
3 仿真验证
3.1 实验设计
假定使倒立摆在(θ=0,x=0)初始状态下突加微小冲击力作用,则依据经验知,小车将向前移动,摆杆将倒下。
3.2 编制绘图子程序
1、新建M文件输入以下程序并保存。
clc
load xy.mat
t=signals(1,:); %读取时间信号
f=signals(2,:); %读取作用力F信号
x=signals(3,:); %读取精确模型中的小车位置信号
q=signals(4,:); %读取精确模型中倒摆摆角信号
xx=signals(5,:); %读取简化模型中的小车位置信号
qq=signals(6,:); %读取简化模型中倒立摆摆角信号
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','YColor','k'); %定义曲线属性
ht=line(t,x,'color','r','parent',axet); %连接时间-小车位置曲线
ht=line(t,xx,'color','r','parent',axet); %连接时间-小车速度曲线
ylabel('Evolution of the xposition(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)'),gtext ('x (t) \rightarrow') , gtext (' \leftarrow x''(t)')
figure (2)
hf=line(t,f(:));
grid on
xlabel('Time')
ylabel('Force(N)')
axis([0 1 0 0.12])
axet=axes('Position',get(gca,'Position'),...
'XAxisLocation','bottom',...
'YAxisLocation','right','color','none',...
'XColor','k','YColor','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'' in rad to a f(t) pulse of 0.1 N' )
gtext('\leftarrow f (t)'), gtext ('\theta (t) \rightarrow'), gtext (' \leftarrow \theta''(t)'3.3 仿真验证
2、在系统模型中,双击子系统模块,则会弹出一个新窗口,在新窗口中输入m和l值,点击OK并运行,如图7所示。
图6 参数输入
3、运行M文件程序,执行该程序的结果如图8所示。
图7 模型验证仿真结果
从中可见,在0.1N的冲击力下,摆杆倒下(θ由零逐步增大), 小车位置逐渐增加,这一结果符合前述的实验设计,故可以在一定程度上确认该“一阶倒立摆系统”的数学模型是有效的。同时,由图中也可以看出,近似模型在0.8s以前与精确模型非常接近,因此,也可以认为近似模型在一定条件下可以表达原系统模型的性质。
4 双闭环PID控制器设计
一级倒立摆系统位置伺服控制系统如图10所示。
图10 一级倒立摆系统位置伺服控制系统方框图
4.1内环控制器的设计
内环采用反馈校正进行控制。
图11 内环系统结构图
控制器参数的整定:
令:
内环控制器的传递函数为:
内环控制系统的闭环传递函数为:
4.2外环控制器的设计
外环系统前向通道的传递函数为:
图12 外环系统结构图
外环控制器采用PD形式,其传递函数为:
图13 系统仿真结构图
5 仿真实验
1、根据已设计好的PID控制器,可建立图14系统,设置仿真时间为20ms,单击运行。(其中的对象模型为精确模型的封装子系统形式)
图14 SIMULINK仿真框图
2、新建M文件,输入以下命令并运行。
%将导入到PID.mat中的仿真试验数据读出
load PID.mat
t=signals(1,:);
q=signals(2,:);
x=signals(3,:);
%drawing x(t) and thera(t) response signals
%画小车位置和摆杆角度的响应曲线
figure(1)
hf=line(t,q(:));
grid on
xlabel ('Time (s)')
axis([0 10 -0.3 1.2])
ht=line(t,x,'color','r');
axis([0 10 -0.3 1.2])
title('\theta(t) and x(t) Response to a step input')
gtext('\leftarrow x(t)'),gtext('\theta(t) \uparrow')
执行该程序的结果如图9所示,从中可见,双闭环PID控制方案是有效的。
图15 系统仿真结果图
展开阅读全文