王文,王直
(江苏科技大学 计算机科学与工程学院,江苏 镇江 212003)
温度是一种最基本的环境参数而且与我们的生活密切相关。温度监测在粮食仓库存储的温度监控、禽蛋孵化箱自动温度控制,冷藏库温度监测、环境监测、过程温度监测、中央空调监测等许多领域均具有良好的应用前景,因此研究温度的测量方法和装置具有重要的意义。
采用DS18B20温度传感器完成了信号的数字化,简化了外围电路。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络。32位ARM微控制器S3C2440控制数字温度信号的采集,并与上位PC机通信。
DS18B20数字温度计是DALLAS公司生产的1-Wire即单总线器件,具有很多优点:
1)体积小巧,只有电源、接地、数据线共3个引脚,极大地节约了系统资源;
2)在9位分辨率时最多在 93.75 ms内把温度转换为数字,12位分辨率时最多在750 ms内把温度值转换为数字,速度更快;
3)测温分辨率可达 0.0625℃,测温范围为-55~125℃,性能稳定。安全可靠;
4)完全数字化,读取非常方便;
5)测量结果直接输出数字温度信号,以“一 线总线”串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力;
6)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
与传统的分立式温度传感器不同的是,它是将被测量的温度值直接转化成串行数字信号,通过微处理器即可直接读出被测量的温度数据。因而把DS18B20应用于温度测控系统中,将大大简化线路结构和减少硬件开销,使系统结构更加简单,工作稳定,测温精度高,维护方便,安全可靠性更高。
1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用 ARM技术知识产权(IP)核的微处理器,即我们通常所说的 ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM技术的微处理器应用约占据了 32位RISC微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。
采用RISC架构的ARM微处理器一般具有如下特点:1)体积小、低功耗、低成本、高性能;
2)支持 Thumb(16 位)/ARM(32 位)双指令集,能很好地兼容8位/16位器件;
3)大量使用寄存器,指令执行速度更快;
4)大多数数据操作都在寄存器中完成;
5)寻址方式灵活简单,执行效率高;
6)指令长度固定。
基于ARM嵌入式技术所设计的数据采集器具有指令丰富、软件编程灵活、精度及实时性好的优点。同时,数据采集系统体积小、功耗低、数据采集及控制功能易于实现 ,能够很方便地用于对系统运行和环境参数进行监测 。
DS18B20的供电方式有寄生电源供电方式和外部电源供电方式。
外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。在外接电源方式下,可以充分发挥DS18B20宽电源电压范围的优点,即使电源电压VCC降到3 V时,依然能够保证温度测量精度。所以本课题采用外部电源供电方式。
温度检测模块系统组成:
图1 DS18B20测温电路原理图Fig.1 DS18B20 circuit diagram of temperature measurement
使用DS18B20进行温度测量的步骤为:初始化DS18B20→跳过ROM操作命令→启动温度转换命令→等待转换完成→初始化→跳过ROM操作命令→读取温度寄存器命令,这样就可以读出被测温度的数据了。
DS18B20对时序及电特性参数要求较高,必须严格按照DS18B20的时序要求操纵。它的数据读写主要由主机读写特定的时间片来完成,包括复位(初始化)、读时间片和写时间片。
DS18B20进行温度测量复位时序
使用DS18B20时,首先需将其复位,然后才能执行其他命令。复位时,主机将数据线拉为低电平并保持480~960 μs,然后释放数据线,再由上拉电阻将数据线拉高15~60 μs,等待DS18B20发出存在低脉冲,存在脉冲有效时间为60~240 μs,主CPU收到此信号表示复位成功。
做为从器件的DS18B20在一上电后就一直在检测总线上是否有480-960 μs低电平出现,如果有,在总线转为高电平后等待 15-60 μs 将总线电平拉低 60-240 μs 出响应存在脉冲,告诉主机本器件已做好准备。若没有检测到就一直在检测等待。
DS18B20进行温度测量的读写时序
DS18B20的写时序?:
写周期最少为 60 μs,最长不超过 120 μs。
对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。
对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60 μs,保证DS18B20能够在15~45 μs之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15 μs之内就得释放单总线。
作为从机的DS18B20则在检测到总线被拉低后等待15μs然后从15~45 μs开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。
DS18B20的读时序
对于DS18B20的写时序仍然分为读0时序和读1时序两个过程。
对于DS18B20的读时序:
完成一个读时序过程,至少需要60 μs才能完成
读时序是从主机把单总线拉低之后,在1 μs之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。
主机总线t0时刻从高拉至低电平时,总线只需保持低电平1 μs,之后在t1时刻将总线拉高,产生读时间隙,读时间隙在 t1时刻后 t2时刻前有效。t2距 t0为 15 μs,也就是说,t2时刻前主机必须完成读位,并在t0后的60 μs至120 μs内释放总线。
DS18B20在检测到总线被拉低1 ws后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束。若要送出1则释放总线为高电平。
内核延时函数 udelay()。 u 表示希腊字母“mu”(m),它代表“微”。其的原型如下:
#include
void udelay(unsigned long usecs); //软件循环延迟指定数目的微秒数
该函数在绝大多数体系结构上是作为内联函数编译的。
udelay函数只能用于获取较短的时间延迟,因为loops_per_second值的精度只有8位,所以,当计算更长的延迟时会积累出相当大的误差。尽管最大能允许的延迟将近1s(因为更长的延迟就要溢出),推荐的udelay函数参数最大值是取 1 000 μs(1 ms)。
udelay是个忙等待函数,在延迟的时间段内无法运行其他的任务。
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.062 5℃/LSB形式表达,其中S为符号位。
如果测得的温度大于0℃,则这5位为0,只要将测到的数值乘以0.062 5即可得到实际温度,如果温度小于0℃,则这5位为1,测到的数值需要取反加1再乘以0.062 5即可得到实际温度。
本课题使用的内核版本是Linux-2.6.30.4,开发环境是Vmware工具+Fedora10系统,解压内核源码到PC中,使用解压命令:#tar xvfj linux-2.6.30.4.tar.bz2–C,进入内核源码修改Makefile文件,修改为ARCH=arm,CORSS_COMPILE=armlinux-,是系统添加对arm的支持,还要修改平台的实时时钟,修改内核源码的arch/arm/mach-s3c2440/mach-smdk2440.c, 把16.9344 MHz改 为 12 MHz, 即 s3c24xx_init_clocks(12000000);
因为可以把ds18b20看作一个字符设备,则编写其字符设备的驱动程序。进入内核源码的“drives/char”目录下新建一个名为“ds18b20.c”的文件。修改同目录下的“Kconfig”文件,添加如下内容:
config DS18B20
配置内核:进入到内核文件目录:cd/opt/linux-2.6.30.4/
输入menuconfig,然后配置如下
图2 内核配置界面Fig.2 Kernel configuration interface
将其选择为“M”(模块),然后保存配置,编译出内核镜像烧写到开发板中;
使用命令#make SUBDIR=drives/char/modules,编译出驱动模块,在内核目录的drivers/char/目录下面,名字为DS18B20.ko,使用U盘中转复制到开发板中即文件系统的/lib/目录下面。
驱动程序已经编译好了,使用insmod DS18B20.ko命令把驱动程序安装到系统中去。在/proc/devices可以看到设备DS18B20,并且可以看到它的主设备号。然后输入命令mknod/dev/DS18B20 c 232 0。若要卸载,则运行rmmod DS18B20.ko。
数字滤波常用算法有限幅滤波法,中位值滤波法,算术平均滤波法,递推平均滤波法(又称滑动平均滤波法),中位值平均滤波法(又称防脉冲干扰平均滤波法),限幅平均滤波法,一阶滞后滤波法等,本课题采用中位值平均滤波法(又称防脉冲干扰平均滤波法)。
中位值滤波法优点:能有效克服因偶然因素引起的波动干扰,对温度、液位的变化缓慢地被测参数有良好的滤波效果。
算术平均滤波法优点:适用于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。
中位值平均滤波法相当于 “中位值滤波法”+“算术平均滤波法”,连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值。N值的选取:3~14。融合了两种滤波法的优点,对于偶然出现的脉冲性干扰,可消除由于脉冲干扰所引起的采样值偏差。
Qtopia是一个基于Qte的类似桌面系统的应用环境,是TrollTech公司为采用嵌入式linux系统的消费电子设备而开发的综合应用平台。本课题使用的版本是Qtopia2.2.0.使用4.3.3 的交叉编译器编译。
启动QT designer,使用命令
界面设计主要包括如下工作:创建和初始化子部件,设置子部件布局,设置Tab键次序(不是必须),简历信号与槽的链接。
根据功能需求分析,设计构建了监控系统的GUI界面如图3所示。
图3 监控系统的GUI设计界面Fig.3 GUI design interface of monitoring system
保存为ds18b20.ui,建立转换ui为源码的脚本文件,使用命令 gedit ui2cpp,设置ui2cpp脚本为可执行,执行脚本,转换项目文件为源码,添加main.cpp文件,使用progen命令获取 ds18b20.pro 文件,
修改ds18b20.cpp文件,添加函数的具体实现
最后使用交叉编译器编译使用ARM版本的QT程序,分别将编译后的文件复制到开发板的相应位置,使用U盘中转,启动开发板之后可以正常使用。
图4 开发板运行截图Fig.4 Running screenshots of development board
在实验过程中当电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。验证了DS18B20良好的负压特性。
基于ARM和DS18B20的温度采集系统,外围电路简单,方便实用,低功耗,精度高,抗干扰能力强,与上位机实时通信可靠性高,稳定性好,并且使系统具备了远程监控能力。该系统在环境监测领域具备了良好的应用和推广价值[8]。
采用Qt/Embedded作为开发图形界面工具,利用其结构清晰的特点和跨平台性,能有效缩短项目的开发周期,提高程序代码的重用率,是开发嵌入式系统GUI界面的有效工具。
[1]文全刚.嵌入式Linux操作系统原理与应用[M].北京:北京航空航天大学出版社,2011.
[2]李亚锋,欧文盛.ARM嵌入式Linux系统开发从入门到精通[M].北京:清华大学出版社,2007.
[3]罗文广.单总线数字温度传感器的自动识别技术[J].电子产品世界,2002(16):69-70.LUO Wen-guang.Single-bus digital temperature sensor of automaticidentification technology[J].ElectronicWorld,2002 (16):69-70.
[4]李钢,赵彦峰.1-Wire总线数字温度传感器DSl8820原理及应用[J].现代电子技术,2005(21):77-79.LI Gang,ZHAO Yan-feng.1-Wire bus digital temperature sensor DSl8820 theory and application[J].Modern Electronic Technology, 2005 (21):77-79.
[5]刘晓阳,周炎涛.一线总线结构的DS18B20的序列号搜索算法研究[J].计算技术与自动化,2010,29(1):38-42.LIU Xiao-yang, ZHOU yan-tao.DS18B20 line bus structure,the serial number of the search algorithm[J].Computing Technology and Automation, 2010,29(1):38-42.
[6]秦 芹.一种基于DS18B20的温度采集新方案[J]电子技术,2010(10):68-70.QIN Qin.DS18B20 temperature acquisition based on the new scheme[J].Electronic Technology,2010(10):68-70.
[7]成洁,卢紫毅.Linux窗口程序设计:Qt4精彩实例[M].北京:清华大学出版社,2008.
[8]张明,赵宇驰,李军,等.高压电力设备热点温度在线监测系统及其应用[J].陕西电力,2010(07):35-39.ZHANG Ming,ZHAO Yu-chi,LI Jun,et al.HV device hot spot temperature on-line monitor system&its application[J].Shaanxi Electric Power,2010(07):35-39.