目前,在遥控遥测、无线抄表、门禁系统、小区传呼、工业数据采集、无线遥控系统、无线鼠标键盘等许多应用领域,都采用无线方式进行远距离数据传输。本文介绍一种采用通用的低功耗单片机MSP430作为主控芯片、具有多信道的单片收发芯片nRF905作为无线收发模块、利用SPI口实现双向通讯的无线数据传输系统。系统集成了MSP430在低功耗应用方面的优势和nRF905无线特有的多频道支持及功耗低、易控制等优点,特别适合于低功耗、小数据量的无线数据传输系统。
1 系统的总体结构
系统总体框图如图1所示。主控MCU使用TI公司MSP430系列中的 F1491型,射频收发模块使用Nordic公司的nRF905实现无线数据收发。除MSP430和nRF905外,系统还提供RS-232接口,可以实现与PC机的通讯,RS-485接口满足一些通用仪器仪表的要求。根据不同的应用需求,可选择采用PCB天线或高增益的外置式天线以满足远距离的需求。
2 系统主要芯片介绍
MSP430是TI公司推出的16位系列单片机,在电池供电的低功耗应用中具有独特的优势。其工作电压在1.8~3.6V之间,正常工作时功耗可控制在 200μA左右,低功耗模式时可实现2μA甚至0.1μA的低功耗。本系统所采用的MSP4301491系列在单个芯片上集成8通道12位的A/D转换、 2个16位定时器、2个USART接口、16位看门狗、48个GPIO 端口及2 048KB RAM和60KB的flash,单片即可满足大多数应用需要。其高效率精简16 位指令结构可以确保任何任务的快速执行,大多数指令可以在一个时钟周期内完成;它还具有高级语言编程能力,使软件开发更为便利[1]。
射频部分使用Nordic公司的多通道单片收发芯片nRF905[2]。它采用GFSK 调制解调技术,工作电压为1.9~3.6V,工作于433/868/915MHz 3个ISM频道。nRF905由频率合成器、接收解调器、功率放大器、晶体振荡器和调制器组成,具有低功耗的Shock Burst工作模式,可以自动完成前导码和CRC的工作,可由片内硬件自动完成曼彻斯特编码/解码,使用SPI接口与MCU通信,配置非常方便。作为射频发射芯片,其低功耗性能是极为突出。以-10dBm的输出功率发射时,电流只有11mA,在接收模式时电流为12.5mA。nRF905传输数据时为非实时方式,即发送端发出数据,接收端收到后先暂存于芯片存储器内,外部的MCU可以在需要时再到芯片中去取。nRF905一次发射最多可传输的数据量为 32B。天线接口设计为差分天线,便于使用低成本的PCB天线[3]。
3 点对点无线通信的实现
3.1 SPI接口
nRF905利用SPI口实现与MCU的双向通讯。nRF905的SPI总线包括4个引脚:CSN(SPI使能)、SCK(SPI时钟)、MISO (主入从出)和MOSI(主出从入)。其中CSN可以接到一个GPIO端口控制芯片工作,而其他三个脚则连接到主控MCU的SPI接口上。主控MCU可以使用GPIO端口控制nRF905的3根控制线,控制低功耗的PWR_UP、正常工作的TX_EN、选择发送还是接收方式的TRX_CE。nRF905有两种节能模式和两种工作模式,分别为掉电模式、待机模式、Shock Burst 接收模式和Shock Burst发送模式。这几种模式由主控MCU通过控制nRF905的3个引脚PWR_UP、TRX_CE和TX_ EN的高低电平来决定。nRF905有3个引脚用于状态输出,分别是:CD(载波检测)、AM(地址匹配)和DR(数据就绪),均为高电平有效。 nRF905在处于接收模式时,若检测到接收频率段的载波,就置CD为高。接着检测载波数据中的地址字节,若与本身已配置的接收地址相同,则置AM为高;若检测到接收数据中的CRC校验正确,则存储有效数据字节,置DR为高。
MCU通过SPI总线配置nRF905的内部寄存器和收发数据。这里nRF905为从机,其SPI的时钟范围很宽,可为1Hz~10MHz,因此 MCU在写控制程序时不必苛求时间的准确度。SPI总线的每次操作都必须在使能引脚CSN的下降沿开始,CSN 低电平有效,总线上的数据在时钟的上升沿有效。MCU对SPI总线进行读操作时,先把CSN置低,然后在MOSI 数据线上输出一个表示读命令的字节,与此同时,nRF905会在MISO数据线上输出一个字节表示状态信息的数据,随后输出一个地址字节,后面跟随有效数据。在进行写操作时比较简单,MCU先把CSN拉低,然后在MOSI线上输出写命令字节和数据字节即可。
3.2 数据收发过程
在nRF905正常工作前,必须由MCU根据需要写好配置寄存器。发送数据时,先通过MCU把nRF905置于待机模式(PWR_UP置为高、 TRX_CE置为低),然后通过SPI总线把发送地址和待发送的数据都写入相应的寄存器中,之后把nRF905置于发送模式(PWR_UP、TRX_CE 和TX_EN全部置高),配置成功后数据就会自动发送出去。若射频配置寄存器中的自动重发位(AUTO_RETRAN)设为有效,数据包就会被重复发出,直到MCU拉低TRX_CE退出发送模式为止。nRF905发送数据的流程图如图2所示。