多功能温度控制系统的结构如图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<TL,则该器件内的报警标志位 置位,并对主机发出的报警搜索命令作出响应。
(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)初始化设置
a.显示模式设置。指令码:00111000b,用于设置16×2显示,5×7点阵。
b.显示开/关及光标设置。二进制指令码:00000DCB中D位用来控制显示开或关,C位用来控制显示光标,B位控制光标是否闪烁。二进制指令 码:000001NS中N位控制读写一个数据后地址指针和光标加或减1,S位控制字符的移动。
c.数据指针设置。指令码:80H+地址码(0-27H,40H-67H)用于设置数据指针。
(2)其他设置。如指令码01H:显示清屏且数据指针清零。
1.4.4 LCDl602的初始化步骤
(1)延时15ms,写指令38H(不检测忙信号);
(2)延时5ms,写指令38H(不检测忙信号),上述过程执行两遍,后面的过程每次写指令、读/写数据之前均需要检测忙信号;
(3)写指令38H:显示模式设置;
(4)写指令08H:关闭显示;
(5)写指令0lH:清屏且数据指针清零;
(6)写指令06H:字符不移动,光标和指针加1;
(7)写指令0FH:显示开,光标闪烁。
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℃的设计目标。
这种情况坦漏唯一般都是状态机出问搜梁题了data_input_1信号在在S3的情况下过早为0,会导致current_state不让培能进入S4状态.data_input_1必须值到下一个时钟周期开始时也为1,保证next_state最终为S4,这样才能在上升沿加载到current_state寄存器中,因此这个设计对于前导码之后第1位为0是失效的,第一位为1则可以运行,你可以做个实验验证一下.
解决方案:用个寄存器先对输入信号同步采样一下.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)