配色: 字号:
基于单片机的智能温度自动控制系统的设计
2012-05-04 | 阅:  转:  |  分享 
  
目录



1设计任务与要求 1

2方案设计 2

2.1温度测量部分方案 2

2.2主控制部分方案 3

3硬件电路设计 8

3.1键盘单元 8

3.2温度控制及超温和超温警报单元 10

3.3温度测试单元 11

3.4温度控制器件电路 11

3.5七段数码管显示单元 12

3.6接口通讯单元 14

4电源输入部分 16

5程序设计 17

5.1程序结构分析 17

5.2主程序 18

5.3程序代码(详见附录程序清单) 18

6测设分析 19

7结论 20

8附录 21

8.1使用说明 21

8.2程序清单 21

9参考文献 30













1设计任务与要求

以单片机为核心温度控制系统温度30℃---60℃。选择一种温度,并以数字信号的方式传送给单片机硬件部分包括:温度检测电路、温度控制电路、通讯电路。软件设计部分主要模块有:显示、键盘扫描及按键处理、温度信号处理、继电器控制、单片机与PC机串口通讯。

DS18B20是DALLAS公司生产的一线式数字温度传感器,它具有微型化、低功耗、高性能抗干扰能力、强易配处理器等优点,特别适合用于构成多点温度测控系统,可直接温度转化成串行数字信号(按9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片,它具有三引脚TO-92小体积封装形式,温度测量范围-55~+125,可编程为9~12位A/D转换精度,测温分辨率可达00625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,业可采用寄生电源方式产生,多个DS18B20可以并联到三根或者两根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。从而可以看出DS18B20非常用于远距离多点温度检测系统

图2-1温度芯片DS18B20























2.2主控制部分方案

AT89S51是一个低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S51具有如下特点:40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。主要功能特性:兼容MCS-51指令系统4k可反复擦写(>1000次)ISPFlashROM32个双向I/O口4.3-5.5V工作电压2个16位可编程定时/计数器时钟频率0-33MHz全双工UART串行中断口线128x8bit内部RAM2个外部中断源低功耗空闲和省电模式中断唤醒省电模式3级加密位看门狗(WDT)电路软件设置空闲和省电功能灵活的ISP字节和分页编程双数据寄存器指针

图2-2AUXR辅助寄存器

双时钟指针寄存器:为方便地访问内部和外部数据存储器,提供了两个16位数据指针寄存储器:PD0位于SFR区块中的地址82H、83H和DP1位于地址84H、85H,当SFR中的位DPS=0时选择DP0,而DPS=1时选择DP1。在使用前初始化DPS。



图2-3双时钟指针寄存器

电源空闲标志:电源空闲标志(POF)在特殊功能寄存储器SFR中PCON的第4位(PCON.4),电源打开时POF置“1”,它可由软件设置睡眠状态并不为复位所影响。

存储器结构:MCS-51单片机内核采用程序存储器和数据存储器空间分开的结构,均具有64KB外部程序和数据的寻址空间。

程序存储器:如果EA引脚接地(GND),全部程序均执行外部存储器。在AT89S51,假如接至Vcc(电源+),程序首先执行从地址0000H-0FFFH(4KB)内部程序存储器,再执行地址为1000H-FFFFH(60KB)的外部程序存储器。

数据存储器:在AT89S51的具有128字节的内部RAM,这128字节可利用直接或间接寻址方式访问,堆栈操作可利用间接寻址方式进行,128字节均可设置为堆栈区空间。

看门狗定时器(WDT):WDT是为了解决CPU程序运行时可能进入混乱或死循环而设置,它由一个14bit计数器和看狗复位SFR(WDTRST)构成。外部复位时,WDT默认为关闭状态,要打开WDT,必按顺序将01H和0E1H写到WDTRST寄存器,当启动了WDT,它会随晶体振荡器在每个机器周期计数,除硬件复位或WDT溢出复位外没有其它方法关闭WDT,当WDT溢出,将使RST引脚输出高电平的复位脉冲。引脚图详见图2-4





图2-4AT89S51单片机引脚图

















3硬件电路设计

3.1键盘单元

单片机应用系统中除了复位按键有专门的复位电路,以及专一的复位功能外,其它的按键或键盘都是以开关状态来设置控制功能或输入数据。

键开关状态的可靠输入:为了去抖动我采用软件方法,它是在检测到有键按下时,执行一个10ms的延时程序后,再确认该键电平是否仍保持闭合状态电平,如保持闭合状态电平则确认为真正键按下状态,从而消除了抖动影响

在这种行列式矩阵键盘非编码键盘的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。对键的识别通常有两种方法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。

对照图示的44键盘,说明线反转法工作原理。首先辨别键盘中有无键按下,有单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。方法是:向行线输出全扫描字00H,把全部列线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根行线电平被拉至低电平从而使行线不全为1。判断键盘中哪一个键被按下是通过将列线逐列置低电平后,检查行输入状态来实现的。方法是:依次给列线送低电平,然后查所有行线状态,如果全为1,则所按下的键不在此列;如果不全为1,则所按下的键必在此列,而且是在与零电平行线相交的交点上的那个键。

键盘共有16个按键,用于方便设定温度。



…,数字按键,输入数字0----9;



,设置的确认,修改设置温度时进行确认;





设置的清除,修改设置温度时进行删除;



开启电源







关闭电源





显示及设置转换到温度点1,按此按键后,显示预设置温度的数码管

闪烁;



显示及设置转换到温度点2,按此按键后,显示预设置温度的数码管

闪烁;











表3-1键盘的按键分布

P2.0 0 1 2 3 P2.1 4 5 6 7 P2.2 8 9 F1 F2 P2.3 清除 开启 关闭 确定 P2.4 P2.5 P2.6 P2.7



















































3.2温度控制及超温和超温警报单元

当采集的温度经处理后超过规定温度上限时,单片机通过P1.4输出控制信号驱动三极管D1,使继电器K1开启降温设备():当采集的温度经处理后低于设定温度下限时,单片机通过P1.5输出控制信号驱动三极管D2,使继电器K2开启升温设备()。当由于环境温度变化太剧烈或由于加热或降温设备出现故障,或者温度传感头出现故障导致在一段时间内不能将环境温度调整到规定的温度限内的时候,单片机通过三极管驱动扬声器发出警笛声。具体电路连接如图所示。

图3-1具体电路连接

图3-2单片机控制信号

其原理是:当继电器突然断电时,继电器产生很大的反向电流。二极管的作用是将反向电流分流,使流过三级管8050的电流比较小,达到保护三极管8050的作用。



























3.5七段数码管显示单元

本部分电路主要使用七段数码管和移位寄存器芯片74LS164。单片机通过I2C总线将要显示的数据信号传送到移位寄存器芯片74LS164寄存,再由移位寄存器控制数码管的显示,从而实现移位寄存点亮数码管显示。由于单片机的时钟频率达到12M,移位寄存器的移位速度相当快,所以我们根本看不到数据是一位一位传输的。从人类视觉的角度上看,就仿佛是全部数码管同时显示的一样。具体见实际连线图如图3-3。

当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。串行数据输入端(A,B)可控制数据。当A、B任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下Q0为低电平。当A、B有一个为高电平,则另一个就允许输入数据,并在CLOCK上升沿作用下决定Q0的状态,逻辑封装图如图3-3:



图3-3逻辑封装图

引出端符号:CLOCK时钟输入端;CLEAR同步清除输入端(低电平有效);A,B串行数据输入端;QA-QH输出端。真值表:表3-2

表3-2真值表





图3-4实际连线图

















3.6接口通讯单元

max232资料简介该产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。由于电脑串口rs232电平是-10v+10v,而一般的单片机应用系统的信号电压是ttl电平0+5v,max232就是用来进行电平转换的,该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。

该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成3-VTTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。

主要特点1、单5V电源工作

2、LinBiCMOSTM工艺技术

3、两个驱动器及两个接收器

4、±30V输入电平

5、低电源电流:典型值是8mA

6、符合甚至优于ANSI标准EIA/TIA-232-E及ITU推荐标准V.28

7、ESD保护大于MIL-STD-883(方法3015)标准的2000V51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接

图3-5通讯接口连线图

























4电源输入部分

控制系统主控制部分电源需要用5V直流电源供电,其电路如图4-1所示,把频率为50Hz、有效值为220V的单相交流电压转换为幅值稳定的5V直流电压。其主要原理是把单相交流电经过电源变压器、整流电路、滤波电路、稳压电路转换成稳定的直流电压。

由于输入电压为电网电压,一般情况下所需直流电压的数值和电网电压的有效值相差较大,因而电源变压器的作用显现出来起到降压作用。降压后还是交流电压,所以需要整流电路把交流电压转换成直流电压。由于经整流电路整流后的电压含有较大的交流分量,会影响到负载电路的正常工作。需通过低通滤波电路滤波,使输出电压平滑。稳压电路的功能是使输出直流电压基本不受电网电压波动和负载电阻变化的影响,从而获得稳定性足够高的直流电压。本电路使用集成稳压芯片7805解决了电源稳压问题。



图4-1电源部分连线图















5程序设计

5.1程序结构分析

主程序调用了5个子程序,分别是数码管显示程序、键盘扫描及按键处理程序、温度信号处理程序、继电器控制程序、单片机与PC机串口通讯程序。

键盘扫描电路及按键处理程序:实现键盘的输入按键的识别及进入相应的程序。

温度信号处理程序:对温度芯片送过来的数据进行处理,进行判断和显示。

数码管显示程序:向数码的显示送数,控制系统的显示部分。

继电器控制程序:控制继电器动作

串口通讯程序:实现PC机与单片机通讯,将温度数据传送给PC机。

图5-1程序结构图























5.2主程序



图5-2主程序结构图

程序开始的时候先设置初始化,然后就控制数码管显示当前温度。接着就判断F1、F2按键是否被按下。按下F1进入温度控制点1的程序、按下F2进入温度控制点2的程序。程序控制设置温度的两个数码管闪烁的,此时键盘输入有效。有按键按下的时候进入按键处理程序。按下“确定”按键后,程序进入判断程序和继电器控制程序。继电器动作后,程序回到显示当前程序,并开始循环。

5.3程序代码(详见附录程序清单)











6测设分析

1、测试环境

环境温度28摄氏度,室内面积20平方米

测试仪器:数字万用表,温度计0----100摄氏度

2、测试方法

使系统运行,采用温度计同时测量室内度变化情况,得出系统测量的温度。

3、测试结果

设定温度由0摄氏度到40摄氏度

标定温差<=1摄氏度调节时间15s(具体视现场情况)

静态误差<=0.5摄氏度最大超调量1摄氏度

4、通过测试分析,对于实际内的温度控制,可以再提出以下2点方法增加传感器个数,对各个温度传感器采集的数据进行求算术平均,可得到较为准确的温度值。对实际内的温度控制,可采用功率较大的电炉,并且通过风扇对箱内温度进行充分搅和,降温设备可采用空气压缩机等制冷设备。

通过实验测试和分析,发现虽然传感器的温度采集精度最高可得到0.06,但测试得到的数据最小间隔为0.03。通过分析,当对浮点数求平均处理时,遇到同一时刻两个传感头采集的温度相差不大,使0.06时求出平均温度变为0.03为了解该数据是否真实,可采用一个高精度的数字温度计测试,发现读出的值与其基本一致,由此推断如果在同一时间增加采集温度的个数,则可以进一步提高温度的精度。在生产和日常生活中,对温度控制系统的要求,主要是保证温度在一定温度范围内变化,稳定性好,不振荡,对系统的快速性要求不高。简单分析了单片机温度控制系统设计过程及实现方法。本系统的测温范围为0℃~温度检测系统根据用户设定的温度范围完成一定范围的温度控制。







8.2程序清单

主程序:

ORG0000H;DS18B20.ASMDS18SLEQU41H;用于保存读出温度的低8位DS18SHEQU40H;用于保存读出温度的高8位DS18FIGEQU8H;是否检测到DS18B20标志位A_BIT1EQU31H;数码管个位数存放内存位置B_BIT1EQU32H;数码管十位数存放内存位置D_BIT1EQU35H?;数码管百位数存放内存位置DS18CD1EQU42H;DS18CD1-DS18CD8暂存64位ROMDS18CD2EQU43H;从低到高DS18CD3EQU44HDS18CD4EQU45HDS18CD5EQU46HDS18CD6EQU47HDS18CD7EQU48HDS18CD8EQU49HDS1864BEQU4AHDS18ADSEQU4BHDS18DQEQUP1.0;30H,31H,32H,33H:

X个位十位XMOD7:MOVSP,#60HLCALLGET_TEMPER;调用读温度子程序LCALLREADCODEAJMPMOD7

INIT_1820:???;DS18B20初始化SETBDS18DQCLRDS18DQ?;延时,500US低MCMOVR7,#250DJNZR7,$MOVR7,#150DJNZR7,$SETBDS18DQ??;释放总线LCALLDELAY60US??;13-60US的等待时间MOVR6,#4SETDSDQ:LCALLDELAY60USJNBDS18DQ,SETDSDQFH;60-240US内是否有返回信号,为0跳DJNZR6,SETDSDQMOVR7,#250DJNZR7,$CLRDS18FIGRETSETDSDQFH:SETBDS18FIGMOVR7,#250??DJNZR7,$MOVR7,#100DJNZR7,$RET;

数据处理TEMP0:INCAAJMPTEMP1TEMPCOV:MOVA,DS18SL;数据处理子程序

TEMPCOVMOVB,#16DIVABJBB.3,TEMP0TEMP1:MOV34H,A;将DS18SL的高四位右移四位,存入

34H中(温度值)MOVA,B;将DS18SL的低四位X10/16得小数后

一位数.MOVB,#10MULABMOVB,#16DIVABMOV30H,A;将小数后一位数.存入30H中MOVA,DS18SH;DS18SH中存放高8位数,权

重16MOVB,#16MULABADDA,34H;34H中存入温度值的整数部分MOVB,#10DIVABMOV31H,B;个位存入31H中MOVB,#10;DIVAB;MOV32H,B;十位存入32H中MOVB,#10;DIVAB;MOV35H,B;百位存入33H中MOVA,DS18SHMOV33H,#10H;JBACC.7,EXIT7MOV33H,#00HEXIT7:RET

GET_TEMPER:;读出转换后的温度值,并显示SETBDS18DQLCALLINIT_1820;先复位DS18B20JBDS18FIG,TSS2RET;判断DS1820是否存在?若DS18B20不存在则返TSS2:MOVDS18ADS,#0DS18JX:LCALLDS18CODPMOVA,DS18ADSADDA,#9MOVDS18ADS,ACJNEA,#63,DS18JXRETDS18CODP:LCALLMRCOVT;转换指定的DS18B20的温度LCALLMRRDTEDP;显示温度RETTEMP:LCALLINIT_1820JBDS18FIG,NEXT4RETNEXT4:MOVDS18ADS,#9MOVA,#0CCH;SKIPROMLCALLWRITE_1820MOVA,#44H;温度转换命令LCALLWRITE_1820LCALLDELAY1SLCALLMRRDTEDPRET;写DS18B20的子程序(有具体的时序要求)WRITE_1820:????;写DS18B20MOVR5,#8DS18JXWE:SETBDS18DQ??;初始化CLRDS18DQCLRDS18DQMOVR7,#5DJNZR7,$;拉低15US内,写入数据CLRCRRCAMOVDS18DQ,CLCALLDELAY60US;持续60USSETBDS18DQ??;写完一个位DJNZR5,DS18JXWERETREAD_1820_CODE:??;读取CODE64位??MOVR4,#8??;读8次数??MOVR1,#DS18CD1??;低位地址存在R1DS18JXRD3:MOVR5,#8??;8位数据DS18JXRD2:SETBDS18DQ??CLRDS18DQ??;前两句完成初始化NOPNOP???;延时至少1USSETBDS18DQ??;上升沿,并在,15US内读数MOVR7,#5DJNZR7,$MOVC,DS18DQRRCALCALLDELAY60US??;读时序,最少60USDJNZR5,DS18JXRD2MOV@R1,AINCR1DJNZR4,DS18JXRD3SETBDS18DQRET;读DS18B20的程序,从DS18B20中读出两个字节的温度数

据READ_18200:??MOVR4,#2??;读两次数??MOVR1,#DS18SL??;低位地址存在R1DS18JXRD1:MOVR5,#8??;8位数据DS18JXRD:SETBDS18DQ??CLRDS18DQ??;前两句完成初始化NOPNOP???;延时至少1USSETBDS18DQ??;上升沿,并在,15US内读数MOVR7,#5DJNZR7,$MOVC,DS18DQRRCALCALLDELAY60US??;读时序,最少60USDJNZR5,DS18JXRDMOV@R1,ADECR1DJNZR4,DS18JXRD1SETBDS18DQRETREAD_1820_1:???;读取1位SETBDS18DQ????????CLRDS18DQCLRDS18DQCLRDS18DQSETBDS18DQMOVR7,#5DJNZR7,$JBDS18DQ,WEFHLCALLDELAY10MSWEFH:LCALLDELAY60USRETREADCODE:???;读取64位ROM,并显示出来SETBDS18DQLCALLINIT_1820JBDS18FIG,NEXTRETNEXT:MOVA,#33HLCALLWRITE_1820LCALLREAD_1820_CODELCALLDISPLAYCDRETDS1864SEN:???;送出64个位的数据MOVR4,#8MOVDPTR,#DS18TABDS1864SEN1:MOVA,DS1864BMOVCA,@A+DPTRLCALLWRITE_1820INCDS1864BDJNZR4,DS1864SEN1RETMATCHROM:LCALLINIT_1820MOVA,#55H;MARCHROMLCALLWRITE_1820MOVDS1864B,DS18ADSLCALLDS1864SENRETMRCOVT:???;匹配ROM并发出温度转换命令LCALLMATCHROMMOVA,#44H;发出温度转换命令LCALLWRITE_1820LCALLDELAY1SRETMRRDTEDP:??;匹配ROM并显示转换温度LCALLINIT_1820LCALLMATCHROMMOVA,#0BEH;发出读取命令LCALLWRITE_1820LCALLREAD_18200LCALLTEMPCOVLCALLDISPLAY;调用数码管显示子程序RETJNZLK1

AJMPCH_KEY

LK1:LCALLT12MS

ACALLKS

JNZLK2

RET

LK2:NOP

LCALLSBIE;按键识别子程序

MOVBUFF,A;送缓冲区以识别是数字键还是功能键?

LCALLCH_KF;判断按键功能。

JBFLAG1,KEY_FUN;标志为1,则为功能键?超温报警程序:DIV:???MOV?R2,#08H;1kz持续时间?DIV1:MOV?R3,#0FAH?DIV2:CPL?P3.3;输出1khz方波????LCALL?D5ms;调用延时程序1?????DJNZR3,DLV2;持续1秒?????DJNZ?R2,DIV1?????MOV?R2,#10H;2khz持续时间?DIV3:MOV?R3,#0FAH?DI4:CPL?P3.3;输出2khz方波????LCALL?D25ms;调用延时程序2????DJNZ?R3,DIV4???DJNZ?R2,DIV3?????SIMP?DIV;反复循环?D5MS:MOV?R7,#0FFH;延时子程序1?LOOP:NOP?????NOP?????DJNZ?R7,LOOP?????RET?D25MS:MOVR6,#0FFH;延时子程序2?LIN:DJNZ?R6,LIN?RET继电器控制程序:START1:MOV?????SP,#60HJD:?????CPL?????P2.6???????;P2.6取反????????LCALL???DELAY???????;延时???????NOP????????SJMP????JDDELAY:??MOV?????R0,#0AH??????;延时子程序(1秒)DELAY33:?MOV?????R1,#00HDELAY44:?MOV?????R2,#0B2H????????DJNZ????R2,$????????DJNZ????R1,DELAY44????????DJNZ????R0,DELAY33LJMP?START1???????RET1997;36~40

6邵惠鹤.工业过程高级控制.上海:上海交通大学出版社,1997;58—62,78—101

7胡寿松.自动控制原理.北京:国防工业出版社,2000;103—124

8刘伯春.智能PID调节器的设计及应用.电子自动化,1995;(3):20~25

9KatsuhikoOgata.ModenControlEngineering.Publishinghouseofelectronicsindustry,2000:196—202

10周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京:航空航天

大学出版社,2006.P321~P326

11王忠飞,胥芳.MCS-51单片机原理及嵌入式系统应用[M].西安:西安电子科技大学出

版社,2007.P268-273

12刘国钧,陈绍业,王凤翥.图书馆目录.第1版.北京:高等教育出版社,1957

傅承义,陈运泰,祁贵中.地球物理学基础.北京:科学出版社,1985,447华罗庚,王元.论一致分布与近似分析.中国科学,1973(4):339~357

张筑生.微分半动力系统的不变集:[学位论文],北京:数学系统学研究所,1983Microchip24C01B/02B8位PIC?单片机产品手册[ED/OL],http://www.chuandong.com/publish/data/2007/2/data_14_27926.html.

17赵娜,赵刚,于珍珠等.基于51单片机的温度测量系统[J].微计算机信息,2007,1-2:146-148。

18BorkoH,BernierCL.Indexingconceptsandmethods.NewYork:Academic



















单片机/微机接口课程设计说明书











13































接上温度芯片,连接好电路,接上电源,打开开关





确认温度控制箱上的开关全部打到关的状态



按F1或F2进行温度点1或温度点2的设定



系统开始工作,直至工作结束,关闭电源



9



0



确认



清除



开启



关闭



F1





F2















献花(0)
+1
(本文系朽木轩首藏)