版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告名称:过程计算机控制题目: DDC串级回路PID闭环控制系统的设计及实时仿真院系:控计班级: 学号: 学生姓名: 同组人: 指导教师:李明扬设计周数:一周一、设计目的1. 学习并了解用高级语言(C语言)实现数字PID控制算法模块程序的方法;2. 比较验证理想微分PID和实际微分PID控制算法阶跃响应,加深对上述两种算法各自特点的认识;3. 学习了解用模拟计算机使用方法;4. 学习掌握A/D、D/A转换接口板的使用方法;5. 了解一种微机中断定时的方法;6. 学习掌握通过A/D、D/A转换用计算机获取被控对象动态特性的方法;7 通过实时仿真实验掌握DDC单回路控制程序编制及调试方法。
2、二、实验仪器(1)微型计算机一台,系统软件Windows 98或DOS (不能使用无直接I/O能力的NT或XP系统), 内装Turbo C 2.0/3.0集成开发环境软件;(2)模拟计算机一台(XMN-1型);(3)通用数据采集控制板一块(PCL-812PG型)。三、PID的离散化理想微分PID算法的传递函数形式为:采用向后差分法对上式进行离散,得出其差分方程形式为:uk=uk-1+q0*e2+q1*e1+q2*e0;其中各项系数为:q0=kp*(1+T/Ti+Td/T); q1=-kp*(1+2*Td/T); q2=kp*Td/T;实际微分PID算法的传递函数形式为:采用向后差分法对上式进行
3、离散化,写成差分方程的形式为: uk=c0*(uk-1)+c1*ek+c2*ek-1+c3*ek-2+uk-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);四、硬件二阶惯性环节搭建利用模拟计算机中的电容电阻及运算放大器,搭接二阶惯性环节,仿真一个被控对象。其传递函数为,硬件电路如下:图中各元件参数如下:R3=R2=510K;R1=R4=R5=R6=R7=1M ;C1=C2=C=4.7uF;则可得:K=(R5/R1)*(R6/R4)=1 T1=T2=R
4、5*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闭环控制系统,为通信做好准备。五、实验结果(1)理想和实际PID阶跃响应曲线(2)被控对象(实物搭建二阶惯性环节)阶跃响应曲线上图通过D/A输出一个1伏左右的信号输入模拟的被控对象(惯性环节),A/D采集对象的输入信号及其响应,再使D/A输出一个幅度为2伏左右的阶跃信号,同时采集输入输出信号。
5、然后,D/A再反向在输出一个幅度为2伏左右负的阶跃信号,同时采集输入输出信号,得出仿真对象飞升特性曲线。程序中,通过按键实现模拟对象输入信号的加减。当按下H按键时,且按下U键时,D/A输出一个1伏阶跃信号,再次按下按键时阶跃信号累加。每次按下D键时,D/A输出的阶跃信号递减1。(3)根据对象单位阶跃响应曲线求增益和惯性时间:利用切线法求对象的增益和用一阶等效的惯性时间:如上图所示做拐点切线,得对象增益和一阶等效惯性时间分别为: Ti13s(4)手自动切换:(5)设定值r、控制量u和被控对象输出的阶跃响应曲线:程序清单/*-头文件定义-*/#include#include#include#inc
6、lude/*-定义绘图坐标-*/#defineox8/*-原点横坐标-*/#defineoy440/*-原点纵坐标-*/#definexx620/*-x轴顶点横坐标-*/#definexy440/*-x轴顶点纵坐标-*/#definelenx580#defineleny400#defineyx8/*-y轴顶点横坐标-*/#defineyy15/*-y轴顶点纵坐标-*/*-定义绘图区域-*/#defineleft20#definetop20#defineright620#definebottom460/*-坐标轴注释-*/#definextext1x450#definextext1y450#de
7、fineytext1x10#defineytext1y60#definextext2x610#definextext2y450#defineytext2x10#defineytext2y20/*-理想PID运算式-*/floatlxpid(floatkp,floattd,floatti,floate3,floatu1)intt=1;floatu; floatq0=kp*(1+t/ti+td/t);floatq1=-kp*(1+2*td/t);floatq2=kp*td/t;u=q0*e0+q1*e1+q2*e2+u1;returnu;/*-实际PID运算式-*/floatsjpid(float
8、kp,floattf,floattd,floatti,floate3,floatdu1,floatu1) intt=1;floatu2;floatc1=tf/(t+tf);floatc2=kp*t*(1+t/ti+td/t)/(t+tf);floatc3=-kp*t*(1+2*td/t)/(t+tf);floatc4=kp*td/(t+tf);u2=c1*du1+c2*e0+c3*e1+c4*e2+u1;returnu2;/*-绘图初始化-*/voidInitial_Sys(void)intGraphDriver;intGraphMode;detectgraph(&GraphDriver,&G
9、raphMode);initgraph(&GraphDriver,&GraphMode,C:TC201EBGI);cleardevice(); /*-绘制坐标系-*/voidDrawAxis(void)inti;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;i51;i+) /*-x轴
10、刻度-*/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+) /*-y轴刻度-*/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
11、,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);outtextx
12、y(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);outtextxy(xtext2x,xtext2y,t/s);settextstyle(SMALL_FONT,VERT_DIR,5);outtextxy(ytext1x,ytext1y,Theoutput(Response);outtextxy(ytext
13、2x,ytext2y,U(t)/V);main()floatkp,ti,td,tf,e3=0,ee3=0,u6=0,au1=0;intr=1,k=1;Initial_Sys();DrawAxis();while(k100)u0=lxpid(1,3.0,10,e,u1);e0=r; u3=sjpid(1,5,3.0,10,ee,au1,u4);setcolor(5);line(k-1)*10,130-u1*100,k*10,130-u1*100);line(k*10,130-u1*100,k*10,130-u0*100);delay(10000);u1=u0;e2=e1;e1=e0;ee0=r;
14、setcolor(3);line(k-1)*10,150-u4*100,k*10,150-u4*100);line(k*10,150-u4*100,k*10,150-u3*100);delay(10000);u5=u4;u4=u3;ee2=ee1;ee1=ee0;au1=u4-u5;k+;/*-头文件定义-*/#includestdio.h #includemath.h#includegraphics.h#includestring.h#includedos.h#includebios.h#includeconio.h /*中断程序头文件定义*/#includestdlib.h#include
15、io.h/*-按键地址区定义-*/*statements*/doublekey_ESC=0x011b; /*退出*/doublekey_E=0x1265; doublekey_A=0x1e61; /*自动*/doublekey_H=0x2368; /*手动*/doublekey_U=0x1675; /*自动时增SP,手动时增手操器输出*/doublekey_D=0x2064; /*自动时减SP,手动时增手操器输出*/doublekey_I=0x1769; /*理想PID*/doublekey_P=0x1970; /*实际PID*/ doublekey_up=0x4800; /*手动时,增Kp*
16、/doublekey_down=0x5000; /*手动时,减Kp*/doublekey_left=0x4b00; /*手动时,减Ti*/doublekey_right=0x4d00; /*手动时,增Ti*/doublekey_pgup=0x4900; /*手动时,增Td*/doublekey_pgdown=0x5100; /*手动时,减Td*/*-PLCD780基址定义-*/#defineBASE0x220 /*-PCL812Gneed16addressesinarow,from220Hto3F0H*/#defineREG0/*-定义绘图坐标-*/#defineox40/*-原点横坐标-*/
17、#defineoy440/*-原点纵坐标-*/#definexx600/*-x轴顶点横坐标-*/#definexy440/*-x轴顶点纵坐标-*/#defineyx40/*-y轴顶点横坐标-*/#defineyy40/*-y轴顶点纵坐标-*/*-PID参数定义-*/floatKp=1.0;floatTi=10.0;floatTd=3.0;floatTf0=15.0;floatTf=0;floatT=0.1;/*-采样时间-*/floatad,e,pv0;floatu=0.0;floatpv=0.0; /*反馈值*/floatsp=0.0; /*设定值*/charA_H=H; /*手动-自动,开
18、始为手动*/charmanu; /*用于调节u_m的增减*/intkey=0; /*存键盘扫描结果*/inttime_counter=0; /*中断计数*/intcj_counter=0;/*采样计数器*/ intQ_counter=800;/*采集步长赋初始值*/intstepdata800;intslopedata800;interror800;/*-函数声明-*/voidinterrupt(*fadd1C)(void); /*中断*/voidloop(); /*主程序循环*/floatAD(unsignedcharchannal);/*A/D*/voidDA(floatpv1);/*D/
19、A*/voidinterruptINT_1C(void);/*8259,resetinterruptcontroller*/intscankey(); /*扫描键盘,判断是否有建按下*/floatDelayAction(floaty0); /*软件延迟*/voidPIDset(void); /*PID设置*/floatPID(floatsp1,floatpv1,floatKp1,floatTi1,floatTd1,floatTf1,charA_H1,floatT1);floatObject(floatu1,floatT1); /*仿真对象*/voidInitial_Sys(void);/*初始
20、化为图形模式*/voidaxis(void); /*画坐标轴*/voidDrawline(intcj,floatpv1,floatsp1,floatu1,floate1); /*画线*/*主函数*/voidmain(void)inti;for(i=0;i500;i+) stepdatai=10; slopedatai=i; errori=0;/*SetnewINT_1Candsaveold*/disable(); /*保存旧中断,设置新中断*/fadd1C=getvect(0x1C);/*1C为定时器控制的软中断,平均一秒发生18.2次,即周期为55ms中断程序*/*开启中断服务*/setve
21、ct(0x1C,INT_1C);enable();axis();loop(); /*主函数结束下面为定时采值输出程序*/voidloop()doif(cj_counter*T)0)printf(Parallal,Mode:%c,sp=%.1f,pv=%2.1f,u=%.1f,error=%.1f,Kp=%.1f,Ti=%.1f,Td=%.1ftr,A_H,sp,pv,u,e,Kp,Ti,Td);elseprintf(ttTfgotawrongvalue!Pleaseexitandrestartthisprogram.r);cj_counter+;while(cj_counter500);/*恢
22、复中断*/disable();setvect(0x1C,fadd1C);enable();/*D/Aconversionprogram,0to4095-0to+5*/floatAD(unsignedcharchannal) floatresult=0;inti;unsignedcharhb=0,lb=0,poll=0x10; outportb(BASE+11,REG);/*软件程序触发*/for(i=0;i10000;i+);outportb(BASE+10,channal);/*进行通道设置.选择通道0*/for(i=0;i10000;i+);outportb(BASE+9,0);/*设置增
23、益通道增益*/for(i=0;i10000;i+);outportb(BASE+12,0);/*触发A/D转换*/for(i=0;i10000;i+);do /*查询法读PV*/poll=inportb(BASE+5);while(poll&0x10);hb=inportb(BASE+5);for(i=0;i10000;i+);lb=inportb(BASE+4);result=lb+(hb&0x0F)5)/*maketheoutputreal*/pv1=5;elseif(pv10)pv1=0;temp=(int)(4095*pv1/5.0);hb=temp8;lb=temp-(hb8);ou
24、tportb(BASE,1); /*启动DA转换*/for(i=0;i10000;i+);outportb(BASE+4,lb);/*low8*/for(i=0;i10000;i+);outportb(BASE+5,hb);/*high4*/*00-中断子程序-*/voidinterruptINT_1C(void)time_counter+;outportb(0x20,0x20);/*键盘控制*/intscankey(void) intkey0; /*扫描键盘,判断是否有建按下*/key0=bioskey(1);/*1:无键按下则返回0*/if(key0!=0)key0=bioskey(0);
25、/*0:返回按下的键*/returnkey0;/*DelayAction*/*tao=(int)(18.2*2)Delayaction=2seconds*/floatDelayAction(floaty0) /*软件延迟*/floaty_out;staticfloaty_old36=0;/*将ad延迟2s作为PV,T=0.2s,于是延迟36步*/intcyc;y_out=y_old36-1;for(cyc=1;cyc36;cyc+)y_old36-cyc=y_old36-cyc-1;y_old0=y0;returny_out;/*PID主程序*/voidPIDset(void) /*PID设置
26、*/key=scankey(); /*扫描键盘,并将按键存为key*/if(A_H=H)/*手动状态*/if(key=key_up)Kp+=0.2;elseif(key=key_down)Kp-=0.2;elseif(key=key_left)Ti-=0.2;elseif(key=key_right)Ti+=0.2;elseif(key=key_pgup)Td+=0.2;elseif(key=key_pgdown)Td-=0.2;elseif(key=key_U)/*控制u_m增减*/manu=+;elseif(key=key_D)manu=-;if(A_H=A) /*自动状态*/if(key
27、=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)/*理想PID*/Tf=0;if(key=key_P)/*实际PID*/Tf=Tf0;/*PID-default:IdealPID*/floatPID(floatsp1,floatpv1,floatKp1,floatTi1,floatTd1,floatTf1,charA_H1,floatT1)flo
28、atdelta_u,u0,e,C1,C2,C3,C4; /*离散化后PID参数 当前时刻,u0为返回值*/staticfloate1,e2,u1,delta_u1;/*前一时刻的值*/if(Kp10)printf(Kpbecomesanegativenumber,pleaserestart.);elseif(Ti10) printf(Tibecomesanegativenumber,pleasepressrestart.);elseif(Td10) printf(Tdbecomesanegativenumber,pleasepressrestart.);elseC1=Tf1/(T1+Tf1);
29、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; /*delta_u1是delta_u前一时刻的值*/ u0=u1+delta_u; /*当前时刻控制器输出*/e2=e1;e1=e;delta_u1=delta_u;u1=u0; /*自动时,手操器输出跟踪自动输出*/errorcj_counter=sp1-pv1;returnu0;/*
30、手动控制*/elseif(A_H1=H)if(manu=+) /*调节手操器输出*/u+=10;if(manu=-)u-=10;sp1=pv1;u1=u;sp=pv1; /*sp跟踪pv保证偏差e为0*/e1=0; e2=0;delta_u1=0; /*将前两时刻的偏差赋值为0*/errorcj_counter=sp1-pv1;returnu;/*显示与画图*/*初始化CRT*/voidInitial_Sys(void)intGraphDriver;intGraphMode;detectgraph(&GraphDriver,&GraphMode);initgraph(&GraphDriver,
31、&GraphMode,C:TC201EBGI);/*drawbasiccoordinateaxis*/voidaxis(void)inti;Initial_Sys();setbkcolor(15);/*white0/black15*/setcolor(9);/*linghtblue*/rectangle(10,20,630,470);/*zoneofdrawing*/line(ox,oy,xx,xy);/*axisandarrow*/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,y
32、y);line(yx+5,yy+5,yx,yy);settextstyle(2,1,5);/*Smallfont,vert,5timesbigger*/outtextxy(20,100,TheOutput(Response);outtextxy(20,40,U(t);settextstyle(2,0,5);/*Smallfont,horiz,5timesbigger*/outtextxy(300,455,Time);outtextxy(590,455,t/sec);setlinestyle(1,0,1);/*dotline,none,width*/for(i=1;i4;i+)/*eachinportstartingposition*/ 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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 风险投资决策支持系统构建
- 成本效益分析工具操作手册
- 2025有条件买卖合同样本
- 2025车间级安全教育试题及答案
- 2025年工程管理年终工作总结(2篇)
- 2025新款电器电子产品购销合同
- 2025标准版家庭护工劳动合同样本
- 《2025重型货车租赁协议》
- 2025企业间租赁合同范本
- 2025版私人委托合同书
- 政治经济学5章习题(有答案)
- 机器人工程大一职业规划书(8篇)
- 能量均分定理理想气体的内能
- 功能高分子04-电功能高分子材料
- 建筑企业管理制度大全-精品完整版
- GB/T 1185-2006光学零件表面疵病
- 锚杆工程隐蔽验收记录
- 2020年汽车物流企业组织结构及部门职责
- 混凝土原理与设计10压弯承载力课件
- 幼教培训课件:《家园共育体系建构与实施策略》
- 突发公共卫生事件健康教育与健康促进课件
评论
0/150
提交评论