一阶系统matlab仿真
- 格式:doc
- 大小:52.00 KB
- 文档页数:2
一阶倒立摆控制系统设计matlab一、控制系统简介控制系统是指通过对某些物理系统或过程的改变以获取期望输出或行为的一种系统。
其中涉及到了对系统的建模、分析以及控制方法的选择和设计等多方面的问题。
控制系统可以通过标准的数学和物理模型来描述,并可以通过物理或者仿真实验进行验证。
本文将围绕一阶倒立摆控制系统设计和仿真展开。
主要内容包括:1.一阶倒立摆系统简介2.系统建模3.系统分析4.设计控制器5.仿真实验及结果分析一阶倒立摆(controlled inverted pendulum)是一种比较常见的控制系统模型。
它的系统模型简单,有利于系统学习和掌握。
一般而言,一阶倒立摆系统是由一个竖直的支杆和一个质量为$m$的小球组成的。
假设球只能在竖直方向上运动,当球从垂直平衡位置偏离时,支杆会向相反的方向采取动作,使得小球可以回到平衡位置附近。
为了控制一阶倒立摆系统,我们首先需要对其进行建模。
由于系统并不是非常复杂,所以建模过程相对简单。
假设支杆长度为$l$,支杆底端到小球的距离为$h$,支杆与竖直方向的夹角为$\theta$,小球的质量为$m$,地球重力为$g$,该系统的拉格朗日方程可以表示为:$L =\frac{1}{2}m\dot{h}^{2}+\frac{1}{2}ml^{2}\dot{\theta}^{2}-mgh\cos{\theta}-\frac{1}{2}I\dot{\theta}^{2}$$I$表示支杆的惯性矩,它可以通过支杆的质量、长度以及截面积等参数计算得出。
$h$和$\theta$分别表示小球和支杆的位置。
我们可以通过拉格朗日方程可以得出系统的动力学方程:$b$表示摩擦系数,$f_{c}$表示对支杆的控制力。
由于一阶倒立摆会发生不稳定的倾斜运动,即未受到外部控制时会继续倾斜。
我们需要对系统加上控制力,使得系统保持在稳定的位置上。
在进行控制器设计之前,我们需要对系统进行分析,以便更好地了解系统在不同条件下的特性表现。
一阶倒立摆模糊控制仿真实验分析报告%mainclearclose all%load table.matglobal Table;global RULE;global UCenter;global Width;global num;global RuleMatch; %前件匹配方式0 取小;1乘积global Defuzzy; %反模糊化方法0: COG ; 1:COA; 2:MAXglobal g0;global g1;global h;x=[0.4,0,0];RuleMatch = 1; %前件匹配方式0 取小;1乘积Defuzzy = 0;%反模糊化方法0: COG ; 1:COA; 2:MAXg0=1.5;g1=0.1;h=1;% u=0;% Table = u;% [m,n]=size(u);% num = (m-1)/2;%u=[];RULE =[2, 2, 2, 1, 0; ...2, 2, 1, 0,-1;...2, 1, 0,-1,-2;...1, 0,-1,-2,-2;...0,-1,-2,-2,-2];%% RULE =[2,2,1,1,0; ...% 2,1,1,0,-1;...% 1,1,0,-1,-1;...% 1,0,-1,-1,-2;...% 0,-1,-1,-2,-2];RULE=RULE + 3*ones(size(RULE));%原始的%UCenter=[-20,-10,0,10,20];%改进的%UCenter=[-25,-15,0,15,25];UCenter=[-20,-15,0,15,20];Width(1)=(UCenter(5)-UCenter(4))/2;Width(2)=(UCenter(5)-UCenter(3));Width(3)=(UCenter(4)-UCenter(3))*2;Width(4)=Width(2);Width(5)=Width(1);x=x';[t,y]= ode45('P_Pendulum',[0,5],x);% [t,y]= ode45('P_Pendulum_tab',[0,10],x);% y2=y.*y;% inty = intnum(t,y2)%% int_e2 = inty(1)+inty(2);% int_u2 = inty(3);%int_y2 = sum(y.^2);%int_e2 = int_y2(1)+int_y2(2);%int_u2 = int_y2(3);figuresubplot(2,1,1)plot(t,y(:,1 ),'r',t,y(:,2),'k')%xlabel('t(sec)')% str1 = sprintf('x(0)=[%2.2f,%2.2f]',x(1),x(2)); % Title(str1,'Interpreter','latex','fontsize',14)%% str1=sprintf('t(sec)---index:$\\int{e^{T}(t)e(t)dt}=$ %f', int_e2);%str1 = '$\int{e^2}dt$'% text(6,0,str1,'Interpreter','latex','fontsize',14)%% xlabel(str1,'Interpreter','latex','fontsize',14)legend('x1(rad)', 'x2(rad/s)')title('输出隶属函数中心值:[-20,-15,0,15,20]')subplot(2,1,2)plot(t,y(:,3),'r')xlabel('t(sec)')ylabel('u(N)')% str1=sprintf('t(sec)--index:$\\int{u^{2}(t)dt}$= %f', int_u2);% %H = Title(str1,'Interpreter','latex','fontsize',14)% xlabel(str1,'Interpreter','latex','fontsize',14)% inverted pendulum stabilized% program on 2006,10,26function xdot = P_Pendulum(t,x)global RULE;global UCenter;global step;global k;global Kc;global QQ;global Width;global RuleMatch; %前件匹配方式0 取小;1乘积global Defuzzy; %反模糊化方法0: COG ; 1:COA; 2:MAXglobal g0;global g1;global h;M = 1;m =0.5;g = 9.8;l = 0.5;a = 1/(m+M);%计算隶属度mu_e= emembershipdegree(-x(1)*g0);mu_de = demembershipdegree(-x(2)*g1);%pausemu_e_id = find(mu_e>0);mu_de_id = find(mu_de>0);eLen= length(mu_e_id);deLen = length(mu_de_id);mu_pre= zeros(1,4);fuzzy_out = zeros(1,4);weight = zeros(1,4);in =1;%规则匹配for (i=1:eLen)for(j=1:deLen)switch RuleMatchcase 0%前件采用取小推理mu_pre(in)= min(mu_e(mu_e_id(i)),mu_de(mu_de_id(j)));case 1%前件采用乘积推理mu_pre(in)= mu_e(mu_e_id(i))*mu_de(mu_de_id(j));end%计算规则匹配度fuzzy_out(in) = RULE(mu_e_id(i),mu_de_id(j));in=in+1;endendnRule = eLen *deLen;u = 0;summu =0;%反模糊化for(i=1:nRule)switch Defuzzycase 0%按照重心法计算(COG)weight(i)= Width(fuzzy_out(i))*(mu_pre(i)-mu_pre(i)*mu_pre(i)/2);case 1% 按照中心平均法weight(i)=mu_pre(i);case 2% 取大法(大中求中)[max_v,max_id] = max(mu_pre);weight(max_id)=1;endu = weight(i)*UCenter(fuzzy_out(i))+u;summu =summu + weight(i);end%u=0;u=h*u/summu;if (u>20)u=20;endif (u<-20)u=-20;endt% if(t>2.5 && t<2.6 )% u=u+20;% end% if (u>20)% u=20;% end%% if (u<-20)% u=-20;% end% xdot(1)=x(2);% xdot(2)=(g*sin(x(1))-a*m*l*x(2)*x(2)*sin(2*x(1))/2-a*cos(x(1))*x(3))/(4*l/3-a*m*l*cos(x(1))*cos(x(1))); % xdot(3)=-100*x(3)+100*u;% x(3) = u;xdot(1)=x(2);xdot(2)=(g*sin(x(1))-a*m*l*x(2)*x(2)*sin(2*x(1))/2-a*cos(x(1))*x(3))/(4*l/3-a*m*l*cos(x(1))*cos(x(1))); xdot(3)=-100*x(3)+100*u;xdot = xdot';y=zeros(1,5);if (x<= -pi/2)y(1) =1 ;elseif (x<=-pi/4)y(1) = abs(x+pi/4)/(pi/4);y(2) = 1-abs(x+pi/4)/(pi/4); elseif (x<= 0)y(2) = 1-abs(x+pi/4)/(pi/4);y(3) = 1- abs(x)/(pi/4);elseif (x<=pi/4)y(3) = 1- abs(x)/(pi/4);y(4) = 1-abs(x-pi/4)/(pi/4); elseif (x<=pi/2)y(4) = 1-abs(x-pi/4)/(pi/4);y(5) = abs(x-pi/4)/(pi/4);elseif (x>pi/2)y(5) =1;endfunction y = demembershipdegree(x) y=zeros(1,5);if (x<= -pi/4)y(1) =1 ;elseif (x<=-pi/8)y(1) = abs(x+pi/8)/(pi/8);y(2) = 1-abs(x+pi/8)/(pi/8); elseif (x<= 0)y(2) = 1-abs(x+pi/8)/(pi/8);y(3) = 1- abs(x)/(pi/8);elseif (x<=pi/8)y(3) = 1- abs(x)/(pi/8);y(4) = 1-abs(x-pi/8)/(pi/8); elseif (x<=pi/4)y(4) = 1-abs(x-pi/8)/(pi/8);y(5) = abs(x-pi/8)/(pi/8);elseif (x>pi/4)y(5) =1;endy=zeros(1,5); if (x<= -30) y(1) =0 ; elseif (x<=-20)y(1) = 1-abs(x+20)/(10); elseif (x<=-10)y(1) = 1-abs(x+20)/(10); y(2) = 1-abs(x+10)/(10); elseif (x<= 0)y(2) = 1-abs(x+10)/(10); y(3) = 1- abs(x)/(10); elseif (x<=10)y(3) = 1- abs(x)/(10); y(4) = 1-abs(x-10)/(10); elseif (x<=20)y(4) = 1-abs(x-10)/(10); y (5) = 1-abs(x-20)/(10); elseif (x>30) elseif (x<=30)y(5) = 1-abs(x-20)/(10); elseif (x>30) y(5) =0; end不同的推理方式,反模糊化方法初始值:x0=[0.1 0]’t(sec)u (N )t(sec)u (N )t(sec)u (N )t(sec)u (N )t(sec)u (N )t(sec)u (N )不同的初始条件前件隶属度函数计算方法:乘积模糊蕴含关系计算方法:取小 反模糊化方法:COGt(sec)u (N )t(sec)u (N )t(sec)u (N )t(sec)u (N )结论:当初始角达到一定程度时,控制力趋向饱和,系统不稳定。
一阶系统的z变换在matlab中的应用1. 概述z变换是数字信号处理中常用的一种数学工具,用于将连续时间信号转换为离散时间信号。
在matlab中,z变换可以通过一些函数和工具实现,特别是在一阶系统中,z变换可以起到非常重要的作用。
2. 一阶系统的传递函数一阶系统是指系统的阶数为1的系统,在控制系统和信号处理中有着广泛的应用。
一阶系统的传递函数一般可以表示为:H(z) = (b0 + b1 * z^-1) / (1 + a1 * z^-1)其中,b0、b1、a1为系统的系数,z^-1表示z的倒数。
一阶系统的传递函数可以通过z变换来进行仿真和分析。
3. Matlab中的z变换在matlab中,可以使用zpk、tf和c2d等函数来进行z变换的操作。
其中,zpk函数用于创建或转换零极点模型,tf函数用于创建传递函数模型,c2d函数用于进行连续时间到离散时间的转换。
4. 一阶系统的z变换示例接下来,我们通过一个具体的示例来介绍一阶系统在matlab中的z变换操作。
假设我们有一个一阶系统的传递函数为:H(s) = 1 / (s + 1)我们首先可以使用tf函数来创建传递函数模型:Hs = tf([1], [1, 1])接下来,我们可以使用c2d函数将连续时间系统转换为离散时间系统:Ts = 0.1 离散化时间间隔Hz = c2d(Hs, Ts, 'tustin') 使用tustin方法进行离散化通过以上操作,我们就可以得到一阶系统在离散时间下的传递函数Hz。
5. 仿真分析在得到离散时间下的传递函数后,我们可以使用zpk函数来创建或转换零极点模型,并进行进一步的仿真分析。
我们可以使用zpk函数来获得离散时间下的零极点模型:[z, p, k] = zpkdata(Hz, 'v') 获取零点、极点和增益disp('离散时间下的零点:')disp(z)disp('离散时间下的极点:')disp(p)通过分析离散时间下的零极点,我们可以对系统的稳定性和动态特性进行评估和分析。
实验一 一阶系统及二阶系统时域特性MatLab 仿真实验一、实验目的1、使学生通过实验中的系统设计及理论分析方法,帮助学生进一步理解自动控制系统的设计与分析方法。
2、熟悉仿真分析软件。
3、利用Matlab 对一、二阶系统进行时域分析。
4、掌握一阶系统的时域特性,理解常数T 对系统性能的影响。
5、掌握二阶系统的时域特性,理解二阶系统重要参数对系统性能的影响。
二、实验设备计算机和Matlab 仿真软件。
三、实验内容1、一阶系统时域特性 一阶系统11)(+=Ts s G ,影响系统特性的参数是其时间常数T ,T 越大,系统的惯性越大,系统响应越慢。
Matlab 编程仿真T=0.4,1.2,2.0,2.8,3.6,4.4系统单位阶跃响应。
2、二阶系统时域特性a 、二阶线性系统 16416)(2++=s s s G 单位脉冲响应、单位阶跃响应、单位正弦输入响应的 Matlab 仿真。
b 、下图为具有一微分负反馈的位置随动系统框图,求出系统的闭环传递函数,根据系统瞬态性能指标的定义利用Matlab 分别计算微分反馈时间常数τ为0,0.0125,0.025时系统的上升时间、峰值时间、最大超调量和调整时间。
C 、二阶线性系统3612362++s s ξ,当ξ为0.1,0.2,0.5,0.7,1.0,2.0时,完成单位阶跃响应的Matlab 仿真,分析ξ值对系统响应性能指标的影响。
四、实验要求1、进入机房,学生要严格遵守实验室规定。
2、学生独立完成上述实验,出现问题,教师引导学生独立分析和解决问题。
3、完成相关实验内容,记录程序,观察记录响应曲线,响应曲线及性能指标进行比较,进行实验分析4、分析系统的动态特性。
5、并撰写实验报告,按时提交实验报告。
五、Matlab 编程仿真并进行实验分析1、一阶系统时域特性实验代码:运行曲线:实验分析:由上图分析可知,一阶系统时间常数越大,图像图线越晚达到常值输出,即时间常数T影响系统参数,时间常数越大,系统的惯性越大,系统响应越慢。
仿真实验○一:控制系统的时域分析一、实验目的:1.观察控制系统的时域响应;2.记录单位阶跃响应曲线;3.掌握时间响应分析的一般方法;4.初步了解控制系统的调节过程。
二、实验步骤:1.开机进入Matlab6.1运行界面。
2.Matlab指令窗:"Command Window". 运行指令:con_sys; 进入本次实验主界面。
3.分别双击上图中的三个按键,依次完成实验内容。
4.本次实验的相关Matlab函数:tf([num],[den])可输入一传递函数。
step(G,t)在时间范围t秒内,画出阶跃响应图。
三、实验内容:1、观察一阶系统G=1/(T+s) 的时域响应:取不同的时间常数T,分别观察该系统的脉冲响应、阶跃响应、斜坡响应以及单位加速度响应。
结论:时间常数越小,响应越迅速。
2、二阶系统的时域性能分析:(1)调节时间滑块,使阶跃响应最终出现稳定值。
(2)结合系统的零极点图,观察自然频率与阻尼比对极点位置的影响。
(3)结合时域响应图,观察自然频率与阻尼比对阶跃响应的影响。
结论:阻尼比越小,极点越靠近虚轴,超调量减小,但响应速度变慢。
自然频率减小,极点靠近虚轴,响应速度减小,超调几乎不变。
(4)调节自然频率与阻尼比,要求:Tr<0.56s ,Tp<1.29s,Ts<5.46,超调不大于5%.记录下满足上述要求的自然频率与阻尼比。
调节完成之后的响应曲线如图。
此时自然频率为14.5872rad/sec,阻尼比为0.77456。
各项参数完全满足要求。
3、结合《自动控制原理》一书,Page 135,题3_10. 分别观察比例_微分与测速反馈对二阶系统性能的改善。
(1).按原始的调节参数输入,调节时间滑块,使阶跃响应最终出现稳定值。
(2)采用不同的G输入,观察各项性能指数。
结论:增大分母中间的参数,相当于增大系统阻尼比,从而减小超调量(3).分别取不同的K3,观察比例_微分控制对系统性能的改善。
成都理工大学工程技术学院基于一阶倒立摆的matlab仿真实验实验人员: --------------学号:-----------------实验日期:20150618摘要本文主要研究的是一级倒立摆的控制问题,并对其参数进行了优化。
倒立摆是典型的快速、多变量、非线性、强耦合、自然不稳定系统。
由于在实际中有很多这样的系统,因此对它的研究在理论上和方法论上均有深远的意义。
本文首先简单的介绍了一下倒立摆以及倒立摆的控制方法,并对其参数优化算法做了分类介绍。
然后,介绍了本文选用的优化参数的状态空间极点的配置和PID控制。
接着建立了一级倒立摆的数学模型,并求出其状态空间描述。
本文着重讲述的是利用状态空间中极点配置实现方法。
最后,用Simulink对系统进行了仿真,得出在实际控制中是两种比较好的控制方法。
目录1 引言 (4)1.1 倒立摆介绍以及应用 (4)1.2 倒立摆的控制方法 (5)2单级倒立摆数学模型的建立 (6)2.1传递函数 (8)2.2状态空间方程 (9)3系统Matlab 仿真和开环响应 (10)4 系统设计 (15)4.1极点配置与控制器的设计 (15)4.2系统仿真: (16)4.3仿真结果 (17)4.4根据传递函数设计第二种控制方法-----PID串级控制 (18)5结论 (19)1 引言1.1 倒立摆介绍以及应用倒立摆控制系统是一个复杂的、不稳定的、非线性系统,是进行控制理论教学及开展各种控制实验的理想实验平台。
对倒立摆系统的研究能有效的反映控制中的许多典型问题:如非线性问题、鲁棒性问题、镇定问题、随动问题以及跟踪问题等。
通过对倒立摆的控制,用来检验新的控制方法是否有较强的处理非线性和不稳定性问题的能力。
通过对它的研究不仅可以解决控制中的理论和技术实现问题,还能将控制理论涉及的主要基础学科:力学,数学和计算机科学进行有机的综合应用。
其控制方法和思路无论对理论或实际的过程控制都有很好的启迪,是检验各种控制理论和方法的有效的“试金石”。