欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

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

    • 资源ID:4226673       资源大小:419KB        全文页数:28页
    • 资源格式: DOC        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    过程控制系统课程设计智能化压力控制系统设计院 别 专业名称班级学号学生姓名指导教师2014.7.8-2014.7.19一、 前言 在科技飞速发展的今天,智能化已经成为这个时代的主旋律,大到工业生产,小到手机、家具。其中,压力是不可或缺的一个重要参数。为实现锅炉气压的准确地自动检测与控制,我们基于51单片机,设计了气压自动控制系统。它通过实时采集气压传感器电压进行PID运算,输出PWM,从而控制固态继电器对锅炉进行加热,使锅炉气压快速准确的达到设定值。与其它同类系统相比,本系统具有经济、方便等特点,适合小型控制。关键词:锅炉气压、51单片机、自动控制、PID二、 任务书1、系统构成: 系统主要由压力传感器,单片机控制系统、对象、执行器(查找资料自行选择)等组成。压力传感器、控制器、对象、执行器可查找资料自行选择,控制器选择单片机为控制器。单片机型号自选。2、写出压力测量与控制过程,绘制压力控制系统组成框图。3、(1)系统硬件电路设计自选。 (2)编制压力测量控制程序:软件采用模块化程序结构设计,由压力采集程序、压力校准程序、压力控制程序等部分组成。三、 选型1、传感器:HL-DQ1气压传感器HL-DQ1气压传感器采用进口高精度压力芯片,测量精度高、稳定性好。精密信号处理电路可根据用户的不同需求将大气压力转换为电压或电流等其它输出信号。具有体积小巧,性能可靠,精度高,负载能力强,传输距离长,抗干扰能力强等特点。可广泛用于气象、海洋、环境、机场、港口、实验室、工农业及交通等领域。 产品特点:连接简便、体积小巧 、性价比高,专业级大气压力 应用范围各类自动气象站的大气压力专业测量 测量范围:5001060hPa 输出:频率/电压/智能 分辨率:0.1hPa 2、控制器:51单片机外接串行AD转化芯片ADC0832将传感器电压转换成数字量,通过1602显示屏显示实时数据,使用定时器模拟一路PWM控制执行器。3、被控对象:普通锅炉4、执行器:固态继电器四、 主体设计1、 系统框图给定值气压 51单片机 锅炉 固态继电器 ADC0832 压力传感器说明:本系统根据单闭环自动控制系统的特点,以89C51单片机作为调节器,通过对传感器输出的电压信号进行AD转换,与给定值进行作差比较,单片机程序中进行相应的PID运算,在1602显示屏上显示采集到的电压值,转化后的气压值,输出相应占空比的PWM信号控制固态继电器加热,使锅炉气压快速准确到达并稳定在设定值。2、 系统操作说明 启动系统之后,显示屏显示默认的PID参数和设定值,通过按键ADD,SUB,NEXT,OK可实现参数加减修改,参数选择,参数确认操作,之后系统进行自动运行,无需人干预,当压力值高于设定值110%的时候能够自动报警。3、 硬件电路设计proteus仿真电路图说明:按键:ADD、SUB、NEXT、OK按键依次接单片机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_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+=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 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(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) case 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); 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_date(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 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;i<8;i+) /读取前8位的值 _nop_(); dis0<<= 1; Clk=1; _nop_(); Clk=0; if (DO) dis0|=0x01; else dis0|=0x00; for (i=0;i<8;i+) /读取后8位的值 dis1>>= 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;五、 参考文献1邵裕森、戴先中.过程控制工程.北京:机械工业出版社,2000.52萧德云译过程控制系统应用、设计与整定(第3版)清华大学出版社,2004.53金以慧过程控制清华大学出版社,2002.3六、 结束语 在本次课设过程中,我主要工作是运用Proteus软件进行连接电路图和仿真。通过这次课设,我对Proteus软件的使用更加熟悉。这次课设是大学最后一个课设了,所以团队成员分工合作、共同讨论疑难点时也都非常积极主动,同时也不乏一些快乐。七、附录1、仿真结果2、完整程序代码#include <reg52.h>#include <intrins.h>#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;/ADC0832控制端口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; float 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; /通道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;i<8;i+) /读取前8位的值 _nop_(); dis0<<= 1; Clk=1; _nop_(); Clk=0; if (DO) dis0|=0x01; else dis0|=0x00; for (i=0;i<8;i+) /读取后8位的值 dis1>>= 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级换算成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/10;dis22=out%10;/*LCD1602驱动程序*/void delay(uchar z)uint x,y;for(x=z;x>0;x-)for(y=122;y>0;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);lcden=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;i<3;i+)if(i=1) write_date('.'); /第二位显示小数点write_date (0x30+disi);delay(5);write_date('V'); write_cmd(0x88);write_date('P'); write_date(':'); for(i=0;i<2;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<3;i+)write_date (0x30+dis2i);delay(5);void 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(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) case 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); 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_date(0x7e); break; void pidcal() out=(aim-press/100)*kp+50;/* 主函数*/void main(void) beep=0; system_Ini(); CH=0; /选择通道0或1 init_lcd1602();/液晶1602显示初始化 write_cmd(0x81); write_date('K'); write_date('p'); write_date(':'); write_cmd(0x89); write_date('K'); write_date('i'); write_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+=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(); write_cmd(0x01); while(1) /主循环 date=ADC0832(CH);/启动ADC0832转换并接受数据delay(1);convert(date); /数据转换成BCD码pidcal(); display(); /显示数值CS=0;delay(5);CS=1; if(press/100)>=(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(timer1>100) timer1=0; if(timer1<out) pwm=1; else pwm=0;

    注意事项

    本文(智能化压力控制系统设计.doc)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开