倒立摆控制系统实验报告
实验一建立一级倒立摆的数学模型
一、实验目的
学习建立一级倒立摆系统的数学模型,并进行Matlab仿真。
二、实验内容
写出系统传递函数和状态空间方程,用Matlab进行仿真。
三、Matlab源程序及程序执行结果
⑴Matlab源程序
⑵给出系统的传递函数和状态方程
传递函数gs(输出为摆杆角度)
传递函数gspo(输出为小车位置)
状态空间sys(A,B,C,D)
⑶给出传递函数极点和系统状态矩阵A的特征值传递函数gs极点P
传递函数gspo极点Po
系统状态矩阵A的特征值E
⑷给出系统开环脉冲响应和阶跃响应的曲线系统开环脉冲响应曲线
系统开环阶跃响应曲线
四、思考题
(1) 由状态空间方程转化为传递函数,是否与直接计算传递函数相等?
通过比较,可知传递函数gspo由状态空间方程转化为传递函数时,多了s的一次项,但是系数可以近似为0。传递函数gs,则完全相等。所以,状态空间方程转化为传递函数与直接计算传递函数可以认为是相等的。
(2) 通过仿真表明开环系统是否稳定?请通过极点(特征值)理论来分析。
开环系统不稳定。
根据极点理论可知,系统稳定的条件是极点均在左半平面。但是,系统有一个极点5.4042不在左半平面。因此,系统不稳定(3) 传递函数的极点和状态方程的特征值的个数、大小是否相等?如果不相等,请解释
其原因。
传递函数gspo的极点和状态方程的特征值的个数、大小相等。但是传递函数gs的极点和状态方程的特征值个数不相等。因为存在零极点对消。
Matlab源程序:
clear all;
f1=0.001;
%实际系统参数
M=1.32;
m=0.132;
b=0.1;
l=0.27;
I=0.0032;
g=9.8;
T=0.02;
%求传递函数gs(输出为摆杆角度)和gspo(输出为小车位置)
q=(M+m)*(I+m*l^2)-(m*l)^2;
num=[m*l/q 0];
den=[1 b*(I+m*l^2)/q -(M+m)*m*g*l/q -b*m*g*l/q];
gs=tf(num,den);
numpo=[(I+m*l^2)/q 0 -m*g*l/q];
denpo=[1 b*(I+m*l^2)/q -(M+m)*m*g*l/q -b*m*g*l/q 0];
gspo=tf(numpo,denpo);
%求状态空间sys(A,B,C,D)
p=I*(M+m)+M*m*l^2;
A=[0 1 0 0;0 -(I+m*l^2)*b/p m^2*g*l^2/p 0;0 0 0 1;0 -m*b*l/p m*g*l*(M+m)/p 0];
B=[0;(I+m*l^2)/p;0;m*l/p];
C=[1 0 0 0;0 0 1 0];
D=[0;0];
sys=ss(A,B,C,D);
%通过传递函数求系统(摆杆角度和小车位置)的开环脉冲响应t=0:T:5;
y1=impulse(gs,t);
y2=impulse(gspo,t);
figure(1);
plot(t,y2,'b',t,y1,'r');
xlabel('t/s');
ylabel('Position/m or Angle/rad');
axis([0 2 0 80]);
legend('Car Position','Pendulum Angle');
%将状态空间方程sys转化为传递函数gs0
gs0=tf(sys);
%通过状态方程求系统(摆杆角度和小车位置)的开环脉冲响应t=0:T:5;
y=impulse(sys,t);
figure(2);
plot(t,y(:,1),t,y(:,2),'r');
xlabel('t/s');
ylabel('Position/m or Angle/rad');
axis([0 2 0 80]);
legend('Car Position','Pendulum Angle');
%通过传递函数求系统(摆杆角度和小车位置)的开环阶越响应t=0:T:5;
y1=step(gs,t);
y2=step(gspo,t);
figure(3);
plot(t,y2,'b',t,y1,'r');
axis([0 2.5 0 80]);
xlabel('t/s');
ylabel('Position/m or Angle/rad');
legend('Car Position','Pendulum Angle');
%通过状态方程求系统(摆杆角度和小车位置)的开环阶越响应t=0:T:5;
y=step(sys,t);
figure(4);
plot(t,y(:,1),t,y(:,2),'r');
xlabel('t/s');
ylabel('Position/m or Angle/rad');
axis([0 2.5 0 80]);
legend('Car Position','Pendulum Angle');
%求传递函数极点
P=pole(gs);
Po=pole(gspo);
%求A的特征值
E=eig(A);
实验二倒立摆系统控制算法的状态空间法设计
一、实验目的
学习如何使用状态空间法设计系统的控制算法。
二、实验内容
用状态空间法设计控制器,使得当在小车上施加 0.2m 的阶跃信号时,闭环系统的响应指标为:
(1) 杆角度μ 和小车位移x的稳定时间小于5秒
(2) x的上升时间小于2秒2
(3) μ 的超调量小于20度(0.35弧度)
(4) 稳态误差小于4%.
三、Matlab源程序及程序执行结果
⑴给出Matlab程序的执行结果和仿真图形(确定K和反馈后的响应曲线);
反馈后的响应曲线
⑵给出无扰动时两次不同K 值下,小车的稳定位置P1和摆杆的稳定角度Pend1;
①K =
-14.1421 -12.1467 63.5825 11.8413
小车的稳定位置P1=-0.01
绿色的曲线为摆杆的稳定角度Pend1=0.002度②K =
-14.1421 -12.1570 63.5837 11.8416
小车的稳定位置P1=-0.007
绿色的曲线为摆杆的稳定角度Pend1=0.0015度
⑶给出阶跃输入时两次不同 K 值下,小车的稳定位置 P2-P1 和摆杆的稳定角度Pend2
①K =
-14.1421 -12.1467 63.5825 11.8413
小车的稳定位置 P2-P1=0.0825- (-0.01)=0.0925
摆杆的稳定角度Pend2=0.008度
②K =
-14.1421 -12.1570 63.5837 11.8416
小车的稳定位置 P2-P1=0.085- (-0.007)=0.092
摆杆的稳定角度Pend2=0.005度
⑷给出两次不同 K 值下,实际系统的响应曲线,并计算实验要求中的四项响应指标,并注意要利用实验三中统计出的响应时间延迟修正响应曲线。 ①K =
-14.1421 -12.1467 63.5825 11.8413
00 =(0.11-0.0825)/0.0925=29.7% t p = (4100-3880)/1000*8.8=1.936s
t r =(4030-3880)/1000*8.8=1.32s t s =(4800-3880)/1000*8.8=8.096s
②K =
-14.1421 -12.1570 63.5837 11.8416
00 =(0.11-0.085)/0.092=27.17% t p = (3025-2840)/1000*8.8=1.628s
t r =(2955-2840)/1000*8.8=1.012s t s =(4800-3900)/1000*8.8=7.92s
四、思考题
(1) 计算Ac 的特征值。 ①K =
-14.1421 -12.1467 63.5825 11.8413
②K =
-14.1421 -12.1570 63.5837 11.8416
(2) 通过仿真分析Q11和Q33的大小对控制效果的影响(Q11为Q 阵的第(1; 1)个元素):
?固定Q33 ,改变Q11
Q33=100 Q11=100(红)、500(蓝)、1000(绿)
从图中可以看出Q11增大,角度超调随着增大,位置的超调基本不变,但是响应时间缩短了。
?固定Q11 ,改变Q33
Q11=100 Q33=100(红)、1000(蓝)、2000(绿)
从图中可以看出Q33增大,角度超调减小,位置的超调基本不变,但是响应时间延长了。
Matlab源程序:
clear all;
f1=0.001;
%实际系统参数
% M=1.096;
% m=0.109;
% b=0.25;
% l=0.25;
% I=0.0034;
% g=9.8;
% T=0.001;
%求系统状态空间参数
M=1.32;
m=0.132;
b=0.22;
l=0.27;
I=0.0032;
g=9.8;
T=0.02;
p=I*(M+m)+M*m*l^2;
A=[0 1 0 0;0 -(I+m*l^2)*b/p m^2*g*l^2/p 0;0 0 0 1;0 -m*b*l/p m*g*l*(M+m)/p 0];
B=[0;(I+m*l^2)/p;0;m*l/p];
C=[1 0 0 0;0 0 1 0];
D=0;
%求反馈向量K
R=1;
Q1=200;
Q2=0;
Q3=100;
Q=[Q1 0 0 0;0 Q2 0 0;0 0 Q3 0;0 0 0 0];
K=lqr(A,B,Q,R);
%求状态反馈后的系统sysstate
Ac=A-B*K;
Bc=B*K(1); %输入变换使输入与反馈的量纲匹配
sysstate=ss(Ac,Bc,C,D);
%对lqr控制系统进行仿真
t=0:T:5;
U=0.2*ones(size(t));
y=lsim(sysstate,U,t);
figure(1);
hold on;
plot(t,y(:,1),t,y(:,2),'r');
box on;
xlabel('t/s');
ylabel('Position/m or Angle/rad');
legend('Car Position','Pendulum Angle');
实验三研究倒立摆系统对信号的跟踪
一、实验目的
观察倒立摆对于不同输入信号的跟踪情况,加深对状态空间和状态反馈的理解。
二、实验内容
在平衡位置,分别设定下列三种信号,记录倒立摆的运动情况:
(1) 方波信号:频率0.001Hz,幅值0.05m
(2) 正弦波信号:频率0.001Hz,幅值0.05m
(3) 锯齿波信号:频率0.001Hz,幅值0.05m
三、 Matlab源程序及程序执行结果
⑴Matlab源程序
⑵给出Matlab的仿真图形(三种扰动下的响应曲线)