引言
目前,无线通信技术已经成为一大热点,而系统设计的微型化、低功耗成为发展的必然趋势。在保证系统工作可靠性的前提下,如何实现系统低功耗是无线数据传输系统亟待解决的一个主要问题。本文利用MSP430超低功耗单片机和2.4 GHz ISM频段的射频芯片EM198810设计了一种低功耗的无线数据传输系统。该系统使用干电池供电,可广泛应用于电池供电的自动化数据采集系统、无线遥控、无线鼠标、无线键盘、无线电子标签、遥控玩具,以及水、气、热、电等居民计量表具无线远传自动抄表。
1系统概述
目前在2.4 GHz频段的集成射频芯片有多种,性能各有差异,表1列出了几种常用芯片的性能特点。
本系统采用MSP430F247单片机和EMC公司的EM198810芯片进行设计。MSP430系列单片机是一个16位精简指令集 (RISC)微处理器。它具有丰富的寻址方式(7种源操作数寻址,4种目的操作数寻址),简洁的27条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;具有高效的查表处理指令;有较高的处理速度,在8 MHz晶振驱动下指令周期为125 ns;中断源较多,并且可以任意嵌套;当系统处于省电的备用状态时,用中断请求唤醒只用6 μs。MSP430系列单片机的电源电压采用1.8~3.6 V,其在1 MHz的时钟条件下运行时,芯片的电流为200~400 μA左右,时钟关断模式最低只有0.1 μA。
表1常用2.4 GHz频段集成射频芯片的性能特点
EM198810芯片内建2.4 GHz GFSK射频收发器,带有8位数据帧无线收发功能,前导区可以设置为1~8字节,支持1~4个字地址(最多可达64位),最大数据传输速率为1 Mbps,允许长数据包传送;频率范围为2 400~2 482 MHz(81信道),传输距离100 m(PCB天线),RF输出功率2 dBm,接收灵敏度在-85 dBm以上,采用SPI数字编程接口,接口电压为2.5~3.7 V。该芯片发射功率可数字编程调节,通过寄存器的设置很容易实现低功耗模式;内建多种纠检错功能,采用各种有效载荷数据格式来消除直流漂移量;支持FEC的1/3、2/3纠检错功能和CRC16检错功能。内部具有FIFO和DIRECT两种工作模式:FIFO模式简单易用,对MCU要求不高,发射和接收各有64字节的缓冲区,一次发送、接收可以最多处理64字节数据;DIRECT模式对MCU要求较高,需要MCU处理各种纠检错功能。
2系统设计
2.1系统硬件设计
图1连接示意图
图1是MSP430F247单片机和EM198810的连接示意图,通过SPI总线与RF芯片相连。实际电路连接如图2所示。
图2实际电路图
2.2系统软件设计
数据包格式如下:
其中,前导区可配置为1~8字节,同步字可配置为16、32、48或64位;前导尾区可配置为4、6、8……18位;数据区可为NRZ码、Manchester码、8/10位码、带FEC的数据4种格式。
系统上电后,先使EM198810的RESET_n引脚为低电平,以保证芯片有效复位;再使此引脚为高电平,BRCLK脚会产生12 MHz的时钟;然后进行相关寄存器初始化。初始化程序流程如图3所示。
图3初始化程序流程
其中,Reg48为数据帧格式配置寄存器,需要设置前导区的长度(默认为3字节),同步字长度默认为64位,前导尾默认长度为4位,数据默认为NRZ格式。该寄存器的第2位为1则配置为睡眠模式,第3位为1则配置为待机模式。Reg49~51用于设置发射和接收的延迟时间。Reg52~55用于设置同步控制字,默认全部为0000H。Reg57用于配置是否启用CRC校验、包长度控制方式等。Reg48~57详细配置数据如下:
const unsigned char T_FRAME_TABLE[31]={
0x30, 0x98, 0x00,//0x30表明是Reg48,0x98和0x00是配置数据
0x31, 0xff, 0x8f,
0x32, 0x80, 0x28,
0x33, 0x80, 0x56,
0x34, 0x4e, 0xf6,
0x35, 0xf6, 0xf5,
0x36, 0x18, 0x5c,
0x37, 0xd6, 0x51,
0x38, 0x44, 0x44,
0x39, 0xe0, 0x00,
0xff
};
Reg0~28主要是配置发射功率、VCO、RSSI、接收延时、通道选择与控制、AMS测试及控制、BPF和AGC控制、发射与接收数据控制、直流漂移控制、PLL同步控制、数据收发的时序控制、N/VCO参数控制、时钟等。Reg0~28详细配置数据如下:
const unsigned char T_RF_TABLE[73]={
0x00, 0x35, 0x4d,//0x00表明是Reg0,0x35和0x4d是它的配置数据
0x02, 0x1e, 0x01,0x04, 0xbc, 0xf0, 0x05, 0x00, 0xa1,
0x07, 0x12, 0x4c,0x08, 0x80, 0x00,0x09, 0x21, 0x83,
0x0a, 0x00, 0x04,0x0b, 0x40, 0x41,0x0c, 0x80, 0x00,
0x0d, 0x00, 0x00,0x0e, 0x16, 0x9d,0x0f, 0x90, 0xad,
0x10, 0xb0, 0x00,0x12, 0xe0, 0x00,0x13, 0xa1, 0x14,
0x14, 0x81, 0x95,0x15, 0x69, 0x62,0x16, 0x00, 0x02,
0x17, 0x00, 0x02,0x18, 0xb1, 0x40,0x19, 0xa8, 0x0f,
0x1a, 0x3e, 0x04,0x1c, 0x58, 0x00,0xff
};
Reg0~28初始化完成后再延时2 ms,就可以直接进行数据的收发了。特别要注意的是,帧寄存器Reg48~57必须在RFIC寄存器 Reg0~28之前初始化。所有寄存器读写和收发的数据都是通过SPI接口进行的,并且只支持从模式,SPI操作时序如图4所示。在芯片第28脚LDO_TUNE接地时(R1断开,R2接0 Ω电阻),其数据在SPI_CLK时钟的上升沿有效;当LDO_TUNE接VDD时(R2断开,R1接0 Ω电阻),数据在SPI_CLK时钟的下降沿有效。只要SPI_SS为高电平,寄存器中的数据就保持不变;只有SPI_SS为低电平时,才能重新改写寄存器中的内容。
图4SPI操作时序
EM198810有两种检测收发数据包长度的方法:一种是自动在数据帧内检测出来,最大帧长度不能超过255字节。先设置Reg57的第13位为1,则发送或接收数据区中的第1个字节就代表数据的长度,帧控制器会自动控制收发开始与停止。另外一种是保持发射或接收的状态不变,通过外接MSP430F247来控制数据包的正确发送与接收。
发送数据流程如图5所示。在发射数据时,先设置Reg7的第8位为1,允许在内部状态机控制下进入数据发射状态,再设置Reg7的0~6位为所选通道。在发送前导尾区数据前,MSP430F247必须将数据放入FIFO中,如果数据长度超过63字节,应该分多次写入。FIFO_flag=1表示FIFO为空,MSP430F247利用此信号作为中断请求,保证发送数据写入FIFO的实时性,在数据发送完成后PKT_flag=1。
图5发送数据流程
如果设置Reg7[7]=1和Reg7[0~6]为与发射相同的通道,则芯片进入自动接收状态,接收数据流程如图6所示。当检测到同步字后会自动进行数据包的接收解码,接收完成后进入待机模式。如果接收数据超过63字节,则有FIFO_flag=1,MSP430F247利用此信号作中断请求以保证读出数据的实时性。
图6接收数据流程
在进行超低功耗设计时,MSP430F247可以设置定时器中断。平常处于LPM3或LPM4模式,要发送数据时产生定时器中断,同时控制EM198810处于待机或睡眠模式。MSP430F247工作在LPM3模式下电流为0.8 μA左右,LPM4模式下电流为0.1 μA左右。EM198810正常情况下发射电流26 mA,接收电流25 mA,待机电流1.9 mA;睡眠模式下为3.5 μA。若将EM198810设置为睡眠模式,将MSP430F247设置为LPM3模式,则系统耗电仅为4.3 μA,使用干电池供电完全可行。
MSP430F247通过SPI接口与EM198810相连,进入LPM3模式和退出LPM3模式的程序如下:
#include <msp430x24x.h>
void main(void){
WDTCTL = WDTPW + WDTHOLD;//停止WDT设置SPI口的参数:数据为8位,选择SPI模式的主机模式,时钟源为SMCLK,选择3线模式
UCB0CTL0 |= UCMSB + UCMST + UCSYNC;//3引脚, 8位SPI主机, MSB在先
UCB0CTL1 |= UCSSEL_2;//使用SMCLK
UCB0BR0 = 0x02;
UCB0BR1 = 0;
UCB0CTL1 &= ~UCSWRST;//初始化USCI状态机
CCTL0 = CCIE;//CCR0中断使能
CCR0 = 1000-1;
TACTL = TASSEL_1 + MC_1;//使用ACLK
_BIS_SR(LPM3_bits + GIE);//进入LPM3模式,总中断使能
}//定时器A0中断服务子程序
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void){
LPM3_EXIT;……//数据输入输出程序
_BIS_SR(LPM3_bits + GIE);//进入LPM3模式,总中断使能
}
将EM198810的Reg48的第2位设置为1,并将SPI_SS设为高电平,则进入睡眠模式;如再将SPI_SS设为低电平,则EM198810会自动唤醒,退出睡眠模式。
结语
经过实际电路连接后测试,数据发送端在进行500 kbps速率下连续发送数据时,整个系统电流为28.2 mA,接收数据端的电流为26.1 mA;当发射端进入到睡眠模式时电流为5.2 μA;当接收端进入待机状态LPM3后,整个系统电流为1.9 mA。按照2节干电池容量1 300 mAh计算,间隔1 min发送100字节数据,考虑单片机模式切换时间,则在500 kbps速率下:
发送数据所需时间为5 ms,1小时耗能:
28.2 mA×5 ms×60次=8 460 (mA?ms)
睡眠模式下1小时耗能:
5.2 μA×3 600 s×1 000 ms=18 720 (mA?ms)
发送状态下可以工作的时间为:
(1 300 mA×3 600 s×1 000 ms)/(18 720+8 460)=172 185 h
即2节干电池供电时可以工作20年。同样,可以计算出接收状态下可以工作683小时(大约28天)。因此本设计可以适合长期进行低功耗无线数据采集方面的应用。