梁永恩,万世明
(广东白云学院电气与信息工程学院,广东广州510450)
摘要:以嵌入式微处理器S3C2440为主控制器,数字式温度传感器DS18B20为测温元件设计了嵌入式温度检测系统。阐述了系统的软硬件设计与实现流程,重点介绍了DS18B20在嵌入式Linux操作系统下驱动程序的实现方法。该系统电路简单、运行稳定,操作简便,可扩展性好。
教育期刊网 http://www.jyqkw.com
关键词 :嵌入式系统;DS18B20;温度检测;Linux
中图分类号:TN919?34;TP274 文献标识码:A 文章编号:1004?373X(2015)15?0084?03
收稿日期:2015?02?03
0 引言
传统的温度检测系统采用单片机控制方式,一般是通过AD590,TMP36等测温传感器采样温度值的模拟信号再经过A/D转换获取其数字量,这种工作方式存在多种缺点[1],如需要模/数转换电路、线路复杂、成本高、测量点数量少等,而且使用单片机控制的方式可扩展性相对较差[2]。本文提出利用嵌入式方式(S3C2440)控制,直接使用数字式测量元件DS18B20进行温度测量,这种方式电路简单,测量精度高,成本低,编程方便。
1 S3C2440 与DS18B20 简介
S3C2440 是三星公司推出的一款适用于手持设备和通用嵌入式应用的处理器[3],具有面向小型终端的16/32位精简指令集的ARM920T内核,采用了高级微控制器(AMBA)的总线架构,CPU主频最高可达533 Hz,内部集成了3个串口、SD卡控制器、LCD控制器、Camera、工业控制总线、PCMCIA、NAND FLASH 控制器等多个外设接口,支持多种操作系统包括Windows CE、PalmOS、Symbian和Linux等,功耗低,性价比高,特别适合于成本和功耗敏感的应用[4?5]。
DS18B20 是DALLAS(达拉斯)公司生产的单总线(1?Wire)数字温度传感器[6],它具有如下特点:
(1)体积小,耐磨耐碰,具有多种封装方式;
(2)使用单总线数据通信方式,仅需一条总线即可连接微处理器,可挂接多个同类器件;
(3)分辨率最高可达12位,精度可达±0.5 ℃;
(4)检测温度范围为-55~125 ℃;
(5)集成温度检测与数字数据输出于一个芯片内,抗干扰能力强;
(6) 不需任何外围元件,可直接输出9~12 位数字量。
由于DS18B20接线方便、成本低、检测温度范围广,目前在狭小空间设备、高温环境及野外远距离数字测温方面逐步得到了应用。
2 硬件设计
系统主要由主控芯片S3C2440、电源、温度传感器DS18B20、存储器(只读存储器NAND FLASH及随机读/写存储器SDRAM)、LCD、触摸屏、以太网及JTAG 接口组成,如图1所示。系统读取DS18B20的温度值并将其显示在LCD 上,同时该温度值也可通过以太网上传至PC或其他接收终端上。用户通过触摸屏进行人机交互操作。JTAG接口主要下载bootloader代码和调试应用程序。
DS18B20与S3C2440的接口如图2所示。S3C2440的GPF7引脚作为单总线接口,连接DS18B20的单数据总线DQ,注意DQ引脚应加入一个4.7 kΩ的电阻。需要测量多点温度时,可通过GPF7挂载多个DS18B20。
3 软件设计
3.1 DS18B20驱动程序
DS18B20 的温度检测与数字数据输出集成在一个芯片上,其工作周期分为温度检测和数据处理两部分。它有3种存储器:ROM 只读存储器存放64位ID编码,存储芯片的种类及序列号;RAM数据暂存器用于内部计算和数据存取;E2PROM 可用来存放上下限温度报警值和校验数据。利用C 语言对DS18B20 进行读/写操作时,应严格按照DS18B20 的读/写时序进行。若只有一个DS18B20器件,读取其当前的温度数据需要执行两次工作周期,第1 个周期为复位、跳过ROM 指令(命令代码为0xCC)、执行温度转换存储器操作指令(命令代码0x44)、等待500 μs温度转换时间。紧接着执行第二个周期为复位、跳过ROM 指令、执行读RAM 的存储器操作指令(命令代码0xEE)、读数据(前2个字节为简单温度值)。
Linux所有的设备都以文件的形式实现[7?8],要访问一个设备,只需要以open,read,write,release 的形式对设备进行操作。这些函数名称与file_operations[9?10]结构体的成员名称一一对应,将系统调用和驱动程序关联起来。因此,编写Linux设备驱动程序,主要编写设备的子函数,并且填充file_operations 的各个域。本系统嵌入式Linux内核版本为2.6.26,DS18B20引脚连接S3C2440的GPF7引脚,主要函数有:
(1)void ds18b20_rese(t void);
说明:复位函数,执行复位操作,拉低DQ引脚至少保持480 μs 后释放总线,等待DS18B20 应答,读取DQ引脚电平,如果是低电平,表示初始化完成。
(2) unsigned char read_byte(void);
说明:读入一个字节数据,按DS18B20的读时序依次读取DQ引脚状态8次,将各位的数据合成一个字节。
(3) void ds18b20_write(unsigned char data);
说明:写1个字节数据,按DS18B20的写时序,依次向DQ引脚输出0或1。
(4) static int ds18b20_read(struct file *filp,char*buffer,size_t count,loff_t *ppos)
说明:读取2个字节的温度值(简单温度值)。函数参数在file_operations 结构体中定义,用于从设备中获取数据。
函数的实现如下:
读取2个字节的温度值的函数实现如下:
3.2 系统主程序
读取DS18B20的数据,需要先加载设备驱动,再打开该设备,然后就可以通过对设备的读/写工作获取数据,关键代码如下:
4 运行结果
本系统通过S3C2440采集DS18B20的温度数据,并将其保存在文本文件中,界面显示用QT/E实现,通过触摸屏和LCD进行人机交互操作。实现界面如图3所示。
5 结语
结合嵌入式平台和数字式温度传感器实现了温度检测系统设计。与传统单片机控制方式相比,采用嵌入式技术大大增强了系统的易用性、可维护性和可扩展性,而采用数字式温度传感器作为测温元件,简化了硬件电路设计,提高了系统的灵敏度和可靠性。
教育期刊网 http://www.jyqkw.com
参考文献
[1] 陈至坤,李蓓.温度检测技术及相关仪器的发展现状[J].河北联合大学学报:自然科学版,2011(4):68?70.
[2] 张锋.基于DS18B20 的温度测控系统设计[J].物联网技术,2014,4(6):19?21.
[3] Samsung Semiconductor. S3C2440 data sheet [EB/OL]. [2014?12?25]. http://www.samsung.com.
[4] 许婷,朱贺,高红民,等.基于S3C2440的水文监测系统优化设计[J].信息技术,2014(4):138?141.
[5] 于明,范书瑞,曾祥烨.ARM9嵌入式系统设计与开发教程[M].北京:电子工业出版社,2006.
[6] Maxim Integrated. DS18B20 data sheet [EB/OL]. [2014?11?22].http://www.maximintegrated.com.
[7] 姜远志.Linux的驱动开发分析[J].无线互联科技,2014(1):103?104.
[8] 王丽伟.基于S3C2440A 和Linux的嵌入式存储设备驱动程序的研究与开发[D].青岛:青岛大学,2009.
[9] 郝志刚.基于S3C2440的嵌入式驱动开发研究[D].太原:太原理工大学,2011.
[10] 陈潜,刘云,高利娟.基于嵌入式Linux的机房远程监测系统研究[J].微计算机应用,2011,32(6):60?65.
作者简介:梁永恩(1978—),男,广东广州人,硕士,讲师。研究方向为嵌入式系统。
万世明(1955—),男,湖北武汉人,硕士,教授。研究方向为系统工程。