基于nRF9E5和DS18B20的无线测温系统设计
扫描二维码
随时随地手机看文章
目前,很多场合的测温系统采用的还是有线测温设备,由温度传感器、分线器、测温机和监控机等组成,各部件之间采用电缆连接进行数据传输。这种系统布线复杂、维护困难、成本高,可采用无线方案解决这些问题。无线测温系统是一种集温度信号采集、大容量存储、无线射频发送、LED(或LCD)动态显示、控制与通信等功能于一体的新型系统。
本文从低功耗、小体积、使用简单等方面考虑,基于射频SoC nRF9E5和数字温度传感器DS18B20设计了一个无线测温系统,整个系统由多个无线节点和1个基站组成。无线节点工作在各个测温地点,进行温度数据采集和无线发送。基站与多个节点进行无线通信,并通过数码管将数据显示出来,同时可以通过RS-232串口将数据发送给PC。
nRF9E5简介
nRF9E5是Nordic公司推出的射频片上系统,内嵌8051兼容微控制器、RF收发器和4通道10位A/D转换器,是真正的系统级芯片,其功能结构如图1所示。
图1 nRF9E5功能结构框图
nRF9E5的片内微控制器与标准8051兼容,指令时序与标准8051稍有区别。中断控制器支持5个扩展中断源:ADC中断、SPI中断、唤醒中断和两个无线收发中断。此外,还扩展了两个数据指针,使得片外RAM存取数据更为方便。微控制器内有256B的数据RAM和512B的ROM。上电复位或软件复位后,控制器自动执行ROM引导区中的代码,用户程序通常在引导区的引导下,从E2PROM加载到1个4KB的RAM中,该RAM也可用来存储数据。当进行批量生产时,可要求厂家代理将程序固化到片内,这样可省去E2PROM的费用并进一步减小系统体积。
nRF9E5内置收发器具有与单片射频收发器nRF905相同的功能,可通过片内MCU的并行口或SPI口与微控制器通信。收发器由频率合成器、功率放大器、调制器和接收单元组成。输出功率、频道和其他射频参数可通过对特殊功能寄存器RADIO编程进行控制。发射模式(TX)下,最小工作电流仅为9mA(输出功率-10dBm),接收(RX)模式下的工作电流为12.5mA,掉电模式下的工作电流仅为2.5μA。可见,nRF9E5的功耗很低。
nRF9E5采用Nordic公司的ShockBurst技术(自动处理前缀、地址和CRC),实现低速数据输入,高速数据输出,从而降低了系统的平均功耗。另外,nRF9E5还具有载波检测功能。在ShockBurst接收方式下,当工作信道内有射频载波出现时,载波检测引脚(CD)被置高。也就是说,当收发器准备发送数据时,它首先进入接收模式并检测所工作的信道是否可以发送数据(信道是否空闲),这是一种简单的传输前监听协议。这个特性很好地避免了同一工作频率下不同发射器数据包之间的碰撞。
DS18B20概述
DS18B20是美国DALLAS公司的“单总线”数字温度传感器,它具有结构简单、体积小、功耗低、无须外接元件、用户可自行设定预警上下限温度等特点。“单总线”结构独特而且经济,采用一根I/O数据线既可供电又可传输数据,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
3引脚封装的DS18B20形如一只三极管,其内部结构如图2所示。主要由四部分组成:64位光刻ROM、温度传感器、非易失性的温度报警触发器和配置寄存器。此外,还有电源检测模块、存储和控制逻辑器、中间结果缓存器和8位循环冗余校验码(CRC)发生器。
图2 3引脚DS18B20内部结构
ROM中的64位序列号是出厂前被光刻好的,可以看作该DS18B20的地址序列码,每个DS18B20的64位序列号均不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。DS18B20内部的RAM由9个字节的高速缓存器和E2PROM组成,数据先写入高速缓存器,经校验后再传送给E2PROM。通过DS18B20功能命令对RAM进行操作。
DS18B20的测量温度范围为-55℃~125℃,在-10℃~85℃范围内,精度为0.5℃,可编程设定9~12位的分辨率,默认值为12位,转换12位温度信号所需时间为750ms(最大)。检测温度由2字节组成,字节1的高5位S代表符号位,字节0的低4位是小数部分,中间7位是整数部分。
无线测温系统组成及硬件设计
无线测温系统主要可分为基站和无线节点两大部分。每套系统一般只有1个基站,包括微控制器及射频收发单元、显示单元、报警单元、电源模块及接口单元,主要硬件连接如图3所示。
图3 基站主要部件原理图
接口单元是为了方便射频模块和PC的通信,通常可采用RS-232接口、USB接口、以太网接口等,其中,RS-232接口是目前PC与通信工业中应用最广泛的一种串行接口。本文使用RS-232接口,采用MAX3232芯片实现RS-232电平与TTL电平之间的转换。MAX3232是MAXIM公司生产的一种RS-232接口芯片,使用单一电源电压供电,电源电压在3.0~5.5V范围内都可以正常工作。
基站接收到数据后,将温度信息通过数码管(或液晶显示屏)显示出来,根据需要,还可以通过RS-232接口与PC进行通信。为简化系统,本设计直接用nRF9E5的P0口驱动数码管(未在图中给出),但是P0口不具备数据保持能力,需要外接一定大小的上拉电阻,显示方法采用扫描法。采用一个蜂鸣器作为报警装置,当温度超过设定范围时,鸣叫报警。射频天线采用单鞭天线。
无线节点分布在温度采集点,由数字温度传感器DS18B20、射频SoC nRF9E5、天线及电池组成。在实际应用中,可以有多个无线节点,它们与基站之间通过射频进行无线通信。无线节点的电路结构如图4所示,其中,25AA320为E2PROM程序存储器。DS18B20有寄生电源和外部电源两种供电方式,本文采用外部供电方式,VDD引脚直接连接外部电源。DS18B20在空闲时,其DQ脚由上拉电阻置为高电平。无线节点的天线根据实际需要可选用单鞭天线或PCB印制天线。
图4 无线测温节点结构简图
无线测温系统的软件设计
本系统软件设计比较复杂,整个软件系统的流程如图5所示,主要有以下几个关键函数:DS18B20初始化及温度采集函数、nRF9E5初始化及射频发送(接收)函数、数据显示函数、串口通信函数等。
图5 无线测温系统软件流程
限于篇幅,各个函数的详细流程图不再给出,仅列出几个函数片断供参考,程序采用C语言编写,用Keil C51进行编译。
DS18B20采用单总线数据传输方式,对读写的操作时序要求严格。DS18B20提供了一系列指令来控制传感器的工作,利用这些指令就可以对DS18B20进行操作了。为了操作方便,可编写两个操作函数,源码如程序清单1所示。
程序清单1:
//-------------------
//启动DS18B20的1次温度转换
//-------------------
void ConvertT(void)
{
RST18B20( ); //初始化
WR18B20(0xcc); //跳过多传感器识别
WR18B20(0x44); //启动温度转换
}
//-------------------
//读取DS18B20
//-------------------
int ReadT(void)
{
RST18B20( ); //初始化
WR18B20(0xcc); //跳过多传感器识别
WR18B20(0xbe); //读DS18B20缓存器
DPL=RD18B20( ); //温度低位
DPH=RD18B20( ); //温度高位
return(DPTR); //返回读出的温度值
}
在开始进行无线通信前,必须对nRF9E5进行初始化配置,这个配置是通过对配置寄存器的设置来完成的。nRF9E5有一个144位的配置字,规定了无线收发器的接收地址、收发频率、发射功率、无线传输频率、无线收发模式、CRC校验和的长度及有效数据的长度等。nRF9E5的初始化工作,可根据具体要求对照数据手册进行配置。
数据的发送和接收是无线收发器的主要功能,当有数据要发送时,首先通过SPI接口把所要发送的数据送给nRF905模块,设置TRX_CE、TXEN为高以激活nRF9E5进入发送状态。无线系统自动上电,数据自动加前导码和CRC校验,然后发送数据包。具体过程如程序清单2所示。
程序清单2:
//-------------------
//发送数据包
//-------------------
void TransmitPacket(INT8U *pBuf)
{
INT8U i;
RACSN = 0;
SpiReadWrite(WTP);
for (i=0; i<Nrf9e5Config[10]; i++)
{
SpiReadWrite(pBuf[i]); //写入发送缓冲区
}
RACSN = 1;
TXEN = 1;
TRX_CE = 1; //使能发送
Delay100us(1);
TRX_CE = 0; //发送完毕
}
当要接收数据时,通过设置TRX_CE为高、TXEN为低,使nRF9E5进入接收状态。当nRF9E5监测到和接收频率相同的载波时,载波检测(CD)被置高;当接收到有效的地址时,地址匹配(AM)被置高;当接收到有效的数据包(CRC校验正确)时,数据就绪(DR)置高。接收数据的具体程序清单不再列出。
当需要将接收到的数据通过RS-232串口输出时,首先要进行串口初始化,开启nRF9E5管脚P0.1、P0.2的第二功能,具体过程见程序清单3。
程序清单3:
//-------------------
//串口初始化
//-------------------
void InitUart(void)
{
TH1=243;
CKCON|=0x10;
PCON=0x80; // 设置波特率
SCON=0x52; // 模式1,使能接收
TMOD&=~0x30;
TMOD|=0x20;
TR1=1; //定时器1开启
P0_ALT|=0x06; //串口使能
P0_DIR|=0x02; //P0.1 输入
P0_DIR&=0xfb; //P0.2输出
ES=0;
}
结束语
本文基于nRF9E5和DS18B20设计了一个无线测温系统,具有体积小、功耗低等优点,适用于采油厂、发电厂、钻井施工等不宜进行有线测温的场合,应用前景广阔。