串级回路pid闭环控制系统的设计及实时仿真

上传人:aa****6 文档编号:39164998 上传时间:2018-05-12 格式:DOCX 页数:31 大小:1.26MB
返回 下载 相关 举报
串级回路pid闭环控制系统的设计及实时仿真_第1页
第1页 / 共31页
串级回路pid闭环控制系统的设计及实时仿真_第2页
第2页 / 共31页
串级回路pid闭环控制系统的设计及实时仿真_第3页
第3页 / 共31页
串级回路pid闭环控制系统的设计及实时仿真_第4页
第4页 / 共31页
串级回路pid闭环控制系统的设计及实时仿真_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《串级回路pid闭环控制系统的设计及实时仿真》由会员分享,可在线阅读,更多相关《串级回路pid闭环控制系统的设计及实时仿真(31页珍藏版)》请在金锄头文库上搜索。

1、 课程设计报告课程设计报告( 2012 - 2013 年度第 2 学期)名 称: 过程计算机控制题 目: DDC 串级回路 PID 闭环控制系统的设计及实时仿真院 系:自动化 班 级:实验自 10 学 号: 学生姓名:张超群 指导教师: 田 涛 设计周数: 一 周 成 绩: 日期:2013 年 7 月 6 日PID 参数的整定参数的整定1)利用 Matlab 中 Simulink 工具搭建理想 PIDPID 模块内部结构:整定理想 PID 参数为: Kp=3 Ti=15s Td=2s 对象响应曲线为:该组整定参数能够实现快速稳定效果,整定结果较为理想。2)利用 Matlab 中 Simulin

2、k 工具搭建实际 PID:PID 模块内部结构:整定实际 PID 参数为: Kp=2 Ti=15s Td=4 Tf=10s对象响应曲线为:同样满足快速性要求,保证系统稳定。(5)实验结果输出)实验结果输出曲线绘制由程序中编写的绘图模块子程序完成,同时采用按键实现了 PID 手自动切换、理想 PID与实际 PID 的切换,以及在手自动状态下由按键改变 PID 参数,使得调节方式更加的灵活。 3.设计结果设计结果(1)PID 阶跃响应曲线阶跃响应曲线调用程序,向 PID 模块输入一个阶跃信号,绘出 PID 阶跃响应曲线如下:(1.1)理想 PID 阶跃响应图: (1.2)实际 PID 阶跃响应图:

3、由理想与实际 PID 阶跃响应对比,可知,理想微分 PID 算法的微分作用仅局限于一个采样周期有一个大幅度的输出。这样在大的干扰作用情况下,一方面会使算法中的微分不能充分发挥作用。另一方面也会对执行机构产生很大的冲击作用。相反的,实际微分 PID 算法由于惯性滤波的存在,使微分作用可持续多个采样周期,有效地避免了上述问题的产生,因而具有更好的控制性能。(2)被控对象(实物搭建二阶惯性环节)阶跃响应曲线)被控对象(实物搭建二阶惯性环节)阶跃响应曲线上图通过 D/A 输出一个 1 伏左右的信号输入模拟的被控对象(惯性环节) ,A/D 采集对象的输入信号及其响应,再使 D/A 输出一个幅度为 2 伏

4、左右的阶跃信号,同时采集输入输出信号。然后,D/A 再反向在输出一个幅度为 2 伏左右负的阶跃信号,同时采集输入输出信号,得出仿真对象飞升特性曲线。程序中,通过按键实现模拟对象输入信号的加减。当按下 H 按键时,且按下 U 键时,D/A 输出一个 1 伏阶跃信号,再次按下按键时阶跃信号累加。每次按下 D 键时,D/A 输出的阶跃信号递减 1。(3)根据对象单位阶跃)根据对象单位阶跃响应曲线求增益和惯性时间:响应曲线求增益和惯性时间: 利用切线法求对象的增益和用一阶等效的惯性时间:如上图所示做拐点切线,得对象增益和一阶等效惯性时间分别为: 13(4)手自动切换:)手自动切换:1)0()(ccK为

5、实现手动到自动的勿扰切换,计算机需要跟踪手操器的阀位值,使 u(k-1)能够跟踪阀位值,此外,控制算法中的 e(k-1)、e(k-2)、 u(k-1)等历史状态清零,使切换时偏差 e(k)也为 0。为使 e(k)=0,就要求手动状态时的设定值跟踪过程的反馈量(即 SP 跟踪 PV) 。这样处理后,就能保证 u(k)=0,实现手动到自动的无扰切换。(5)设定值)设定值 r、控制量、控制量 u 和被控对象输出的阶跃响应曲线:和被控对象输出的阶跃响应曲线:理想 PID 自动状态下,闭环系统阶跃响应曲线:实际 PID 自动状态下,闭环系统阶跃响应曲线:由于微分对高频信号具有放大作用,采用理想 PID

6、容易在系统引入高频的干扰,因此在理想 PID自动状态下,响应曲线有非常明显的毛刺。而实际微分 PID 算法中包含有一阶惯性环节,具有低通滤波的性能,抗干扰能力较强。 4.程序清单程序清单/*-理想 PID-*/ /*-头文件定义-*/ #include #include #include #include #include/*-截图-*/ #define IMAGEX 0 unsigned char CLOR163= 0XFF,0XFF,0XFF, 0XAA,0X00,0X00, 0X00,0XAA,0X00, 0XAA,0XAA,0X00, 0X00,0X00,0XAA, 0XAA,0X00

7、,0XAA, 0X00,0X55,0XAA, 0XAA,0XAA,0XAA, 0X55,0X55,0X55,0XFF,0X55,0X55, 0X55,0XFF,0X55, 0XFF,0XFF,0X55, 0X55,0X55,0XFF, 0XFF,0X55,0XFF, 0X55,0XFF,0XFF, 0X00,0X00,0X00, ; /*-定义绘图坐标(640,480)-*/ #define xo 40 /*-x 轴-*/ #define xf 630 #define xy 440 #define yx 40 /*-y 轴-*/ #define yo 440 #define yf 10 /*-

8、理想 PID 运算式-*/ float ipid(float kp,float td,float ti,float e3,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*e0+q1*e1+q2*e2+u1; return u;/*-绘图初始化-*/ void Initial_Sys(void) int GraphDriver; int GraphMode; detectgraph( initgraph( cleardevice(); /*

9、-绘制坐标系-*/ void DrawAxis(void) int i; setbkcolor(15); setcolor(5); line(xo,xy,xf,xy); /*-x 轴-*/ line(xf,xy,xf-5,xy+5);line(xf,xy,xf-5,xy-5); line(yx,yo,yx,yf); /*-y 轴-*/ line(yx,yf,yx-5,yf+5); line(yx,yf,yx+5,yf+5); for(i=1;i=0;m-)for(n=0;n#include#include#include#include/*-截图-*/#define IMAGEX 0 unsi

10、gned char CLOR163=0XFF,0XFF,0XFF,0XAA,0X00,0X00,0X00,0XAA,0X00,0XAA,0XAA,0X00,0X00,0X00,0XAA,0XAA,0X00,0XAA,0X00,0X55,0XAA,0XAA,0XAA,0XAA,0X55,0X55,0X55,0XFF,0X55,0X55,0X55,0XFF,0X55,0XFF,0XFF,0X55,0X55,0X55,0XFF,0XFF,0X55,0XFF,0X55,0XFF,0XFF,0X00,0X00,0X00,;/*-定义绘图坐标(640,480)-*/#define xo 40 /*-x 轴

11、-*/ #define xf 630 #define xy 440 #define yx 40 /*-y 轴-*/#define yo 440#define yf 10 /*-实际 PID 运算式-*/float ppid(float kp,float ti,float td,float tf,float e3,float du1)int t=1;float du;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);du=c1*d

12、u1+c2*e0+c3*e1+c4*e2;return du;/*-绘图初始化-*/void Initial_Sys(void)int GraphDriver;int GraphMode;detectgraph(initgraph(cleardevice();/*-绘制坐标系-*/void DrawAxis(void)int i;setbkcolor(15);setcolor(5);line(xo,xy,xf,xy); /*-x 轴-*/line(xf,xy,xf-5,xy+5);line(xf,xy,xf-5,xy-5);line(yx,yo,yx,yf); /*-y 轴-*/line(yx

13、,yf,yx-5,yf+5);line(yx,yf,yx+5,yf+5);for(i=1;i=0;m-)for(n=0;n0)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);else printf(“ttTf got a wrong value! Please exit and restart this program.r“);cj_counter+; /*计数器加 1*/while(cj_counter04095-*/void DA()int temp,i;unsigned char hb,lb; /*限幅 */if (u5) u

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号