基于SPI总线的无线数据传输系统设计摘要:通过基于SPI总线的无线数据通信设备,利用无线数据收发芯片nRF905和51单片机STC89C52RC进行设计,给出了无线数据传输系统框图和软硬件设计。介绍了SPI总线结构、NRF905无线射频芯片及一种基于单片机模拟SPI接口的方法,使没有SPI接口的单片机扩展为带有SPI接口的外围芯片成为现实。对如何通过SPI实现对nRF905的配置,并利用C语言实现该功能做了探讨。最后对待发送数据进行发送,接收端对数据进行接收显示,从而实现了该无线数据传输系统,实验表明该设备具有准确有效的数据传输功能。1系统总体结构文中利用51单片机和无线数据收发芯片nRF905构成无线数据传输系统,给出了硬件和软件设计方案。其数据传输过程是:从传感器输入的模拟信号经AD采集后,将数据输入单片机,然后单片机将该发送数据,通过SPI接口发送给nRF905,nRF905将数据自动加上前导码和CRC码后将数据包发送。当接收端的nRF905接收到有效数据后,DR置高;单片机检测到DR为高电平后,复位TRX_CE引脚,使nRF905进入空闲模式,通过SPI接口从nRF905中读出接收数据,然后通过串口在上位机显示。文中主要介绍的是51单片机软件模拟SPI和无线数据收发这两个部分。图1是该系统的总体结构框图。2SPI总线SPI(SerialPeripheralInterface串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。该接口一般使用4条线:串行时钟线(SCK)、主机输入从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS。可见SPI总线只需要少数的几根线,就可以实现与具有SPI总线硬件接口功能的各种器件进行通信,并且用SPI总线接口简化电路设计,节省许多I/O口线供其它功能使用,提高了设计的可靠性。而对于一些不具有SPI硬件接口的器件,可以用I/O口线来模拟SPI。由于nRF905射频收发模块是通过SPI接口由MCU控制的,而采用不具有SPI接口的单片机,只能通过单片机的I/O口来模拟SPI总线接口,实现无线通信系统的设计。这样当传输速度要求不是太高时,使用I/O口模拟SPI总线,既可以增加应用系统接口器件的种类,同时还提高系统的性能,节约成本。3nRF905无线收发芯片nRF905是挪威NordicVLSI公司推出的单片射频收发器,工作电压1.9~3.6V,工作于433/868/915MHz这3个ISM频段,频道转换时间650μs,最大数据速率为100kbit/s。nRF905由频率合成器、接收解调器、功率放大器、晶体振荡器和GFSK调制器组成。自动产生前导码和CR校验码,可以很容易通过SPI接口进行编程配置。外围器件连接简单,无需外部SAw滤波器。nRF905有两种工作模式和两种节能模式。两种工作模式分别是ShockBurstTM发送模式和ShockBurstRM接收模式,两种节能模式分别是掉电和SPI编程模式,Standby和SPI编程模式。nRF905的工作模式由TRX_CE,TX_EN,PWR_UP这3个引脚的设置来决定。4nRF905和STC89C52RC的硬件连接电路nRF905具有标准的SPI硬件接口,对于不带SPI串行总线接口的STC89C52RC单片机来说,可以使用软件来模拟SPI的操作。单片机和NRF905的对应接法是:P1.6接MISO,P1.5口接MOSI,Pl.7口接SCIOCK,P1.3接CSN。选用单片机的P1.5模拟数据输出端MOSI;Pl.6模拟数据输入端MISOP1.7模拟SCK的输出端;P1.3模拟从机选择端CSN,由程序清零此I/O口,使得与它通信的NRF905做从机。采用SPI的进行数据传送时,在SCK的每个下降沿将89C52配置NRF905的命令和数据通过MOSI引脚移入,在SCK的每个上升沿将欲传给89C52的数据从MISO引脚移出。所以,这里将串行时钟输出口P1.7的初始状态设置为低电平,选通从机,即P1.3=0低电平后,再置P1.1为高电平。这样,89C52在输出1位SCK时钟的同时,将使NRF905中数据串行左移,从而输出1位数据至89C52的P1.6口,此后再置P1.7为0,使89C52从P1.5输出1位数据至NRF905,至此结束了模拟1位数据的传输。按上述步骤循环8次,即完成通过SPI总线传输1bit的操作。nRF905有5个内部寄存器,分别是状态寄存器、RF配置寄存器、发送地址寄存器、发送数据寄存器和接收数据寄存器,这5个寄存器都是通过89C52软件模拟的SPI接口来配置的。除了对寄存器进行配置外,89C52还要对nRF905的工作模式进行切换控制。5电源电路设计本系统使用两个电源,单片机STC89C52RC使用5V电源,NRF905采用3.3V电源进行供电,然后把STC89C52RC和NRF905共地,否则会出现无法传输数据。其中转换芯片分别使用AMSlll7-5.0转5V芯片和AMSl117-3.3转3.3V芯片电路图,如图3所示。电源电路使用220V的交流电适配器输出的9V直流,经C1滤波进入AMSlll7-5.0,然后在输出端接一个100μF的电容进行滤波去耦,从而得到5V直流电压供单片机使用;然后5V电压接入下一级AMSlll7-3.3电源转换芯片,输出3.3V供NRF905使用。6软件设计的C语言实现对于发送端,首先进行I/O口和SPI接口初始化,然后对nRF905的寄存器进行配置并且初始化各个接口,经过初始化,处理完采集好的数据,设置nRF905为发送模式,调用发送代码,延时一段时间,等待数据发送完毕;同理在接收端也执行相同的初始化,不同的只是初始化完毕后,把nRF905模块设置成接收模式,然后调用接收程序。最后通过串口在上位机进行显示。7实验分析文中对其软硬件进行了设计和调试,构建了基于SPI无线通信系统平台。实验证明,通过该系统无线测试板壳应力,在nRF905发射模块端,敲打板壳使之发生形变,再用应变仪传感器测得其形变的电压值,在数据发射之前对此模拟信号进行AD采集,并通过无线发射模块把采集到的数据发射出去;同时先在离发射模块相距50m的位置放置一个接收模块,接收发射数据并显示。然后间距每进行一次实验后增加50m。以此判断它们在保证信号传输稳定情况下的最远传输距离。测得最佳结果在相距350m以内的楼宇之间,数据传输稳定。超过350m时,数据显示出现时显时无的现象。表1是在300m左右实际测得的几组应变值。8结束语文中介绍了用SPI总线接口进行数据传输的实现方法,采用nRF905射频收发芯片和STC89C52RC单片机设计了无线数据传输系统,完成硬件电路和系统软件调试后,进行了无线数据收发实验。实验过程是通过应变仪传感器测板壳形变得到的模拟信号,经AD采集后产生要发送的数据,然后对其进行发射、接收和显示。实验结果表明,在相距350m的楼宇之间通信,该无线传输系统工作稳定,接收和发射的数据完全相同,这表明该系统能实现数据的有效传输,具有高速、抗干扰能力强等优点。(