曲阜师范大学计算机科学学院 党德瑞
随着现代科学技术的飞速发展,特别是大规模集成电路设计技术的发展,微型化、集成化、数字化正成为传感器发展的一个重要方向,而采用新型数字温度传感器大大方便了系统的设计。数字温度传感器DS18B20具有独特的单总线接口,仅需要占用一个通用I/0端口即可完成与微处理器的通信,大大减少了接线的麻烦,使得单片机更加具有扩展性。由于DS18B20芯片的小型化,可以通过单跳数据线就可以和主电路连接。
整个系统是由单片机控制的,要能够实现接收传感器的数据并将所接受的数据显示出来,可以从键盘输入命令,系统根据所键入的命令,选择对应的传感器,并经过驱动电路驱动温度显示。设计一种可实现的,方便的单片机监控系统,实现多点温度测量和显示的任务。
图1 AT89C51的硬件结构图
传感器DS18B20是美国DALLAS半导体公司推出的一种改进型温度传感器。DS18B20的最大优点是采用了单总线的数据传输,由数字温度传感器DS18B20和单片机AT89C51构成的测度装置,可以直接输出温度的数字信号到微控制器。每个DS18B20具有一个独有的不可修改的64位序列号,根据序列号可访问不同的器件,这样一条总线上可挂接多个DS18B20传感器,实现多点温度测量。DS18B20传感器有如下特点:
(1)单总线接口,可方便地实现多点测温。
(2)每一个芯片都有唯一的一个64位光刻的ROM注册码,家族码为28H。
(3)无需外部器件,可通过数据线供电,电源电压范围:3.0V~5.0V。
(4)以此作为检测元件,测温范围是-55℃~+125℃,在-10~+85℃范围内,测量精度可达±0.5℃。
(5)分辨率为可编程的9~12位(包括一位符号位),对应的可分变温度分别为0.5℃、0.25℃、0.125℃和0.0625℃。
(6)DS18B20的转换时间与所设定的分辨率有关。当设定为9位时,最大转换时间为93.75ms,当设定为12位时,最大转换时间为750ms。
(7)温度数据有2个字节组成。
(8)内部含有EEPROM,其报警上下限温度值和设定的分辨率在掉电的情况下不丢失。
本课题选用的控制模块是AT89C51单片机,AT89C51单片机是一种低电压,低功耗,高性能的8位FLASH单片机。单片机的特点是体积小,功能强,可靠性高,功耗低,价格低廉,片内含有2Kbytes的可反复擦写的只读程序存储器,并且可以兼容标准MCS-51系列单片机的指令系统。
系统的硬件电路如图所示,主要是以AT89C51单片机为核心的控制部分,由四个DS18B20温度传感器,LED数码管显示,键盘,复位电路,报警电路等部分组成。
我们设计的是分布式测温系统,要用到多个DS18B20温度传感器,采集的温度数据众多,首先要弄清楚传感器的序列号,以便准确、有效地对每个温度进行寻址。每个传感器都有唯一的64位产品序列号。由温度传感器DS18B20采集的被测对象的数据,不用经过A/D转换,可以直接传给AT89C51单片机,由单片机的P3.7口作为数据的输入端口,在AT89C51单片机内有4KB闪烁可擦除、可编程的只读存储器,128B的数据存储空间,可直接推动LED数码管显示数据。DS18B20由VCC提供电源,连接一个4.7K的上拉电阻,传感器的DQ脚直接连接到单片机的P1.0口。温度测量部分的电路就连接好了。图2为DS18B20与单片机的连接电路图。
图2 DS18B20与单片机的连接电路图
通过键盘键入要显示的测量点的传感器的序列号,当其中一个按键被按下时,INT0就会接收到一个负脉冲信号,单片机的外部中断会被激活,我们会检测到P0~P3口的信号跳变,从而确定是那个按键被按下。当单片机接受到具体的中断信号时,就会读取在初始化时已经按序列号编码的对应序列号的DS18B20传感器中的温度数据,完成温度数据的对应读取。
该部分电路主要使用了移位寄存器芯片74LA164和七段数码管。单片机通过I2C总线将要显示的数据信号传送到移位寄存器芯片74LS164寄存起来,再由移位寄存器控制数码管的显示,从而实现移位寄存点亮数码管,数码管显示所接收的数据。
当所测量的温度值达到所设定温度的上下限时,所接受的信号可触发蜂鸣器实现报警功能。单片机通过三极管驱动扬声器发出警笛声,选择了压电式蜂鸣器。图3为报警电路电路图。
图3 报警电路电路图
本课题的系统软件设计主要是在单片机的控制下完成多点温度的测量,并将温度值显示,超过上下限温度值报警的功能。要实现系统的各种功能必须经过以下几个步骤:传感器DS18B20采集的各点的温度信号传递给单片机,在键盘的键入选择下,显示所指定编号的传感器的温度值,并将温度值通过数码管显示出来,若温度超过所设定的上下限范围则驱动蜂鸣器,发出报警。
主程序的主要功能是负责温度的实时显示,读出并处理DS18B20测量的温度值,测量每1s进行一次,当系统初始上电时,单片机必须找出总线上所有传感器的ROM代码,这样单片机就能够判断出传感器的数目和类型。
读出温度子程序主要功能是读出RAM中的9字节,在读出时需要进行CRC校验,校验有错时不进行温度数据的改写。DS18B20的读时序分读0时序和读1时序两个过程。读时序是主机先把单总线拉低,之后的15us内必须释放单总线,以便将数据传送到单总线上。
我们所设计的系统能接收到温度信号,还要将温度信号显示出来。对于输入的温度信号的显示是用了移位寄存器芯片74LS164。当串行输入端任意一个为低电平,则禁止新数据输入,在时钟端CLOCK)脉冲上升沿作用下Q0为低电平。当串行输入端有一个为高电平时,则另一个就允许数据输入,并在CLOCK上升沿作用下决定Q0的状态。
[1]李光飞,楼然苗,胡佳文.单片机课程设计实例指导[M].北京:北京航空航天大学出版社,2004(1):34-50.
[2]马家辰.MCS-51单片机原理及接口技术[M].哈尔滨:哈尔滨工业大学出版社:1997:100-120.
[3]郁有文,常健,程继红.传感器原理及工程应用[M].西安:西安电子科技大学出版社,2003:15-23.
[4]余成波,胡新宇,赵勇.传感器与自动检测技术[M]:北京:高等教育出版社,2004:35-45.
[5]杭和平,杨芳,谢飞.单片机原理与应用[M].北京:机械工业出版社,2008:155-169.
[6]黄维翼,眭碧霞.单片机应用与项目实践[M].北京:清华大学出版社,2010:4-15.
[7]张粤,倪伟.DS18B20在分布式测温系统中的应用[N].淮阴工学学报,2002-10-05.
[8]彭东林.多点温度测量系统设计[J].重庆工学院,2007-06:10-14.