一阶系统的PID算法控制的仿真设计 东华大学信息学院软件分散pid Matlab可视化GUI设计
- 格式:pdf
- 大小:616.22 KB
- 文档页数:10
目录0. 前言 (1)1 PID控制和编码器基本理论 (2)2 方案设计 (3)2.1 系统模型及分析 (3)2.2 比例(P)控制 (4)2.3 积分(I)控制 (4)2.4 微分(D)控制 (4)3 系统模型建立 (5)3.1 一阶倒立摆的微分方程模型 (5)3.2 传递函数 (7)3.3 状态空间方程 (7)4 软件编程与仿真 (8)4.1 实际系统参数 (8)4.2 PID控制设计分析 (8)4.3 PID参数的确定 (10)4.4 Simulink仿真 (11)4.5 单极倒立摆建模 (13)4.6 软件编程 (15)5 系统调试和结果分析 (18)6 结论及进一步设想 (19)课设体会 (21)基于PID一阶倒立摆控制与仿真亲摘要:本文主要研究目的是通过PID的调解实现对一阶倒立摆的控制,设计一个倒立摆的控制系统,使倒立摆这样一个不稳定的被控对象通过引入适当的控制策略使之成为一个能够满足各种性能指标的稳定系统。
首先对平面一级倒立摆系统进行分析,根据具体参数建立数学模型,通过对模型的分析判断,设计倒立摆PID控制器。
通过MATLAB软件进行仿真和实际系统实验,实现对倒立摆的稳定控制。
但是由于PID控制器为单输入单输出系统,所以只能控制摆杆的角度,并不能控制小车的位置,所以小车会往一个方向运动。
可以通过应用现代控制理论等单输入(小车加速度)多输出(摆杆角度和小车位置)的控制算法使系统更加的稳定。
关键词:倒立摆;PID控制;MATLAB仿真;0. 前言倒立摆是日常生活中许多重心在上、支点在下的控制问题的抽象模型,本身是一种自然不稳定体,它在控制过程中能有效地反映控制中许多抽象而关键的问题,如系统的非线性、可控性、鲁棒性等问题。
对倒立摆系统的控制就是使小车以及摆杆尽快地达到预期的平衡位置,而且还要使它们不会有太强的振荡幅度、速度以及角速度,当倒立摆系统达到期望位置后,系统能克服一定范围的扰动而保持平衡。
目录摘要 (2)一、一阶倒立摆系统建模 (3)1、对象模型 (3)2、电动机、驱动器及机械传动装置的模型 (4)二、双闭环PID控制器设计 (5)1、仿真验证 (6)2、内环控制器的设计 (9)3、系统外环控制器设计 (12)三、仿真实验 (15)1、绘图子程序 (15)2、仿真结果 (16)四、结论 (18)摘要本报告旨在借助Matlab 仿真软件,设计基于双闭环PID 控制的一阶倒立摆控制系统。
在如图0.1所示的“一阶倒立摆控制系统”中,通过检测小车的位置与摆杆的摆动角,来适当控制驱动电动机拖动力的大小,控制器由一台工业控制计算机(IPC )完成。
图0.1 一阶倒立摆控制系统分析工作原理,可以得出一阶倒立摆系统原理方框图:图0.2 一阶倒立摆控制系统动态结构图本报告将借助于“Simulink 封装技术——子系统”,在模型验证的基础上,采用双闭环PID 控制方案,实现倒立摆位置伺服控制的数字仿真实验。
一、一阶倒立摆系统建模1、对象模型如图1.1所示,设小车的质量为m 0,倒立摆均匀杆的质量为m ,摆长为2l ,摆的偏角为θ,小车的位移为x ,作用在小车上的水平方向的力为F ,O 1为摆角质心。
θxyOFF xF x F yF yllxO 1图1.1 一阶倒立摆的物理模型根据刚体绕定轴转动的动力学微分方程,转动惯量与角加速度乘积等于作用于刚体主动力对该轴力矩的代数和,则 1)摆杆绕其中心的转动方程为θθθcos sin y l F l F J x-= (1-1) 2)摆杆重心的水平运动可描述为)sin (22x θl x dtd m F += (1-2)3)摆杆重心在垂直方向上的运动可描述为)cos (22y θl dtd m mg F =- (1-3)4)小车水平方向上的运动可描述为220dtxd m F F x =- (1-4)由式(1-2)和式(1-4)得F ml x m m =⋅-⋅++)sin (cos )(20θθθθ (1-5) 由式(1-1)、(式1-2)和式(1-3)得θθθsin g cos 2ml x ml ml J =⋅++ )( (1-6) 整理式(1-5)和式(1-6),得⎪⎪⎩⎪⎪⎨⎧++-+-⋅+⋅=-++-⋅+++=))((cos sin )(cos sin cos cos ))((cos sin sin )()(x 2022202222220222222m l J m m l m m l m m l m F m l l m m m m l J g l m m l J lm F m l J θθθθθθθθθθθθ(1-7) 以上式1-7为一阶倒立摆精确模型。
PID 控制算法的matlab 仿真PID 控制算法是实际工业控制中应用最为广泛的控制算法,它具有控制器设计简单,控制效果好等优点。
PID 控制器参数的设置是否合适对其控制效果具有很大的影响,在本课程设计中一具有较大惯性时间常数和纯滞后的一阶惯性环节作为被控对象的模型对PID 控制算法进行研究。
被控对象的传递函数如下:()1d sf Ke G s T sτ-=+ 其中各参数分别为30,630,60f d K T τ===。
MATLAB 仿真框图如图1所示。
1Out1Zero-Order HoldTransport Delay30630s+1Transfer FcnStep-K-Kp-K-Ki-K-Kdz (z-1)(z-1)zAdd图12 具体内容及实现功能2.1 PID 参数整定PID 控制器的控制参数对其控制效果起着决定性的作用,合理设置控制参数是取得较好的控制效果的先决条件。
常用的PID 参数整定方法有理论整定法和实验整定法两类,其中常用的实验整定法由扩充临界比例度法、试凑法等。
在此处选用扩充临界比例度法对PID 进行整定,其过程如下:1) 选择采样周期 由于被控对象中含有纯滞后,且其滞后时间常数为60d τ=,故可选择采样周期1s T =。
2) 令积分时间常数i T =∞,微分时间常数0d T =,从小到大调节比例系数K ,使得系统发生等幅震荡,记下此时的比例系数k K 和振荡周期k T 。
3) 选择控制度为 1.05Q =,按下面公式计算各参数:0.630.490.140.014p k i k d k s kK K T T T T T T ====通过仿真可得在1s T =时,0.567,233k k K T ==,故可得:0.357,114.17,32.62, 3.262p i d s K T T T ====0.0053.57p s i i p d d sK T K T K T K T ====按此组控制参数得到的系统阶跃响应曲线如图2所示。
实验一.信号的采样与保持一、实验目的1.熟悉信号的采样和保持过程2.学习和掌握香农 (采样) 定理3.学习用直线插值法和二次曲线插值法还原信号二、实验内容1.编写程序,实现信号通过A/D 转换器转换成数字量送到控制计算机,计算机再把数字量送到D/A 转换器输出。
2.编写程序,分别用直线插值法和二次曲线插值法还原信号。
三、实验设备PC 机一台,TD-ACC+实验系统一套,i386EX 系统板一块四、实验原理与步骤零阶保持香农 (采样) 定理:若对于一个具有有限频谱 (|W|<Wmax) 的连续信号f (t)进行采样,当采样频率满足 Ws≥2Wmax 时,则采样函数f*(t) 能无失真地恢复到原来的连续信号f(t)。
Wmax 为信号的最高频率,Ws 为采样频率。
实验线路图:本实验中,我们将具体来验证香农定理。
可设计如下的实验线路图,图中画“○”的线需用户在实验中自行接好,其它线系统已连好。
上图中,控制计算机的“OUT1”表示386EX 内部1#定时器的输出端,定时器输出的方波周期=定时器时常,“IRQ7”表示386EX 内部主片8259 的“7”号中断,用作采样中断。
这里,正弦波单元的“OUT”端输出周期性的正弦波信号,通过模数转换单元的“IN7” 端输入,系统用定时器作为基准时钟 (初始化为10ms) ,定时采集“IN7”端的信号,转换结束产生采样中断,在中断服务程序中读入转换完的数字量,送到数模转换单元,在“OUT1” 端输出相应的模拟信号。
由于数模转换器有输出锁存能力,所以它具有零阶保持器的作用。
采样周期T= TK ×10ms,TK的范围为01~ FFH,通过修改TK 就可以灵活地改变采样周期,后面实验的采样周期设置也是如此。
参考程序流程:基于上面的实验线路,可以设计如下的参考程序流程。
五.实验结果与分析1.零阶保持器采样周期10MS 信号频率0.5HZ采样周期10MS 信号频率1HZ采样周期10MS 信号频率2HZ采样周期10MS 信号频率5HZ采样周期50MS 信号频率1HZ采样周期50MS 信号频率2HZ采样周期50MS 信号频率5HZ采样周期100MS 信号频率0.5HZ采样周期100MS 信号频率2HZ采样周期10MS 信号频率0.5HZ采样周期10MS 信号频率2HZ采样周期50MS 信号频率0.5HZ采样周期50MS 信号频率2HZ采样周期10MS 信号频率1HZ采样周期10MS 信号频率5HZ采样周期50MS 信号频率2HZ采样信号的还原效果的分析:实验二 数字PID 闭环控制按闭环系统误差信号的比例、积分和微分进行控制的调节器简称为PID 调节器 (也叫PID 控制器)。
毕业论文题目:PID控制系统的设计及仿真(MATLAB)目录摘要 (1)Abstract (1)第一章绪论 (1)1.1 课题意义及来源 (1)1.2 温度控制系统的研究现状 (2)1.2.1工业温度控制发展简介 (2)1.2.2温度微机控制系统控制方案 (3)1.3 MATLAB简介 (5)第二章被控对象及控制策略 (6)2.1被控对象 (6)2.2 控制策略 (7)2.2.1比例、积分、微分 (8)2.2.2 P、I、D控制 (10)第三章PID最佳调整法与系统仿真 (11)3.1 PID参数整定法概述 (11)3.1.1 PID参数整定方法 (11)3.1.2 PID调整方式 (12)3.2针对无转移函数的PID调整法 (12)3.2.1Relay feedback调整法 (13)3.2.2Relay feedback 在计算机做仿真 (13)3.2.3在线调整法 (15)3.2.4在线调整法在计算机做仿真 (16)3.3 针对有转移函数的PID调整方法 (18)3.3.1系统辨识法 (18)3.3.2波德图法及根轨迹法 (20)3.4 仿真结果及分析 (20)总结 (24)参考文献 (25)致谢 (25)河西学院本科生毕业设计诚信声明本人郑重声明:所呈交的本科毕业设计,是本人在指导老师的指导下,独立进行设计工作所取得的成果,成果不存在知识产权争议,除文中已经注明引用的内容外,本设计不含任何其他个人或集体已经发表或撰写过的作品成果。
对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。
本人完全意识到本声明的法律结果由本人承担。
作者签名:二〇年月日河西学院本科生毕业论文(设计)开题报告论文题目PID温控系统的设计及仿真(MATLAB)学生所属学院物理与机电工程学院专业电气工程及其自动化年级08级指导教师所在单位河西学院职称助教(研究生)开题日期2011.12.201.本选题的理论、实际意义此次所选的课题为基于MATLAB的PID控制器设计。
专家PID 控制系统Matlab 仿真摘要:分析了一个速度控制器的控制仿真。
其传递函数为:ss s s G 104735.87523500)(23++=使用专家PID 控制系统,输入信号为阶跃信号,取采样时间为1ms ,画出阶跃响应曲线和误差变化曲线。
0引言专家控制(Expert Control)的实质是基于受控对象和控制规律的各种知识,并以智能的方式利用这些知识来设计控制器。
利用专家经验来设计PID 参数便构成专家PID 控制。
典型的二阶系统单位阶跃响应误差曲线如图1、2所示。
对于典型的二阶系统阶跃响应过程作如下分析,根据误差及其变化,可设计专家PID 控制器,该控制器可分为五种情况进行设计。
1设计根据误差及其变化,可设计专家PID 控制器,该控制器可分为以下五种情况进行设计:(1)当1M |e(k)|>时,说明误差的绝对值已经很大,不论误差变化趋势如何,都应考虑控制器的输出应按最大〔或最小)输出,以达到迅速调整误差,使误差绝对值以最大速度减小。
此时,它相当于实施开环控制。
(2)当0)(e(k)>∆k e 时,说明误差在朝误差绝对值增大方向变化,或误差为某一常值,未发生变化。
此时,如果2M |e(k)|>,说明误差也较大,可考虑由控制器实施较强的控制作用,以达到扭转误差绝对值朝减小方向变化,并迅速减小误差的绝对值。
此时,如果2M |e(k)|<,说明尽管误差朝绝对值增大方向变化,但误差绝对值本身并不很大,可考虑控制器实施一般的控制作用,只要扭转误差的变化趋势,使其初误差绝对值减小方向变化。
(3)当0)(e(k)<∆k e ,01)-(e(k)>∆k e 或0e(k)=时,说明误差的绝对值朝减小的方向变化,或者已经达到平衡状态。
此时,可考虑采取保持控制器输出不变。
(4)当0)(e(k)<∆k e ,01)-(e(k)<∆k e 时,说明误差处于极值状态。
基于matlab的pid控制仿真课程设计PID(比例-积分-微分)控制器是一种常见的控制算法,被广泛应用于工业控制系统中。
在本文中,我们将介绍基于MATLAB的PID控制仿真课程设计。
首先,我们将简要介绍PID控制器的原理和特点,然后介绍如何使用MATLAB进行PID控制的仿真。
PID控制器是一种反馈控制器,可以通过比例、积分和微分三部分来调节控制系统的输出。
比例部分根据误差的大小进行调节,积分部分用于消除稳态误差,微分部分用于抑制系统振荡。
通过调节PID控制器的参数,可以使系统的稳定性、响应速度和稳态误差达到预期的要求。
在MATLAB中,可以使用控制系统工具箱来进行PID控制的仿真。
首先,我们需要定义一个系统模型,可以是连续时间系统或离散时间系统。
然后,我们可以使用PID控制器对象来创建一个PID控制器。
PID控制器的参数可以通过试错法、模型辨识等方法进行调节。
一旦系统模型和PID控制器被定义,我们可以使用MATLAB中的仿真工具来进行PID控制器的仿真。
通常,我们将输入信号作为控制器的参考信号,将输出信号作为系统的输出,并将控制器的输出作为系统的输入。
然后,我们可以观察系统的响应,并根据需要调整控制器的参数。
在进行PID控制仿真实验时,我们可以通过选择不同的控制器参数、改变控制器的结构、调整参考信号等方式来研究控制系统的性能。
例如,我们可以改变比例增益来改变系统的稳定性和响应速度,增加积分时间常数来减小稳态误差,增加微分时间常数来抑制系统振荡等。
在课程设计中,我们可以设计不同的控制实验,并分析不同参数对系统性能的影响。
例如,可以研究比例增益对系统稳定性和响应速度的影响,或者研究积分时间常数对稳态误差的影响等。
同时,我们还可以通过比较PID控制和其他控制算法(如PI控制、PD控制等)来评估PID控制的优势和局限性。
在进行PID控制仿真实验时,我们应该注意以下几点。
首先,选择合适的系统模型,确保模型能够准确地描述实际系统的行为。
基于matlab的PID控制算法仿真要求:(1)用Matlab的仿真工具Simulink分别做出数字PID控制器的两种算法(位置式和增量式)进行仿真(2)被控对象为一阶惯性环节D(s) = 1 / (5s+1)(3)采样周期T = 1 s(4)仿真结果:确定PID相关参数,使得系统的输出能够很快的跟随给定值的变化,给出例证,输入输出波形,程序清单及必要的分析。
首先,D(s) = 1 / (5s+1)建立Simulink模型如下:准备工作:(1)双击step,将sample time设置为1以符合采样周期T = 1 s 的要求(2)选定仿真时间为500图中" Integrator" 为积分器,"Derivative" 为微分器, "Kp" 为比例系数。
"T i"为积分时间常数, " Td" 为积分时间常数。
进行P控制器参数整定时,微分器和积分器的输出与系统断开,在Smulink中,吧微分器与积分器的输出连线断开即可。
同理,进行PI控制器参数整定的时候,断开微分器的输出连线即可。
第一步是先获取开环系统的单位阶跃响应,在Simulink中,把反馈连线、微分器、积分器的输出连线都断开,并将’Kp’的值置为1,连线如下图(下载后,图片可调节变大)仿真运行完毕,双击“scope”得到下图将Kp的值置为2,并连上反馈连线,得下图:上图即为P控制时系统的单仲阶跃响应。
接下来对PI控制整定,比例放大系数仍为Kp=2,经多次输入Ti的值,发现Ti=2,即1/Ti=0.5时,系统的输出最理想,如下图(下载后,图片可调节变大)选定仿真时间,仿真运行,运行元毕后. 双击" Scope " 得到以下结果当响应曲线有一定超调量,当由于积分时间太长导致系统响应无法平稳的时候,应该减小积分的时间。
反之如果超调量过大,则应该增大积分时间,最后选定Ti=2.最后,连上微分器,经多次输入调试,Td的值置为2时,系统能最快地趋向稳定。
一阶倒立摆的PID控制仿真摘要:本文主要介绍了一阶倒立摆系统的构成和数学模型,设计了PID控制器,在MATLAB环境下进行仿真,并对仿真结果进行分析。
PID控制器具有结构简单、容易实现、控制效果好等特点,是迄今为止最稳定的控制方法。
它所涉及的参数物理意义明确,理论分析体系完整,并为工程界所熟悉,因而在工业过程控制中得到了广泛应用。
关键词:一阶倒立摆:PID控制:MATLAB仿真:0.前言:PID控制器以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。
在工业过程控制中,目前采用最多的控制方式依然是PID方式,即使在日本,PID控制的使用率也达到84.5%。
它具有容易实现、控制效果好等特点,同时它原理简单,参数物理意义明确,理论分析体系完整,并为工程界所熟悉,因而在工业过程控制中得到了广泛应用。
尽管自1940年以来,许多先进控制方法不断推出,但PID控制器仍被广泛应用于冶金、化工、电力、轻工和机械等工业过程控制中。
1.一阶倒立摆的基本理论:倒立摆控制系统是一个复杂的、不稳定的、非线性系统,是进行控制理论教学及开展各种控制实验的理想实验平台。
对倒立摆系统的研究能有效的反映控制中的许多典型问题:如非线性问题、鲁棒性问题、镇定问题、随动问题以及跟踪问题等。
通过对倒立摆的控制,用来检验新的控制方法是否有较强的处理非线性和不稳定性问题的能力。
同时,其控制方法在军工、航天、机器人和一般工业过程领域中都有着广泛的用途,如机器人行走过程中的平衡控制、火箭发射中的垂直度控制和卫星飞行中的姿态控制等。
故其研究意义广泛。
1.1一阶倒立摆模型的数学建模质量为m的小球固结于长度为L的细杆(可忽略杆的质量)上,细杆又和质量为M的小车铰接相连。
由经验知:通过控制施加在小车上的力F(包括大小和方向)能够使细杆处于θ=0的稳定倒立状态。
在忽略其他零件的质量以及各种摩擦和阻尼的条件下,推导小车倒立摆系统的数学模型 (如图1)图11.2一阶倒立摆模型的过程分析:如图所示,设细杆摆沿顺时针方向转动为正方向,水平向右方向为水平方向上的正方向。
软件课程设计报告2010/3/8一.课程设计的目的通过课程设计的实习,使学生在两方面有所了解,有点提高:1.结合控制系统理论,用软件作为工具,进行计算机控制仿真,进一步了解控制理论和计算机软件的应用技术2.掌握利用软件工具进行图形界面应用程序设计的基本思路和方法,提高软件开发的能力。
二.课程设计的内容1、设计一个控制模拟系统:用计算机模拟一阶系统,并实现理想PID算法控制,具体功能如下:1)基本要求:a) 利用所学的自动控制理论,工程数学、计算机控制技术、数学建模等知识,进行理论分析,写出一阶系统和理想PID算法差分方程,作为系统模拟的基础。
b)利用可开发图形界面程序工具软件(推荐使用Visual basic),开发软件项目,实现一阶系统仿真和PID控制算法c)在软件项目中设计用户的操作面板,实现PID算法中的四个参数(比例增益Kp、积分时间Ki、微分时间Kd,设定值sv)和一阶系统的参数(静态增益K和时间常数T1)都可以通过对话框进行设定,系统可利用菜单选择所需的设置对话框。
d)设计系统的输出功能,以图形和表格方式实时显示一阶系统输出在PID 运算的设定值发生阶跃变化的响应。
2) 附加功能:a) 将系统的时间响应数据保存到数据库中,具体应包括下列属性:时间,输出值,设定值。
(数据库结构自己设计)b) 设计查询功能,将数据库保存的系统响应的历史数据以图形和表格方式重现。
c) 使用Teechart 控件作为显示输出。
三、课程设计报告关键内容:1、 数学模型设计过程及结果关于控制模拟系统的设计,我们有必要研究数字PID 的增量式算法和离散控制系统的数学描述。
<1>在模拟系统中,PID 算法的表达式为:])()(1)([)(⎰++=dtt de T dt t e T t e K t P DIP ( 1)式中 P(t):调节器的输出信号e(t):调节器的偏差信号,等于测量值与给定值之差PK :调节器的比例系数I T :调节器的积分时间 DT :调节器的微分时间对(1)式进行离散化处理,用数字形式的差分方程代替连续系统的微分方程,此时积分项和微分项用求和和增量式表示:∑⎰∑===∆=nj nnj j E Tt j E dt t e 0)()()(Tk E k E tk E k E dtt de )1()()1()()(--=∆--≈将以上两式代入式(1),可得到离散的PID 表达式:})]1()([)()({)(0∑=--++=kj D IP k E k E TT j E T T k E K k P (2)由于(2)的输出值与阀门开度的位置一一对应,因此通常把(2)式成为位置型PID 的位置控制算式。
目录一、PID控制简介 (1)1.1比例单元 (1)1.2积分单元 (1)1.3微分单元 (1)二、原系统分析 (1)三、PID控制器各参数的整定 (2)3.1控制比器位例控制器 (2)3.2控制器为PI控制器 (3)3.3控制器为PID控制器 (5)四、总结 (6)参考文献 (7)一、PID控制简介PID控制器是一种线性控制器,它根据给定值与输出值构成程控制偏差。
PID 控制器有比例单元P,积分单元I,微分单元D组成。
1.1比例单元P控制器是一个可调放大倍数的放大器,提高比例控制器的增益就是提高开环系统的放大系数。
这样就可以减小系统的稳态误差,从而提高控制精度对于一介系统来说,提高Kp还可以减小系统的稳态误差。
1.2积分单元输入信号与输入信号的积分比Ki是可调节的系数。
积分控制器可以提高系统的型别,减小稳态误差。
但它的相位角是-90度,这样明显减小相位裕度是系统震荡变强,甚至导致系统不稳定。
1.3微分单元反应偏差信号的变化趋势,并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。
二、原系统分析使用SIMULINK建立单回路过程控制系统如下图所示:图1 系统仿真图形图1 单回路控制系统原传递函数仿真图形如下图所示:图2 原系统仿真波形图由图可知该系统是发散的并不稳定,所以可尝试调节PID 控制器各个参数来确定其稳定性。
(1)只采用比例控制时,针对不同的p K =[0.1:0.1:1],绘制系统闭环阶跃响应曲线;(2)令1=p K ,应用PI 控制策略时,针对不同的i T =[0.7:0.1:1.5],绘制系统的阶跃响应曲线;(3)令1==i p T K ,应用PID 控制策略来试验不同的d T =[0.1:0.2:2],绘制系统的阶跃响应曲线;图2 原系统单位阶跃响应曲线三、PID 控制器各参数的整定3.1控制器位比例控制器(1)Kp=1时: (2)Kp=0.8图3 Kp=1时的响应曲线图4 Kp=0.8时的响应曲线(3)Kp=0.6 (4)Kp=0.4图5 Kp=0.6时的响应曲线图6 Kp=0.4时的响应曲线(5)Kp=0.2 (6)Kp=0.1图7 Kp=0.2时的响应曲线图8 Kp=0.1时的响应曲线比列系数Kp对系统的影响:Kp加大,将使系统响应速度加快,Kp偏大时,系统振荡次数增多,调节时间加长;;Kp太小又会使系统的响应速度缓慢。
关于一阶系统的PID 算法控制的仿真设计一、设计内容对一阶系统实现PID 算法控制并进行仿真,具体功能如下:基本要求:实现PID 算法和一阶系统差分方程仿真,PID 算法中的四个参数和一阶系统的参数都可以通过菜单进行设定,系统对阶越函数的响应以图形方式实时显示在窗口中。
二、涉及算法的基本原理在模拟系统中,PID 算法的表达式为: ])()(1)([)(⎰++=dtt de T dt t e T t e K t P D I P (1) 式中 P(t):调节器的输出信号e(t):调节器的偏差信号,等于测量值与给定值之差 P K :调节器的比例系数I T :调节器的积分时间 D T :调节器的微分时间欲控制系统的微分方程为: )()()(1t x t y t y dtdT =+ (2)x(t)为系统输入,y(t)为系统输出。
对于闭环的单位负反馈,我们有PID 控制器的输入是测试信号r(t)与系统输出y(t)之差,因此有:T 1dy(t)dt +y (t )=K P [(r (t )−y (t ))+1T I ∫(r (τ)−y(τ))dτt 0+T D d(r (t )−y (t ))dt] (3)又因为r(t)为阶跃函数,故有:d 2y (t )dt 2+1+K P T 1+K P T D dy (t )dt +K PT I (T 1+K P T D )y (t )=K P T 1+K P T D [δ(t )+T D dδ(t )dt ]+r(t)T I (T 1+K P T D )(4) 令:2ab =−1+K PT 1+K P T D,b =√KPT I(T 1+KP T D) ,c =K P T 1+K P T D,d =K P T DT 1+K P TDe =1T I(T 1+K P T D )(5)则有:d 2y (t )dt 2−2ab dy (t )dt +b 2y (t )= cδ(t )+d dδ(t )dt+er(t) (6)由Laplace 变换,且设y(0)=y ′(0)=0 ,有:Type equation here.Y (s )=cs +ds 2+e s −2abs +b 1s(7)令:A =b(a +2,B =b(a −2 解得:{y (t )=(c +dA )A +e (A −B)A e At −(c +dB )B +e (A −B)B e Bt +e AB (A ≠B)y (t )=((c +dA )t +d)e At +e A te At −eAB(e At −1) (A =B)(8)当T 很小时:y (0)=d ,y (T )≈d +(c +2abd)T (9)对于极小的时间间隔,及采样周期T ,我们有:{d 2y (kT )dt ≈y (kT )−2y((k −1)T)+y((k −2)T)T dy (kT )dt ≈y (kT )−y((k −1)T)T(10)代入(6),且考虑k>2,有:y (k )=2(1−abT )1−2abT +(bT )y (k −1)−11−2abT +(bT )y (k −2)+T 2e (11)我们只需要求得y(0),y(1) 即可求得系统的输出。
三、利用Matlab GUI 设计PID 的一阶系统的仿真1、实验仪器装有Matlab2013a 的PC 机一台 2、实验步骤A 、学习有关Matlab GUI 界面编程的相关知识B 、打开Matlab GUI 页面,设计PID 控制器的界面,如下图:其中如图所示的功能键的功能如下:Start—stop模块:单击start开始绘制默认参数下的PID响应图;单击close关闭窗口Player and Precision adjustment输入模块(时间单位为秒):Display :动态显示绘图时间,即前进一个设定的步长所需的时间Tf :绘图的最大的时间的设定T :采样周期PID_Controller Parameter Setting 输入模块:Kp :比例环节系数Ti :积分环节系数Td :微分环节系数System Parameter Setting输入模块:T1:一阶惯性系统的时间常数其中的默认参数如上图所示。
C 、编写相关的回调函数(1)、打开Matlab自动生成的M文件,找到以下函数段,即初始化的函数。
在下面加入初始化的模块程序:function PID_Controller_OpeningFcn(hObject, eventdata, handles, varargin)set(handles.Kp,'String',1);set(handles.Ti,'String',1);set(handles.Tf,'String',10);set(handles.Td,'String',1);set(handles.T,'String',0.01);set(handles.T1,'String',1);set(handles.Time,'String',0.1);(2) 找的下面的函数,加入主程序,即我们得到的算法(5)、(9)、(10)、(11)式,可以得到如下程序:function start_Callback(hObject, eventdata, handles)Tf=str2num(get(handles.Tf,'String')); %%Td=str2num(get(handles.Td,'String')); %% 规定变量类型为数值性Ti=str2num(get(handles.Ti,'String')); %%T=str2num(get(handles.T,'String')); %%Kp=str2num(get(handles.Kp,'String')); %%T1=str2num(get(handles.T1,'String')); %%Time=str2num(get(handles.Time,'String')); %%N=fix(Tf/T); %%把绘图结束时间取下整b=sqrt(Kp/(Ti*(T1+Kp*Td))); %%a=-0.5*(1+Kp)/(T1+Kp*Td)/b; %%c=Kp/(T1+Kp*Td); %%d=Kp*Td/(T1+Kp*Td); %%由算法的到的计算值e=1/(T1+Kp*Td)/Ti; %%System_output(1)=d; %% 初始值System_output(2)=d+(c+2*a*b*d)*T; %%for k=3:NSystem_output(k)=2*(1-a*b*T)/(1-2*a*b*T+(b*T)^2 )* System_output(k-1)-1/(1-2*a*b*T+(b*T)^2 )*System_output(k-2)+e*T^2;end %%系统输出n=1:N;x=T*n;hold ongrid on;axis([0,max(x)+1,min(System_output)-1,max(System_output)+1]) %%规范围定显示坐标comet(x,System_output(n),Time); %% 动态显示function Time_Callback(hObject, eventdata, handles)四、运行结果及调试分析(1)、算法正确性的检验默认参数时,我们有图(1),为检验算法的正确性,当参数取上述数值是,可得系统传递函数为:Y(s) R(s)=1+s+s2 1+2s+2s2利用Matlab,在命令窗口输入:num=[1 1 1];>> den=[2 2 1];>> step(num,den)得到系统的单位阶跃响应曲线如图(2)。
图(1)本设计算法PID闭环控制一阶惯性系统默认参数响应图(2)Matlab自带工具箱PID闭环控制一阶惯性系统默认参数响应由此,比较此二曲线,我们可以肯定我们的算法是正确的。
(2)、其他参数下的响应Tf=50,其他参数不变(左)Ti=10、Td=1,Kp=3 ,Tf=12,Display=0.1,T=0.01Kp=3,Ti=0.5,Td=100,T1=1,如下图所示:当点击close键时,系统关闭。
经多次调试,该系统能运行正常。
五、心得体会首先,我是第一次用Matlab设计界面,有好多东西多不会。
因此试了很多次,到最后是做出来了。
感悟是:会者不难。
其次我没有用老师所给的算法,而是自己设计的,在做这算法的过程中深感到数学的重要性。
好在这些数学知识都会。
其次就是在编程的过程中发现自己不太细心,这需要更多的练习。
最后就是由于时间仓促,有一些可以做的更好地方没有做。
六、参考文献信号与线性系统.上册/管致中,夏恭恪等编著.4版。
—北京:高等教育出版社,2004.1精通MATLAB CUI设计/陈垚光等编著,—3版.—北京:电子工业出版社,2013.8计算机控制系统/何克忠,李伟编著。
—北京清华大学出版社,1998,4Matlab代码(已去掉Matlab自动生成的注释):function varargout = PID_Controller(varargin)gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn',@PID_Controller_OpeningFcn, ...'gui_OutputFcn',@PID_Controller_OutputFcn, ...'gui_LayoutFcn', [] , ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State,varargin{:});elsegui_mainfcn(gui_State, varargin{:});endfunction PID_Controller_OpeningFcn(hObject, eventdata, handles, varargin)set(handles.Kp,'String',1);set(handles.Ti,'String',1);set(handles.Tf,'String',10);set(handles.Td,'String',1);set(handles.T,'String',0.01);set(handles.T1,'String',1);set(handles.Time,'String',0.1);handles.output = hObject;guidata(hObject, handles);function varargout = PID_Controller_OutputFcn(hObject, eventdata, handles)varargout{1} = handles.output;function System_output_ButtonDownFcn(hObject, eventdata, handles)function stop_Callback(hObject, eventdata, handles)closefunction reset_Callback(hObject, eventdata, handles)function T1_Callback(hObject, eventdata, handles)function T1_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction Kp_Callback(hObject, eventdata, handles) function Kp_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction Ti_Callback(hObject, eventdata, handles) function Ti_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction Td_Callback(hObject, eventdata, handles) function Td_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction T_Callback(hObject, eventdata, handles) function T_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction Tf_Callback(hObject, eventdata, handles) function Tf_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');endfunction start_Callback(hObject, eventdata, handles) Tf=str2num(get(handles.Tf,'String'));Td=str2num(get(handles.Td,'String'));Ti=str2num(get(handles.Ti,'String'));T=str2num(get(handles.T,'String'));Kp=str2num(get(handles.Kp,'String'));T1=str2num(get(handles.T1,'String'));Time=str2num(get(handles.Time,'String'));N=fix(Tf/T);b=sqrt(Kp/(Ti*(T1+Kp*Td)));a=-0.5*(1+Kp)/(T1+Kp*Td)/b;c=Kp/(T1+Kp*Td);d=Kp*Td/(T1+Kp*Td);e=1/(T1+Kp*Td)/Ti;System_output(1)=d;System_output(2)=d+(c+2*a*b*d)*T;for k=3:NSystem_output(k)=2*(1-a*b*T)/(1-2*a*b*T+(b*T)^2 )*System_output(k-1)-1/(1-2*a*b*T+(b*T)^2 )*System_output(k-2)+e*T^2;endn=1:N;x=T*n;hold ongrid on;axis([0,max(x)+1,min(System_output)-1,max(System_output)+1]) comet(x,System_output(n),Time);function Time_Callback(hObject, eventdata, handles)function Time_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');end。