论文部分内容阅读
摘要:为解决库区温度测量布线难度大、材料成本高、维护检修难的问题,论文提出了一种用单片机作为控制核心,用DS18820搭建多点测温网络,nRF2401作为传输器件的库区温度数据无线传输系统。经实际测试,该系统测量准确度高、传输距离远、性能可靠,具有较好的应用前景。本文网络版地址:http://www.eepw.com.cn/article/280695 _htm
关键词:单片机;nRF2401;DS18820;测温网络;无线传输
DOI:10.3969/j.issn.1005-5517.2015.9.018
引言 库区温度直接关系到库存物资的安全与性能,目前库区温度数据的传输大多采用有线方式,存在布线难度大、材料成本高、维护检修不便等不足,并且数据线缆还易受雨雪、潮湿、鼠害等破坏。为克服此类弊端,本文采用nRF2401无线传输模块,结合l-Wire器件DS18820,设计开发一款库区温度数据无线传输系统。
1 总体方案
系统分为上位机与下位机两大部分,二者之间的通信通过nRF2401实现,如图l所示。上位机主要包括PC机和上位单片机,奠功能是负责接收下位机传送的温度数据和应用程序的运行,这一部分技术较为成熟,可借鉴的资料较多,不作为本文的重点:下位机采用51系列单片机AT89S51作为控制器,主要负责温度数据的采集、处理和传输,图l仅画出两组温度传感器和继电器,实际连接10组。本文将着重介绍其硬件电路和软件设计。
2 电路设计
下位机电路设计的重点是测温网络和无线传输模块的搭建,为实现多点测温,选用Dallas公司出品的DS18820,构建一个l-Wire总线的测温网络。DS18820是l-Wire总线的数字温度传感器,可直接将被测温度转化成串行数字信号供单片机处理,适用于恶劣环境的现场温度测量:无线传输模块选用新型单片射频收发器件nRF2401,该器件工作于2.4 GHz~2.5GHzISM频段,输出功率和通信频道可通过编程进行配置,同时,nRF2401功耗低,在以-6dBm的功率发射时,工作电流仅9mA,接收信号时,工作电流也仅12.3 mA,特别适合单片机应用场合。
图2是市售nRF2401无线模块,设计上位机、下位机电路时,只需留出相应接口即可。
图3是设计的电路原理图,单片机P12口连接10个测温器件(图中仅画出3个),从而构建一个小型l-Wire总线测温网络,可实现10个库区的温度测量:单片机其他口线连接有10个继电器(图中画出2个),用来控制10个库区散热风扇的运转:无线模块nRF2401通过接口端子与单片机连接,此处注意nRF2401工作电压是3.3V,需增加电压转换芯片,为节省篇幅图中并未画出。
上位机接收部分的电路主要由上位单片机、无线模块接口和电平转换部分组成,这是由于nRF2401输出数据格式是TTL电平,而PC机串口是MAX232电平,为此需要增加一个电平转换电路进行匹配。
3 软件编程
下位机编程重点在于温度数据的采集与传送,也就是DS18820和nRF2401的软件设计。
3.1 1-wire总线的基本原理和操作
软件设计之前,首先要了解l-wire总线的原理。l-wire总线的特点是用一条数据线同时传输时钟信号和数据,总线上每一个器件都有一个唯一的地址,包括48位的序列号、8位的家族码和8位的CRC码,主机对各器件的寻址依据这64位的ID码来进行。
为保证在一条数据线上实现双向通信,对DS18820的操作必须遵循严格的读写时序。以下介绍基于l-wire总线的几种典型操作,其余的l-wire总线命令都是由这些典型操作而来。
3.1.1 复位子函数
在复位与应答时序中,主机发出复位信号,要求l-wire器件在规定的时间内送回应答信号。
首先主机将总线拉低480 μs,发出复位脉冲,然后产生一个上升沿的跳变,并延时60 μs等待l-wire器件的应答;l-wire器件将总线拉低240μs,发出应答,主机收到应答后,再对DS18820进行ROM命令。
3.1.2 读写操作
所有的读写时序至少需要60μs,在位读和位写时序中,主机要在规定的时间内读回或写出数据。
写时序时,主机在拉低总线15μs之内释放总线,并向l-wire器件写l;读时序时,主机发出读数据命令,产生读时序,l-wire器件随即向主机传输数据。
3.2 DS18820的温度转换
DS18820网络温度测量的步骤一般是:器件初始化、复位、ROM操作、温度转换。初始化及复位完成后,要对网络中的器件进行ROM识别,然后再读取温度数据。
3.2.1 利用二叉树遍历算法进行器件识别
二叉树遍历算法是搜索识别网络中l-Wire器件的编程首选,二叉树遍历算法的要点可归纳为“读2位,写l位”。
首先主机向从机发出搜索命令,等待从机向主机发回当前位之后,再读从机发回当前位的反码,这两个位数据的编码存在4种可能:00、0l、10和11。
00表示从机在当前位上有位分叉,即0和l两个分支;
Ol表示从机的当前位均为O:
10表示从机的当前位均为l:
11表示总线上无器件响应。
显然,出现11时搜索应退出。
对于前3种情况,根据搜索策略,主机向从机写l位数据,决定继续搜索哪一分支。第2和第3种情况下,搜索仅有一个方向,如果是第1种情况即出现00时,需要选择下一步搜索路径,方法是比较搜索位所在位置和最后一次发生位差异的所在位置,若二者相等,搜索1分支,若前者>后者,搜索O分支,若前者<后者,则采用上一次的搜索路径。 在此需要注意两点:一是网络上DS18820发回的位数据呈“线与”关系:二是DS18820中64位ID码标记为第1-64位,而不是0-63位,空出来的O用来表示差异位位置记录的初始状态。
3.2.2 温度数据的读取
转换完成后的温度数据由低8位和高8位组成,且低8位在前,需将其转换为1个16位的数、高5位代表符号,低11位是温度值。11位的温度值中高7位是温度整数,低4位是温度小数,如果是负温度,则从温度寄存器读出的是补码,应将补码取反加l得到原码。
需要注意,单片机发出读取温度寄存器命令后,DS18820会返回9组数据,其中第一组数据的低4位代表温度的小数值,因此温度小数部分的精度为1/16=0.0625。另外程序中应增加延时函数,确保温度转换完成。
3.3 nRF2401程序设计要点
温度转换完成后,由nRF2401将数据发送给上位机,并接收上位机发出的指令,实现双向通信。
3.3.1 初始化配置与数据收发
nRF2401初始化配置包括设置待机模式、CRC校验、收发完成后中断响应、选择射频通道、设置数据传输率和发射功率。
nRF2401的CE管脚为O时处于待机模式,为l时处于收发模式,收发模式有ShockBurst模式和直接模式两种,本文选择速度较快、功耗较低的ShockBurst模式。
发送过程为:设置Config寄存器使器件处于发送模式,当测温节点有数据需要发送时,温度和地址数据送到nRF2401中,单片机将CE管脚置高,激活ShockBurst发送模式,完成数据打包并高速发送,然后等待中断。
接收过程为:设置Config寄存器使器件处于接收模式,单片机将CE管脚置高,激活ShockBurst接收模式,延时130 μs后检测空中信息,若接收到有效的数据包,则发送确认信号,产生中断,同时读出有效数据并发送给单片机,单片机通过串口将数据发给PC机。
3.3.2 收发模式的自动识别设计
为简化编程,增强代码通用性,本文为上位单片机和下位单片机设计了完全相同的同一套程序代码,系统自动识别并设置工作模式,无需人为区分单片机是接收还是发送。实现接收和发送模式自动切换的代码如下:
void Switch_RT(uchar SW, uchar mode)
{ //收发模式切换子函数
CE=O,
//待机
if(SW)
//为l
SPI_WR_Reg(CONFIG, SPI_RD(CONFIG)& Oxfe);
//发射模式
else
//为O
SPI_WR_Reg(CONFIG, SPI_RD(CONFIG)| Ox01);//接收模式if(mode)
CE=1;
//拉高CE启动收发
)
程序默认无线模块处于接收模式,下位单片机测得温度数据后,将Config寄存器的PRIM_RX位置O,控制nRF2401工作于发送模式,将数据打包发出,随即将PRIM RX位置l,处于接收模式:上位机端nRF2401接收到数据包后,即由上位单片机将其读出并通过串口传给上位PC机。
PC机向下位机发送指令时,首先将指令发给上位单片机,上位单片机一旦接到指令,即将PRIM RX位置O,控制nRF2401工作于发送模式,发出数据包:下位单片机通过nRF2401接收后将数据包读出执行。
4 系统运行情况
PC机应用程序采用Vis ualStudl02010 VB.net编写,上位单片机与PC机应用程序之间的通信通过串口控件实现,二者之间的参数设置需一致。
程序运行界面如图4所示,各库区温度正常时,温度值字体颜色正常,某库区温度超过正常值时,相应温度值字体以红色显示并闪烁,下位单片机自动接通对应库区继电器,启动散热风扇进行降温:当温度下降至正常值后,单片机控制继电器关断散热风扇,同时温度值字体颜色恢复正常。温度值右侧标签显示的数据是设定的正常温度范围。
“库区选择”组合框中有10个复选框,对应10个库区;按下“启动风扇”按钮可对所选库区进行强制通风:按下“关闭风扇”按钮可强制关闭散热风扇;“温度范围设定”按钮可对所选库区报警温度阈值进行设置:按下“保存数据”按钮可将库区编号、温度值、时间信息等保存至指定位置,便于查看分析。
5 结论
利用本文设计的无线传输系统,可以采集10个重要库所的温度数据,经过单片机的处理,将数据通过nRF2401传输给PC机显示。经实测证明,此无线传输方案能准确采集并传送温度数据,传送距离可达60米,空旷地带接近100米,既避免了繁琐的布线,又可有效防止恶劣天候的影响,采用元件少、简单易行、成本低廉、性能可靠、便于检修,是一种新颖实用的库区温度监控系统。
关键词:单片机;nRF2401;DS18820;测温网络;无线传输
DOI:10.3969/j.issn.1005-5517.2015.9.018
引言 库区温度直接关系到库存物资的安全与性能,目前库区温度数据的传输大多采用有线方式,存在布线难度大、材料成本高、维护检修不便等不足,并且数据线缆还易受雨雪、潮湿、鼠害等破坏。为克服此类弊端,本文采用nRF2401无线传输模块,结合l-Wire器件DS18820,设计开发一款库区温度数据无线传输系统。
1 总体方案
系统分为上位机与下位机两大部分,二者之间的通信通过nRF2401实现,如图l所示。上位机主要包括PC机和上位单片机,奠功能是负责接收下位机传送的温度数据和应用程序的运行,这一部分技术较为成熟,可借鉴的资料较多,不作为本文的重点:下位机采用51系列单片机AT89S51作为控制器,主要负责温度数据的采集、处理和传输,图l仅画出两组温度传感器和继电器,实际连接10组。本文将着重介绍其硬件电路和软件设计。
2 电路设计
下位机电路设计的重点是测温网络和无线传输模块的搭建,为实现多点测温,选用Dallas公司出品的DS18820,构建一个l-Wire总线的测温网络。DS18820是l-Wire总线的数字温度传感器,可直接将被测温度转化成串行数字信号供单片机处理,适用于恶劣环境的现场温度测量:无线传输模块选用新型单片射频收发器件nRF2401,该器件工作于2.4 GHz~2.5GHzISM频段,输出功率和通信频道可通过编程进行配置,同时,nRF2401功耗低,在以-6dBm的功率发射时,工作电流仅9mA,接收信号时,工作电流也仅12.3 mA,特别适合单片机应用场合。
图2是市售nRF2401无线模块,设计上位机、下位机电路时,只需留出相应接口即可。
图3是设计的电路原理图,单片机P12口连接10个测温器件(图中仅画出3个),从而构建一个小型l-Wire总线测温网络,可实现10个库区的温度测量:单片机其他口线连接有10个继电器(图中画出2个),用来控制10个库区散热风扇的运转:无线模块nRF2401通过接口端子与单片机连接,此处注意nRF2401工作电压是3.3V,需增加电压转换芯片,为节省篇幅图中并未画出。
上位机接收部分的电路主要由上位单片机、无线模块接口和电平转换部分组成,这是由于nRF2401输出数据格式是TTL电平,而PC机串口是MAX232电平,为此需要增加一个电平转换电路进行匹配。
3 软件编程
下位机编程重点在于温度数据的采集与传送,也就是DS18820和nRF2401的软件设计。
3.1 1-wire总线的基本原理和操作
软件设计之前,首先要了解l-wire总线的原理。l-wire总线的特点是用一条数据线同时传输时钟信号和数据,总线上每一个器件都有一个唯一的地址,包括48位的序列号、8位的家族码和8位的CRC码,主机对各器件的寻址依据这64位的ID码来进行。
为保证在一条数据线上实现双向通信,对DS18820的操作必须遵循严格的读写时序。以下介绍基于l-wire总线的几种典型操作,其余的l-wire总线命令都是由这些典型操作而来。
3.1.1 复位子函数
在复位与应答时序中,主机发出复位信号,要求l-wire器件在规定的时间内送回应答信号。
首先主机将总线拉低480 μs,发出复位脉冲,然后产生一个上升沿的跳变,并延时60 μs等待l-wire器件的应答;l-wire器件将总线拉低240μs,发出应答,主机收到应答后,再对DS18820进行ROM命令。
3.1.2 读写操作
所有的读写时序至少需要60μs,在位读和位写时序中,主机要在规定的时间内读回或写出数据。
写时序时,主机在拉低总线15μs之内释放总线,并向l-wire器件写l;读时序时,主机发出读数据命令,产生读时序,l-wire器件随即向主机传输数据。
3.2 DS18820的温度转换
DS18820网络温度测量的步骤一般是:器件初始化、复位、ROM操作、温度转换。初始化及复位完成后,要对网络中的器件进行ROM识别,然后再读取温度数据。
3.2.1 利用二叉树遍历算法进行器件识别
二叉树遍历算法是搜索识别网络中l-Wire器件的编程首选,二叉树遍历算法的要点可归纳为“读2位,写l位”。
首先主机向从机发出搜索命令,等待从机向主机发回当前位之后,再读从机发回当前位的反码,这两个位数据的编码存在4种可能:00、0l、10和11。
00表示从机在当前位上有位分叉,即0和l两个分支;
Ol表示从机的当前位均为O:
10表示从机的当前位均为l:
11表示总线上无器件响应。
显然,出现11时搜索应退出。
对于前3种情况,根据搜索策略,主机向从机写l位数据,决定继续搜索哪一分支。第2和第3种情况下,搜索仅有一个方向,如果是第1种情况即出现00时,需要选择下一步搜索路径,方法是比较搜索位所在位置和最后一次发生位差异的所在位置,若二者相等,搜索1分支,若前者>后者,搜索O分支,若前者<后者,则采用上一次的搜索路径。 在此需要注意两点:一是网络上DS18820发回的位数据呈“线与”关系:二是DS18820中64位ID码标记为第1-64位,而不是0-63位,空出来的O用来表示差异位位置记录的初始状态。
3.2.2 温度数据的读取
转换完成后的温度数据由低8位和高8位组成,且低8位在前,需将其转换为1个16位的数、高5位代表符号,低11位是温度值。11位的温度值中高7位是温度整数,低4位是温度小数,如果是负温度,则从温度寄存器读出的是补码,应将补码取反加l得到原码。
需要注意,单片机发出读取温度寄存器命令后,DS18820会返回9组数据,其中第一组数据的低4位代表温度的小数值,因此温度小数部分的精度为1/16=0.0625。另外程序中应增加延时函数,确保温度转换完成。
3.3 nRF2401程序设计要点
温度转换完成后,由nRF2401将数据发送给上位机,并接收上位机发出的指令,实现双向通信。
3.3.1 初始化配置与数据收发
nRF2401初始化配置包括设置待机模式、CRC校验、收发完成后中断响应、选择射频通道、设置数据传输率和发射功率。
nRF2401的CE管脚为O时处于待机模式,为l时处于收发模式,收发模式有ShockBurst模式和直接模式两种,本文选择速度较快、功耗较低的ShockBurst模式。
发送过程为:设置Config寄存器使器件处于发送模式,当测温节点有数据需要发送时,温度和地址数据送到nRF2401中,单片机将CE管脚置高,激活ShockBurst发送模式,完成数据打包并高速发送,然后等待中断。
接收过程为:设置Config寄存器使器件处于接收模式,单片机将CE管脚置高,激活ShockBurst接收模式,延时130 μs后检测空中信息,若接收到有效的数据包,则发送确认信号,产生中断,同时读出有效数据并发送给单片机,单片机通过串口将数据发给PC机。
3.3.2 收发模式的自动识别设计
为简化编程,增强代码通用性,本文为上位单片机和下位单片机设计了完全相同的同一套程序代码,系统自动识别并设置工作模式,无需人为区分单片机是接收还是发送。实现接收和发送模式自动切换的代码如下:
void Switch_RT(uchar SW, uchar mode)
{ //收发模式切换子函数
CE=O,
//待机
if(SW)
//为l
SPI_WR_Reg(CONFIG, SPI_RD(CONFIG)& Oxfe);
//发射模式
else
//为O
SPI_WR_Reg(CONFIG, SPI_RD(CONFIG)| Ox01);//接收模式if(mode)
CE=1;
//拉高CE启动收发
)
程序默认无线模块处于接收模式,下位单片机测得温度数据后,将Config寄存器的PRIM_RX位置O,控制nRF2401工作于发送模式,将数据打包发出,随即将PRIM RX位置l,处于接收模式:上位机端nRF2401接收到数据包后,即由上位单片机将其读出并通过串口传给上位PC机。
PC机向下位机发送指令时,首先将指令发给上位单片机,上位单片机一旦接到指令,即将PRIM RX位置O,控制nRF2401工作于发送模式,发出数据包:下位单片机通过nRF2401接收后将数据包读出执行。
4 系统运行情况
PC机应用程序采用Vis ualStudl02010 VB.net编写,上位单片机与PC机应用程序之间的通信通过串口控件实现,二者之间的参数设置需一致。
程序运行界面如图4所示,各库区温度正常时,温度值字体颜色正常,某库区温度超过正常值时,相应温度值字体以红色显示并闪烁,下位单片机自动接通对应库区继电器,启动散热风扇进行降温:当温度下降至正常值后,单片机控制继电器关断散热风扇,同时温度值字体颜色恢复正常。温度值右侧标签显示的数据是设定的正常温度范围。
“库区选择”组合框中有10个复选框,对应10个库区;按下“启动风扇”按钮可对所选库区进行强制通风:按下“关闭风扇”按钮可强制关闭散热风扇;“温度范围设定”按钮可对所选库区报警温度阈值进行设置:按下“保存数据”按钮可将库区编号、温度值、时间信息等保存至指定位置,便于查看分析。
5 结论
利用本文设计的无线传输系统,可以采集10个重要库所的温度数据,经过单片机的处理,将数据通过nRF2401传输给PC机显示。经实测证明,此无线传输方案能准确采集并传送温度数据,传送距离可达60米,空旷地带接近100米,既避免了繁琐的布线,又可有效防止恶劣天候的影响,采用元件少、简单易行、成本低廉、性能可靠、便于检修,是一种新颖实用的库区温度监控系统。