基于单片机控制的粮仓多路温度采集系统设计
2016-05-13张树尉郑雪梅
张树尉,郑雪梅
(黄冈职业技术学院,湖北 黄冈 438002)
基于单片机控制的粮仓多路温度采集系统设计
张树尉,郑雪梅
(黄冈职业技术学院,湖北 黄冈 438002)
摘要:本设计由3个模块组成:主控制器、温度采集电路及显示电路。所设计的多路温度采集系统,可实现多个粮仓的温度监视,测温范围为-20~70℃,精度误差在0.1℃以内,LED数码管直读显示。
关键词:数字温度计;AT89S51;DS18B20;单总线
温度的测量不仅广泛用于我们的日常生活之中,而且在工业加工生产、科研研究中起着至关重要的作用。一般对于温度的测量采用由热电偶式传感器组成的测量电路,这种电路具有设计复杂、测量灵敏度较低、性价比低的缺点。本文设计一种多路温度采集系统,实现多个粮仓的温度监视,要求测温范围为-20~70℃,精度误差在0.1℃以内,LED数码管直读显示。依据测量指标的要求,采用DALLS公司的单总线数字式温度传感器DS1820作为温度检测传感器,该传感器测量范围大,内部集成了模数转换器,最高分辨率高达12位。相对于热电偶传感器,该芯片采用单总线接口协议,实现数据的采集与传输,大大降低硬件设计的难易度,设计成本低廉,广泛适用于测控领域。
1总体设计方案框图
图1 数字温度计总体电路结构框图
根据设计的指标和要求,多个粮仓的温度测量系统主要由以下几个部分组成:
1.1控制器单元电路。控制器采用AT89S51单片机,负责与传感器DS18B20通信,存储不同粮仓的温度数据,同时将温度数据发送到显示电路。
1.2传感器测量电路。每个粮仓安放DS18B20传感器,负责对温度的测量。
1.3温度显示电路。采用4位共阳LED数码管显示,以动态扫描法实现温度显示,将单片机发送的数据显示在Led数码管上。
数字温度计总体电路结构框图如图1所示。
2系统整体硬件电路
2.1主控制器
图2 主控制器89S51
图2为主控制器电路,由12M无源晶振组成的振荡电路,开关S1与10uf电容组成的复位电路,用于重启系统,保证系统正常的运行。
XTAL1脚为片内振荡电路的输入端,XTAL2脚为片内振荡电路的输出端。89S51的时钟有两种方式,一种是片内时钟振荡方式,但需在XTAL1和XTAL2脚外接石英晶体(频率为1.2~12MHz)和振荡电容,振荡电容的值一般取10~30pF,典型值为30pF;另外一种是外部时钟方式,即将XTAL1接地,外部时钟信号从XTAL2脚输入,如图3所示。 此次设计采用了内部时钟方式。[2]
图3 89S51的时钟振荡方式
2.2温度采集电路
图4 DS18B20温度采集
温度采集如图4,图中的U3、U4、U5是用于探测温度并将温度值转换成数字信号的传感器DS18B20, DS18B20采用1-Wire总线(单总线)协议,它在一根数据线完成控制字的写入和测量温度数据的读出,是一种半双工的双向传输模式,多个DS18B20传感器通过地址码来区分。由于单片机AT89S51硬件上并不支持单总线协议,通过AT89S51来控制和访问DS18B20时,需要通过编程模拟单总线的协议时序来实现对DS18B20的访问。
对读写的数据位有着严格的时序要求,每一次命令和数据的传输都是由主机启动的写时序开始,此时从设备都处在侦听状态,数据和命令的传输顺序都是低位在先。在读取DS18B20检测到的温度数据时,主机在发出写命令后,再需启动读时序完成数据接收。
2.3显示电路
图5 显示电路
显示电路采用4位共阳LED数码管,从P0口输出段码通过74HC244进行缓存,再同时送入到四个数码管的a~h端,列扫描用P2.0~P2.3口来实现,列驱动用9012三极管。
2.4稳压电路
图6 稳压电路
连接器CON3通过复读机电源接入+12V电压,通过7805稳压器将+12V电压转换成+5V电压,作为温度计设计电路的电源VCC。
2.5通信接口电路
图7 通信接口电路
89S51的P1口的第二功能(ISP功能),为了能够将编译好的程序下载到单片机内,由于本系统采用AT89S51,采用ISP技术,利用如表1中的P1口,来实现单片机与上位机(PC机)通信,实现程序的下载,P1是带上拉电阻,兼有输入和输出功能的引脚。输出时驱动电流可达10mA左右。
表1 单片机ISP功能引脚分配
此模块做在另一块板上,通过导线将图中74LS373的MISO,MOSI,SCK分别接到89S51的MISO,MOSI,SCK端口上即可。
3系统软件程序
由图8、图9可知,系统软件设计组要由温度显示刷新模块、温度传感器DS18B20的初始化、温度数据的读取、实际温度的计算等组成。
3.1主程序
图8为系统设计主程序,一开始完成对设备的初始化,接着开启定时器记录刷新时间,每隔一秒完成对数据的读取与刷新,然后实现对温度的显示。
图8 主程序流程图
图9 读出温度子程序流程图
3.2读出温度子程序
读出温度子程序流程如图9所示,在对DS18B20进行复位后,AT89S51向所有DS18B20发匹配ROM命令(即区分安装在各个位置的DS18B20的地址码),各个DS18B20收到此地址码后立即进行判断是否在访问自己,如果地址匹配,则该DS18B20发出应答信号,AT89S51紧接着发出读取命令,地址匹配的DS18B20收到此命令后便将采集到的温度数据进行CRC编码(在温度数据后附加8位的CRC校验码)并存放到一个9字节的RAM中,AT89S51读取DS18B20中9字节RAM中的数据并进行CRC校验,CRC正确时改写当前的温度值,校验有错时不进行温度数据的改写。
3.3计算温度子程序
计算温度子程序流程图如图10所示,从DS18B20中RAM中读取的是二进制代码代表的温度值,我们日常生活中的温度都为十进制显示,结合DS18B20输出的二进制数据的格式,通过温度转换子程序,实现二进制数据与十进制摄氏温度的转换,这样才能输出我们要求的温度格式。
3.4温度显示更新程序
温度每时每刻都在发生着轻微的变化,为了能够实时显示正确的温度,就要定时刷新数据,如图11所示,该程序实现了对温度数据的更新功能,对单片机存储的温度数据进行处理,进行温度的正负判断,以及位数处理。
图10 计算温度子程序流程图
图11 显示数据刷新子程序流程图
3.5温度数据的计算处理方法
DS18B20的转换精度可在9~12位之间选择,分辨率分别为0.5℃、 0.25 ℃、 0.125℃ 、0.0625℃,转换精度越高所需的A/D时间也越长,9字节RAM中前两个字节是转换好的温度,在对于12位转换精度,除了最高的4位表示正负符号外,根据温度传感器低的12位二进制数字,转换成十进制数据,将该数据乘以12精度的灵敏度0.0625,所得到的十进制数据则为单位为摄氏度的温度值。
温度显示数据的小数位是由9字节RAM中低字节的低半字节组成的,由于12位转换精度的分辨率是0.0625℃,介于0.1℃~0.01℃之间,由于是用半个字节(0~F)表小数部分,直接通过乘以0.0625转换成的十进制小数值需要占用4位小数,实际应用中通常精确到0.1℃,用1位LED显示小数,这就需要将15种二进制码对应成10种十进制数,表2列出了一种二进制和十进制的近似对应关系表[2]。
表2 小数部分二进制和十进制的近似对应关系表
4调试及性能分析
系统的调试包括硬件电路调试和软件调试,由于硬件电路并不复杂,而且全部都是数字电路,只要焊接良好,没有短路和断路情况出现电路即可正常工作。由于采用了模块化的设计方法,软件调试可以先进行各功能子程序的单独调试通过,再逐步将各功能模块往里添加进来,每添加一个功能模块调试成功后再添加一个功能模块,直到所有功能模块能同时正常工作。由于DS18B20跟AT89S51之间采用串行数据通信,在编程时严格按照DS18B20芯片手册上的时序,来实现对芯片数据的采集,不然将得到的错误的数据。
性能测试是用精度为0.01℃温度计和本温度测试系统各自测量值的比较来完成的,通过实测对比,在-20~50℃的温度范围内,二者的最大绝对误差都在±0.05℃以内,完全适合一般的应用场合,可用三节干电池供电做成手持电子温度计。
参考文献:
[1]张俊谟.单片机中级教程. 北京:北京航空航天大学出版社,1999:11-100.
[2]李光飞,楼然苗,胡佳文等.单片机课程设计实例指导. 北京:北京航空航天大学出版社,2004:105-125.
[3]夏路易,石宗义. 电路原理图与电路板设计教程Protel 99SE. 北京: 北京希望电子出版社社,2002:1-203.
[4]李军. 51系列单片机高级实例开发指南. 北京:北京航空航天大学出版社, 2004:10-50.
中图分类号:TP368
文献标志码:A
文章编号:1671-1602(2016)08-0035-03
作者简介:张树尉(1995.09-),男,湖北黄冈市人。
郑雪梅(1995.11-),女,湖北黄冈市人,黄冈职业技术学院2014级物联网应用技术专业在校学生。