智能化压力控制系统设计.doc

上传人:牧羊曲112 文档编号:4226673 上传时间:2023-04-10 格式:DOC 页数:28 大小:419KB
返回 下载 相关 举报
智能化压力控制系统设计.doc_第1页
第1页 / 共28页
智能化压力控制系统设计.doc_第2页
第2页 / 共28页
智能化压力控制系统设计.doc_第3页
第3页 / 共28页
智能化压力控制系统设计.doc_第4页
第4页 / 共28页
智能化压力控制系统设计.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《智能化压力控制系统设计.doc》由会员分享,可在线阅读,更多相关《智能化压力控制系统设计.doc(28页珍藏版)》请在三一办公上搜索。

1、 过程控制系统课程设计智能化压力控制系统设计院 别 专业名称班级学号学生姓名指导教师2014.7.8-2014.7.19一、 前言 在科技飞速发展的今天,智能化已经成为这个时代的主旋律,大到工业生产,小到手机、家具。其中,压力是不可或缺的一个重要参数。为实现锅炉气压的准确地自动检测与控制,我们基于51单片机,设计了气压自动控制系统。它通过实时采集气压传感器电压进行PID运算,输出PWM,从而控制固态继电器对锅炉进行加热,使锅炉气压快速准确的达到设定值。与其它同类系统相比,本系统具有经济、方便等特点,适合小型控制。关键词:锅炉气压、51单片机、自动控制、PID二、 任务书1、系统构成: 系统主要

2、由压力传感器,单片机控制系统、对象、执行器(查找资料自行选择)等组成。压力传感器、控制器、对象、执行器可查找资料自行选择,控制器选择单片机为控制器。单片机型号自选。2、写出压力测量与控制过程,绘制压力控制系统组成框图。3、(1)系统硬件电路设计自选。 (2)编制压力测量控制程序:软件采用模块化程序结构设计,由压力采集程序、压力校准程序、压力控制程序等部分组成。三、 选型1、传感器:HL-DQ1气压传感器HL-DQ1气压传感器采用进口高精度压力芯片,测量精度高、稳定性好。精密信号处理电路可根据用户的不同需求将大气压力转换为电压或电流等其它输出信号。具有体积小巧,性能可靠,精度高,负载能力强,传输

3、距离长,抗干扰能力强等特点。可广泛用于气象、海洋、环境、机场、港口、实验室、工农业及交通等领域。 产品特点:连接简便、体积小巧 、性价比高,专业级大气压力 应用范围各类自动气象站的大气压力专业测量 测量范围:5001060hPa 输出:频率/电压/智能 分辨率:0.1hPa 2、控制器:51单片机外接串行AD转化芯片ADC0832将传感器电压转换成数字量,通过1602显示屏显示实时数据,使用定时器模拟一路PWM控制执行器。3、被控对象:普通锅炉4、执行器:固态继电器四、 主体设计1、 系统框图给定值气压 51单片机 锅炉 固态继电器 ADC0832 压力传感器说明:本系统根据单闭环自动控制系统

4、的特点,以89C51单片机作为调节器,通过对传感器输出的电压信号进行AD转换,与给定值进行作差比较,单片机程序中进行相应的PID运算,在1602显示屏上显示采集到的电压值,转化后的气压值,输出相应占空比的PWM信号控制固态继电器加热,使锅炉气压快速准确到达并稳定在设定值。2、 系统操作说明 启动系统之后,显示屏显示默认的PID参数和设定值,通过按键ADD,SUB,NEXT,OK可实现参数加减修改,参数选择,参数确认操作,之后系统进行自动运行,无需人干预,当压力值高于设定值110%的时候能够自动报警。3、 硬件电路设计proteus仿真电路图说明:按键:ADD、SUB、NEXT、OK按键依次接单

5、片机P2.1、P2.2、P2.3、P2.4引脚,低电平触发。ADC0832:DI、DO接单片机P3.4引脚,CS接P3.5,CLK接P3.3显示屛1602:RS接P2.6,RW 接P2.5,LCDEN接P2.7,数据口D0D7接P0口,为提高稳定性和引脚驱动能力,P0口接上拉电阻。4、 程序设计显示屏显示字符代码 init_lcd1602();/液晶1602显示初始化 write_cmd(0x81); write_date(K); write_date(p); write_date(:); write_cmd(0x89); write_date(K); write_date(i); write

6、_date(:); write_cmd(0xc1); write_date(K); write_date(d); write_date(:); write_cmd(0xc9); write_date(A); write_date(i); write_date(m); write_date(:); 参数修改代码 while(1) if(add=0) delay(10); if(add=0) while(add=0);switch(choose) case 1:kp+=0.1;break; case 2:ki+=0.1;break; case 3:kd+=0.1;break; case 4:aim

7、+=0.1;break; if(sub=0) delay(10); if(sub=0) while(sub=0);switch(choose) case 1:kp-=0.1;break; case 2:ki-=0.1;break; case 3:kd-=0.1;break; case 4:aim-=0.1;break; if(next=0) delay(10); if(next=0) while(next=0); choose+;if(choose=5)choose=1; if(ok=0) delay(10); if(ok=0) break; pidshow(); pidshow子程序void

8、 pidshow()int dt,dt1,dt2,dt3;dt=kp*10;dt1=dt/100+0x30;dt2=dt%100/10+0x30;dt3=dt%10+0x30;write_cmd(0x84);/write_date(dt1);write_date(dt2);write_date(.);write_date(dt3);dt=ki*10;dt1=dt/100+0x30;dt2=dt%100/10+0x30;dt3=dt%10+0x30;write_cmd(0x8c);/write_date(dt1);write_date(dt2);write_date(.);write_date(

9、dt3); dt=kd*10;dt1=dt/100+0x30;dt2=dt%100/10+0x30;dt3=dt%10+0x30;write_cmd(0xc4);/write_date(dt1);write_date(dt2);write_date(.);write_date(dt3);dt=aim*10;dt1=dt/100+0x30;dt2=dt%100/10+0x30;dt3=dt%10+0x30;write_cmd(0xcd);/write_date(dt1);write_date(dt2);write_date(.);write_date(dt3);switch(choose) ca

10、se 1: write_cmd(0x80); write_date(0x7e); write_cmd(0x88); write_date(0x20); write_cmd(0xc0); write_date(0x20); write_cmd(0xc8); write_date(0x20); break; case 2: write_cmd(0x80); write_date(0x20); write_cmd(0x88); write_date(0x7e); write_cmd(0xc0); write_date(0x20); write_cmd(0xc8); write_date(0x20);

11、 break; case 3: write_cmd(0x80); write_date(0x20); write_cmd(0x88); write_date(0x20); write_cmd(0xc0); write_date(0x7e); write_cmd(0xc8); write_date(0x20); break; case 4: write_cmd(0x80); write_date(0x20); write_cmd(0x88); write_date(0x20); write_cmd(0xc0); write_date(0x20); write_cmd(0xc8); write_d

12、ate(0x7e); break; 、串行ADC0832转换程序uchar ADC0832(uchar CH) uchar dis0,dis1; Clk=0; /拉低时钟 DI=1; /初始化 _nop_();CS=0; /芯片选定 _nop_(); Clk=1; /拉高时钟 _nop_();if(CH=0) /通道选择 Clk=0; /第一次拉低时钟 DI=1; /通道0的第一位 _nop_(); Clk=1; /拉高时钟 _nop_(); Clk=0; /第二次拉低时钟,ADC0832 DI接受数据 DI=0; /通道0的第二位 _nop_(); Clk=1; _nop_(); else

13、Clk=0; DI=1; /通道1的第一位 _nop_(); Clk=1; _nop_(); Clk=0; DI=1; /通道1的第二位 _nop_(); Clk=1; _nop_(); Clk=0; /第三次拉低时钟,此前DI两次赋值决定通道 DI=1; /DI开始失效,拉高电平,便于DO数据传输 for(i= 0;i8;i+) /读取前8位的值 _nop_(); dis0= 1; Clk=1; _nop_(); Clk=0; if (DO) dis0|=0x01; else dis0|=0x00; for (i=0;i= 1; if (DO) dis1|= 0x80; else dis1|

14、= 0x00; _nop_(); Clk=1; _nop_(); Clk=0; if(dis0=dis1) /两次结束数据比较,若相等 date=dis0; /则赋值给dat _nop_(); CS=1; /释放ADC0832 DO=1; /拉高输出端,方便下次通道选择DI端有效 Clk=1; /拉高时钟 return date;五、 参考文献1邵裕森、戴先中.过程控制工程.北京:机械工业出版社,2000.52萧德云译过程控制系统应用、设计与整定(第3版)清华大学出版社,2004.53金以慧过程控制清华大学出版社,2002.3六、 结束语 在本次课设过程中,我主要工作是运用Proteus软件进

15、行连接电路图和仿真。通过这次课设,我对Proteus软件的使用更加熟悉。这次课设是大学最后一个课设了,所以团队成员分工合作、共同讨论疑难点时也都非常积极主动,同时也不乏一些快乐。七、附录1、仿真结果2、完整程序代码#include #include #define uint unsigned int#define uchar unsigned charsbit lcdrs=P26;sbit lcdrw=P25;sbit lcden=P27; /1602控制端口sbit DI=P34;sbit DO=P34; /DI和DO与单片机共接口sbit Clk=P33;sbit CS=P35;/ADC0

16、832控制端口sbit pwm=P20;sbit add=P21;sbit sub=P22;sbit next=P23;sbit ok=P24;sbit beep=P10;uchar dis3=0x00,0x00,0x00; /显示缓冲区电压值uchar dis13=0x00,0x00,0x00; /显示缓冲区压强值uchar dis23=0x00,0x00,0x00; /显示缓冲区输出占空比uchar date=0; /AD值int press=0;/压力值int out=50;int choose=1;uchar i;uchar CH; /ADC0832通道值uchar timer1; f

17、loat kp=6;float ki=0.1;float kd=0.2;float aim=5;void system_Ini() TMOD|= 0x11;/PWM TH0 = 0xff; /11.0592TL0 = 0x9a;TR0 = 1; IE =0x8A;/*AD0832转换程序*/uchar ADC0832(uchar CH) uchar dis0,dis1; Clk=0; /拉低时钟 DI=1; /初始化 _nop_();CS=0; /芯片选定 _nop_(); Clk=1; /拉高时钟 _nop_();if(CH=0) /通道选择 Clk=0; /第一次拉低时钟 DI=1; /通

18、道0的第一位 _nop_(); Clk=1; /拉高时钟 _nop_(); Clk=0; /第二次拉低时钟,ADC0832 DI接受数据 DI=0; /通道0的第二位 _nop_(); Clk=1; _nop_(); else Clk=0; DI=1; /通道1的第一位 _nop_(); Clk=1; _nop_(); Clk=0; DI=1; /通道1的第二位 _nop_(); Clk=1; _nop_(); Clk=0; /第三次拉低时钟,此前DI两次赋值决定通道 DI=1; /DI开始失效,拉高电平,便于DO数据传输 for(i= 0;i8;i+) /读取前8位的值 _nop_(); d

19、is0= 1; Clk=1; _nop_(); Clk=0; if (DO) dis0|=0x01; else dis0|=0x00; for (i=0;i= 1; if (DO) dis1|= 0x80; else dis1|= 0x00; _nop_(); Clk=1; _nop_(); Clk=0; if(dis0=dis1) /两次结束数据比较,若相等 date=dis0; /则赋值给dat _nop_(); CS=1; /释放ADC0832 DO=1; /拉高输出端,方便下次通道选择DI端有效 Clk=1; /拉高时钟 return date;/*数据转换程序功能:将0-255级换算

20、成0.00-5.00的电压数*/void convert(uchar a) uint temp; /特别注意这里需定义int型(余数将大于255)dis0=a/51; /取个位temp=a%51;temp=temp*10;dis1=temp/51; /取小数点后第一位temp=temp%51;temp=temp*10;dis2=temp/51; /取小数点后第二位press=(dis0+dis1*0.1+dis0*0.01)*1000/4;dis10=press/100;dis11=press%100/10;dis12=press%10;dis20=out/100;dis21=out%100/

21、10;dis22=out%10;/*LCD1602驱动程序*/void delay(uchar z)uint x,y;for(x=z;x0;x-)for(y=122;y0;y-);void write_cmd(uchar cmd)/lcd1602写命令函数lcdrs=0;lcdrw=0; /选择指令寄存器lcden=1;P0=cmd; /写数据delay(5);lcden=0; /使能拉低lcden=1;void write_date(uchar date)/lcd1602写数据函数lcdrs=1;lcdrw=0; /选择数据寄存器lcden=1;P0=date; /写数据delay(5);l

22、cden=0; /使能拉低lcden=1;void init_lcd1602()/lcd1602初始化write_cmd(0x01); /清屏write_cmd(0x38); /功能设置write_cmd(0x0c); /显示设置write_cmd(0x06); /输入方式从左到右delay(1);/*显示函数*/void display(void)uchar i;write_cmd(0x80);write_date(V); write_date(:); for(i=0;i3;i+)if(i=1) write_date(.); /第二位显示小数点write_date (0x30+disi);d

23、elay(5);write_date(V); write_cmd(0x88);write_date(P); write_date(:); for(i=0;i2;i+) if(i=1) write_date(.); /第二位显示小数点write_date (0x30+dis1i);delay(5);write_date(k);write_date(p);write_date(a);write_cmd(0xc0);write_date(O); write_date(U);write_date(T); write_date(:); for(i=0;i=(aim*1.1)beep=1;else beep=0; /* t1 (0.5ms)中断 中断中做 PWM 输出 -1000/(0.02ms*250)=200Hz*/void T1zd(void) interrupt 1 /3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断TH0 = 0xff; /11.0592TL0 = 0x9a;timer1+; if(timer1100) timer1=0; if(timer1out) pwm=1; else pwm=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号