基于PID一阶倒立摆控制与仿真_第1页
基于PID一阶倒立摆控制与仿真_第2页
基于PID一阶倒立摆控制与仿真_第3页
基于PID一阶倒立摆控制与仿真_第4页
基于PID一阶倒立摆控制与仿真_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目 录 TOC o 1-3 h z u HYPERLINK l _Toc330402210 0. 前言 PAGEREF _Toc330402210 h 1 HYPERLINK l _Toc330402211 1PID控制和编码器基本理论 PAGEREF _Toc330402211 h 2 HYPERLINK l _Toc330402212 2方案设计 PAGEREF _Toc330402212 h 3 HYPERLINK l _Toc330402213 2.1系统模型及分析 PAGEREF _Toc330402213 h 3 HYPERLINK l _Toc330402214 2.2比例(P)

2、控制 PAGEREF _Toc330402214 h 4 HYPERLINK l _Toc330402215 2.3积分(I)控制 PAGEREF _Toc330402215 h 4 HYPERLINK l _Toc330402216 2.4微分(D)控制 PAGEREF _Toc330402216 h 4 HYPERLINK l _Toc330402217 3系统模型建立 PAGEREF _Toc330402217 h 5 HYPERLINK l _Toc330402218 3.1一阶倒立摆的微分方程模型 PAGEREF _Toc330402218 h 5 HYPERLINK l _Toc3

3、30402219 3.2传递函数 PAGEREF _Toc330402219 h 7 HYPERLINK l _Toc330402220 3.3状态空间方程 PAGEREF _Toc330402220 h 7 HYPERLINK l _Toc330402221 4软件编程与仿真 PAGEREF _Toc330402221 h 8 HYPERLINK l _Toc330402222 4.1实际系统参数 PAGEREF _Toc330402222 h 8 HYPERLINK l _Toc330402223 4.2PID控制设计分析 PAGEREF _Toc330402223 h 8 HYPERLI

4、NK l _Toc330402224 4.3PID参数的确定 PAGEREF _Toc330402224 h 10 HYPERLINK l _Toc330402225 4.4Simulink仿真 PAGEREF _Toc330402225 h 11 HYPERLINK l _Toc330402226 4.5单极倒立摆建模 PAGEREF _Toc330402226 h 13 HYPERLINK l _Toc330402227 4.6软件编程 PAGEREF _Toc330402227 h 15 HYPERLINK l _Toc330402228 5系统调试和结果分析 PAGEREF _Toc3

5、30402228 h 18 HYPERLINK l _Toc330402229 6结论及进一步设想 PAGEREF _Toc330402229 h 19 HYPERLINK l _Toc330402230 参考文献 PAGEREF _Toc330402230 h 20 HYPERLINK l _Toc330402231 课设体会 PAGEREF _Toc330402231 h 21基于PID一阶倒立摆控制与仿真亲 摘要: 本文主要研究目的是通过PID的调解实现对一阶倒立摆的控制,设计一个倒立摆的控制系统,使倒立摆这样一个不稳定的被控对象通过引入适当的控制策略使之成为一个能够满足各种性能指标的稳

6、定系统。首先对平面一级倒立摆系统进行分析,根据具体参数建立数学模型,通过对模型的分析判断,设计倒立摆PID控制器。通过MATLAB软件进行仿真和实际系统实验,实现对倒立摆的稳定控制。但是由于PID控制器为单输入单输出系统,所以只能控制摆杆的角度,并不能控制小车的位置,所以小车会往一个方向运动。可以通过应用现代控制理论等单输入(小车加速度)多输出(摆杆角 度和小车位置)的控制算法使系统更加的稳定。关键词:倒立摆;PID控制;MATLAB仿真; 0. 前言倒立摆是日常生活中许多重心在上、支点在下的控制问题的抽象模型,本身是一种自然不稳定体,它在控制过程中能有效地反映控制中许多抽象而关键的问题,如系

7、统的非线性、可控性、鲁棒性等问题。对倒立摆系统的控制就是使小车以及摆杆尽快地达到预期的平衡位置,而且还要使它们不会有太强的振荡幅度、速度以及角速度,当倒立摆系统达到期望位置后,系统能克服一定范围的扰动而保持平衡。作为一种控制装置,它具有形象直观、结构简单、便于模拟实现多种不同控制方法的特点,作为一个被控对象它是一个高阶次、非线性、多变量、强耦合、不稳定的快速系统,只有采取行之有效的方法才能使它的稳定效果明了,因此对倒立摆的研究也成为控制理论中经久不衰的研究课题。倒立摆是进行控制理论研究的典型实验平台。倒立摆是机器人技术、控制理论、计算机控制等多个领域、多种技术的有机结合,其被控系统本身又是一个

8、绝对不稳定、高阶次、多变量、强耦合的非线性系统,可以作为一个典型的控制对象对其进行研究。最初研究开始于二十世纪50 年代,麻省理工学院(MIT)的控制论专家根据火箭发射助推器原理设计出一级倒立摆实验设备。近年来,新的控制方法不断出现,人们试图通过倒立摆这样一个典型的控制对象,检验新的控制方法是否有较强的处理多变量、非线性和绝对不稳定系统的能力,从而从中找出最优秀的控制方法。一阶倒立摆系统是一个典型的非线性、强耦合、多变量和不稳定系统。通过对它的研究不仅可以解决控制中的理论和技术实现问题,还能将控制理论涉及的主要基础学科:力学,数学和计算机科学进行有机的综合应用。其控制方法和思路无论对理论或实际

9、的过程控制都有很好的启迪,是检验各种控制理论和方法的有效的“试金石”。倒立摆的研究不仅有其深刻的理论意义,还有重要的工程背景。在多种控制理论与方法的研究与应用中,特别是在工程实践中,也存在一种可行性的实验问题,通过对倒立摆的控制,用来检验新的控制方法是否有较强的处理非线性和不稳定性问题的能力。同时,其控制方法在军工、航天、机器人和一般工业过程领域中都有着广泛的用途,如机器人行走过程中的平衡控制、火箭发射中的垂直度控制和卫星飞行中的姿态控制等直线倒立摆是在直线运动模块上装有摆体组件,直线运动模块有一个自由度,小车可以沿导轨水平运动,在小车上装载不同的摆体组件,可以组成很多类别的倒立摆,直线柔性倒

10、立摆和一般直线倒立摆的不同之处在于,柔性倒立摆有两个可以沿导轨滑动的小车,并且在主动小车和从动小车之间增加了一个弹簧,作为柔性关节。 PID控制和编码器基本理论在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节6。PID控制器问世至今已有近70年历史,它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的 其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果

11、在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例加积分(PI)控制器,可以使系统在进入稳态后无稳态误差。倒立摆控制系统的工作原理是:由轴角编码器测得小车的位置和摆杆相对垂直方向的角度,作为系统的两个输出量被反馈至控制计算机。计算机根据一定的控制算法,计算出空置量,并转化为相应的电压信号提供给驱动电路,以驱动直流力矩电机的运动,从而通过牵引机构带动小车

12、的移动来控制摆杆和保持平衡。绝对编码器通过与位数相对应的发光二极管和光敏二极管对输出的二进制码来检测旋转角度。与增量编码器原理相同,用于测量直线位移的传感器是光栅尺。由于光电编码器输出的检测信号是数字信号,因此可以直接进入计算机进行处理,不需放大和转换等过程,使用非常方便,因此应用越来越广泛。旋转编码器是一种角位移传感器,它分为光电式、接触式和电磁感应式三种,其中光电式脉冲编码器是闭环控制系统中最常用的位置传感器。图1.1 光电编码器原理示意图 旋转编码器有增量编码器和绝对编码器两种,图1.1为光电式增量编码器示意图,它由发光元件、光电码盘、光敏元件和信号处理电路组成。当码盘随工作轴一起转动时

13、,光源透过光电码盘上的光栏板形成忽明忽暗的光信号,光敏元件把光信号转换成电信号,然后通过信号处理电路的整形、放大、分频、记数、译码后输出。为了测量出转向,使光栏板的两个狭缝比码盘两个狭缝距离小 1/4节距,这样两个光敏元件的输出信号就相差/2相位,将输出信号送入鉴向电路,即可判断码盘的旋转方向。 倒立摆系统的控制算法分两部分:摆杆自动起摆控制和稳定在垂直小角度范围内控制,一般以摆杆偏离垂直站立角度12为界限,在12范围内采用模糊控制算法使其稳定在垂直站立状态,超出这个范围则启动自动起摆控制算法,再次使其稳定在垂直站立状态。为了提高倒立摆系统的抗干扰性能,摆杆在12范围内摆动时使用的模糊规则库可

14、进一步细分,以确定合适的控制电压。 方案设计系统模型及分析图2.1 一级倒立摆的模型示意图一阶倒立摆的模型如图2.1所示:振荡电路倒立摆的物理构成可以表述为:光滑的导轨,可以在导轨上自由移动的小车,和一个质量块的摆杆。它们的铰接方式决定了它们在竖直平面内运动。水平方向的驱动力使小车根据摆角的变化而在导轨上运动,从而达到倒立摆系统的平衡。根据设计要求,采用的方案如下。硬件部分由电机通过同步带驱动实现小车在滑杆上来回运动,保持摆杆平衡。电机编码器和摆角编码器向运动卡反馈小车和摆杆位置。比例(P)控制比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在

15、稳态误差(Steady-state error)。 积分(I)控制在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。 微分(D)控制在微分控制中,控制

16、器的输出与输入误差信号的微分(即误差的变化率)成正比关系。自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。这就是说,在控制器中仅引入 “比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。所以对有较大惯性或滞后的被控对象,比

17、例+微分(PD)控制器能改善系统在调节过程中的动态特性。软件部分实现在 PID控制器各校正环节中,比例环节成比例地反映控制系统的偏差信号,偏差一旦产生,控制器立即产生控制作用,以减少偏差;积分环节主要用于消除稳态误差,提高系统的型别,积分作用的强弱取决于积分时间常数Ti,Ti越大,积分作用越弱,反之则越强;微分环节反映信号的变化趋势,即变化速率,并能在偏差信号值变得太大之前,在系统中引入一个有效地早起修正信号,从而加快系统的动作速度,减小调节时间。PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。其输入与输出的关系为: (1.1)式中积分的上下限分别是和,因此它的传递函数为:

18、比例作用下,通过现场试验找到等幅震荡的过渡过程,记下此时的比例度和等幅振荡周期,再通过简单的计算求出衰减振荡时控制器的参数。系统模型建立一阶倒立摆的微分方程模型在忽略了空气流动,各种摩擦之后,可将倒立摆系统抽象成小车和匀质杆组成的系统,如下图2.2所示图2.2 单级倒立摆模型示意图下面我们对这个系统作一下受力分析。下图2.3是系统中小车和摆杆的受力分析图。其中,和为小车与摆杆相互作用力的水平和垂直方向的分量。注意:在实际倒立摆系统中检测和执行装置的正负方向已经完全确定,因而矢量方向定义如图,图示方向为矢量正方向。图2.3倒立摆模型受力分析分析小车水平方向所受的合力,可以得到以下方程: (1)由

19、摆杆水平方向的受力进行分析可以得到下面等式: 即 (2)把这个等式代入上式中,就得到系统的第一个运动方程: (3)为了推出系统的第二个运动方程,我们对摆杆垂直方向上的合力进行分析,可以得到下面方程: (4)力矩平衡方程如下: (5) 注意:此方程中力矩的方向,由于,故等式前面有负号。合并这两个方程,约去和,由得到第二个运动方程: (6)设(是摆杆与垂直向上方向之间的夹角),假设与1(单位是弧度)相比很小,即1,则可以进行近似处理:,。用来代表被控对象的输入力,线性化后两个运动方程如下: (7)传递函数对方程组(3)进行拉普拉斯变换,得到 (8)注意:推导传递函数时假设初始条件为0。由于输出为角

20、度,求解方程组(4)的第一个方程,可以得到 (9)角度与位置的传递函数: (10)如果令,得到角度与速度的传递函数: (11)把上式代入方程组的第二个方程,得到 (12)整理后得到传递函数: (13)其中 (14)状态空间方程系统状态空间方程为 (15)方程组对解代数方程,得到解如下: (16)整理后得到系统状态空间方程: (17) (18)软件编程与仿真实际系统参数实际系统参数如下,求系统的传递函数、状态空间方程,并进行脉冲响应和阶跃响应的Matlab仿真。M 小车质量 1.096 Kgm 摆杆质量 0.109 Kgb 小车摩擦系数 0 .1N/m/secl 摆杆转动轴心到杆质心的长度 0.

21、2 5mI 摆杆惯量 0.0034 kg*m*mF 加在小车上的力 x 小车位置 摆杆与垂直方向的夹角T 采样频率 0.005秒PID控制设计分析在一些情况下针对特定的系统设计的PID控制控制得很好,但它们仍存在一些问题需要解决:如果自整定要以模型为基础,为了PID参数的重新整定在线寻找和保持好过程模型是较难的。闭环工作时,要求在过程中插入一个测试信号。这个方法会引起扰动,所以基于模型的PID参数自整定在工业应用不是太好。如果自整定是基于控制律的,经常难以把由负载干扰引起的影响和过程动态特性变化引起的影响区分开来,因此受到干扰的影响控制器会产生超调,产生一个不必要的自适应转换。另外,由于基于控

22、制律的系统没有成熟的稳定性分析方法,参数整定可靠与否存在很多问题。因此,许多自身整定参数的PID控制经常工作在自动整定模式而不是连续的自身整定模式。自动整定通常是指根据开环状态确定的简单过程模型自动计算PID参数。但仍不可否认PID也有其固有的缺点:PID在控制非线性、时变、耦合及参数和结构不确定的复杂过程时,工作地不是太好。最重要的是,如果PID控制器不能控制复杂过程,无论怎么调参数都没用。虽然有这些缺点,PID控制是最简单的有时却是最好的控制方法8在计算机控制系统中,PID控制是通过计算机程序来实现的,因此它的灵活性很大。一些原来在模拟PID控制器中无法实现的问题,在引入计算机以后,就可以

23、得到解决,于是产生了一系列的改进算法,形成非标准的控制算法,以改善系统的品质,满足不同的控制系统的需要。这个控制问题和我们以前遇到的标准控制问题有些不同,在这里输出量为摆杆的位置,它的初始位置为垂直向上,我们给系统施加一个扰动,观察摆杆的响应。系统框图如下:图2-2 直线一阶倒立摆闭环系统图图中是控制器传递函数,是被控对象传递函数。考虑到输入,结构图可以很容易地变换成图2-3 直线一阶倒立摆闭环系统简化图该系统的输出为num被控对象传递函数的分子项den被控对象传递函数的分母项numPID控制器传递函数的分子项 denPID控制器传递函数的分母项通过分析上式就可以得到系统的各项性能。由可以得到

24、摆杆角度和小车加速度的传递函数:PID 控制器的传递函数为:通过对控制量 v 双重积分即可以得到小车位置:PID参数的确定PID控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定PID控制器的比例系数、积分时间和微分时间的大小。PID控制器参数整定的方法很多,概括起来有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。PID控制器参数的工程整定方法,主要有临界

25、比例法、反应曲线法和衰减法。三种方法各有其特点,其共同点都是通过试验,然后按照工程经验公式对控制器参数进行整定。但无论采用哪一种方法所得到的控制器参数,都需要在实际运行中进行最后调整与完善。现在一般采用的是临界比例法。利用该方法进行 PID控制器参数的整定步骤如下:首先预选择一个足够短的采样周期让系统工作;其次仅加入比例控制环节,直到系统对输入的阶跃响应出现临界振荡,记下这时的比例放大系数和临界振荡周期;再次在一定的控制度下通过公式计算得到PID控制器的参数。Simulink仿真由实际系统的物理模型:在 Simulink 中建立如图4所示的直线一级倒立摆模型:图2.6 直线一级倒立摆PID 控

26、制MATLAB 仿真模型经过系统调试令Kp=200,Ki=10,KD=20,得到仿真结果如下:图2.7 PID控制参数PID仿真结果:图2.8 基于PID一阶倒立摆MATLAB仿真结果倒立摆摆杆角度曲线为:图2.9 摆杆角度曲线小车的位置输出曲线为:图2.10 小车位置曲线可以看出,由于PID控制器为单输入单输出系统,所以只能控制摆杆的角度,并不能控制小车的位置,所以小车会往一个方向运动。单极倒立摆建模倒立摆系统的控制问题一直是控制研究中的一个经典问题。控制的目标是通过给小车底座施加一个力u(控制量),使小车停留在预定的位置,并使杆不倒下,即不超过一预先定义好的垂直偏离角度范围,图2.1为一级

27、倒立摆的示意图,小车质量为M,摆杆质量为m,小车位置为x,摆杆的角度为。设摆杆偏离垂直线的角度为,同时规定摆杆重心坐标为,则 则根据牛顿定律,建立水平和垂直运动状态方程。摆杆围绕其重心的转动运动可用力矩方程来描述 摆杆重心的水平运动由下式描述 摆杆重心的垂直运动由下式描述 小车的水平运动有下式来描述 假设很小,sin,cos1.则以上各式变为 由上式可得出 由上式可得单极倒立摆方程 式中,控制指标共有4个,即单极倒立摆的摆角、摆速、小车位置x和小车速度。将倒立摆运动方程转化为状态方程的形式。令,则状态方程为: 式中对每个控制指标都选取PD控制方式,控制器为式中,ei(k)和dei(k)为控制指

28、标i的误差和误差变化率。软件编程基于PID一阶倒立摆MATLAB仿真如下:clear all; close all; xiteP=100; xiteI=30; xiteD=30; i1_1=-10;i2_1=-10;i3_1=-10;i4_1=-10; p3_1=-10;p1_1=-10;p2_1=-10;p4_1=-10; d1_1=-0;d2_1=-0;d3_1=-0;d4_1=-0; error_1=0; error_2=0; e1_1=0;e2_1=0;e3_1=0;e4_1=0; e1_2=0;e2_2=0;e3_2=0;e4_2=0; u_1=0; xk=-10/57.3,0,0.

29、020,0; %初始状态 ts=0.02; for k=1:1:1000 time(k)=k*ts; Tspan=0 ts; para=u_1; %para=0; t,x=ode45(nn_pidf,Tspan,xk,para); xk=x(length(x),:); r1(k)=0.0; %摆角r2(k)=0.0; %摆角速度 r3(k)=0.0; %汽车的位置r4(k)=0.0; %汽车位率x1(k)=xk(1); x2(k)=xk(2); x3(k)=xk(3); x4(k)=xk(4); e1(k)=r1(k)-x1(k); e2(k)=r2(k)-x2(k); e3(k)=r3(k)

30、-x3(k); e4(k)=r4(k)-x4(k); error(k)=0.2*e1(k)+0.8*e3(k); xx(1)=error(k)-error_1; %P xx(2)=error(k); %I xx(3)=error(k)-2*error_1+error_2; %D i1(k)=i1_1+xiteI*xx(2); p1(k)=p1_1+xiteP*xx(1); d1(k)=d1_1+xiteD*xx(3); i2(k)=i2_1+xiteI*xx(2); p2(k)=p2_1+xiteP*xx(1); d2(k)=d2_1+xiteD*xx(3); i3(k)=i3_1+xiteI

31、*xx(2); p3(k)=p3_1+xiteP*xx(1); d3(k)=d3_1+xiteD*xx(3); i4(k)=i4_1+xiteI*xx(2); p4(k)=p4_1+xiteP*xx(1); d4(k)=d4_1+xiteD*xx(3); de1(k)=e1(k)-e1_1; ce1(k)=e1(k)-2*e1_1+e1_2; u1(k)=i1(k)*e1(k)+p1(k)*de1(k)+d1(k)*ce1(k); de2(k)=e2(k)-e2_1; ce2(k)=e2(k)-2*e2_1+e2_2; u2(k)=i2(k)*e2(k)+p2(k)*de2(k)+d2(k)*

32、ce2(k); de3(k)=e3(k)-e3_1; ce3(k)=e3(k)-2*e3_1+e3_2; u3(k)=i3(k)*e3(k)+p3(k)*de3(k)+d3(k)*ce3(k); de4(k)=e4(k)-e4_1; ce4(k)=e4(k)-2*e4_1+e4_2; u4(k)=i4(k)*e4(k)+p4(k)*de4(k)+d4(k)*ce4(k); %u(k)=u1(k)+u2(k)+u3(k)+u4(k); u(k)=(11*u1(k)+20*u2(k)+96.5*u3(k)+35.5*u4(k)/50; if k=400 u(k)=u(k)+1 end if u(k

33、)=10 u(k)=10; elseif u(k)=-10 u(k)=-10; end error_2=error_1; error_1=error(k); i1_1=i1(k);i2_1=i2(k);i3_1=i3(k);i4_1=i4(k); p1_1=p1(k);p2_1=p2(k);p3_1=p3(k);p4_1=p4(k); d1_1=d1(k);d2_1=d2(k);d3_1=d3(k);d4_1=d4(k); e1_2=e1_1;e1_1=e1(k); e2_2=e2_1;e2_1=e2(k); e3_2=e3_1;e3_1=e3(k); e4_2=e4_1;e4_1=e4(k)

34、; u_1=u(k); end figure(1);subplot(411);plot(time,r1,k,time,x1,k); %摆角xlabel(time(s);ylabel(Angle);subplot(412);plot(time,r2,k,time,x2,k); %摆角速度 xlabel(time(s);ylabel(Angle rate);subplot(413);plot(time,r3,k,time,x3,k); %汽车位置xlabel(time(s);ylabel(Cart position);subplot(414);plot(time,r4,k,time,x4,k);

35、%汽车位率xlabel(time(s);ylabel(Cart rate);figure(5);plot(time,u,k); %力的变化xlabel(time(s);ylabel(Force);nn_pidf.m文件如下:function dx=dym(t,x,flag,para) global A B C D u=para; dx=zeros(4,1); %State equation for one link inverted pendulum %dx=A*x+B*u; dx=x(2);(x(4)2*sin(x(3)-3.67875*sin(2*x(3)-50.9784*x(2)+1)/

36、(11-0.75*cos(x(3)2)+para/(1+0.1*(1-0.75*cos(x(3)2); x(4);(7.3575*sin(x(3)-0.75*cos(x(3)*(x(4)2*sin(x(3)-3.67875*sin(2*x(3)-50.9784*x(2)+1)/(11-0.75*cos(x(3)2)-0.75*cos(x(3)*para/(1+0.1*(1-0.75*cos(x(3)2);系统调试和结果分析运行后得到如下的仿真结果:图2.9 基于PID一阶倒立摆MATLAB仿真结果图 2.10 倒立摆响应结果由仿真结果能够看出,当摆杆角度处于很好的闭环控制下市,小车位置处于失控

37、状态,会沿着某一方向运动下去。 结论及进一步设想传统的非线性系统分析方法需要非线性系统的精确模型,而现实世界上存在的大量复杂的多变量非线性系统则表现为参数的不确定性和结构的不确定性。PID控制理论为解决这类复杂多变量非线性系统开辟了一条新途径。本文围绕一级倒立摆系统,采用自动控制理论中的经典控制理论研究了倒立摆的控制问题。用Simulink进行了倒立摆的PID控制系统仿真研究,并且结合计算机控制技术研究了倒立摆实物系统的控制问题。通过该系统的设计,也说明了PID控制系统的设计的一般步骤,提供了一套利用matlab进行控制器设计的有效方法,对PID控制系统设计具有借鉴意义。(1) 对于具有非线性

38、、多变量等特点的倒立摆系统进行系统分析,推导出其非线性数学模型,分析其非线性因素,扰动对倒立摆系统的影响。(2) 详细叙述了以经典控制论为基础的PID控制理论,针对倒立摆系统为控制对象设计了PID控制器及相关的控制方法。以倒立摆摆角为被控量,PID控制器结构简单,实施行好。(3) PID控制方法实现了倒立摆的良好控制。运用经典控制的基本理论和方法,即可实现对PID参数的最佳自动调整,这就是PID控制。通过实验可知,这种控制方法可以取得良好的控制效果。(4) 在倒立摆系统仿真试验的基础上,实现了倒立摆的实物控制。将自己设计的控制器嵌入到固高公司设计的倒立摆控制中,进行编译、连接、运行,实现对倒立

39、摆的实时控制。在本课题中,基本达到开题时预定的研究目标,但是在实际调试过程中,若有系统方法精确的计算出控制参数,将大大节省调试时间。但是实时控制唯一不足之处在于PID控制器只能控制摆杆的角度,不能控制小车的位移,这种方法有待于进一步研究。但是由于参数选择或个人原因还存在着误差或缺点,可以通过多次对系统的仿真来进一步改善。参考文献1 HYPERLINK /writer/%E5%88%98%E9%87%91%E7%90%A8_1.html 刘金琨. 先进PID控制MATLAB仿真(第3版). HYPERLINK /publish/%E7%94%B5%E5%AD%90%E5%B7%A5%E4%B8%

40、9A%E5%87%BA%E7%89%88%E7%A4%BE_1.html t _blank 电子工业出版社,20012 薛定宇、陈阳泉基于MATLAB/simulink的系统仿真技术与应用 清华大学出版社 20023 刘豹 现代控制理论M 北京:机械工业出版社,2005 4 HYPERLINK /view/1365562.htm t _blank 于海生 计算机控制技术 HYPERLINK /view/156089.htm t _blank 机械工业出版社 2007.65 黄忠霖控制系统MATLAB计算及仿真M北京:国防工业出版社,2006课设体会在这两周的计算机控制技术的课程设计过程中我收获

41、了很多。首先,在设计过程中对课本上的理论知识有了更深入的理解,尤其是对一些比较抽象的概念有了更切实的体会并得到了进一步的巩固。其次,这次课程设计使我对控制系统的过程及其方法有了更深的理解,从指标要求到控制系统的建立,从建模到控制器的设计,都有了更好的掌握。在实践中深切体会到很多平时上课遇不到的问题及其解决方法,增强了自己的实践操作能力。此外,在本次课程设计中,我还深刻感受到自己很多地方的不足,例如基础知识掌握不扎实,参数调试不够熟练等等,在以后的学习过程中力求不断提高。在本论文结束之际,我要真心感谢所有关心、支持、帮助过我的老师和同学,有了他们的指导、鼓励和帮助,才使我的毕业设计顺利完成。首先

42、也是我主要感谢的就是我的指导老师蒋丽英。蒋老师知识渊博,治学严谨,经验丰富,为人和蔼。我的设计工作与论文撰写都是在蒋老师精心的指导和帮助下完成的。她忘我的工作热情以及严谨的治学态度给了我很大鼓励。这篇论文从题目选择到最终成文,每次我遇到问题,蒋老师都是不厌其烦地给我讲解,直到我明白为止。通过这次毕业设计,使我对自动化专业的认识有了很大的提高。在经过大量的实验后我把理论同实践结合起来,对我将来的工作有很大的帮助。此次毕业设计我不但完成了设计的任务,也从中得到了训练,这些都与蒋老师的悉心指导和帮助分不开。在此,我对辛勤培育我的导师致以最崇高的敬意和衷心的感谢!其次,在这次毕业设计中,我还得到了自动

43、化学院其他老师提供的帮助,谨在此对他们表示衷心的感谢!我还要感谢我同学们,是他们在我一次次失败中鼓励我前进的!最后,对评审论文的各位老师表示忠心的感谢! 年 月 日完成附录资料:不需要的可以自行删除 C语言图形模式速成第一节 图形模式的初始化Turbo C 提供了非常丰富的图形函数,所有图形函数的原型均在graphics. h 中,本节主要介绍图形模式的初始化、独立图形程序的建立、基本图形功能、图形窗口以及图形模式下的文本输出等函数。另外,使用图形函数时要确保有显示器图形驱动程序*.BGI,同时将集成开发环境options/Linker中的Graphics lib选为on,只有这样才能保证正确

44、使用图形函数。 不同的显示器适配器有不同的图形分辨率。即是同一显示器适配器,在不同模式下也有不同分辨率。因此,在屏幕作图之前,必须根据显示器适配器种类将显示器设置成为某种图形模式,在未设置图形模式之前,微机系统默认屏幕为文本模式(80列,25行字符模式),此时所有图形函数均不能工作。设置屏幕为图形模式,可用下列图形初始化函数:void far initgraph(int far *gdriver, int far *gmode,char *path);其中gdriver和gmode分别表示图形驱动器和模式,path是指图形驱动程序所在的目录路径。有关图形驱动器、图形模式的符号常数及对应的分辨率

45、见graphics. h。图形驱动程序由Turbo C出版商提供,文件扩展名为.BGI。 根据不同的图形适配器有不同的图形驱动程序。例如对于EGA、 VGA 图形适配器就调用驱动程序EGAVGA.BGI。#include stdio.h#include graphics.hint main()int gdriver, gmode;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(100, 100, 300, 250, 50, 1); /*画一长方体*/getch();closegraph();return

46、 0;有时编程者并不知道所用的图形显示器适配器种类,或者需要将编写的程序用于不同图形驱动器,Turbo C 提供了一个自动检测显示器硬件的函数,其调用格式为:void far detectgraph(int *gdriver, *gmode);其中gdriver和gmode的意义与上面相同。 自动进行硬件测试后进行图形初始化:#include stdio.h#include graphics.hint main()int gdriver, gmode;detectgraph(&gdriver, &gmode); /*自动测试硬件*/printf(the graphics driver is %

47、d, mode is %dn,gdriver,gmode); /*输出测试结果*/getch();initgraph(&gdriver, &gmode, C:TC2.0BGI);/* 根据测试结果初始化图形*/bar3d(100, 100, 300, 250, 50, 1); /*画一长方体*/getch();closegraph();return 0;上例程序中先对图形显示器自动检测,然后再用图形初始化函数进行初始化设置,但Turbo C提供了一种更简单的方法, 即用gdriver=DETECT 语句后再跟initgraph()函数就行了。采用这种方法后,上例可改为:#include std

48、io.h#include graphics.hint main()int gdriver=DETECT, gmode;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(50, 50, 150, 30, 50, 1);getch();closegraph();return 0;另外,Turbo C 提供了退出图形状态的函数closegraph(),其调用格式为:void far closegraph(void);第二节 屏幕颜色的设置和清屏函数对于图形模式的屏幕颜色设置,同样分为背景色的设置和前景色的设置。在Turbo C中分别用下面两个函数: 设置背景

49、色: void far setbkcolor(int color);设置作图色: void far setcolor(int color);其中color 为图形方式下颜色的规定数值,对EGA,VGA显示器适配器,有关颜色的符号常数及数值见graphics.h。清除图形屏幕内容但不清除图形背景使用清屏函数,其调用格式如下: voide far cleardevice(void);#include stdio.h#include graphics.hint main()int gdriver, gmode, i,aa;gdriver=DETECT;initgraph(&gdriver, &gmo

50、de, C:TC2.0BGI); /*图形初始化*/setbkcolor(0); /*设置图形背景*/cleardevice();for(i=0; i=15; i+)setcolor(i); /*设置不同作图色*/circle(320, 240, 20+i*10); /*画半径不同的圆*/getch();for(i=0; i=15; i+)setbkcolor(i); /*设置不同背景色*/cleardevice();circle(320, 240, 20+i*10);getch();aa=getmaxcolor();printf(maxcolor=%d,aa);getch();closegr

51、aph();return 0;另外,TURBO C也提供了几个获得现行颜色设置情况的函数。 int far getbkcolor(void); 返回现行背景颜色值。int far getcolor(void); 返回现行作图颜色值。int far getmaxcolor(void); 返回最高可用的颜色值。第三节 基本画图函数基本图形函数包括画点,线以及其它一些基本图形的函数。本节对这些函数作一全面的介绍。 、画点. 画点函数 void far putpixel(int x, int y, int color); 该函数表示有指定的象元画一个按color 所确定颜色的点。对于颜色color的值

52、可从表3中获得而对x, y是指图形象元的坐标。在图形模式下,是按象元来定义坐标的。对VGA适配器,它的最高分辨率为640 x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到下所有象元的个数。屏幕的左上角坐标为(0,0),右下角坐标为(639, 479),水平方向从左到右为x 轴正向,垂直方向从上到下为y轴正向。TURBO C的图形函数都是相对于图形屏幕坐标,即象元来说的。关于点的另外一个函数是: int far getpixel(int x, int y); 它获得当前点(x, y)的颜色值。 II、有关坐标位置的函数 int far getmaxx(void);返回

53、x轴的最大值。int far getmaxy(void);返回y轴的最大值。int far getx(void); 返回游标在x轴的位置。void far gety(void); 返回游标有y轴的位置。void far moveto(int x, int y); 移动游标到(x, y)点,不是画点,在移动过程中亦画点。void far moverel(int dx, int dy); 移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点。、画线I. 画线函数TURBO C提供了一系列画线函数: void far line(int x0, int y0, int

54、x1, int y1); 画一条从点(x0, y0)到(x1, y1)的直线。void far lineto(int x, int y); 画一作从现行游标到点(x, y)的直线。void far linerel(int dx, int dy); 画一条从现行游标(x,y)到按相对增量确定的点(x+dx, y+dy)的直线。void far circle(int x, int y, int radius); 以(x, y)为圆心,radius为半径,画一个圆。void far arc(int x, int y, int stangle, int endangle,int radius); 以(

55、x,y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)画一段圆弧线。在TURBO C中规定x轴正向为0 度,逆时针方向旋转一周, 依次为90,180, 270和360度(其它有关函数也按此规定,不再重述)。 void ellipse(int x, int y, int stangle, int endangle,int xradius,int yradius);以(x, y)为中心,xradius,yradius为x轴和y轴半径,从角stangle 开始到endangle结束画一段椭圆线,当stangle=0,endangle=360时, 画出一个完整的椭圆

56、。void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)为左上角,(x2, y2)为右下角画一个矩形框。 void far drawpoly(int numpoints, int far *polypoints); 画一个顶点数为numpoints,各顶点坐标由polypoints给出的多边形。polypoints整型数组必须至少有2 倍顶点数个无素。每一个顶点的坐标都定义为x,y,并且x在前。值得注意的是当画一个封闭的多边形时,numpoints 的值取实际多边形的顶点数加一,并且数组polypoints中第一个和最后一个点的

57、坐标相同。下面举一个用drawpoly()函数画箭头的例子。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;int arw16=200,102,300,102,300,107,330,100,300,93,300,98,200,98,200,102;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(12); /*设置作图颜色*/drawpoly(8, arw); /*画一

58、箭头*/getch();closegraph();return 0;II、设定线型函数在没有对线的特性进行设定之前,TURBO C 用其默认值,即一点宽的实线,但TURBO C 也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有两种选择:一点宽和三点宽。而线的形状则有五种。下面介绍有关线型的设置函数。void far setlinestyle(int linestyle,unsigned upattern,int thickness);该函数用来设置线的有关信息,其中linestyle是线形状的规定,见graphics.h。对于upattern,只有linestyle选USERBI

59、T_LINE 时才有意义 (选其它线型,uppattern取0即可)。此时uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。 void far getlinesettings(struct linesettingstypefar *lineinfo);该函数将有关线的信息存放到由lineinfo 指向的结构中,表中linesettingstype的结构如下:struct linesettingstypeint linestyle;unsigned upattern;int thickness;例如下面两句程序可以读出当前线的特性 struct

60、linesettingstype *info;getlinesettings(info);void far setwritemode(int mode);该函数规定画线的方式。如果mode=0,则表示画线时将所画位置的原来信息覆盖了(这是TURBO C的默认方式)。如果mode=1, 则表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线。有关线型设定和画线函数的例子如下所示。#include stdio.h#include graphics.hint main()int g

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论