一阶系统的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 时,说明误差处于极值状态。
关于一阶系统的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。