基于无线传感器网络的特点,以CC2430芯片为核心设计了一种微型传感器节点。详细阐述了传感器节点的温湿度数据采集模块、电池能量检测模块以及节点之间“点对点”无线通信的软件流程。
关键词: 无线传感器网络 传感器节点 CC2430
无线传感器网络是由部署在监测区域内的大量微型传感器节点组成的,通过无线通信方式形成一个多跳的自组织的网络系统,其目的是协作地感知、采集和处理网络覆盖区域中感知对象的信息,并发送给观察者。无线传感器网络技术在美国商业周刊和MIT技术评论的预测未来技术发展报告中,分别被列为21世纪最有影响的21项技术和改变世界的10大技术之一。
传感器节点是无线传感器网络的基本组成单位。它由传感器模块、处理器模块、无线通信模块和能量供应模块四个部分组成。由于传感器节点通常是一个微型的嵌入式系统,它的处理能力、存储能力和通信能力相对较弱,并通过携带能量有限的电池供电。本文依据传感器节点的这些特点,设计了一种用于环境中温湿度监测的以芯片CC2430为核心的无线传感器网络节点。
1 CC2430简介
CC2430芯片是Chipcon公司提供的全球首款支持ZigBee协议的SoC解决方案。它延用了CC2420芯片的架构,在单个芯片上整合了ZigBee 射频(RF)前端、内存和微控制器。CC2430拥有1个8位8051MCU,8KB的RAM,32KB、64KB或128KB的Flash,还包含模拟数字转换器、几个定时器、AES128协处理器、看门狗定时器、32kHz晶振的休眠模式定时器、上电复位电路、掉电检测电路,以及21个可编程I/O引脚。
CC2430芯片采用0.18μm CMOS工艺生产,工作时的电流损耗为27mA;在接收和发射模式下,电流损耗分别低于27mA或25mA。CC2430的休眠模式和转换到主动模式的超短时间的特性,特别适合那些要求电池寿命非常长的应用。
CC2430芯片的主要特点有:32MHz单指令周期低功耗的8051微控制器核;集成兼容IEEE802.15.4标准2.4GHz频段的RF无线电收发机;8KB的SRAM,其中4KB可在所有功耗模式下保持数据;兼容RoHS的7×7mmQLP封装;4种可编程功耗模式;可编程的看门狗定时器;上电复位功能;支持硬件调试功能;优良的无线接收灵敏度和强大的抗干扰性;在休眠模式时仅0.9μA的流耗,外部中断或RTC能唤醒系统;在待机模式时少于0.6μA的流耗,外部中断能唤醒系统;硬件支持CSMA/CA功能;较宽的电压范围(2.0~3.6V);数字化的RSSI/LQI支持和强大的DMA功能;具有电池监测和温度感测功能;集成了14位模数转换的ADC;集成AES安全协处理器;带有2个强大的、支持几组协议的USART,以及1个符合IEEE 802.15.4规范的MAC计时器,1个常规的16位计时器和2个8位计时器。
2 节点的硬件设计
无线传感器网络的节点通常由传感器模块、处理器模块、无线通信模块和电源模块构成。处理器模块和无线通信模块采用CC2430芯片,大大简化了射频电路的设计。传感器模块采用集成温湿度传感器SHT10。电源模块采用3V纽扣电池。节点的硬件原理框图如图1。
SHT10用于采集周围环境中的温度和湿度,其工作电压为2.4~5.5V,测湿精度为±4.5%RH,25℃时测温精度为±0.5℃。采用SMD贴片封装,与处理器的通信电路如图2所示。SHT10采用两条串行线与处理器进行数据通信。SCK数据线负责处理器和SHT10的通讯同步;DATA三态门用于数据的读取。DATA在SCK时钟下降沿之后改变状态,并仅在SCK时钟上升沿有效。数据传输期间,在SCK时钟高电平时,DATA必须保持稳定。为避免信号冲突,微处理器应驱动DATA在低电平。需要一个10kΩ的外部上拉电阻将信号提拉至高电平。本设计中CC2430的引脚P1.0用于SCK,P1.1用于DATA。
3 节点的软件设计
节点的软件分为数据采集、电池能量检测和无线通信这三个分别设计的模块。以下给出了各个模块的流程图和详细说明。
3.1 温湿度数据采集模块
温湿度传感器SHT10采用类似但不兼容I2C总线的方式和处理器通信。数据通过DATA线直接读取,控制流程如图3所示。首先用一组启动传输时序进行数据传输的初始化,然后发送一组测量命令(‘00000101’表示相对湿度,‘00000011’表示摄氏温度),释放DATA线,等SHT10下拉DATA至低电平,表示测量结束,同时接收数据。
其中产生启动传输时序的程序片段如下:
……
P1_1=1;
P1_0=1;
wait(1);//等待1ms
P1_1=0;
wait(1);
P1_0=0;
wait(1);
P1_0=1;
wait(1);
P1_1=1;
wait(1);
P1_0=0;
……
测量温度后,通过T=d1+d2×SOT计算出温度。
测量湿度后,再根据当前的温度,通过RH=(T℃-25)×(t1+t2×SORH)+c1+c2×SORH+c3×SORH2,计算出相对湿度。其中常量d1、d2、t1、t2、c1、c2和c3由SHT1x数据手册提供。
3.2 电源能量检测模块
无线传感器网络节点通常采用电池供电,电池的能量检测是重要环节。CC2430的ADC模块不仅可以采样P0端口引脚上的输入电压,还可以采样AVDD_SoC引脚上的1/3电压。这个功能通常用于实现电池的能量检测,即检测当前的电源电压是否在CC2430所能工作电压范围2.0~3.6V内。完成一次AD转换的控制流程是:首先设置AVDD_SoC引脚上电压的1/3为采样输入,然后启动AD转换,等待AD转换结束,寄存器ADCH:ADCL中的数据即为参考电压的相对数值。
由于是对电池能量的检测,可以采用CC2430内部提供的1.25V电压作为参考电压。用这个参考电压采样AVDD_SoC引脚上的1/3电压,从而得出当前的电源电压值。选用8位的采样精度,则寄存器ADCCON3应配置为0x0F。设置完寄存器后,ADC立即启动一次AD转化,寄存器ADCCON1的EOC位用于指示当前的转化是否结束。当EOC位变为1时,证明当前的转换完成,转换后的数值被存放在寄存器ADCH中。ADCH中的数值被读取后,EOC位自动恢复为0。根据取出的数值计算得到当前AVDD_SoC上引脚的电压。通过连续采样10次进行均值滤波,用这个平均值与用户设定的最低有效工作电压2.4V相比,可判断出当前电压是否正常。该模块的程序流程图如图4。
其中由DATA[0...9]的均值Average计算实际电压的代码如下:
……
Voltage=( (Average*15)>>9);//Voltage为实际电压的10倍
……
3.3 无线通信模块
无线传感器网络通信的基础是节点之间的点对点通信。本小节以两个节点之间的通信为例,介绍了点对点通信的过程和实现方法。首先,定义一种比IEEE802.15.4规范所定义的MAC协议层数据帧简单的MAC层数据帧的格式:
其中目标地址和源地址分别用1个字节表示。本例中只有两个节点互相通信,分别将两个节点的地址设为0和1。标志位Flags占1个字节,用于表示当前数据帧的类型。当数据帧中Flags字节的最高位为1时,表示该帧是数据序列中的一帧;第3位为1时,表示该帧是超时重传的数据帧;第2位为1时表示该帧是接收到数据帧后的答复帧;第1位为1时,表示目标节点在收到该数据帧后要答复。帧校验FCS由2个字节表示,是MAC层协议数据单元MPDU的校验。如果CC2430的RF寄存器MDMCTRL0L.AUTOCRC控制位设为1,FCS将由硬件自动实现,负责必须由软件用多项式x16+x12+x5+1进行CRC的生成和校验。
由于IEEE802.15.4规范中定义了物理服务数据单元(PSDU)的最大长度为127字节,而其中的5字节已经被使用,因此有效负载payload的字节长度在1~122之间。如果需要传送的数据长度超过122字节,则发送时这个数据应该被拆分成若干数据帧,以满足最大长度的限制。目标节点则必须能够将接收到的数据帧整合成完整的数据。
IEEE802.15.4规定了RF物理层的工作频段为2.4GHz,共有16个频道。每个频道的实际工作频率和频道序号的关系式为:Fc=2405+5×(k-11)MHz,k=11,12,…26。两个节点的RF必须工作在相同的频道上,才能够互相收发数据。完成一次数据发送的程序流程图如图5。
系统初始化主要是将系统的工作频率设为32MHz的晶振频率,这样RF才能正常工作。RF初始化时,先设置通信频率,再通过设置RFPWR.RREG_RADIO_PD位为1给RF供电。RF初始化的过程还包括执行下面的代码来开启Rx,清空Rx、Tx的FiFo缓冲区以及校准Radio。
SRXON;
SFLUSHTX;
SFLUSHRX;
SFLUSHRX;
STXCALN;
ISSTART;
DMA的初始化阶段要为Tx分配1个空闲的DMA通道。首先要为通道0和通道1~4分别设置好通道描述数据结构的存放地址,并将首地址分别写入DMA0CFGH:DMA0CFGL和DMA1CFGH:DMA1CFGL。再为这个分配好的DMA通道设置其描述数据结构。该数据结构如下:
typedef struct {
BYTE SRCADDRH;//源地址
BYTE SRCADDRL;
BYTE DESTADDRH;//目的地址
BYTE DESTADDRL;
BYTE VLEN :3;
BYTE LENH :5;
BYTE LENL :8;
BYTE WORDSIZE :1;
BYTE TMODE :2;
BYTE TRIG :5;
BYTE SRCINC :2;
BYTE DESTINC :2;
BYTE IRQMASK :1;
BYTE M8 :1;
BYTE PRIORITY :2;
} DMA_DESC;
当设置为Tx准备的DMA通道时,需将数据的源地址SRCADDRH: SRCADDRL设为所要发送数据的起始地址,目标地址DESTADDRH: DESTADDRL设为寄存器RFD的地址0xDFD9。然后,在LENH:LENL中设置所要发送数据的长度,并将VLEN设为0。将WORDSIZE位设为0,表示DMA数据按字节进行传输(设为1表示按字传输)。DMA的数据传送模式按照一次触发传输的数据量可分成四种,由TMODE设置选择。本例中采用Block模式,即一次DMA触发可进行一个完整数据块的传输。CC2430定义的DMA触发信号有31种之多,由TRIG位设置。将TRIG设置为0,表示采用无触发模式,这样DMA在每次接收到DMAREQ信号后才启动一次数据传输。SRCINC和DESTINC分别用于设置数据源地址和目标地址的变化方式,可设为不变、增1、增2或减1。由于采用按字节的Block模式向Radio发送数据,因此数据源地址选择增1变化,而数据目标地址则一直为寄存器RFD的地址0xDFD9,故设为不变。IRQMASK位用于设置是否在DMA数据传输完后发中断信号。本例中设为0,即禁止DMA中断。M8是按字节传输时的数据宽度,设为0表示8位传输,为1时表示只传输字节的低7位。本例中设为0。PRIORITY用于优先级设置,本例中设为2,即中等优先级。
DMA描述设置好后,通过设置寄存器DMAARM和RMREQ的位来准备相应的DMA通道以及启动这个通道上数据块的传输。在启动DMA数据传输之前,将当前数据帧的长度、目标节点地址、源节点地址、标志字节通过直接写寄存器RFD的方式写入TXFIFO。这样在启动DMA传输后,完整的数据帧将被传输至TXFIFO。通过给CSP发送指令ISTXONCCA启动TX传输。这就完成了一帧数据的发送。
数据接收的过程同样需要设置系统工作频率为32MHz,且应确保Rx工作在Tx相同的频道上,并设置DMA通道。其中DMA的数据源为寄存器RFD,并将DMA触发信号设为RADIO,即Radio接收到数据时触发DMA。数据接收的程序流程如图6所示。
本文在总结归纳对芯片CC2430已有研究成果的基础上,阐述了基于CC2430的无线传感器网络节点的设计和实现,并详细介绍了两个节点之间点对点通信的实现。在实验中,节点能够采集环境的温、湿度和节点的电池电压,并将采集的数据在节点中传播。本文的研究为进一步的上层通信协议设计提供了基础,具有一定的研究意义。
评论
查看更多