当前位置:文档之家› 自动温度控制系统的设计

自动温度控制系统的设计

上海电力学院电子系统设计实验报告题目:自动温度控制系统的设计院系:电子和信息工程学院专业:电子科学和技术班级:2013142班学号:20132481姓名:当当当自动温度控制系统的设计1、任务要求以单片机为核心控制器件,通过温度传感器进行温度测量,设置温度的上下限。

当温度超出正常范围,则由指示灯和蜂鸣器报警提示。

当温度低于下限值时,要求通风电机停转,当温度高于上限值时,通风电机转动。

2、设计方案本设计是对温度进行实时监测和控制,设计的温度控制系统实现了基本的温度控制功能:设定需求的温度为30~60摄氏度,当温度低于设定温度下限30摄氏度时,指示灯和蜂鸣器报警提示并且通风电机停转,使温度上升。

当温度高于设定温度上限60摄氏度时,指示灯和蜂鸣器报警提示且通风电机转动,使温度下降。

当温度达到设定温度界限时,通风机停止工作。

为了实现以上功能首先完成了系统的整体设计,硬件以及软件的设计。

在硬件上采用了由DS18B20温度传感器采集温度,送入单片机和设定温度进行对比处理,再通过显示器进行显示使其很直观的了解当前的状态。

在软件设计上完成了系统的各个功能程序以及流程图包括系统程序主要包括主程序,读出温度子程序,复位应答子程序,写入子程序等,并且采用和C51系列单片机相对应的51汇编语言和结构化程序设计方法进行软件编程。

总体设计框图3.硬件电路设计3.1最小系统3.1.1 AT89C51的单片机采用STC89C51芯片作为硬件核心。

STC89C51内部具有8KB ROM 存储空间,512字节数据存储空间,带有2K字节的EEPROM存储空间,和MCS-51系列单片机完全兼容,STC89C51可以通过串口下载。

引脚介绍①主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源GND(Pin20):接地线②外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端③控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。

ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。

④可编程输入/输出引脚(32根)STC89C51单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。

P0口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.73.1.2 复位电路当在STC89C51单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执行复位操作,按键手动复位有电平方式和脉冲方式两种。

其中电平复位是通过RST端经过电阻和电源VCC接通而实现的。

3.1.3振荡电路本次温度控制报警器设计所选用的晶体振荡器频率为12Mhz,所选用电容大小为22pF。

通过计算可得单片机的工作周期为:(1÷12M)×12=1us。

3.2 DS18B20传感器介绍3.2.1 DS18B20特点1)采用DALLAS公司独特的单线接口方式:DS18B20和微处理器连接时仅需要一条口线即可实现微处理器和DS18B20的双向通讯;(2)在使用中不需要任何外围元件;(3)可用数据线供电,供电电压范围:+3.0V~+5.5V;(4)测温范围:-55~+125℃。

固有测温分辨率为0.5℃。

当在-10℃~+85℃范围内,可确保测量误差不超过0.5℃,在-55~+125℃范围内,测量误差也不超过2℃;(5)通过编程可实现9~12位的数字读数方式;(6)用户可自设定非易失性的报警上下限值;(7)支持多点的组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温;(8)负压特性,即具有电源反接保护电路。

当电源电压的极性反接时,能保护DS18B20不会因发热而烧毁,但此时芯片无法正常工作;(9)DS18B20的转换速率比较高,进行9位的温度值转换只需93.75ms;(10)适配各种单片机或系统;(11)内含64位激光修正的只读存储ROM,扣除8位产品系列号和8位循环冗余校验码(CRC)之后,产品序号占48位。

出厂前产品序号存入其ROM中。

在构成大型温控系统时,允许在单线总线上挂接多片DS18B20。

3.2.2 温度采集电路传感器数据采集电路主要是DS18B20温度传感器和单片机的接口电路。

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。

另一种是寄生电源供电方式考虑到实际使用中寄生电源供电方式适应能力差且易损坏,此处采用电源供电方式,I/O口接单片机的P2.7口。

3.2.3 DS18B20控制方法DS18B20有六条控制命令:温度转换44H 启动DS18B20进行温度转换读暂存器BEH 读暂存器9个字节内容写暂存器4EH 将数据写入暂存器的TH、TL字节复制暂存器48H 把暂存器的TH、TL字节写到E2RAM中重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节读电源供电方式B4H 启动DS18B20发送电源供电方式的信号给主CPU3.3 蜂鸣器、发光二极管报警电路利用有源蜂鸣器实施报警输出,运用直流供电。

当所测温度超过或者低于预期所设计的温度时,数据口相应提高高电平,报警输出。

而另一端则直接和单片机的P2.7端口相连,报警的同时发光二极管亮。

3.4按键电路按键电路的一端接地,一端和AT89C51的P3.1、P3.2和P3.3相应端口相连。

三个按键的功能分别能进行加减和移位的功能,进行温度上下限的设置64 位 ROM 和 单 线 接 口存储器与控制逻辑高速缓存温度传感器 8位CRC 发生器 配置寄存器 高温触发器 低温触发器3.5显示模块液晶显示器件(LCD)独具的低压、微功耗特性使他在单片机系统中特得到了广泛的使用,常用的液晶显示模块分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块,其中图形液晶模块在我国使用较为广泛,因为汉字不能像西文字符那样用字符模块即可显示,要想显示汉字必须用图形模块。

本课设所选择的LCD是AMPIRE128×64的汉字图形型液晶显示模块,可显示汉字及图形,图形液晶显示显示器接口如图所示。

整个屏幕分左、右两个屏,每个半屏右8页,每页有8行,注意数据是竖行排列。

显示一个字要16*16点,全屏有128*64个点,故可显示32个中文汉字。

每两页显示一行汉字,可显示4行汉字,每行8个汉字,共32个汉字。

而显示数据需要16*8个点,可显示数据是汉字的两陪。

屏幕是通过CS1、CS2两信号来控制的,不同的组合方式所选的屏幕是不同的,对应关系如下。

4.软件设计一个使用系统要完成各项功能,首先必须有较完善的硬件作保证,同时还必须得到相应设计合理的软件的支持。

尤其是微机使用高速发展的今天,许多由硬件完成的工作,都可通过软件编程而代替。

甚至有些必须采用很复杂的硬件电路才能完成的工作,用软件编程有时会变得很简单,如数字滤波,信号处理等。

因此充分利用其内部丰富的硬件资源和软件资源,采用C语言和结构化程序设计方法进行软件编程。

4.1 主程序图4.2 读出温度子程序void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于480usDQ = 1; //拉高总线delay_18B20(14);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay_18B20(20);}上述程序中将DQ拉低,精确延时,再将DQ拉高,通过判断x的值来确定是否已经初始化完成。

void ReadTemp(void){unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(100); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);a=ReadOneChar(); //读取温度值低位b=ReadOneChar(); //读取温度值高位temp_value = b*256 + a;DECIMAL=DECP[a&0X0F];SIGN=b/16;if(SIGN){temp_value=~temp_value*0.0625;DECIMAL=DECN[a&0X0F];if(DECIMAL==0)temp_value+=1;}else{temp_value*=0.0625;}temp_value *= 10;temp_value += DECIMAL;}这段程序中,主要作用是在确保了DS18B20的工作状态后,从DS18B20的温度寄存器中提取出温度值的高位和低位,再将两个字节合并为一个字节,经过处理后从输出端输出。

4.3 温度数据显示子程序void DisPlay16(unsigned char line, unsigned char column , unsigned char LorR , unsigned char addr){unsigned char i;unsigned char j;cs1 = 1;cs2 = 1;if(LorR == 0){cs1 = 0;}else{cs2 = 0;}for(i=0; i<2 ;i++){for(j=0; j<16 ;j++){SetLine(line + i);SetColumn(column + j);WriteByte(Hzk[addr*32 + j + 16*i]);}}cs1 = 1;cs2 = 1;}void DisPlay16_not(unsigned char line, unsigned char column , unsigned char LorR , unsigned char addr){unsigned char i;unsigned char j;cs1 = 1;cs2 = 1;if(LorR == 0){cs1 = 0;}else{cs2 = 0;}for(i=0; i<2 ;i++){for(j=0; j<16 ;j++){SetLine(line + i);SetColumn(column + j);WriteByte( ~(Hzk[addr*32 + j + 16*i]) );}}cs1 = 1;cs2 = 1;}void DisPlay8(unsigned char line, unsigned char column , unsigned char LorR , unsigned char addr){unsigned char i;unsigned char j;cs1 = 1;cs2 = 1;if(LorR == 0){cs1 = 0;}else{cs2 = 0;}for(i=0; i<2 ;i++){for(j=0; j<8 ;j++){SetLine(line + i);SetColumn(column + j);WriteByte(Ezk[addr*16 + j + 8*i]);}}cs1 = 1;cs2 = 1;}void DisPlay8_not(unsigned char line, unsigned char column , unsigned char LorR , unsigned char addr){unsigned char i;unsigned char j;cs1 = 1;cs2 = 1;if(LorR == 0){cs1 = 0;}else{cs2 = 0;}for(i=0; i<2 ;i++){for(j=0; j<8 ;j++){SetLine(line + i);SetColumn(column + j);WriteByte( ~(Ezk[addr*16 + j + 8*i]) );}}cs1 = 1;cs2 = 1;}这段程序的作用在于,在接收到温度信息后,通过转化,变成能在LCD上显示的字符。

相关主题