1 引言
在许多测控现场,传统数据传输都是通过有线电缆实现的。随着射频、集成电路技术的发展,无线通信功能的实现更容易,数据传输速率更快,抗干扰能力更强,因此,许多应用采用了无线传输技术。无线数据传输与有线数据传输相比,有诸多优点:一是成本低,省去大量布线;二是建网快捷,只需在每个终端连接无线数据传输模块和架设适当高度天线;三是适应性好,可应用于某些特殊环境;四是扩展性好,只需将设备与无线数据传输模块相连接。因此,无线传输是一种有效数据传输方式。
2 nRF905简介
nRF905是Nordic VLSI公司推出的单片射频收发器,工作电压为1.9 V~3.6 V。工作于433 MHz、868 MHz、915 MHz 3个ISM频段,频道转换时间小于650μs,最大数据速率为100 Kbit/s。nRF905由频率合成器、接收解调器、功率放大器、晶体振荡器和GFSK调制器组成。无需外加声表面滤波器,ShockBurst工作模式,自动处理字头和CRC,使用SPI接口与微控制器通信,配置方便。此外,其功耗低,以-10 dBm输出功率发射时电流仅11 mA,工作在接收模式时电流为12.5 mA,具有空闲模式与关机模式,易于实现功率管理。
nRF905具有两种工作模式和两种省电模式。工作模式包括:ShockBurst接收模式和ShockBurst发射模式。省电模式包括:掉电与SPI编程模式和待机与SPI编程模式。模式选择由TRX_CE、TX_EN和PWR_UP确定,如表1所示。
nRF905的所有配置是通过SPI接口完成。SPI对外由SCK、MISO、MOSI、CSN 4个引脚组成,对应5个内置寄存器和1个SPI指令集。5个内置寄存器分别是状态寄存器、RF配置寄存器、发送地址寄存器、发送有效数据寄存器、接收有效数据寄存器。某个SPI指令的设置决定了相应的功能。只有当nRF905处于待机或掉电状态,SPI接口才工作。任何一条指令均从CSN的由高到低的转换开始。寄存器操作时,每次只能读/写一个字节,或者先给出读/写的开始字节地址,然后再进行读/写操作。nRF905采用Nordic NLSI公司的ShockBurst技术。ShockBurst技术使nRF905能够提供高速的数据传输而无需昂贵的高速MCU进行数据处理和时钟覆盖。nRF905为微控制器提供一个SPI接口,速率由微控制器设定的接口速度决定。在ShockBurst工作模式下,nRF905以最大速率连接减小数字应用部分的速度降低应用平均电流消耗。在ShockBurst接收模式下,地址匹配(AM)和数据准备就绪(DR)信号通知MCU一个有效的地址和数据包,表明各自己接收完成。在ShockBurst发射模式下,nRF905自动产生前导码和CRC校验码,数据准备就绪(DR)信号通知MCU数据传输完成。总之,降低了MCU的存储器需求,即降低了MCU成本,缩短软件开发时间。
3 系统设计
3.1硬件电路设计
系统硬件电路是以单片机和nRF905为核心元件,由单片机的I/O端口分别控制nRF905的状态接口、模式接口和SPI接口,如图1所示。其中,单片机选用Microchip公司的PIC16F876,该单片机采用2层流水线结构设计,内置8 KB×14 Flash程序存储器,368 Byte数据存储器,256 Byte EEPROM数据存储器,13个中断源,PORTA、PORTB、PORTC 3个I/O端口,3个定时器和1个看门狗定时器,2个CCP模块,支持串行USART模块等,适用于无线传输系统的控制,同时,系统具有良好的电源管理,设计了LC-π型滤波电路,可有效隔离数字电路与nRF905电路的电源。
3.2通信协议设计另外,系统还加强了PCB的电磁兼容性设计。采用了双面板设计,并保留底层作为接地面;电源滤波电容尽量靠近nRF905放置,采用电容并联方式;nRF905所有的电源和旁路电容的接入点都要尽量靠近引脚;接地引脚直接通过孔与底面的地层连接;所有的开关数字信号和控制信号都远离晶体振荡器和电源线。
nRF905内置简单的通信协议,收发双方采用CRC校验。一旦CRC校验出错,当前数据就会丢失。因此,在内置协议的基础上,设计了完整通信协议。该协议由单片机软件控制实现,采用"误码--中断--重发"机制,如果通信中出现误码,单片机在正常的通信流程中产生中断,重新发送和接收刚才CRC出错的数据,确保通信成功。根据收发两端的不同任务,整个协议分为主控协议和从控协议。
无线通信协议是由单片机软件控制实现的,相据通信双方各自的特点分为M端协议和S端协议两部分。其中,M端协议在无线通信协议中具有主控作用。
3.2.1 M端协议设计
M端协议主要是从保证可靠接收的角度考虑,程序流程图如图2所示。采用nRF905的CD/AMDR信号作为状态查询,进行正常状态下的快速判断和接收。正常情况下,当M系统发送控制指令后进入接收模式,等待来自S系统的数据。与此同时,S系统在收到M系统的指令后,立即回传数据,M系统收到后,本次通信结束。但是,如果S系统根本就没有收到M系统发送的指令,或者S系统虽然收到M系统发的指令且也回传了数据,但M系统却没有像预期的那样收到该数据,则势必造成了M系统和S系统都处于接收状态,等待来自于对方的数据,单片机的程序则停留在不断查询CD/AM/DR信号状态,出现死循环。
为了避免陷入死循环,在单片机程序中专门设计了中断子程序,用于处理此类情况。中断子程序采用的中断源是TMR1定时器。一旦死循环运行超时,就会触发TMR1中断,程序跳转到中断子程序。中断子程序的任务是打破当前的僵局,使双方的程序运行都能回到正常的轨道上。考虑到S系统此时处于接收模式,正在等待来自M系统的指令,所以,M系统在中断子程序中重发上一条指令,然后返回主程序中,继续查询CD/AM/DR信号的状态,等待来自S系统的数据。而S系统收到该指令后判断是否是S端协议内容。通过M端重发指令的方式,使双方再建立一次通信,跳出上一次的死循环。如果本次通信仍然不成功,那么单片机程序会遵循中断一重发机制运行,直到通信成功为止。当然,如果通信双方的距离已经超出了信号的有效覆盖范围,通信是不会成功的。
3.2.2 S端协议设计
S端的协议处于从控位置,相对简单。设计中,仍然通过查询nRF905的CD/AM/DR状态接收指令,关键要解决指令的判读问题,即分清是正常流程内指令还是重发指令。这一问题在冲击波存储测试系统的工作参数设定阶段不存在,因为每一个参数设定指令都不一样,S端第一次收到某个指令肯定是正常流程内指令,第二次收到该指令则肯定是重发的指令。但在读数阶段就不同了,因为存储数据可能有几兆字节,如此大的数据量需要拆成无数个包才能发送,而M端不可能每读一次都使用不同的指令。为此,S端协议采用两个读数指令K1和K2,循环发送。K1之后收到K2或K2之后收到K1均为正常,S端协议从测试系统读取存储数据并缓存到内部寄存器,然后无线发送出去。若连续收到两个相同的指令,说明M端没有收到刚才的数据,此时,S端从内部寄存器中读取刚才的数据,进行无线重发,而不再从测试系统中读取。S端的协议流程如图3所示。
系统调试成功后,进行了多次数据传输实验,从实验数据可得,无线信号在室内传输环境下的损耗要远大于室外街道环境;在同等条件下,误码率主要与距离延伸有关;过往车辆对数据传输影响不大。该无线数据传输系统已成功应用于多个存储测试系统中。实现了控制指令和测试数据的无线传输4 结束语