在某些工业生产过程中,如恒温炉、仓库储藏、花卉种植、小型温室等领域都对温度有着严格的要求,需要对其加以检测和控制。传统的温度测量方法是将温度传感器输出的模拟信号放大后送至远端A/D转换器,最后单片机对A/D转换后的数据进行分析处理。这种方法的缺点是模拟信号在传输的过程中存在损耗并且容易受到外界的干扰,导致测量的温度精度不高。
文中以STC89C52RC单片机为控制核心,利用美国Dallas公司最新推出的单总线数字温度传感器DSl8820测量温度,单片机处理后对温度进行控制,并将温度显示在LCDl602上,还可通过按键设置温度上下限值实现温度超限报警等功能。
1 系统的组成和工作原理
多功能温度控制系统的结构如图1所示,系统由六部分组成:控制核心部分、温度数据采集部分、加热装置控制部分、液晶显示部分、按键输入部分和报警提示部分。单片机启动温度采集电路完成温度的一次转换,然后读出转换后的数字量并转化成当前的温度呈现在显示模块中,并将当前的温度与通过按键输入电路设定的保持恒温度数进行比较,以实现温度的控制。还可以通过按键设置温度的上下限值以实现超温或低温报警提示功能。本系统的设计目标要对温度的控制精度达到0.1℃。
1.1 报警电路
报警电路采用蜂鸣器作为发声装置,当温度高于设定的上限值或低于下限值,给蜂鸣器送周期为1s,占空比为50%的方波,报警的时间可以持续1分钟或等待按键解除报警,这由软件控制实现。
1.2 按键电路
采用2×3的小键盘,键盘的识别可以采用两种方法:行扫描法和行反转法。两种方法都要注意消除按键的抖动。文中采用行扫描法并做成子程序,出口参数为按键的键值。定义键K1设置TH,K2设置TL,K3调高TH或TL,K4调低TH或TL,K5对TH或TL的数值进行确认。
1.3 温度检测电路
温度检测电路采用智能温度传感器DSl8820,它与单片机相连只需要3线,减少了外部的硬件电路。DSl8820主要性能特点如下:
(1)测温的范围为-55~125℃,最大分辨率可以达到0.0625℃;
(2)电源电压范围为3.0~5.5V;
(3)供电模式:寄生供电和外部供电;
(4)封装形式有两种:3脚的TO-92封装和8脚的SOIC封装;
(5)可编程的温度转换分辨率,分辨率为9~12位(包括1位符号位),由配置寄存器决定具体位数,配置寄存器的格式如表1所示。
其中RlR0是用来设定分辨率的,分辨率的定义如表2所示。
由表2可以看出,分辨率设定得越高,温度转换所需要的时间就越长,因此应根据实际应用的需要来选择合适的分辨率。本文中选取12位分辨率,每隔1秒检测一次温度。12位分辨率的温度数据值格式如下:
当S=0表示测得的温度为正值,当S=l表示测得的温度为负值。
1.3.1 DSl8820的存储器结构
DSl8820的存储器有高速暂存RAM和非易失性电擦写EEPROM。高速暂存RAM的内容从低字节到高字节9个字节依次为:温度LSB、温度MSB、高温限值字节TH、低温限值字节TL、配置寄存器、保留、保留、保留,最后一个字节是前8个字节的CRC码。EEPROM用来存储TH和TL。
1.3.2 温度数据的处理方法
从DSl8820读出的两个字节的二进制值温度必须先转换成十进制数值,然后才能将其ASCII码送往LCDl602显示。12位的分辨率,温度是以0.0625步进的,由于两个字节的温度采用补码表示,所以先判断读出温度的最高位是0还是1,即判断是正温还是负温,然后对其求补码转化成正温,之后将高字节的低4位和低字节的高4位组成一个字节,这个字节的二进制值不断除以10得出的余数即为温度值的个、十、百位值。若读出的温度数值是负数,显示处理时,在温度数的前面人为显示负号即可。对小数部分的温度只需将低字节的低4位乘以0.0625,然后对乘积取其小数点后的一位数即可。
1.3.3 DSl8820的控制步骤
(1)首先对DSl8820进行复位。由单片机将数据线DQ拉至低电平480-960 μs,然后将DQ拉高15-60 μs,以便单片机检测到DSl8820送来的低电平响应。然后检测DQ,若DQ仍然为高电平,则复位操作失败,可采用循环的方式再次对其进行复位;若DQ为低电平,则复位操作成功。
(2)DSl8820的ROM操作命令。DSl8820复位后,主机可以发器件ROM的操作命令如读ROM[33H]、匹配ROM[55H]、跳过ROM[0CCH],报警搜索[4EH]等。在单点总线的情况下,可发跳过ROM[0CCH]操作命令,以节省时间。另外,文中有报警的功能,温度转换后还需要发报警搜索命令,该命令会将最近一次测得的温度值T与高速RAM中的TH或TL作比较,若T>TH或T
(3)DSl8820的存储器操作命令。如启动温度转换命令[44H],写入命令[4EH](写入该命令后,紧接着要写入报警上限TH,报警下限TL及配置寄存器字节),读暂存器RAM的内容命令[0BEH](读取将从第一个字节开始一直到第9个字节结束,如仅需要部分字节,主机可以在合适的时刻发复位命令来终止读取)及复制命令[48H](把暂存器RAM的第2、3、4字节转存到DSl8820的EEROM中)等。
(4)DSl8820的ROM或RAM操作的总线读写时序。对于读时序,首先将DQ拉低并延时1-15μs以内(延时时间不能太长),然后将DQ拉高并延时几个μs后再读取DQ的值,读完一位后需要延时45 μs以上才能读取下一位;对于写时序,先将DQ拉低10-15μs,接着向总线写入数据并延时50μs以上,最后将DQ拉高1μs以上再进行下一位的写入。
1.4 液晶显示模块
采用的是长沙太阳人电子有限公司生产的SMCl602A。
1.4.1 主要技术参数
芯片的工作电压4.5~5.5V,能显示两行,每行显示16个字符,字符的大小为2.95×4.35mm。
1.4.2 接口信号说明
除电压、背光引脚及8个I/O引脚外,主要的控制引脚还有数据/命令选择RS引脚,该引脚为高电平时表示I/O引脚出现的是数据,该引脚为低电平时表示I/O引脚出现的是命令;读/写选择引脚及使能引脚E(该引脚为高电平时对SMCl602A的操作才有效)。
1.4.3 指令说明
(1)初始化设置
1.4.4 LCDl602的初始化步骤
(1)延时15ms,写指令38H(不检测忙信号);
1.5 恒温保持控制模块
选用6V固态继电器作为开关器件,通过控制其断与通的时序从而控制加热器件的工作时长,以实现样品的恒温保持功能。
2 系统硬件电路的设计
该系统的主要电路原理图如图2所示。系统中使用USB口提供5V电源的电路;使用RS232串口通过P3.0和P3.1烧写程序的电路;以及使用继电器控制的恒温保持电路等在原理图中并未画出。
3 系统的软件设计
系统总的流程图如图3所示。系统程序主要有主程序和LCDl602初始化子程序及读写时序子程序、DSl8820复位及读写时序子程序、键盘扫描子程序、温度数据处理子程序等构成。
4 程序的编辑及调试
编程语言可以采用汇编语言,也可以采用C51语言。本文采用汇编语言,使用Keil C软件新建一个工程,然后新建一个文件输入源程序并保存成.asm格式,并将该源文件添加到刚刚新建的工程,随后编译链接后生成十六进制文件(.HEX),最后使用烧写软件stc-isp-v3.9l通过RS232串口将十六进制文件烧写进单片机的Flash中运行程序即可。
5 结论
本文设计的多功能温度控制器体积小、功耗低、可靠性高,实验表明,对温度的控制精度达到了0.1℃的设计目标。
a.显示模式设置。指令码:00111000b,用于设置16×2显示,5×7点阵。
b.显示开/关及光标设置。二进制指令码:00000DCB中D位用来控制显示开或关,C位用来控制显示光标,B位控制光标是否闪烁。二进制指令码:000001NS中N位控制读写一个数据后地址指针和光标加或减1,S位控制字符的移动。
c.数据指针设置。指令码:80H+地址码(0-27H,40H-67H)用于设置数据指针。
(2)其他设置。如指令码01H:显示清屏且数据指针清零。
(2)延时5ms,写指令38H(不检测忙信号),上述过程执行两遍,后面的过程每次写指令、读/写数据之前均需要检测忙信号;
(3)写指令38H:显示模式设置;
(4)写指令08H:关闭显示;
(5)写指令0lH:清屏且数据指针清零;
(6)写指令06H:字符不移动,光标和指针加1;
(7)写指令0FH:显示开,光标闪烁。