温控系统毕业论文_第1页
温控系统毕业论文_第2页
温控系统毕业论文_第3页
温控系统毕业论文_第4页
温控系统毕业论文_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录1 概绪11.1 温度控制系统设计的背景、发展历史及意义11.2 温度控制系统的目的11.3 温度控制系统完成的功能12 单片机人机接口系统的软件设计12.1四位数码管动态显示和任意浮点数显示22.2输入参数合成、计时器程序以及串口通讯程序等73 DS18B20温度传感器简介83.1 DS18B20的工作原理83.2 DS18B20的驱动程序104 温度控制模块设计114.1 光电隔离控制电路的设计114.2 风扇PWM驱动程序114.3 制冷片的控制以及程序设计135 温度测量试验与分析175.1 温度测量实验175.2 数据处理与误差分析(最大的引用误差)176 温度控制试验与分析18

2、6.1升温186.2 降温186.3 恒温187 总结19考文献参201 概绪1.1 温度控制系统设计的背景、发展历史及意义 温度是生产过程和科学实验中普遍而且重要的物理参数,随着社会的发展,科技的进步,以及测温仪器在各个领域的应用,智能化已是现代温度控制系统发展的主流方向。特别是近年来,温度控制系统已应用到人们生活的各个方面,但温度控制一直是一个未开发的领域,却又是与人们息息相关的一个实际问题。针对这种实际情况,设计一个温度控制系统,具有广泛的应用前景与实际意义。温度是一个重要的物理量,它反映了物体冷热的程度,与自然界中的各种物理和化学过程相联系。在工、农业生产和日常生活中,各个环节都与温度

3、紧密相联,温度的准确监测及控制占据着极其重要地位。比如,发电厂锅炉的温度必须控制在一定的范围之内;许多化学反应的工艺过程必须在适当的温度下才能正常进行等。没有合适的温度环境,许多电子设备就不能正常工作,粮仓的储粮就会变质霉烂,酒类的品质就没有保障。可见,温度的测量和控制是非常重要的。随着电子技术和微型计算机的迅速发展,单片机在电子产品中的应用已经越来越广泛。利用单片机对温度进行控制的技术也随之而生,并日益发展和完善,且越来越显示出它的优越性。1.2 温度控制系统的目的本设计的内容是温度测试控制系统,控制对象是温度。温度控制在日常生活及工业领域应用相当广泛,比如温室、水池、发酵缸、电源等场所的温

4、度控制。而以往温度控制是由人工完成的而且不够重视,其实在很多场所温度都需要监控以防止发生意外。针对此问题,本系统设计的目的是实现一种可连续高精度调温的温度控制系统,它应用广泛,功能强大,小巧美观,便于携带,是一款既实用又廉价的控制系统。1.3 温度控制系统完成的功能本设计是对温度进行实时监测与控制,设计的温度控制系统实现了基本的温度控制功能:当温度低于设定下限温度时,系统自动启动加热继电器加温,使温度上升,同时绿灯亮。当温度上升到下限温度以上时,停止加温;当温度高于设定上限温度时,系统自动启动风扇降温,使温度下降,同时红灯亮。当温度下降到上限温度以下时,停止降温。温度在上下限温度之间时,执行机

5、构不执行。三个数码管即时显示温度,精确到小数点一位。2 单片机人机接口系统的软件设计软件设计主要包括键盘扫描程序、四位数码管动态显示程序、任意浮点数显示程序、输入参数合成、计时器程序以及串口通讯程序等。温度测控系统的设计温度控制系统的设计智能测控系统的设计风扇控制电路设计温度传感器程序设计数据处理程序设计扇控制器程序设计数码管显示程序设计键盘操作程序设计制冷片控制电路设计制冷片控制程序设计2.1四位数码管动态显示和任意浮点数显示#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit DS=

6、P22; /define interfacesbit dula=P26;sbit wela=P27;sbit li=P31;sbit wai=P30;sbit hot=P32; sbit up=P34;sbit down=P35;unsigned char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;unsigned char code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef; u

7、int temp; / variable of temperature uint aa=0,bb=0,cc,dd,ee;void delay(uint count) /delay uint i; while(count) i=200; while(i>0) i-; count-; void dsreset(void) /send reset and initialization command uint i; DS=0; i=103; while(i>0)i-; DS=1; i=4; while(i>0)i-;bit tmpreadbit(void) /read a bit

8、uint i; bit dat; DS=0;i+; /i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i>0)i-; return (dat);uchar tmpread(void) /read a byte date uchar i,j,dat; dat=0; for(i=1;i<=8;i+) j=tmpreadbit(); dat=(j<<7)|(dat>>1); /读出的数据最低位在最前面,这样刚好一个字节在DAT里 return(dat);void tmpwritebyte(uchar dat) /write a

9、 byte to ds18b20 uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if(testb) /write 1 DS=0; i+;i+; DS=1; i=8;while(i>0)i-; else DS=0; /write 0 i=8;while(i>0)i-; DS=1; i+;i+; void tmpchange(void) /DS18B20 begin change dsreset(); delay(1); tmpwritebyte(0xcc);

10、/ address all drivers on bus tmpwritebyte(0x44); / initiates a single temperature conversionuint tmp() /get the temperature float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; temp<<=8; /two byte compose a int variable temp=temp|a

11、; tt=temp*0.0625; temp=tt*10+0.5; return temp;void readrom() /read the serial uchar sn1,sn2; dsreset(); delay(1); tmpwritebyte(0x33); sn1=tmpread(); sn2=tmpread();void delay10ms() /delay uchar a,b; for(a=10;a>0;a-) for(b=60;b>0;b-); void display(uint temp)/显示程序 uchar A1,A2,A2t,A3,ser; ser=temp

12、/10; SBUF=ser; A1=temp/100; A2t=temp%100; A2=A2t/10; A3=A2t%10; dula=0; P0=tableA1;/显示百位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0; delay(1); dula=0; P0=table1A2;/显示十位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay(1); P0=tableA3;/显示个位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; delay(1);

13、void xianshi(uint temp1) uint A5,A6; A5=temp1/10; A6=temp1%10; P0=tableA5; dula=1; dula=0; P0=0xef; wela=1; wela=0; delay(1); P0=tableA6; dula=1; dula=0; P0=0xdf; wela=1; wela=0; delay(1);void keyscan()if(up=0)delay(10);if(up=0)aa+;if(aa=50)aa=0;if(down=0)delay(10);if(down=0)if(aa=0)aa=50;aa-;2.2输入参

14、数合成、计时器程序以及串口通讯程序等void main() uchar a; while(1) keyscan(); tmpchange(); bb=tmp(); bb=bb/10; cc=aa-1; dd=aa+1; if(bb>cc&&bb<dd) for(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0x00;li=1;wai=1;hot=1; else if(bb>dd) for(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0xff;li=0;wai=1;hot=

15、1; else if(bb<cc) for(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0xff;li=0;wai=1;hot=0; 3 DS18B20温度传感器简介3.1 DS18B20的工作原理 DS18B20工作时序根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:1. 每一次读写之前都必须要对DS18B20进行复位;2. 复位成功后发送一条ROM指令;3. 最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1560微

16、秒左右后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。其工作时序包括初始化时序、写时序和读时序,具体工作方法如图2.1,2.2,2.3所示。(1) 初始化时序 图31 初始化时序总线上的所有传输过程都是以初始化开始的,主机响应应答脉冲。应答脉冲使主机知道,总线上有从机设备,且准备就绪。主机输出低电平,保持低电平时间至少480us,以产生复位脉冲。接着主机释放总线,4.7K上拉电阻将总线拉高,延时1560us,并进入接受模式,以产生低电平应答脉冲,若为低电平,再延时480us12。(2) 写时序图32 写时序 写时序包括写0时序和写1时序。所有写时序至少需要60us,且在2次独

17、立的写时序之间至少需要1us的恢复时间,都是以总线拉低开始。写1时序,主机输出低电平,延时2us,然后释放总线,延时60us。写0时序,主机输出低电平,延时60us,然后释放总线,延时2us8。(3) 读时序 图33 读时序总线器件仅在主机发出读时序是,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要60us,且在2次独立的读时序之间至少需要1us的恢复时间。每个读时序都由主机发起,至少拉低总线1us。主机在读时序期间必须释放总线,并且在时序起始后的15us之内采样总线状态。主机输出低电平延时2us,然后主机转入输入模式延时12us,

18、然后读取总线当前电平,然后延时50us4 ROM操作命令当主机收到DSl8B20 的响应信号后,便可以发出ROM 操作命令之一,这些命令如表2.2:ROM操作命令。3.2 DS18B20的驱动程序unsigned char ReadOneChar(void) unsigned char i=0;unsigned char dat; /储存读出的一个字节数据for (i=0;i<8;i+) DQ =1; / 先将数据线拉高 _nop_(); /等待一个机器周期 DQ = 0; /单片机从DS18B20读书据时,将数据线从高拉低即启动读时序 _nop_(); /等待一个机器周期 DQ = 1

19、; /将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备 for(time=0;time<2;time+) ; /延时约6us,使主机在15us内采样 dat>>=1; if(DQ=1) dat|=0x80; /如果读到的数据是1,则将1存入dat elsedat|=0x00;/如果读到的数据是0,则将0存入dat for(time=0;time<8;time+); /延时3us,两个读时序之间必须有大于1us的恢复期 return(dat); /返回读出的十六进制数据WriteOneChar(unsigned char dat) un

20、signed char i=0;for (i=0; i<8; i+) DQ =1; / 先将数据线拉高 _nop_(); /等待一个机器周期 DQ=0; /将数据线从高拉低时即启动写时序 DQ=dat&0x01; /利用与运算取出要写的某位二进制数据, /并将其送到数据线上等待DS18B20采样 for(time=0;time<10;time+) ;/延时约30us,DS18B20在拉低后的约1560us期间从数据线上采样 DQ=1; /释放数据线 for(time=0;time<1;time+) ;/延时3us,两个写时序间至少需要1us的恢复期 dat>&g

21、t;=1; /将dat中的各二进制位数据右移1位 for(time=0;time<4;time+) ; /稍作延时,给硬件一点反应时间* 总结单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。单总线通常要求外接一个约为 4.7K10K 的上拉电阻,这样,当总线闲置时其状态为高电平。4 温度控制模块设计4.1 光电隔离控制电路的设计4.2 风扇PWM驱动程序void keyscan()if(up=0)delay(10);if(up=0)aa+;if(aa=50)aa=0;if(down=0)delay(10);if(down=0)if(aa=0)aa=50;aa-;void m

22、ain() uchar a; while(1) keyscan(); tmpchange(); bb=tmp(); bb=bb/10; cc=aa-1; dd=aa+1; if(bb>cc&&bb<dd) for(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0x00;li=1;wai=1;hot=1; else if(bb>dd) for(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0xff;li=0;wai=1;hot=1; else if(bb<cc) for

23、(a=10;a>0;a-) xianshi(aa);display(tmp();P1=0xff;li=0;wai=1;hot=0; 4.3 制冷片的控制以及程序设计#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit DS=P22; /define interfacesbit dula=P26;sbit wela=P27;sbit li=P31;sbit wai=P30;sbit hot=P32; sbit up=P34;sbit down=P35;unsigned char co

24、de table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;unsigned char code table1=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef; uint temp; / variable of temperature uint aa=0,bb=0,cc,dd,ee;void delay(uint count) /delay uint i; while(count) i=200; while(i>0)

25、 i-; count-; void dsreset(void) /send reset and initialization command uint i; DS=0; i=103; while(i>0)i-; DS=1; i=4; while(i>0)i-;bit tmpreadbit(void) /read a bit uint i; bit dat; DS=0;i+; /i+ for delay DS=1;i+;i+; dat=DS; i=8;while(i>0)i-; return (dat);uchar tmpread(void) /read a byte date

26、 uchar i,j,dat; dat=0; for(i=1;i<=8;i+) j=tmpreadbit(); dat=(j<<7)|(dat>>1); /读出的数据最低位在最前面,这样刚好一个字节在DAT里 return(dat);void tmpwritebyte(uchar dat) /write a byte to ds18b20 uint i; uchar j; bit testb; for(j=1;j<=8;j+) testb=dat&0x01; dat=dat>>1; if(testb) /write 1 DS=0; i+;

27、i+; DS=1; i=8;while(i>0)i-; else DS=0; /write 0 i=8;while(i>0)i-; DS=1; i+;i+; void tmpchange(void) /DS18B20 begin change dsreset(); delay(1); tmpwritebyte(0xcc); / address all drivers on bus tmpwritebyte(0x44); / initiates a single temperature conversionuint tmp() /get the temperature float t

28、t; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); a=tmpread(); b=tmpread(); temp=b; temp<<=8; /two byte compose a int variable temp=temp|a; tt=temp*0.0625; temp=tt*10+0.5; return temp;void readrom() /read the serial uchar sn1,sn2; dsreset(); delay(1); tmpwritebyte(0x33

29、); sn1=tmpread(); sn2=tmpread();void delay10ms() /delay uchar a,b; for(a=10;a>0;a-) for(b=60;b>0;b-); void display(uint temp)/显示程序 uchar A1,A2,A2t,A3,ser; ser=temp/10; SBUF=ser; A1=temp/100; A2t=temp%100; A2=A2t/10; A3=A2t%10; dula=0; P0=tableA1;/显示百位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; w

30、ela=0; delay(1); dula=0; P0=table1A2;/显示十位 dula=1; dula=0; wela=0; P0=0x7d; wela=1; wela=0; delay(1); P0=tableA3;/显示个位 dula=1; dula=0; P0=0x7b; wela=1; wela=0; delay(1);void xianshi(uint temp1) uint A5,A6; A5=temp1/10; A6=temp1%10; P0=tableA5; dula=1; dula=0; P0=0xef; wela=1; wela=0; delay(1); P0=tableA6; dula=1; dula=0; P0=0xdf; wela=1; wela=0; delay(1);5 温度测量试验与分析5.1 温度测量实验DS18B20测量值25.526.327.22829.430.331.132.634.2玻璃温度计值25.326.027.127.829.330.230.932.434.15.2 数据处理与误差分析(最大的引用误差)被测量的真值和试验所得的给出值总存在一定的差异,这就是测量误差。而误差的存在使我们对客观事物的认识受到不同程度的歪曲,因此就必须进行误差分析。另一方面,一般原始的测试技术都是参差不齐的,需运用数学方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论