DDC单回路PID闭环控制系统的设计及实时仿真课程设计报告
DDC单回路PID控制实验实验报告
DDC 单回路PID 控制实验实验报告一、对象动态特性实验22111121()1(2)1(1)(G −−++−+=ZZ K z T T T T G(s)离散化得: 差分方程:Y(k)=a0*Y(k-1)+b0*Y(k-2)+c0*R(k) 其中:a0=2.0*T1/T/(1+T1/T)b0=0.0-pow(T1/T,2.0)/(1+T1/T)/(1+T1/T)c0=K1/(1+T1/T)/(1+T1/T)程序框图:相关源程序段:double T,r0,K1,T1,Kp,Ti,Td,Beta;//定义全局变量便于参数传递void CMainFrame::OnDrawObject() { // TODO: Add your command handler code here if(T==0){ ErrorDlg errorDlg; errorDlg.DoModal(); } else{CDC * pDC=GetDC(); CPen pen1,* oldpen;oldpen=pDC->SelectObject(&pen1);//画坐标轴pen1.CreatePen(PS_SOLID,1,RGB(0,0,255));pDC->SelectObject(&pen1);pDC->MoveTo(50,50);pDC->LineTo(50,300);pDC->MoveTo(50,50);pDC->LineTo(46,58);pDC->MoveTo(50,50);pDC->LineTo(54,58);pDC->MoveTo(50,300);pDC->LineTo(490,300);pDC->LineTo(482,295);pDC->MoveTo(490,300);pDC->LineTo(482,305);pDC->SetTextColor(RGB(0,0,255));pDC->TextOut(40,298,"0");pDC->TextOut(56,48,"Y");pDC->TextOut(492,300,"t");pDC->MoveTo(50,180);pen1.DeleteObject();pen1.CreatePen(PS_DASH,1,RGB(0,0,255));pDC->SelectObject(&pen1);pDC->LineTo(480,180);pDC->TextOut(35,174,"r0");pen1.DeleteObject();pen1.CreatePen(PS_SOLID,1,RGB(255,0,0));pDC->SelectObject(&pen1);y=300,t,unity,unitt=2;//两坐标轴单位长intunity=120.0/r0;a0,b0,c0,y0=0,y1=0,y2;doublea0=2.0*T1/T/(1+T1/T);b0=0.0-pow(T1/T,2.0)/(1+T1/T)/(1+T1/T);c0=K1/(1+T1/T)/(1+T1/T);text;CStringtext.Format("对象动态特性曲线:K1=%4.1f, T1=%3.2f, T=%3.2f, r0=%3.1f",K1,T1,T,r0);pDC->TextOut(80,320,text);pDC->MoveTo(50,300);for(t=52;t<=480;t+=unitt){y2=a0*y1+b0*y0+c0*r0;pDC->LineTo(t,y-unity*y2);y0=y1;y1=y2;}pDC->SelectObject(oldpen);}}程序界面及实验输出响应曲线:二、单回路PID控制实验采用增量式:delta_u=a*e(k)+b*e(k-1)+c*e(k-2)其中:a=Kp*(1+T/Ti*L+Td/T) L为积分分离系数b=0.0-Kp*(1+2*Td/T)c=Kp*Td/T;程序框图:相关源程序段:double T,r0,K1,T1,Kp,Ti,Td,Beta;//定义全局变量便于参数传递bool pid=FALSE;void CMainFrame::OnDrawU() // CMainFrame::OnDrawY()基本相同,不再另附源程序{// TODO: Add your command handler code hereif(T==0||(!pid)){ErrorDlgerrorDlg;errorDlg.DoModal();}else{pDC=GetDC();*CDCCPen pen1,* oldpen;oldpen=pDC->SelectObject(&pen1);//画坐标轴pen1.CreatePen(PS_SOLID,1,RGB(0,0,255));pDC->SelectObject(&pen1);pDC->MoveTo(50,50);pDC->LineTo(50,300);pDC->MoveTo(50,50);pDC->LineTo(46,58);pDC->MoveTo(50,50);pDC->LineTo(54,58);pDC->MoveTo(50,300);pDC->LineTo(490,300);pDC->LineTo(482,295);pDC->MoveTo(490,300);pDC->LineTo(482,305);pDC->SetTextColor(RGB(0,0,255));pDC->TextOut(40,298,"0");pDC->TextOut(56,48,"U");pDC->TextOut(492,300,"t");pDC->MoveTo(50,180);pen1.DeleteObject();pen1.CreatePen(PS_DASH,1,RGB(0,0,255));pDC->SelectObject(&pen1);pDC->LineTo(480,180);pDC->TextOut(35,174,"r0");pen1.DeleteObject();pen1.CreatePen(PS_SOLID,1,RGB(0,124,111));pDC->SelectObject(&pen1);u=300,t,unitt=2;//两坐标轴单位长intdoubleunitu=120.0/r0;a,b,c,e0=0,e1=0,e2=r0,u1=0,u2,delta_u;doublea0,b0,c0,y0=0,y1=0,y2;doubleL=1;//积分分离逻辑系数inta0=2.0*T1/T/(1+T1/T);b0=0.0-pow(T1/T,2.0)/(1+T1/T)/(1+T1/T);c0=K1/(1+T1/T)/(1+T1/T);b=0.0-Kp*(1+2*Td/T);c=Kp*Td/T;text1,text2;CStringtext1.Format("PID控制u(t)阶跃响应曲线:Kp=%4.1f, Ti=%3.2f, Td=%3.2f",Kp,Ti,Td);text2.Format("K1=%4.1f, T1=%3.2f, T=%3.2f, r0=%3.1f",K1,T1,T,r0);pDC->TextOut(80,320,text1);pDC->TextOut(120,340,text2);pDC->MoveTo(50,300);for(t=52;t<=480;t+=unitt){if(Beta==0||e2<Beta)L=1;else L=0;a=Kp*(1+T/Ti*L+Td/T);delta_u=a*e2+b*e1+c*e0;u2=u1+delta_u;pDC->LineTo(t,u-unitu*u2);y2=a0*y1+b0*y0+c0*u2;e0=e1;e1=e2;e2=r0-y2;u1=u2;y0=y1;y1=y2;}}}用工程整定法整定PID参数:令T=1,r0=1,K1=1,T1=10取消积分部分作用(取极小Beta值),令Td=0,试得Kp=5时为临界状态,输出曲线:由图知此时周期Tu约为29推算出PID调节时的整定参数Kp=3.125,Ti=14.5,Td=3.625整定后的输出曲线:采用具有积分分离的数字PID算法:对象及PID控制参数均不变,以便与以上无积分分离曲线进行比较β适中(0.8)情况下得曲线β过小(0.2)时得曲线:取Ti=14.5, Td=3.625,改变Kp观察y(t)变化:Kp=10观察图中曲线研Kp=3.125 Kp=1究Kp对调节品质的影响:随着Kp增大,超调量增加,响应速度加快。
PID仿真实验报告
PID仿真实验报告PID控制算法是一种重要的控制算法,被广泛应用于工业控制系统中。
本文通过仿真实验的方式,对PID控制算法进行了验证和分析。
一、实验目的1.了解PID控制算法的基本原理和调节方法;2. 掌握MATLAB/Simulink软件的使用,进行PID控制实验仿真;3.验证PID控制算法的稳定性和性能。
二、实验内容本次实验选择一个常见的控制系统模型,以电感驱动的直流电机控制系统为例。
通过PID控制算法对该系统进行控制,观察系统的响应特性。
三、实验步骤1.搭建电感驱动的直流电机控制系统模型,包括电感、直流电机、PID控制器等组成部分;2.设置PID控制器的参数,包括比例增益Kp、积分时间Ti、微分时间Td等;3.进行仿真实验,输入适当的控制信号,观察系统的响应曲线;4.调节PID控制器的参数,尝试不同的调节方法,观察响应曲线的变化,寻找合适的参数。
四、实验结果与分析1.首先,设置PID控制器的参数为Kp=1,Ti=1,Td=0,进行仿真实验。
观察到系统的响应曲线,并记录与分析曲线的特点;2.其次,调整PID控制器的参数,如增大比例增益Kp,观察系统的响应曲线的变化;3.最后,调整积分时间Ti和微分时间Td,观察系统的响应曲线的变化。
通过实验结果与分析,可以得到以下结论:1.PID控制算法能够有效地控制系统,并实现稳定的控制;2.比例增益Kp对系统的超调量有较大的影响,增大Kp可以减小超调量,但也会增加系统的稳定时间;3.积分时间Ti对系统的稳态误差有较大的影响,增大Ti可以减小稳态误差,但也会增加系统的超调量;4.微分时间Td对系统的响应速度有较大的影响,增大Td可以增加系统的响应速度,但可能会引起系统的振荡。
五、实验总结通过本次实验,我深入理解了PID控制算法的原理和调节方法。
同时,通过对实验结果的分析,我也了解了PID控制算法的稳定性和性能。
在实际工程应用中,需要根据具体的控制对象,合理选择PID控制器的参数,并进行调节优化,以获得理想的控制效果。
pid课程设计
pid 课程设计一、教学目标本节课的教学目标是让学生掌握PID控制器的原理、结构和应用,能够运用PID控制器解决实际工程问题。
具体来说,知识目标包括:了解PID控制器的组成部分,掌握PID控制器的工作原理,理解PID控制器在工业控制系统中的应用。
技能目标包括:能够根据系统特性设计和调整PID控制器参数,能够使用PID控制器进行系统控制。
情感态度价值观目标包括:培养学生对自动化技术的兴趣和认识,使学生意识到PID控制器在现代工业中的重要作用。
二、教学内容本节课的教学内容主要包括PID控制器的原理、结构和应用。
首先,介绍PID控制器的组成部分,包括比例环节、积分环节和微分环节。
然后,讲解PID控制器的工作原理,包括控制器输入输出关系、控制律和参数调整方法。
接着,介绍PID控制器在工业控制系统中的应用,包括过程控制系统、运动控制系统和温度控制系统等。
最后,通过实例分析,让学生学会使用PID控制器解决实际工程问题。
三、教学方法为了实现本节课的教学目标,采用多种教学方法相结合的方式进行教学。
首先,采用讲授法,系统地讲解PID控制器的原理、结构和应用。
其次,采用讨论法,让学生在小组内讨论PID控制器参数调整的方法和技巧。
再次,采用案例分析法,通过分析实际工程案例,让学生学会运用PID控制器解决实际问题。
最后,采用实验法,让学生在实验室进行PID控制器的设计和调试,巩固所学知识。
四、教学资源为了支持本节课的教学内容和教学方法的实施,准备了一系列教学资源。
教材方面,选用《自动控制原理》作为主教材,辅助以《PID控制器应用手册》等参考书籍。
多媒体资料方面,制作了PPT课件,展示了PID控制器的原理图、结构图和工程应用案例。
实验设备方面,准备了PID控制器实验装置,让学生能够亲自动手进行实验操作。
此外,还提供了在线教程、视频讲座等网络资源,供学生课后自学。
五、教学评估本节课的教学评估主要包括平时表现、作业和考试三个部分。
《计算机控制技术》数字PID控制器设计与仿真实验报告
《计算机控制技术》数字PID控制器设计与仿真实验报告课程名称:计算机控制技术实验实验类型:设计型实验项目名称:数字PID控制器设计与仿真一、实验目的和要求1. 学习并掌握数字PID以及积分分离PID控制算法的设计原理及应用。
2. 学习并掌握数字PID控制算法参数整定方法。
二、实验内容和原理图3-1图3-1是一个典型的 PID 闭环控制系统方框图,其硬件电路原理及接线图可设计如图1-2所示。
图3-2中画“○”的线需用户在实验中自行接好,对象需用户在模拟实验平台上的运放单元搭接。
图3-2上图中,ADC1为模拟输入,DAC1为模拟输出,“DIN0”是C8051F管脚 P1.4,在这里作为输入管脚用来检测信号是否同步。
这里,系统误差信号E通过模数转换“ADC1”端输入,控制机的定时器作为基准时钟(初始化为10ms),定时采集“ADC1”端的信号,得到信号E的数字量,并进行PID计算,得到相应的控制量,再把控制量送到控制计算机及其接口单元,由“DAC1”端输出相应的模拟信号,来控制对象系统。
本实验中,采用位置式PID算式。
在一般的PID控制中,当有较大的扰动或大幅度改变给定值时,会有较大的误差,以及系统有惯性和滞后,因此在积分项的作用下,往往会使系统超调变大、过渡时间变长。
为此,可采用积分分离法PID控制算法,即:当误差e(k)较大时,取消积分作用;当误差e(k)较小时才将积分作用加入。
图3-3是积分分离法PID控制实验的参考程序流程图。
图3-3三、主要仪器设备计算机、模拟电气实验箱四、操作方法与实验步骤1.按照图3-2搭建实验仿真平台。
2.确定系统的采样周期以及积分分离值。
3.参考给出的流程图编写实验程序,将积分分离值设为最大值0x7F,编译、链接。
4.点击,使系统进入调试模式,点击,使系统开始运行,用示波器分别观测输入端R以及输出端C。
5.如果系统性能不满意,用凑试法修改PID参数,再重复步骤3和4,直到响应曲线满意,并记录响应曲线的超调量和过渡时间。
单闭环直流调速系统PID控制器参数设计仿真
单闭环直流调速系统PID控制器参数设计仿真一、引言PID控制器是一种经典的控制方法,广泛应用于各种调节系统中。
在单闭环直流调速系统中,PID控制器可以根据给定的转速和实际测量的转速之间的误差,通过计算控制输出来实现对转速的控制。
本文将通过仿真的方式,进行PID控制器参数设计。
二、系统建模G(s)=k/(T*s+1)其中k为增益,T为时间常数。
三、PID控制器参数设计在设计PID控制器参数之前,需要首先选择合适的性能指标,常用的性能指标有超调量、调整时间和稳态误差。
本文选择超调量和调整时间作为性能指标,通过这两个指标可以综合评估系统的动态响应。
1.超调量的计算超调量是指实际过程响应曲线峰值与稳态值之间的差值的百分比。
超调量可以通过以下公式来计算:PO=(M-1)*100%其中PO为超调量,M为峰值与稳态值之间的差值与稳态值的比值。
2.调整时间的计算调整时间是指实际过程从初始值达到稳态值所需的时间。
调整时间可以通过以下方法来计算:标定点到极值点的时间为t1,稳定范围(0.9M,1.1M)的时间为t2,调整时间可定义为t1+t23.参数选择根据超调量和调整时间的要求,可以选择合适的PID控制器参数。
一般情况下,P参数用于控制系统的超调量,I参数用于控制系统的调整时间,D参数用于控制系统的稳定性。
四、仿真结果分析通过Matlab/Simulink进行仿真,得到了PID控制器的参数设计结果。
根据系统传递函数G(s) = k / (T * s + 1),设置k = 1,T = 11.超调量为5%,调整时间为2s的情况下,选取合适的PID控制器参数为:P=1.2I=1.4D=0.12.超调量为10%,调整时间为1.5s的情况下,选取合适的PID控制器参数为:P=1.2I=1.6D=0.153.超调量为15%,调整时间为2.5s的情况下P=1.4I=1.8D=0.2根据上述参数进行仿真,通过绘制转速曲线,可以观察到系统的动态响应。
pid控制系统课程设计
pid控制系统课程设计一、教学目标本节课的教学目标是让学生掌握PID控制系统的原理、结构和应用,具备分析和设计PID控制系统的能力。
具体目标如下:1.知识目标:–了解PID控制系统的概念、原理和组成部分;–掌握PID控制器的参数调整方法;–了解PID控制系统在实际应用中的优缺点。
2.技能目标:–能够运用PID控制原理分析和解决实际问题;–能够使用仿真软件进行PID控制系统的模拟和优化;–能够设计简单的PID控制系统并进行实际操作。
3.情感态度价值观目标:–培养学生对自动化技术的兴趣和认识,认识到PID控制系统在现代工业中的重要作用;–培养学生勇于探索、善于合作的科学精神;–培养学生关注社会、关心他人的责任感。
二、教学内容本节课的教学内容主要包括以下几个部分:1.PID控制系统的概念和原理:介绍PID控制系统的定义、作用和基本原理,让学生了解PID控制系统在工业控制中的应用。
2.PID控制器的参数调整:讲解PID控制器的参数(比例系数、积分系数、微分系数)的作用和调整方法,引导学生掌握参数调整的技巧。
3.PID控制系统的应用:分析PID控制系统在实际应用中的优缺点,让学生了解PID控制系统在不同领域的应用实例。
4.PID控制系统的仿真与实际操作:利用仿真软件,让学生亲自模拟和优化PID控制系统,提高学生运用所学知识解决实际问题的能力。
三、教学方法本节课采用多种教学方法相结合,以提高学生的学习兴趣和主动性:1.讲授法:讲解PID控制系统的原理、结构和参数调整方法,为学生提供系统的知识结构。
2.案例分析法:分析实际应用中的PID控制系统案例,让学生了解PID控制系统的应用场景和优缺点。
3.实验法:让学生利用仿真软件进行PID控制系统的模拟和优化,培养学生的实际操作能力。
4.讨论法:学生进行小组讨论,分享学习心得和体会,提高学生的沟通能力和团队协作精神。
四、教学资源本节课的教学资源包括以下几个方面:1.教材:选用国内权威的PID控制系统教材,为学生提供系统的理论知识。
控制系统课程设计报告--- 控制系统设计与仿真
本科课程设计报告目录控制系统课程设计报告 (1)课程设计题目 (3)实验设备 (3)实验目的 (3)实验背景 (3)实验内容 (3)任务一: (3)了解MATLAB的使用环境,掌握基本的MATLAB编程语法和语句 (3)任务二: (5)了解Simulink的使用环境,掌握Simulink的模块化编程步骤 (5)任务三: (5)对所有过程控制系统对象进行分析,分析所有参数的变化情况 (5)1.一阶系统 (6)2.二阶系统 (7)3.多阶系统 (9)任务四-六: (10)单回路控制系统仿真,PID控制原理,PID参数对控制系统性能的影响 (10)1.被控对象特性在系统中的仿真分析研究 (10)2.执行器在系统中的仿真分析研究 (12)3.控制器特性在系统中的仿真分析研究 (13)4.变送器特性在系统中的仿真分析研究 (15)任务七-八: (17)根轨迹法的基本原理;根轨迹的绘制方法、增益的选择、稳态误差的消除措施 (17)1.根轨迹理论的仿真分析 (17)2.减小消除稳态误差的措施 (18)任务九-十一: (21)频域响应法的基本原理;Bode图的绘制、带宽频率的选择;频率法校正 (21)1.利用伯德图观察幅频与相频特性 (21)2.基于bode图对系统相关指标分析 (22)任务十二-十四: (25)串级控制系统、前馈控制系统、比值控制系统设计,与单回路比较 (25)1.串级控制系统 (25)2.前馈控制系统 (26)3.比值控制系统 (28)任务十五: (29)数字PID控制算法的实验研究 (29)实验总结 (29)参考文献 (29)课程设计题目: 控制系统设计与仿真实验设备:含有MATLAB R2008a 的HP计算机一台.实验目的:通过实验,深入了解MATLAB矩阵实验室的操作,simulink仿真的使用以及各种控制系统的特性,从而为接下来的实体实验打下坚实的基础.有利于学习通过仿真对不能很轻易实现的实验进行分析研究,理解仿真与实际实验的密切关系.实验背景:一学期的自动控制原理课程修习;一学期的过程控制课程修习;一学期的控制系统设计与仿真课程修习;简单的MA TLAB程序应用.实验内容:任务一:了解MATLAB的使用环境,掌握基本的MATLAB编程语法和语句;MATLAB简介:MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
ddc控制系统课程设计
ddc控制系统课程设计一、课程目标知识目标:1. 学生能理解DDC控制系统的基本原理和组成,掌握其工作流程。
2. 学生能掌握DDC控制系统的编程与调试方法,了解其在智能建筑中的应用。
3. 学生能了解DDC控制系统在我国的发展现状及趋势。
技能目标:1. 学生能运用所学知识对DDC控制系统进行简单编程与调试。
2. 学生具备分析DDC控制系统故障并进行排查的能力。
3. 学生能运用DDC控制系统进行简单的自动化控制项目设计。
情感态度价值观目标:1. 培养学生对DDC控制系统及智能建筑领域的兴趣,激发学习热情。
2. 培养学生团队合作精神,提高沟通协调能力。
3. 增强学生环保意识,认识到DDC控制系统在节能减排方面的重要性。
课程性质:本课程为专业选修课,旨在让学生了解并掌握DDC控制系统的基础知识,提高实际操作能力。
学生特点:学生为高年级本科生,具备一定的电子、电气和控制理论基础,对实际操作有较高的兴趣。
教学要求:注重理论与实践相结合,强调实际操作能力的培养,结合案例分析,提高学生的应用能力。
通过本课程的学习,使学生能够具备从事DDC控制系统相关领域工作的基本技能。
二、教学内容1. DDC控制系统概述:介绍DDC控制系统的基本概念、发展历程、应用领域及发展趋势。
教材章节:第一章2. DDC控制系统组成与原理:讲解DDC控制系统的硬件组成、软件结构、工作原理及性能指标。
教材章节:第二章3. DDC控制系统的编程与调试:学习DDC控制系统的编程方法、调试技巧及在实际项目中的应用。
教材章节:第三章4. DDC控制系统在智能建筑中的应用:分析DDC控制系统在建筑自动化、能源管理等方面的应用案例。
教材章节:第四章5. DDC控制系统故障分析与排查:介绍DDC控制系统常见故障现象、原因及排查方法。
教材章节:第五章6. DDC控制系统项目实践:设计实际项目,让学生动手操作,提高实践能力。
教材章节:第六章教学内容安排与进度:第1周:DDC控制系统概述第2周:DDC控制系统组成与原理第3-4周:DDC控制系统的编程与调试第5周:DDC控制系统在智能建筑中的应用第6周:DDC控制系统故障分析与排查第7-8周:DDC控制系统项目实践三、教学方法针对DDC控制系统课程的特点,采用以下多样化的教学方法,以激发学生的学习兴趣和主动性:1. 讲授法:用于讲解DDC控制系统的基本概念、原理和组成等理论知识。
PID控制系统的Simulink仿真实验报告
自动控制原理实验报告PID 控制系统的Simulink 仿真1.实验目的1)掌握PID 控制规律及控制器的实现。
控制规律及控制器的实现。
2)对给定系统合理地设计PID 控制器。
控制器。
3)掌握对给定系统进行PID 控制器参数在线实验工程整定的方法。
控制器参数在线实验工程整定的方法。
2.实验原理在串联校正中,比例控制可提高系统开环增益,减少系统稳态误差,提高系统的控制精度,但会降低系统的相对稳定性,甚至可能造成系统闭环系统不稳定,积分控制可以提高系统的型别,有利于提高系统稳定性能,有利于提高系统稳定性能,但积分控制增加了一个位于原点的开环极点,但积分控制增加了一个位于原点的开环极点,但积分控制增加了一个位于原点的开环极点,使信号产生使信号产生90度的相位滞后,对系统的稳定不利,故不宜采用单一的积分控制器;微分控制规律能反映输入信号的变化趋势,映输入信号的变化趋势,产生有效的早期修正信号,产生有效的早期修正信号,产生有效的早期修正信号,以增加系统的阻尼程度,以增加系统的阻尼程度,以增加系统的阻尼程度,从而改善系统从而改善系统的稳定性,但微分控制增加了一个(-1/t)的开环极点,使系统的相角裕度提高,因此有助于系统动态性能的改善。
系统动态性能的改善。
在串联校正中,PI 控制器增加了一个位于原点的开环极点,同时也增加了一个位于s 左半平面的开环零点。
位于原点的开环极点可以提高系统的型别(无差度),减小稳态误差,有利于提高系统稳定性能;负的开环零点可以减小系统的阻尼,缓和PI 极点对系统产生的不利影响。
只要积分时间常数Ti 足够大,PI 控制器对系统的不利影响可大大减小。
PI 控制器主要用来改善控制系统的稳态性能。
主要用来改善控制系统的稳态性能。
在串联校正中,PID 控制器增加了一个位于原点的开环极点和两个位于s 左半平面的开环零点。
除了具有PI 控制器的优点外,还多了一个负实零点,动态性能比PI 更具有优越性。
控制系统设计与仿真课设计报告
《控制系统设计与仿真》课程设计报告目录摘要 (1)一、概述 (2)二、设计任务与要求 (2)2.1 设计任务 (2)2.2 设计要求 (2)三、理论设计 (3)3.1 双闭环调速系统总设计 (3)3.2 设计电流调节器 (5)3.2.1.2 确定时间常数 (5)3.2.1.3 选择电流调节器的结构 (5)3.2.1.4 校验近似条件 (5)3.2.1.5 计算调节器电阻和电容 (6)3.3 速度环设计 (6)3.3.1 确定时间常数 (7)3.3.2 选择转速调节器结构 (7)3.2.2.3 检验近似条件 (7)3.2.2.4 计算调节器电阻和电容 (7)3.2.2.5 校核转速超调量 (7)四、系统建模及仿真实验 (8)4.1 MATLAB 仿真软件介绍 (8)4.2 仿真建模及实验 (8)4.2.1 单闭环仿真实验 (8)4.2.2 电流环仿真实验 (10)4.2.3 双闭环仿真实验 (10)4.2.4 反馈回路扰动仿真实验 (14)五、总结 (15)六、体会 (16)参考文献 (17).摘要从七十年代开始,由于晶闸管直流调速系统的高效、无噪音和快速响应等优点而得到广泛应用。
双闭环直流调速系统就是一个典型的系统,该系统一般含晶闸管可控整流主电路、移相控制电路、转速电流双闭环调速控制电路、以及缺相和过流保护电路等.给定信号为0~10V直流信号,可对主电路输出电压进行平滑调节。
采用双PI调节器,可获得良好的动静态效果。
电流环校正成典型I型系统。
为使系统在阶跃扰动时无稳态误差,并具有较好的抗扰性能,速度环设计成典型Ⅱ型系统。
根据转速、电流双闭环调速系统的设计方法,用MATLAB做了双闭环直流调速系统仿真综合调试,分析系统的动态性能,并进行校正,得出正确的仿真波形图。
本文还对实际中可能出现的各种干扰信号进行了仿真,另外本文还介绍了实物验证的一些情况。
关键词:MATLAB 直流调速双闭环转速调节器电流调节器干扰一、概述我们都知道,对于调速系统来说,闭环调速比开环调速具有更好的调速性能。
PID控制系统的设计及仿真
PID控制系统的设计及仿真首先,我们需要理解PID控制器的工作原理。
PID控制器通过比较目标值与实际值之间的偏差,以及偏差的变化率和积分值来计算输出控制信号,从而实现目标值与实际值之间的闭环控制。
在设计PID控制系统时,我们需要确定三个参数:比例增益(KP)、积分时间常数(TI)和微分时间常数(TD)。
这些参数的选择将直接影响控制系统的稳定性和性能。
首先,我们可以使用频率响应曲线和Bode图等方法来选择合适的KP参数。
频率响应曲线可以帮助我们分析系统的稳定性和相位边界。
选择适当的KP值可以保证系统在稳定状态下能够尽快达到目标值。
接下来,我们可以通过试错法来确定TI和TD参数。
试错法可以根据系统的实际响应来调整这两个参数。
可以从初始调节试验开始,逐步调整参数,直到达到预期的系统性能。
在MATLAB中进行PID控制器的设计和仿真非常方便。
MATLAB提供了丰富的工具箱和函数,可以帮助我们进行系统建模、参数调节和仿真分析。
首先,我们需要使用MATLAB的控制系统工具箱来建立系统模型。
可以使用MATLAB提供的工具来建立连续或离散时间的传递函数模型。
接下来,我们可以使用PID函数来设计PID控制器并将其与系统模型进行连接。
PID函数可以使用我们之前确定的KP、TI和TD参数来创建一个PID对象。
然后,我们可以使用仿真命令来运行系统的仿真,并观察系统的响应。
可以使用step命令来观察系统的阶跃响应,使用impulse命令来观察系统的冲击响应,使用bode命令来观察系统的频率响应等等。
通过分析仿真结果,我们可以评估系统的稳定性、超调量、收敛时间等性能指标,并根据需要对PID参数进行进一步的调整。
总结起来,PID控制系统的设计及仿真可以通过MATLAB来完成。
我们可以使用MATLAB提供的工具箱和函数进行系统建模和参数调节,并通过仿真命令进行系统响应的观察和分析。
通过不断调整参数和分析仿真结果,我们可以设计出满足系统要求的PID控制系统。
PID在仿真系统中的应用课程设计报告
课程设计报告题 目 PID在仿真系统中的应用课 程 名 称 控制系统仿真 院 部 名 称 机电工程 专 业 自动化 班 级 08自动化(1) 学 生 姓 名 董学勤 学 号 0804110626 课程设计地点 C306 课程设计学时 1周 指 导 教 师 应明峰金陵科技学院教务处制一. 课程设计应达到的目的本课程是为自动化专业本科生开设的专业课程设计课。
通过本课程的课程设计实践,培养学生掌握用计算机仿真控制系统的基本方法,使学生能够熟练应用仿真技术分析控制系统,为今后从事自动控制系统的分析、设计打下基础。
二. 课程设计题目及要求本课程设计的基本任务是:系统的熟悉控制系统仿真的基本原理、方法,仿真软件的使用方法,具体解决仿真技术在控制系统中的应用问题。
本课程要求较熟练掌握控制系统仿真算法的基本思想。
要求熟练掌握 MATLAB 的基本编程手段和模块化编程方法,消化和理解控制语言描述的图形界面的设计过程,掌握Simulink 仿真技术在控制系统中的应用。
三. 设计题目1. 单回路控制系统的设计及仿真。
(1) 已知被控对象传函W(s) = 1 / (s 2+20s + 1)。
(2) 画出单回路控制系统的方框图。
(3) 用MatLab 的Simulink 画出该系统。
有积分作用单回路控制系统无积分作用单回路控制系统大比例作用单回路控制系统(4)选PID调节器的参数使系统的控制性能较好,并画出相应的单位阶约响应曲线。
注明所用PID调节器公式。
PID调节器公式Wc(s)=(5s2+50s+3)/s ,给定值为单位阶跃响应幅值为3 。
(5)修改调节器的参数,观察系统的稳定性或单位阶约响应曲线,理解控制器参数对系统的稳定性及控制性能的影响。
上图分别为无积分作用和大比例积分(积分常数为3)作用下的系数响应曲线,可见这两个PID 参数均不如前面的理想。
加入积分环节,主要用于消除静差,积分时间越大,积分作用越弱;积分时间越短,积分作用越强。
ddc系统课程设计
ddc系统课程设计一、课程目标知识目标:1. 理解DDC系统的基本概念、原理及组成部分;2. 掌握DDC系统在实际应用中的操作流程和方法;3. 了解DDC系统在我国相关领域的发展现状和趋势。
技能目标:1. 能够运用DDC系统进行数据采集、处理和分析;2. 能够独立完成DDC系统的基本操作,解决实际应用中遇到的问题;3. 能够运用所学知识,对DDC系统进行简单的维护和故障排查。
情感态度价值观目标:1. 培养学生对DDC系统的兴趣,激发学习热情;2. 培养学生严谨、细致的科学态度,提高团队合作意识;3. 增强学生的国家意识,认识到DDC系统在我国现代化建设中的重要作用。
课程性质分析:本课程为技术学科,旨在让学生掌握DDC系统的基本知识和技能,培养实际操作能力。
学生特点分析:学生处于初中年级,具有一定的逻辑思维和动手能力,对新鲜事物充满好奇。
教学要求:1. 理论与实践相结合,注重学生的实际操作能力;2. 激发学生兴趣,引导自主学习;3. 注重团队合作,培养学生的沟通与协作能力;4. 结合我国实际,强调知识在实际应用中的价值。
二、教学内容1. DDC系统基本概念:介绍DDC系统的定义、作用及分类;教材章节:第一章第一节2. DDC系统原理与组成:讲解DDC系统的基本原理、硬件和软件组成;教材章节:第一章第二节3. DDC系统操作流程:详细阐述DDC系统的启动、运行、监控和关闭等操作步骤;教材章节:第二章4. DDC系统在实际应用中的案例解析:分析典型应用场景,如智能建筑、工业控制等;教材章节:第三章5. DDC系统数据采集、处理与分析:介绍数据采集方法、处理流程及分析方法;教材章节:第四章6. DDC系统维护与故障排查:讲解日常维护方法、故障排查流程及解决方案;教材章节:第五章7. 我国DDC系统发展现状与趋势:介绍我国DDC系统的发展历程、现状及未来发展趋势;教材章节:第六章教学内容安排与进度:第一周:DDC系统基本概念、原理与组成;第二周:DDC系统操作流程;第三周:DDC系统在实际应用中的案例解析;第四周:DDC系统数据采集、处理与分析;第五周:DDC系统维护与故障排查;第六周:我国DDC系统发展现状与趋势。
控制仿真PID实验报告
自动化1103
张天赐
201123910415
实验内容;控制系统设计与仿真(根轨迹,伯德图,PID)
实验步骤:
例4-8已知晶闸管直流调速系统的结构图如图,分析PID控制器的P、I和D对调速系统性能的影响
实验截图:
随着Kp的增大,系统的在增加,过渡过程时间变大,但响应初期的速度变大;系统的ess随着Kp的增大而减小。
绘制矫正后曲线
可得校正后系统的单位阶跃响应,曲线校正后系统是稳定的
例4-11某单位反馈控制系统的开环传递函数为:
校正后
4-12某单位反馈控制系统的开环传递函数为
校正前图像
未校正系统稳定,但响应速度较慢
校正后
校正后系统稳定,性能为
例4-4
未校正时的伯德图为
校正装置的传函为
校正后为
性能满足要求
实验心得:通过本次实验,了解了如何通过PID控制,波特图来判断是否系统处于稳定状态,并如何进行校正使之满足性能上的要求。
(2)积分作用分析,令,,,
绘制系统单位阶跃响应曲线,程如下
随着Kp的增大,系统的在增加,过渡过程时间变大,但响应初期的速度变大;系统的ess随着Kp的增大而减小。
微分作用分析
随着TD的增大,系统的在增大,过渡过程时间变大,响应初期的速度变小
例4-9程序为
其次,绘制根轨迹图,找到临界稳定增益
求取PID的参数kp=0.024,ti=0.98,td=0.25
单闭环系统的PID调节自动控制系统课程设计
目录第一章摘要1.1课程设计地点………………………………………………3.1.2实验室介绍 (3)1.3应用软件介绍 (3)1.4设计目的 (4)1.5设计任务 (4)1.6设计要求 (5)第二章课程设计正文 (5)2.1 梯形图 (5)2.1.1 自锁 (5)2.1.2 两台鼓风机轮流工作(带时间累加的) (6)2.1.3流水灯 (8)2.1.4交通灯 (10)2.2 功能块图形 (12)2.2.1比较器 (13)2.2.2乘法器 (13)2.2.3运算器 (14)2.2.4一阶PID (15)2.2.5二阶PID (19)2.2.6带延迟及自动扰动的PID (25)第三章PID的调节方法 (27)第四章课程设计的收获与体会(附参考文献) (32)第一章摘要1、课程设计地点:东北大学罗克韦尔自动化实验室2、实验室简介:1999年9月,东北大学与美国罗克韦尔自动化公司合作建立了“东北大学—罗克韦尔自动化联合实验室”。
该实验室占地面积400平方米,其设备由罗克韦尔自动化公司捐赠(总价值75万美元),包括工控机、可编程逻辑控制器、变频器、智能马达控制器、变速器等处于世界自动化领域领先水平的系列产品。
结合自动化专业的特点,实验室进行了不断的改进与完善。
经过“九五”211工程、“十五”211工程和“985”一期、二期工程的建设,东北大学罗克韦尔自动化实验室已具备世界一流的实验设备、一流的实验环境。
目前,实验室云集了博士、硕士和本科生等各专业的学生,从这里毕业的学生在就业市场上大受欢迎,纷纷被有影响的大公司(罗克韦尔自动化、西门子、摩托罗拉、西马克、华维等)录用。
[3、应用软件介绍:RSLogix5000 是 AB 开发的应用于 SLC500 型中型 PLC 和 Micrologix 系列小型 PLC 的编程软件。
具有结构简单,条理清晰,功能强大等优点。
它具有以下特点:1 统一的项目查看2灵活的梯形图编辑器3拖放式操作4梯形图查看选项5定制数据监视6状态文件分类显示7简易的通讯配置8强大的数据库编辑器9查找与替换10直观的windows界面11项目校验快捷地更正程序错误等。
pid控制系统仿真课程设计
pid控制系统仿真课程设计一、课程目标知识目标:1. 学生能理解PID控制系统的基本原理,掌握其数学模型及系统组成;2. 学生能描述PID控制系统中各参数对系统性能的影响;3. 学生能运用仿真软件进行PID控制系统的建模与仿真。
技能目标:1. 学生能够运用所学知识,设计简单的PID控制系统仿真实验;2. 学生能够通过仿真软件分析PID控制系统性能,并调整参数优化系统性能;3. 学生能够利用仿真结果,撰写实验报告,进行结果分析。
情感态度价值观目标:1. 学生通过本课程的学习,培养对自动化技术的兴趣和热情;2. 学生在团队合作中进行仿真实验,培养沟通协调能力和团队精神;3. 学生在实验过程中,认识到理论与实践相结合的重要性,培养严谨的科学态度。
课程性质:本课程为实践性较强的课程,要求学生在掌握理论知识的基础上,运用仿真软件进行实际操作。
学生特点:学生具备一定的控制理论基础,对PID控制系统有初步了解,但对仿真软件的使用相对陌生。
教学要求:结合学生特点,注重理论与实践相结合,通过实际操作使学生深入理解PID控制系统的原理和性能。
在教学过程中,强调学生的主体地位,激发学生学习的积极性,培养学生独立思考和解决问题的能力。
将课程目标分解为具体的学习成果,以便于后续教学设计和评估。
二、教学内容1. 理论知识:- PID控制系统的基本原理与数学模型;- PID控制系统中比例、积分、微分三个环节的作用及影响;- 控制系统稳定性、快速性、准确性的分析。
2. 实践操作:- 仿真软件的安装与使用方法;- 基于仿真软件的PID控制系统建模;- PID控制参数的调整与优化;- 控制系统性能的分析与评价。
3. 教学大纲:- 第一周:PID控制系统的基本原理与数学模型;- 第二周:比例、积分、微分环节的作用及影响;- 第三周:控制系统稳定性、快速性、准确性的分析;- 第四周:仿真软件的安装与使用方法;- 第五周:基于仿真软件的PID控制系统建模;- 第六周:PID控制参数的调整与优化;- 第七周:控制系统性能的分析与评价及实验报告撰写。
(完整)单回路PID控制系统实验报告
北京联合大学实验报告实验名称:单回路PID控制系统学院:自动化专业:自动化班级:学号:姓名:成绩:2013年 10 月24 日实验二单回路P I D控制系统组成及过程动态特性参数对控制质量的影响一、实验目的:1.熟悉Matlab仿真环境;2.理解单回路控制系统的组成;3.理解给定值扰动和负荷扰动的过渡过程曲线;4.掌握扰动通道、控制通道的静态参数和动态参数对控制质量的影响;5.掌握扰动作用位置对控制质量的影响;6.掌握对象的多个时间常数之间的关系对控制质量的影响;二、实验内容:对如下图所示的单回路控制系统进行仿真.W C(S)W V(S)W0(S)-W m(S)进入仿真环境,建立如下仿真系统:例:其中,Step input作为系统给定值;而Step1 input作为外部干扰。
注:PID模块后的比例环节可换为一阶环节。
具体步骤为:1、模块在库中,模块在库中,模块在库中,模块在库中。
模块在库的中.2、双击模块可以设定每个模块的参数,左键拖动鼠标产生连线,右键拖动鼠标可产生交接线.(一)给定值扰动:设置给定值阶跃扰动Step input为某一值,设外部干扰Step1 input为0,改变PID控制器的参数,从模块观察系统输出曲线,直到出现4:1衰减曲线。
(如图)①修改Step input模块:双击,对话框参数为:②修改PID模块:双击PID模块,出现如下对话框:在此窗口下修改P、I、D参数。
反复调整P、I、D参数,使输出成为4:1衰减曲线。
如图(二)负荷扰动:修改参数步骤与(一)相同,设Step input给定值扰动为0,负荷扰动Step1 input设置为某一值。
反复调整P、I、D参数,使输出成为4:1衰减曲线(三)观察扰动通道和控制通道参数对控制质量的影响:(调节器整定参数值不变) 1.改变扰动通道静态参数和动态参数,观察输出波形的变化;2.改变控制通道静态参数和动态参数,观察输出波形的变化;3.改变扰动作用位置,观察输出波形的变化;4.改变对象各时间常数的值,观察输出波形的变化;三、实验结果整理:1、总结单回路仿真系统的基本组成部分。
DDC单回路PID闭环控制系统的设计及实时仿真课程设计报告
课程设计(综合实验)报告( 2011-- 2012 年度第二学期)名称:过程计算机控制系统题目:DDC单回路PID闭环控制系统的设计及实时仿真院系:控制与计算机工程学院班级:学号:学生姓名:指导教师:朱耀春设计周数:一周成绩:日期:2012 年 6 月20 日一、 课程设计的目的与要求1.设计目的在计算机控制系统课程学习的基础上,加强学生的实际动手能力,通过对DDC 直接数字闭环控制的仿真加深对课程内容的理解。
2.设计要求本次课程设计通过多人合作完成DDC 直接数字闭环控制的仿真设计,学会A/D 、D/A 转换模块的使用。
通过手动编写PID 运算式掌握数字PID 控制器的设计与整定的方法,并做出模拟计算机对象飞升特性曲线,熟练掌握DDC 单回路控制程序编制及调试方法。
二、 设计正文1.设计思想本课程设计利用Turboc2.1开发环境,通过手动编写C 语言程序完成PID 控制器的设计,A/D 、D/A 转换,绘出PID 阶跃响应曲线与被控对象动态特性曲线。
整个设计程序模块包含了PID 配置模块,PLCD-780定时采样、定时输出模块,PID 手/自动切换模块(按键控制)及绘图显示模块。
设计中,通过设定合理的PID 参数,控制PLCD-780完成模拟计算机所搭接二阶惯性环节数据的采集,并通过绘图程序获得对象阶跃响应曲线。
2. 设计步骤(1)前期准备工作(1.1)配备微型计算机一台,系统软件Windows 98或DOS (不使用无直接I/O 能力的NT 或XP 系统), 内装Turbo C 2.0/3.0集成开发环境软件;(1.2)配备模拟计算机一台(XMN-1型), 通用数据采集控制板一块(PLCD-780型); (1.3)复习Turboc2.0并参照说明书学习PLCD-780的使用(2) PID 的设计(2.1)PID 的离散化理想微分PID 算法的传递函数形式为:⎪⎪⎭⎫ ⎝⎛++=s T s T K s G d i p 11)( 采用向后差分法对上式进行离散,得出其差分方程形式为:u[k]=u[k-1]+q0*e[2]+q1*e[1]+q2*e[0];其中各项系数为:q0=kp*(1+T/Ti+Td/T);q1=-kp*(1+2*Td/T);q2=kp*Td/T;实际微分PID 算法的传递函数形式为:⎪⎪⎭⎫ ⎝⎛+++=s T s T s T K s G d i f p 111)( 采用向后差分法对上式进行离散化,写成差分方程的形式为:u[k]=c0*(Δu[k-1])+c1*e[k]+c2*e[k-1]+c3*e[k-2]+u[k-1];其中各项系数为:c0=Tf/(T+Tf);c1=kp*T/(T+Tf)*(1+T/Ti+Td/T);c2=-kp*T/(T+Tf)*(1+2*Td/T);c3=kp*Td/(T+Tf);(2.2)数字PID 算法的改进○1积分分离算法积分分离算法通过控制PID 输入偏差e 达到优化目的,当偏差较大时停止积分作用,只有当偏差较小时才投入积分,算法如下表示:当|e(k)|>β时,采用PD 控制;当|e(k)|<β时, 采用PID 控制;β的值根据具体对象及要求确定。
DDC单回路PID闭环控制系统设计及实时仿真
DDC单回路PID闭环控制系统设计及实时仿真课程设计报告(2022--2022年度第2学期)名称:计算机控制系统A题目:DDC单回路PID闭环控制系统的设计及实时仿真院系:自动化系班级:自动班学号:学生姓名:指导教师:设计周数:一周成绩:日期:2022年X月X日《计算机控制系统A》课程设计任务书一、目的与要求1.学习并了解用高级语言(C语言)实现数字PID控制算法模块程序的方法;2.比较验证理想微分PID和实际微分PID控制算法阶跃响应,加深对上述两种算法各自特点的认识;3.学习了解用模拟计算机使用方法;4.学习掌握A/D、D/A转换接口板的使用方法;5.了解一种微机中断定时的方法;6.学习掌握通过A/D、D/A转换用计算机获取被控对象动态特性的方法;7.通过实时仿真实验掌握DDC单回路控制程序编制及调试方法。
二、主要内容1.用C语言分别编写理想微分PID和实际微分PID控制算法模块,在微机中调试实现,并编写简单的计算机绘图程序,分别绘制并打印出上述两种算法的单位阶跃响应曲线(课外上机完成);2.用模拟计算机搭接成一个二阶惯性环节,作为一个模拟仿真的被控对象;3.用C语言编写使用HY-6060进行定时采样、定时输出的接口程序,并在微机中调试实现;4.由D/A输出阶跃信号,同时由A/D采集模拟的被控对象的响应,绘制并打印出采集获得的飞升曲线,并初步计算出对象模型;y5.由模拟计算机搭接的二阶惯性环节作为系统中的被控对象,用计算机作为DDC控制器,通过HY-6060接口板实现对模拟机的实时控制。
仿真实验系统的框图如下:r+uPID模拟机D/A-A/D6.整定控制器PID参数,在设定值阶跃情况下,打印控制量u和被控量y的曲线。
三、进度计划序号设计内容完成时间备注1编写数字PID控制算法模块本设计开始前在课程要求的8学时课外上机时间完成2本设计其它内容按小组分工协作完成设计周五3验收、答辩设计周末前四、设计(实验)成果要求1.根据个人在设计小组中的分工,完成设计内容;2.分析实时仿真结果,每人完成设计报告。
设计_一_DDC_单回路PID_控制器的设计
设计 一 DDC 单回路PID 控制器的设计一、设计目的通过设计掌握DDC 单回路PID 控制程序编制。
二、设计内容1控制系统如图所示G(S )=K 1/(T 1S +1)D (Z )采用数字PID 控制规律,T 为采样周期。
2对象动态特性仿真设计(1) 将G (S )离散化,写出输入/输出采样方程(考虑零阶保侍器)。
(2) 画出详细程序框图。
3单回路PID 控制设计(1) 由键盘输入PID 参数:K P 、T I 、T D ,设计D (Z ),写出输入/输出采样方程。
(2) 采用具有不完全微分的数字PID 算法,D(s)= K P (1+s/ T I + sT D )/ (1+sT f ), T f 由键盘输入。
(3) 画出详细程序框图。
(4) 可自选编程语言及调试。
三、设计要求1、采用简单人机对话的方式,输入采样周期T ,阶跃量R (S ),对象参数K 1 和T 1 (实验报告中取K 1 =1,T 1 =10S ),及PID 控制器参数K P 、T I 、T D 。
2、设计报告要详尽,要求提供的材料要齐全。
3、设计应独立完全。
设计二Smith预估控制设计一、设计目的通过设计掌握Smith预估控制的方法。
二、设计内容1、smith预估控制系统如图所示R(s)T对象G(S )= K1e-τs /(T1S +1),K=1,T1=10s,τ=5sD (Z )采用数字PI 控制规律。
2、Smith预估控制(1) 构造Dτ(s ),求出Dτ(s ),(3)按图设计Smith预估控制器。
(4)画出详细程序框图,参数K 、T1、τ由键盘输入。
三设计步骤1、拟定设计方案。
2、推导公式,确定系统。
3、画出详细的流程框图,编程调试。
三、设计要求1、采用简单人机对话的方式,输入采样周期T ,预估器参数K 和τ,及PI 控制器参数K P、T I。
2、设计报告要详尽,要求提供的材料要齐全。
3、设计应独立完全。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计(综合实验)报告( 2011-- 2012 年度第二学期)名称:过程计算机控制系统题目:DDC单回路PID闭环控制系统的设计及实时仿真院系:控制与计算机工程学院班级:学号:学生:指导教师:朱耀春设计周数:一周成绩:日期:2012 年 6 月20 日一、 课程设计的目的与要求1.设计目的在计算机控制系统课程学习的基础上,加强学生的实际动手能力,通过对DDC 直接数字闭环控制的仿真加深对课程容的理解。
2.设计要求本次课程设计通过多人合作完成DDC 直接数字闭环控制的仿真设计,学会A/D 、D/A 转换模块的使用。
通过手动编写PID 运算式掌握数字PID 控制器的设计与整定的方法,并做出模拟计算机对象飞升特性曲线,熟练掌握DDC 单回路控制程序编制及调试方法。
二、 设计正文1.设计思想本课程设计利用Turboc2.1开发环境,通过手动编写C 语言程序完成PID 控制器的设计,A/D 、D/A 转换,绘出PID 阶跃响应曲线与被控对象动态特性曲线。
整个设计程序模块包含了PID 配置模块,PLCD-780定时采样、定时输出模块,PID 手/自动切换模块(按键控制)及绘图显示模块。
设计中,通过设定合理的PID 参数,控制PLCD-780完成模拟计算机所搭接二阶惯性环节数据的采集,并通过绘图程序获得对象阶跃响应曲线。
2. 设计步骤(1)前期准备工作(1.1)配备微型计算机一台,系统软件Windows 98或DOS (不使用无直接I/O 能力的NT 或XP 系统), 装Turbo C 2.0/3.0集成开发环境软件;(1.2)配备模拟计算机一台(XMN-1型), 通用数据采集控制板一块(PLCD-780型);(1.3)复习Turboc2.0并参照说明书学习PLCD-780的使用(2) PID 的设计(2.1)PID 的离散化理想微分PID 算法的传递函数形式为:⎪⎪⎭⎫⎝⎛++=s T s T K s G d i p 11)(采用向后差分法对上式进行离散,得出其差分方程形式为: u[k]=u[k-1]+q0*e[2]+q1*e[1]+q2*e[0];其中各项系数为:q0=kp*(1+T/Ti+Td/T);q1=-kp*(1+2*Td/T);q2=kp*Td/T;实际微分PID 算法的传递函数形式为:⎪⎪⎭⎫ ⎝⎛+++=s T s T s T K s G d i f p 111)( 采用向后差分法对上式进行离散化,写成差分方程的形式为:u[k]=c0*(Δu[k-1])+c1*e[k]+c2*e[k-1]+c3*e[k-2]+u[k-1];其中各项系数为:c0=Tf/(T+Tf);c1=kp*T/(T+Tf)*(1+T/Ti+Td/T);c2=-kp*T/(T+Tf)*(1+2*Td/T);c3=kp*Td/(T+Tf);(2.2)数字PID 算法的改进○1积分分离算法 积分分离算法通过控制PID 输入偏差e 达到优化目的,当偏差较大时停止积分作用,只有当偏差较小时才投入积分,算法如下表示:当|e(k)|>β时,采用PD 控制;当|e(k)|<β时, 采用PID 控制;β的值根据具体对象及要求确定。
○2抗积分饱和算法 抗积分饱和算法依据控制系统最终的控制输出量u 达到优化目的,当控制量u 较大且超出执行机构与A/D 转换围时,控制器停止积分作用,保证输出超限时不积分;○3带死区的数字PID 算法 在实际控制系统中,计算机控制为了避免控制动作过于频繁,以消除系统振荡,就会采用带死区的PID 算法。
该算法是在原PID 算法前加一个不灵敏区来实现,即当|e(k)|>C 时,|e(k)|=|e(k)|;当|e(k)|<C 时,|e(k)|=0其中C 代表不灵敏区值;(2.3) 手动/自动双向无扰切换自动切手动:系统处于自动时,手操器实时跟踪自动PID 调节器的输出,切换瞬间由于手操器部电路起保持作用,使得切换没有扰动产生,此时对象处于手操器的开环控制,调节器跟踪手操器的输出。
手动切自动:手动到自动的切换过程主要由计算机软件实现,一方面PID 调节器获得手操器输出,同时软件使得算法中的Δu[k-1])、e[k]、e[k-1]、e[k-2]等历史状态清零。
程序过设置键盘,使的按下手动键H 时,系统处于手动状态,按下自动键A 时,系统处于自动状态。
(3)硬件二阶惯性环节搭建利用模拟计算机中的电容电阻及运算放大器,搭接二阶惯性环节,仿真一个被控对象。
其传递函数为2)1()(+=Ts K s G ,硬件电路如下:图中各元件参数如下:R3=R2=510K ;R1=R4=R5=R6=R7=1M ;C1=C2=C=4.7uF ;则可得:K=(R5/R1)*(R6/R4)=1T1=T2=R5*C1=R6*C2=1000000*0.0000047=4.7s所以G (s )=1/(4.7s+1)*(4.7s+1)搭建好硬件电路后,将PLCD-780插入IPC 机箱插槽,用导线将PLCD-780中的A/D 、D/A 、电源的接线端子与所搭二阶惯性环节的输出、输入端口及机箱上的电源连接,组成一个完整的PID 闭环控制系统,为通信做好准备。
(4)PID 参数的整定8.75,6.6*1.2,6.6*04运用过程控制中PID 参数的工程整定方法,运用衰减曲线法对PID 参数进行整定。
在matlab 中,设置PID 参数为Td=0,Ti=∞,设置合适的比例带使得对象闭环阶跃响应曲线衰减率为0.9,从而确定PID 的整定参数为:P=0.8δ,Ti=1.2t r , Td=0.4t r ;matlab 中对象响应曲线为:0.70.60.50.40.30.20.1由曲线可得PID参数为:P=0.8 =0.8×5=4,Ti=1.2t r=1.2×10=12,Td=0.4t r=0.4×10=4(5)实验结果输出通过在程序中编写相应的绘图模块子程序,在需要画图时调用相应的子程序实现曲线的绘制。
同时在程序中,本小组采用按键实现了PID手自动切换,理想PID与实际PID的切换,以及在手自动状态下由按键改变PID参数,使得调节方式更加的灵活。
3.设计结果(1)PID阶跃响应曲线调用程序,向PID模块输入一个阶跃信号,绘出PID阶跃响应曲线如下:(1.1)理想PID阶跃响应图:(1.2)实际PID阶跃响应图:(2)被控对象(惯性环节)阶跃响应曲线上图通过D/A输出一个1伏左右的信号输入模拟的被控对象(惯性环节),A/D采集对象的输入信号及其响应,再使D/A输出一个幅度为2伏左右的阶跃信号,同时采集输入输出信号。
然后,D/A再反向在输出一个幅度为2伏左右负的阶跃信号,同时采集输入输出信号,得出仿真对象飞升特性曲线。
程序中,通过按键实现模拟对象输入信号的加减。
当按下H按键时,且按下U键时,D/A输出一个1伏阶跃信号,再次按下按键时阶跃信号累加。
每次按下D键时,D/A输出的阶跃信号递减1。
(3)设定值r、控制量u和被控对象输出y的响应曲线:4.程序清单/*---------------头文件定义---------------*/#include<conio.h>#include<graphics.h>#include <stdio.h>#include <dos.h>/*---------------定义绘图坐标---------------*/#define ox 8 /*-----原点横坐标-------*/ #define oy 440 /*------原点纵坐标------*/#define xx 620 /*------x轴顶点横坐标--*/#define xy 440 /*-----x轴顶点纵坐标---*/#define lenx 580#define leny 400#define yx 8 /*-----y轴顶点横坐标----*/#define yy 15 /*------y轴顶点纵坐标----*//*-----------------定义绘图区域----------------*/#define left 20#define top 20#define right 620#define bottom 460/*----------------坐标轴注释---------------------*/#define xtext1x 450#define xtext1y 450#define ytext1x 10#define ytext1y 60#define xtext2x 610#define xtext2y 450#define ytext2x 10#define ytext2y 20/*-------------------------理想PID运算式--------------------------*/ float lxpid(float kp,float td,float ti,float e[3],float u1){int t=1;float u;float q0=kp*(1+t/ti+td/t);float q1=-kp*(1+2*td/t);float q2=kp*td/t;u=q0*e[0]+q1*e[1]+q2*e[2]+u1;return u;}/*-------------------------实际PID运算式--------------------------*/ float sjpid(float kp,float tf,float td,float ti,float e[3],float du1,float u1){int t=1,k=1000;float u2;float c1=tf/(t+tf);float c2=kp*t*(1+t/ti+td/t)/(t+tf);float c3=-kp*t*(1+2*td/t)/(t+tf);float c4=kp*td/(t+tf);u2=c1*du1+c2*e[0]+c3*e[1]+c4*e[2]+u1;return u2;}/*-------------------------绘图初始化--------------------------*/ void Initial_Sys(void){int GraphDriver;int GraphMode;detectgraph(&GraphDriver,&GraphMode);initgraph(&GraphDriver,&GraphMode,"C:\\TC201E\\BGI");cleardevice();}/*-------------------------绘制坐标系------------------*/void DrawAxis(void){int i;setbkcolor(15);setcolor(5);line(ox,oy,xx,xy); /*x_axis*/line(xx-5,xy-5,xx,xy);line(xx,xy,xx-5,xy+5);line(ox,oy,yx,yy); /*y_axis*/line(yx-5,yy+10,yx,yy);line(yx+5,yy+10,yx,yy);for(i=0;i<51;i++){line(ox+10*i,oy,ox+10*i,oy-10);line(ox+10*i+5,oy,ox+10*i+5,oy-5); }for(i=1;i<=8;i++)line(ox,oy-50*i,ox+10,oy-50*i);outtextxy(ox+50*0-7,oy+20,"0");outtextxy(ox+50*1-7,oy+20,"5");outtextxy(ox+50*2-7,oy+20,"10");outtextxy(ox+50*3-7,oy+20,"15");outtextxy(ox+50*4-7,oy+20,"20");outtextxy(ox+50*5-7,oy+20,"25");outtextxy(ox+50*6-7,oy+20,"30");outtextxy(ox+50*7-7,oy+20,"35");outtextxy(ox+50*8-7,oy+20,"40");outtextxy(ox+50*9-7,oy+20,"45");outtextxy(ox+50*10-7,oy+20,"50");outtextxy(ox-10,oy-50*1,"1");outtextxy(ox-10,oy-50*2,"2");outtextxy(ox-10,oy-50*3,"3");outtextxy(ox-10,oy-50*4,"4");outtextxy(ox-10,oy-50*5,"5");outtextxy(ox-10,oy-50*6,"6");outtextxy(ox-10,oy-50*7,"7");outtextxy(ox-10,oy-50*8,"8");settextstyle(SMALL_FONT,HORIZ_DIR,5); outtextxy(xtext1x,xtext1y,"Time");settextstyle(SMALL_FONT,VERT_DIR,5);outtextxy(ytext1x,ytext1y,"The output (Response)");outtextxy(ytext2x,ytext2y,"U(t)\/V");}main(){float kp,ti,td,tf,e[3]={0},ee[3]={0},u[6]={0},au1=0;int r=1,k=1;Initial_Sys();DrawAxis();while(k<100){u[0]=lxpid(1,3.0,10,e,u[1]);e[0]=r;/*printf("%f\n",u[0]);*/u[3]=sjpid(1,5,3.0,10,ee,au1,u[4]);setcolor(5);line((k-1)*10,130-u[1]*100,k*10,130-u[1]*100);line(k*10,130-u[1]*100,k*10,130-u[0]*100);delay(10000);u[2]=u[1];u[1]=u[0];e[2]=e[1];e[1]=e[0];ee[0]=r;setcolor(3);line((k-1)*10,150-u[4]*100,k*10,150-u[4]*100);line(k*10,150-u[4]*100,k*10,150-u[3]*100);u[5]=u[4];u[4]=u[3];ee[2]=ee[1];ee[1]=ee[0];au1=u[4]-u[5];k++;}}/*---------------头文件定义---------------*/#include "stdio.h"#include "math.h"#include "graphics.h" /*for graph driver installing,only can be called in Turbo C*/#include "string.h"#include "dos.h"#include "bios.h"#include "conio.h" /*for interrupt program 头文件定义* /#include "stdlib.h"#include "io.h"/*--------------按键地址区定义--------------------*//*statements*/double key_ESC=0x011b; /*define can not suit the length of bioskey 键盘存定义*/ double key_E=0x1265;double key_A=0x1e61;double key_H=0x2368;double key_U=0x1675;double key_D=0x2064;double key_I=0x1769;double key_P=0x1970;double key_down=0x5000;double key_left=0x4b00;double key_right=0x4d00;double key_pgup=0x4900;double key_pgdown=0x5100;/*--------------PLCD780基址定义--------------------*/#define BASE 0x220 /*------------PCL812G need 16 addresses in a row,from 220H to 3F0H*/ #define REG 0/*---------------定义绘图坐标---------------*/#define ox 40 /*------------原点横坐标-------------*/#define oy 440 /*------------原点纵坐标------------*/#define xx 600 /*------------x轴顶点横坐标--------*/#define xy 440 /*------------x轴顶点纵坐标--------*/#define yx 40 /*------------y轴顶点横坐标--------*/#define yy 40 /*------------y轴顶点纵坐标---------*//*---------------PID参数定义---------------*/float Kp=1.0;float Ti=10.0;float Td=3.0;float Tf0=15.0;float Tf=0;float T=0.1; /*---------------采样时间------------*/float ad,e,pv0;float u=0.0;float pv=0.0;float sp=0.0;char A_H='H';int key=0;int time_counter=0; /*times of interrupt*/int cj_counter=0; /*sampling counter*/int Q_counter=800; /* 采集步长赋初始值*/int stepdata[800];int slopedata[800];int error[800];/*--------------函数声明-----------------*/void interrupt (*fadd1C)(void);void loop();float AD(unsigned char channal); /*A/D*/void DA(float pv1); /*D/A*/void interrupt INT_1C(void); /*8259,reset interrupt controller*/int scankey();float DelayAction(float y0);void PIDset(void);float PID(float sp1,float pv1,float Kp1,float Ti1,float Td1,float Tf1,char A_H1,float T1); float Object(float u1,float T1);void Initial_Sys(void); /*Initiate graph display*/void axis(void);void Drawline(int cj,float pv1,float sp1,float u1,float e1);/*主函数*/void main(void){for(i=0;i<500;i++){stepdata[i]=10;slopedata[i]=i;error[i]=0;}/* Set new INT_1C and save old */disable();fadd1C=getvect(0x1C);/*1C为定时器控制的软中断,平均一秒发生18.2次,即周期为55ms 中断程序*//* 开启中断服务*/setvect(0x1C,INT_1C);enable();axis();loop();}/*主函数结束下面为定时采值输出程序*/void loop(){ do{if((cj_counter*T)<(time_counter/18.2)){PIDset(); /*Introduction:Exit-E/ESC,A_H-A/H,Ideal/Parallel PID,sp-U/D*/u=PID(sp,pv,Kp,Ti,Td,Tf,A_H,T);/*DA(u); */pv=Object(u,T);/*ad=AD(O);*//*pv=DelayAction(u);*/e=error[cj_counter];Drawline(cj_counter,pv,sp,u,e);manu=0;if(Tf==0)printf("IdealPID,Mode:%c,sp=%.1f,pv=%2.1f,u=%.1f,error=%.1f,Kp=%.1f,Ti=%.1f,Td=%.1f\t\r",A_H,sp,pv,u,e, Kp,Ti,Td);else if(Tf>0)printf("Parallal,Mode:%c,sp=%.1f,pv=%2.1f,u=%.1f,error=%.1f,Kp=%.1f,Ti=%.1f,Td=%.1f\t\r",A_H,sp,pv,u,e,K p,Ti,Td);else printf("\t\tTf got a wrong value! Please exit and restart this program.\r");cj_counter++;}}while(cj_counter<500);disable();/* 恢复中断*/setvect(0x1C,fadd1C);enable();}/*D/A conversion program,0 to 4095 -- 0to +5*/float AD(unsigned char channal){float result=0;int i;unsigned char hb=0,lb=0,ok=0x10;/*12bit AD/high 4 bits and low 8 bits*/outportb(BASE+11,REG); /*软件程序触发*/delay(10); /*here,'delay(int ms)' is used long before,and we just need some time for hardware working*/outportb(BASE+10,channal); /*进行通道设置.选择通道0*/delay(10);outportb(BASE+12,0); /*触发A/D转换*/delay(10);do{ok=inportb(BASE+5);}while(ok&0x10);hb=inportb(BASE+5);delay(10);lb=inportb(BASE+4);result = lb + ((hb&0x0F)<<8); /*0 to 4095*/result=result*5/4096; /*0 V to +5V*/return result;}/*A/D conversion program,0 to +5 -- 0 to 4095*/void DA(float pv1){int temp,i;unsigned char hb,lb;if (pv1>5) /* make the output real */pv1=5;else if (pv1<0)pv1=0;temp=(int)(4095*pv1/5.0);hb=temp<<8;lb=temp-(hb<<8);outportb(BASE+4,lb); /* low 8 */delay(10);outportb(BASE+5,hb); /* high 4 */}void interrupt INT_1C(void){time_counter++;outportb(0x20,0x20);}/*键盘控制*/int scankey(void){int key0;key0=bioskey(1); /* function 1 returns 0 until a key is pressed */ if(key0!=0)key0=bioskey(0); /* function 0 returns the key that is waiting */ return key0;}/*DelayAction*//*tao=(int)(18.2*2) Delay action=2 seconds*/float DelayAction(float y0){float y_out;int cyc;y_out=y_old[36-1];for(cyc=1;cyc<36;cyc++)y_old[36-cyc]=y_old[36-cyc-1];y_old[0]=y0;return y_out;}/*PID 主程序*/void PIDset(void){key=scankey();if(A_H=='H'){if(key==key_up)Kp+=0.2;else if(key==key_down)Kp-=0.2;else if(key==key_left)Ti-=0.2;else if(key==key_right)Ti+=0.2;else if(key==key_pgup)Td+=0.2;else if(key==key_pgdown)Td-=0.2;else if(key==key_U)manu='+';else if(key==key_D)if(A_H=='A'){if(key==key_U)sp+=10;if(key==key_D)sp-=10;}if(key==key_E||key==key_ESC)exit(1);if(key==key_A)A_H='A';if(key==key_H)A_H='H';if(key==key_I)Tf=0;if(key==key_P)Tf=Tf0;}/*PID-default:IdealPID*/float PID(float sp1,float pv1,float Kp1,float Ti1,float Td1,float Tf1,char A_H1,float T1){float delta_u,u0,e,C1,C2,C3,C4;static float e1,e2,u1,delta_u1; /*here,u1 stands for the previous value of u*/if(Kp1<0) p rintf("Kp becomes a negative number,please restart.");else if(Ti1<0) printf("Ti becomes a negative number,please press restart.");else if(Td1<0) printf("Td becomes a negative number,please press restart.");.{C1=Tf1/(T1+Tf1);C2=Kp1*T1*(1+T1/Ti1+Td1/T1)/(T1+Tf1);C3=-Kp1*T1*(1+2*Td1/T1)/(T1+Tf1);C4=Kp1*Td1/(T1+Tf1);/*自动控制*/if(A_H1=='A'){e=sp1-pv1;delta_u=C1*delta_u1+C2*e+C3*e1+C4*e2; /*here,delta_u1 stands for the previous value of delta_u*/u0=u1+delta_u;e2=e1;e1=e;delta_u1=delta_u;u1=u0;error[cj_counter]=sp1-pv1;return u0;}/*手动控制*/else if(A_H1=='H'){if(manu=='+')u+=10;if(manu=='-')u-=10;sp1=pv1;u1=u;sp=pv1;e1=0;.e2=0;delta_u1=0;error[cj_counter]=sp1-pv1;return u;}}}/*object:二阶惯性环节*/float Object(float u1,float T1){/*G(s)=1/(4.7s+1)^2,K=1,Tp1=Tp2=4.7*/static float y1,y2;float y;y=1/(31.49+T1)*(-22.09*y2+53.58*y1+T1*u1);y2=y1;y1=y;return y;}/*显示与画图*//*初始化CRT*/void Initial_Sys(void){int GraphDriver;int GraphMode;detectgraph(&GraphDriver,&GraphMode);initgraph(&GraphDriver,&GraphMode,"C:\\TC201E\\BGI"); }/*draw basic coordinate axis*/void axis(void){int i;Initial_Sys();.setbkcolor(15); /*white0/black15*/setcolor(9); /*linght blue*/rectangle(10,20,630,470); /*zone of drawing*/line(ox,oy,xx,xy); /*axis and arrow*/line(xx-5,xy-5,xx,xy);line(xx,xy,xx-5,xy+5);line(ox,oy,yx,yy);line(yx-5,yy+5,yx,yy);line(yx+5,yy+5,yx,yy);settextstyle(2,1,5); /*Small font,vert,5 times bigger*/outtextxy(20,100,"The Output (Response)");outtextxy(20,40,"U(t)");settextstyle(2,0,5); /*Small font,horiz,5 times bigger*/outtextxy(300,455,"Time");outtextxy(590,455,"t/sec");setlinestyle(1,0,1); /*dot line,none,width*/for(i=1;i<4;i++) /*each inport starting position*/ line(ox,oy-100*i,ox+500,oy-100*i);outtextxy(ox-16,oy-100*0,"0");outtextxy(ox-16,oy-100*1,"1");outtextxy(ox-16,oy-100*2,"2");outtextxy(ox-16,oy-100*3,"3");for(i=1;i<=500/50;i++) /*scale*/{line(ox+50*i,oy,ox+50*i,oy-400); /*1/T=10,that is 10px=1sec*/line(ox+50*i-25,oy,ox+50*i-25,oy-10);}setlinestyle(0,0,1); /*real line,none,width*/outtextxy(ox-4+50,oy+2,"5");outtextxy(ox-8+100,oy+2,"10");.outtextxy(ox-8+150,oy+2,"15");outtextxy(ox-8+200,oy+2,"20");outtextxy(ox-8+250,oy+2,"25");outtextxy(ox-8+300,oy+2,"30");outtextxy(ox-8+350,oy+2,"35");outtextxy(ox-8+400,oy+2,"40");outtextxy(ox-8+450,oy+2,"45");outtextxy(ox-8+500,oy+2,"50");}/*line-drawing and notes*/void Drawline(int cj1,float pv1,float sp1,float u1,float e1){static int cj_0=0,cj_1=0,pv_0=0.0,pv_1=0.0,sp_0=0.0,sp_1=0.0,u_0=0.0,u_1=0.0,e_0=0.0,e_1=0.0;cj_1=cj1; /*X coordinate*/pv_1=(int)(pv1*10);sp_1=(int)(sp1*10);u_1=(int)(u1*10);e_1=(int)(e1*10);setcolor(2); /*green*/line(ox+cj_0,oy-pv_0,ox+cj_1,oy-pv_1);outtextxy(590,30,"pv");setcolor(8); /*dark gray*/line(ox+cj_0,oy-sp_0,ox+cj_1,oy-sp_1);outtextxy(590,45,"sp");setcolor(3); /*cyan*/line(ox+cj_0,oy-u_0,ox+cj_1,oy-u_1);outtextxy(590,60,"u");setcolor(4); /*red*/line(ox+cj_0,oy-e_0,ox+cj_1,oy-e_1);outtextxy(590,75,"error");cj_0=cj_1;.pv_0=pv_1;sp_0=sp_1;u_0=u_1;e_0=e_1;}三、课程设计(综合实验)总结或结论1.正文为宋体,五号字行间距为211.1------------1.2------------四、参考文献[1] 作者1, 作者2 书名. 出版单位, 版本. 出版日期附录(设计流程图、程序、表格、数据等)注:根据课程设计、综合实验的容将标题任选其一。