目前,我国绝大多数的温度监测系统都是传统方式,主要有就地进行数据采集的方式和有线通信的实时温度监测系统,前者测量方法单一,测量数据不连续且时效性差,后者缺少灵活性且适用环境有限。随着信息通信与电子技术的迅猛发展,使得传统的数据采集方式已不能满足需求,严重地制约了现代化监测系统发展的进程。例如在监测区域环境复杂,且监测点的位置分布较分散的情况下,布线复杂而且慢,人力物力成本较大,不适合与控制中心进行有线通信。无线监测系统是无线技术发展至今最重要的应用之一,采用无线网络可增强监测系统的灵活性和可扩充性,省去网络布线的麻烦。
因此,本文尝试研究一种无线温度监测系统,此系统将无线收发模块与单片机相结合,采用抗干扰能力强的射频发射模块及接收模块实现无线通信,提高系统的可靠性。该监测系统具有结构简单、使用方便、成本低、工作稳定可靠等优点。
1无线传感器节点硬件设计
1.1单片机选择方案
无线传感器节点要实现对温度信息的采集、处理和无线传输。无线传感器节点内的单片机对节点起管理、控制作用,并进行信号处理。在选择单片机时,主要参考以下标准:首先,要求单片机的功耗要很小,由于它消耗的是节点中电池的电量,并且长期处在工作状态,所以必须具有功耗低的特点。其次,要求单片机的价格适中,不能使成本太高。此外单片机的运行速度和程序存储空间大小,对以后节点功能的扩展很重要。本无线传感器节点采用STC12C5A60S2单片机去控制nRF24L01射频芯片和DS18B20温度传感器,其硬件结构与功能模块的对应关系如图1所示。
图1无线传感器节点新一代STC12C5A60S2与传统的MCS-51系列单片机指令完全兼容,具有高速、低功耗及抗干扰性能强等优点。该单片机拥有60K的程序存储器和1280字节RAM,完全能满足单片机系统的软件设计要求;且该单片机是新一代单时钟/机器周期(1T),其处理速度是传统51单片机的8到12倍,便于以后进行功能扩展,例如:可以快速处理其所在节点的路由算法。故STC12C5A60S2单片机是构建本监测节点理想的选择
1.2无线收发模块
nRF24L01是一款工业级内置硬件链路层协议的低成本无线收发器。该器件工作于2.4 GHz全球开放ISM频段,内置频率合成器、功率放大器、晶体振荡器、调制器等功能模块,可直接与单片机I/O连接.nRF24L01功耗低,以-6 dBm的功率发射时,工作电流仅9 mA;接收时,工作电流仅12.3 mA,多种低功率工作模式(掉电和空闲模式)更利于节能设计[3]。与nRF24L01的SPI接口连接时,可以利用单片机硬件的SPI口,也可以用单片机I/O口进行模拟。该收发模块内部有FIFO可以与各种高低速微处理器接口,便于使用低成本单片机。
1.3温度采集芯片
DS18B20结构简单,采用一根I/O数据线既可供电又可传输数据。在现场采集温度数据时,将数据直接转换成数字量输出。测量温度范围为-55~125℃,在-10~85℃时精度为±0.5℃;可编程的分辨率为9~12位,对应的可分辨温度分别为0.5、0.25、0.125、0.062 5℃,可实现高精度测温;在9位分辨率时最多在93.75 ms内把温度转换为数字,12位分辨率时最多在750 ms内把温度值转换为数字,速度很快;测量结果直接输出数字温度信号,以“一线总线”串行传送给处理器,同时可传送CRC校验码,具有极强的抗干扰纠错能力。
2硬件原理图
单片机的SPI接口有两种操作模式:主模式和从模式。在主模式中支持高达3Mbit/s的速率,从模式时速度低些.nRF24L01提供的SPI接口数据传输率取决于单片机本身接口速度。单片机通过SPI对nRF24L01进行状态配置,系统设为发送模式,单片机就把数据输入到nRF24L01,当P0.2(CE)信号从1变为0时,nRF24L01就把从单片机收到的数据以2Mbit/s的速率发射出去,并通过IRQ信号通知单片机发送完成。若系统设为接收模式,nRF24L01就一直在监测天线接收的信号,若有同频的信号,就收下并打开信息包读取地址,地址与自己的相同就取出信息包里的有用数据,并通过IRQ信号通知单片机取走。节点原理图如图2所示。
3系统工作流程
无线传感器节点在启动后,首先配置nRF24L01的相关寄存器,使其工作在发送状态。节点在发送模式下,首先复位DS18B20,单片机向DS18B20发送温度转换命令,读取已转换的温度值,然后交由nRF24L01发送。上位机的接收模块在接收模式下,首先读取无线模块的状态寄存器,并判断是否接收到数据,若没有,则一直检测等待数据的到来;若有,则接收数据并送至接收模块的RS232串口处,上位机监测软件从串口处读取数据并显示。其工作流程如图3、4所示。
4系统实现
4.1 STC12C5A60S2控制温度传感器DS18B20
从DS18B20读1字节数据图2节点电路原理图
{uchar i=0,dat;
for(i=0;i《8;i++)
{DQ=1;//先拉高
delay_1us();//稍作延时
DQ=0;//启动读时序
delay_1us();//稍作延时
DQ=1;//释放总线
delay_us(6);//延时约7μs,主机采样
dat》》=1;//先右移一位,使最高位为0
if(DQ==1)
dat|=0x80;//与10000000或,dat=10000000
else
dat|=0x00;//取值为0
delay_us(50);
}
eturn(dat);}
向DS18B20写1字节数据
void DS18B20_WriteByte(uchar x)
{uchar i;
for(i=0;i《8;i++)
{DQ=1;
delay_1us();//稍作延时
DQ=0;//启动写时序
DQ=x&0x01;//向数据线传送最低位
delay_us(40);//延时约50μs,供18b20采样数据
DQ=1;//释放总线
delay_1us()
;x》》=1;//右移一位
}
delay_us(2);//写完一个指令稍作延时}
4.2 STC12C5A60S2控制无线模块nRF24L01
函数:SPI_RW()。描述:根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01读出一字节
uchar SPI_RW(uchar byte)
{uchar i;
for(i=0;i《8;i++)//循环8次
{MOSI=(byte&0x80);//byte最高位输出到MOSI
byte《《=1;//低一位移位到最高位
SCK=1;//拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据
byte|=MISO;//读MISO到byte最低位
SCK=0;//SCK置低}return(byte);//返回读出的一字节
}
函数:SPI_Read_Buf()。描述:从reg寄存器读出bytes个字节,通常用来读取接收通道数据或接收/发送地址
uchar SPI_Read_Buf(uchar reg,uchar*pBuf,uchar bytes)
{uchar status,i;
CSN=0;//CSN置低,开始传输数据
status=SPI_RW(reg);//选择寄存器,同时返回状态字
for(=0;i《bytes;i++)
pBuf [i] = SPI_RW 0);//逐个字节从nRF24101读出
CSN = 1; //CSN拉高,结束数据传输
return ftatus); /1返回状态寄存器
函数:SPI_W rite_Buf 0.描述:把pBuf 緩存中的数据写入到nRF24101,通常用来写入发射通道数据或接收1发送地址
SPI_ W rite_ Buf Guchar reg.uchar ucharpBuf.w har bytes )
{uchar status.i ;
CSN = 0; 11CSN 置低。开始传输数据
status = SPI_RW feg); 11选择寄存器,同时返回状态字
for i=0;i《bytes;i++)
SPI_ RW (pBuf [i]);//逐个字节写入nRF24L01
CSN = 1; //CSN拉高,结束数据传输
return Status); 11返回状态寄存器
4.3上位机接受数据的实验结果
上位机实时显示温度变化如图5所示。
5.结语
单片机采用新一代增强型8051STC12C5A60S2 与高度集成的nRF24L01器件结合,大大简化了系统硬件和软件设计,减小了体积,提高了系统工作的可靠性,且系统的运行速度得到很大提高。实践证明该系统设计简单成本低廉,运行速度快。通信可靠。运行稳定。具有较高的实用价值。由于STCI2C5A60S2 的程序存储器空间比传统的51单片机大了10倍之多,且运行速度也提高了8-12倍,这有利于以后进行节点路由功能的扩展.
评论
查看更多