您好,欢迎访问三七文档
工程实训报告单片机温度控制系统设计班级:学号:姓名:实训日期:2008年11月24日至2008年12月12日第1章单片机温度系统概述1.1引言在现代化的工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用MCS-51单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的问题。1.2设计摘要本文介绍了基于单片机AT89C51的温度控制系统的设计方案与软硬件实现。采用温度传感器DS18B20采集温度数据,液晶显示屏LCM1602显示温度数据,AT24C02B存储温度上下限设定值,按键设置温度上下限并可改变加热器与致冷器的温控状态,当温度低于设定的下限时,单片机启动加热器加热,同时点亮绿色发光二极管,当温度高于设定的上限时,单片机启动致冷器降温,同时点亮红色发光二极管。给出了系统总体框架、程序流程图和Proteus仿真结果,并在硬件平台上实现了所设计的功能。1.3系统总体设计系统主要包括单片机控制模块,温度采集模块,温度显示模块,温度上下限调整模块,电机驱动模块和外部存储模块等六大部分。系统总体框架如图1所示。第2章硬件电路设计2.1单片机控制模块控制模块是整个设计方案的核心,它控制了温度的采集、处理与显示、温度上下限值的设定与温度越限时电机的启动。本文选用AT89C51作为控制器件。它是美国ATMEL公司生产的8位FlashROM单片机。其最突出的优点是片内ROM为FlashROM,可方便地擦写1000次以上,价格低廉,而且其指令丰富,编译工具多,仿真环境好。因此被广泛地应用于各种控制领域。本控制系统中AT89C51与外围设备的连接关系如图2所示:由图2可知,温度数据采集模块中温度传感器DS18B20的DQ端接P1.7;显示模块LCM1602的DB0~DB7数据端口接P0.0~P0.7,数据命令选择端RS接P2.0,读写选择端接P2.1,使能信号接P2.2;温度上下限调整模块包括模式切换、增加温度上下限值、减少温度上下限值、温控开关等四个功能,它们分别接P1.0~P1.3;外部存储模块为AT24C02B,其SCK、SDA分别接P2.3与P2.4;电机控制电路与P3.6和P3.7相连;XTAL1、XTAL2接振荡电路,RST接复位电路,EA接高电平,LCM1602上的VO、RST接电源+5V,GND接地。2.2温度数据采集模块温度由DALLAS公司生产的一线式数字温度传感器DS18B20采集。DS18B20测温范围为-55°C~+125°C,测温分辨率可达0.0625°C,被测温度用符号扩展的16位补码形式串行输出。CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。DS18B20内部有一个9字节的高速存储器用于存储温度值。其中前两个字节是测得的温度数据,第1字节的内容是温度的低八位,第2字节是温度的高八位,第3和第4字节是温度上限TH与温度下限TL的易失性拷贝,第5字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新,第6、7、8这三个字节用于内部计算,第9个字节是冗余检验字节,可用来保证通信的正确性。当温度转换命令发出后,经转换所得的温度值以二字节补码形式存放在此存储器的第1和第2个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,其中高5位是符号位,中间7位是整数位,最低4位是小数位。DS18B20最大的特点是单总线数据传输方式,因此对读写的数据位有着严格的时序要求。时序包括:初始化时序、读时序、写时序。每一次命令和数据的传输都是从单片机启动写时序开始,如果要求DS18B20回送数据,在进行写命令后,单片机需启动读时序完成数据接收。数据和命令的传输都是低位在先。DS18B20的时序及命令请参考文献[1]。2.3LCM1602LCM1602是2行×16个字符的字符型LCD显示器,它由32个字符点阵块组成,每个字符点阵块由5×7或5×10个点阵组成,可以显示ASCII码表中的所有可视的字符。它内置了字符产生器ROM(CharacterGeneratorROM,CGROM)、字符产生器RAM(CharacterGeneratorRAM,CGRAM)和显示数据RAM(DataDisplayRAM,DDRAM)。CGROM中内置了192个常用字符的字模,CGRAM包含8个字节的RAM,可存放用户自定义的字符,DDRAM就是用来寄存待显示的字符代码。DDRAM地址与显示位置的对应关系以及LCM1602的指令与读写时序可参考文献[2]。2.4外部存储模块外部存储模块采用美国ATMEL公司生产的低功耗CMOS型E2PROM器件AT24C02B,它内含256×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)、抗干扰能力强、数据不易丢失、体积小等特点。它采用了I2C总线规程,使主/从机双向通信。主机通过SCL引脚产生串行时钟信号并发出控制字,控制总线数据传送的开始、方向和停止。无论是主机还是从机,接收到一个字节后必须发出一个确认信号。AT24C02B占用很少的资源和I/O线,并且支持在线编程,数据实时存取十分方便。AT24C02B的读写时序及控制字见参考文献[3]。2.5温度上下限设置模块温度上下限设置模块包括四个按键:(1)模式切换键:进行模式之间的切换,模式包括设置温度上限模式、设置温度下限模式,每次按下该键就在这两种模式之间切换。(2)温度上下限增加键:增加温度上下限的值。(3)温度上下限减少键:减少温度上下限的值。(4)温控开关键:是温控与非温控之间的切换键。它用于设置是否进行温度控制即是否让越界的温度值触发加热器或致冷器的启动。2.6控制电路模块该部分电路有光耦合元件4N25、继电器、三极管,若干电阻等构成。这部分电路的主要作用是光电隔离,即消除后级电机对前级单片机的影响。三极管使用的是9013,9013是NPN型的,把其集电极接+5V电压,射极接继电器。当单片机引脚给出低电位时,4N25内部的发光二极管亮,使其内部的三极管导通,继而通过第4引脚上的10K电阻分得电压。当4N25给其基极提供足够的电压时9013导通。继电器的常开开关闭合,电机上电工作。第3章系统软件设计主程序调用了5个子程序,分别是LCD显示程序、按键扫描及处理程序、温度采集程序、温度越界判决程序、AT24C02B读写程序。LCD显示程序,用于温度等数据的实时显示;按键扫描及处理程序,实现按键识别、按键输入及相关处理;温度采集程序负责把DS18B20所采集的现场温度读入到指定的数组中;温度越界判决程序,对现场温度与设定的温度上下限进行比较,若温度越界,并且当温控开关处于开启状态时,启动加热器或致冷器工作;AT24C02B读写程序,存储和调用设定的温度上下限值。图3为系统主程序与按键扫描程序的流程图。有关温度采集的程序及流程图可参考文献[4]。第4章试验结果及结论PROTEUS仿真:按照图2所示电路原理图,在Proteus里面建立元器件连接关系。根据设计功能要求在KeilμVision3环境下编写C语言程序,并编译连接生成十六进制的hex文件,把此文件加载到单片机,就可以进行Proteus仿真了。图4是当温度低于所设定的下限值并且温控开关处于激活状态时,绿色二极管亮,同时加热器启动的仿真结果。第5章结束语本文详细讲述了系统设计方案,并给出了相关程序流程。本设计应用性比较强,可以应用在仓库温度、大棚温度、机房温度等的监控。另外,如果把本设计方案扩展为多点温度控制,加上上位机,则可以实现远程温度监控系统,将具有更大的应用价值。本文的创新点在于详细设计了基于单片机AT89C51的温度监控系统,进行了Proteus仿真,所设计程序已经在硬件平台上成功运行.此系统可广泛用于温度在DS18B20测温范围之内的场合,有良好的应用前景。附录图4源程序ORG??00H????START:ANL??P1,#00H;显示00????JB????P3.4?,$?;T0=0?有键按下?????CALL??DELAY1?;消除抖动????JNB???P3.4?,$;T0=1?放下?????MOV???R0???,#00;计温指针初值????L1:?MOV??A??,?R0?;计温指针载入ACC????MOV??P1???,?A?;输出至P1显示????MOV??R5?,?#10?;延时1秒????A1:MOV??R6?,?#200????D1:MOV??R7?,?#248??;0.5毫秒????JNB??P3.4 ?,L2??;第2次按下T0?????DJNZ??R7,$????DJNZ??R6,D1????DJNZ??R5,A1????INC???A????DA????A????MOV???R0?,?A????JMP???L1????L2:CALL??DELAY1??;第2次按消除抖动????JB????P3.4?,L3?;放开了没?是则;跳至L3停止????JMP???L2????L3:?MOV???A???,R0????CALL??CHANGE????MOV???31H?,?A??;下限温度存入31H????JB???P3.5??,$???;T1=0?有键按下?????CALL??DELAY1????;消除抖动????JNB??P3.5??,$???;T1=1?放开?????MOV??R0??,#00??;计温指针初值????L4:MOV??A???,RO???;计温指针载入ACC????MOV??P1??,?A???;显示00????MOV??R5??,#10?;延时1秒????A2:MOV??R6??,#200????D2:MOV??R7??,#248?;0.5毫秒????JNB??P3.5??,L5??;第二次按下T1?????DJNZ??R7?,$????DJNZ??R6?,D2????DJNZ??R5?,?A2????ADD???A??,?#01H????DA????A????MOV???R0?,?A????JMP???L4????L5:CALL??DELAY1??;第2次按消除抖动????JB????P3.5?,L6?;放开了?是则跳至L6????JMP???L5????L6:MOV???A,?RO?;????CALL??CHANGE????MOV???30H ,A?;上限温度存入30H????DELAY1:MOV??R6?,#60?;30毫秒????D3:MOV???R7?,?#248????DJNZ??R7?,?$????DJNZ??R6?,?D3????RET????CHANGE:MOV?B?,#5????MUL???AB????JNO????D4????SETB??C????D4:RRC???A????RET????MOV???32H?,#0FFH?;32H旧温度寄存;器初值????AAA:MOVX?@R0?,?A;使BUS为高阻抗;并令ADC0804开始转换????WAIT:JB??P2.0??,ADC?;检测转换完成否????JMP??WAIT????ADC:MOVX??A?,@RO?;将转换好的值送入;累加器????MOV??33H?,A??;将现在温度值存入33H????CLR??C??????;C=0????SUBB??A?,32H????JC???TDOWN??;C=0取入值较大,表示;温度上升,C=1表示下降????TUP:MOV??A,?33H?;将现在温度值存入A????CLR???C????SUBB??A??,30H?;与上限温度作比较????JC???LOOP
本文标题:单片机温度控制
链接地址:https://www.777doc.com/doc-5067894 .html