基于MSP430和nRF905的多点无线通讯模块

2019-08-02 16:30发布

本文介绍的无线通讯模块,采用通用的低功耗单片机MSP430作为主芯片,nRF905作为无线收发模块,利用SPI口实现双向通讯,SPI支持高速数据传输,从而满足了射频带宽的要求。nRF905提供了强大的跳频机制以及大量的频道支持,可以用在许多特殊的场合,而且即使利用无增益的PCB天线其传输距离也可达200m,如果需要更远距离的传输,也可以改成带增益的天线,传输距离即可扩大到1千米以上,可满足不同客户的需求。1 系统硬件实现
    无线通讯模块的实现框图如图1所示,除了MSP430和nRF905外,系统还留有MAX232接口可以实现与PC的机通讯,MAX485接口满足一些通用仪器仪表的要求,并提供了按键和液晶等人机交互界面。

2 驱动实现
2.1 MSP430的SPI驱动
    MSP430用标准SPI口和nRF905进行通讯,标准接口包括两根数据线:MOSI(主发从收)和MISO(从发主收),还有时钟线CLK,主机用CLK与从机时钟同步。
    如图2所示,SPI可以理解成双工方式,因为在发送数据的同时也可以接受数据。SPI分成主模式和从模式,从模式完全被动,数据的发送和接受都由主机掌握。实际上参与工作的都有四个寄存器,主机将数据写入发送缓存UTXBUF,数据并行存入发送移位寄存器。数据一旦写入UTXBUF,立即从MOSI线移位到从机的接受移位缓存,而从机移位缓存中的数据又将其发送移位寄存器中数据,通过MISO移位到主机的接受移位寄存器,再并行读入接受缓存中。所以利用SPI同时进行读写操作。

图2 430 SPI示意图
2.2 nRF905的驱动
    nRF905共有32个引脚,其中有10个引脚尤其需要我们注意:和主MCU通讯的SPI接口的四个引脚,数据线MOSI、MISO,时钟线SCK、使能线,其中CSN可以接到一个IO口控制芯片工作,而其它三个脚则接到主MCU的SPI接口上;主MCU的控制线有三个引脚,控制低功耗的PWRUP,控制正常工作的TX_EN,选择发送还是接受方式的TRX_CE,这几个引脚都接到主MCU的通用IO口;nRF905的反馈线有三根,检测到频道正被使用的CD(carrier detected),通知接受地址正确的AM(addreSS matched),告诉MCU数据接受正确的DR(data received),这几个引脚需要接到主MCU的中断引脚上,当接收数据正确时以中断方式通知主MCU。
    nRF905与MSP430接口如图3所示,其中MOSI、MISO、SCK分别与主机SPI口对应,CSN、TRX_CE、PWR_UP、TX_EN接通用IO口,而CD、AM、DR接中断口,430的P2口都是复用的中断口,这样收到数据可以用中断及时通知430。

图3 硬件接口

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
13条回答
51xlf
2019-08-02 16:39
2.2.1 寄存器操作
(1)寄存器介绍
    对nRF905操作主要是对其寄存器进行操作,主要有四个寄存器,即配置寄存器、发送地址寄存器、发送数据寄存器和接受数据寄存器,每次发送数据时将对方地址写入发送地址寄存器中,将不超过32 byte的数据写入发送数据寄存器即可 而各节点地址在配置寄存器设置,接受的数据则自动放入接受数据寄存器中。
(2)操作寄存器
    nRF905控制信号线CSN的下降沿使能寄存器,如果希望对某个寄存器进行操作的时候,首先需要将CSN引脚置低。905提供了特殊的命令字来支持对寄存器的操作,比如写配置寄存器的命令字为(WC)0000 XXXX,读配置寄存器的命令字为(RC)0001XXXX,其中XXXX为起始地址。当操作某个寄存器时,先写入该寄存器的命令字,即可对其操作。
2.2.2 设置频道和频段
    nRF905最吸引人的一个特点就是提供跳频支持,以及拥有大量的频道可使用。nRF905可以在433/868/915频段进行通讯,其实868和915属于同一频段,即主要分两大频段,而每一频段又有29个频道可以使用,但实际上针对不同的天线,只有一个频段可以让芯片发挥最好的功能,所以一种天线有29频道使用。当在某个频道上遇到干扰时,可以跳频来继续通讯,确保数据完整性。配置寄存器提供了CH_NO和HFREQ_PLL来设置频道,公式为:
f=(422.4+(CH_NO/10))×(1+HFREQ_PLL)MHZ
    nRF905提供了一个专门的命令字来支持快速跳频,这样在通讯过程中可以迅速实现跳频,从而在不影响通讯速度的情况下,完成通讯。
2.2.3 发送数据流程
     设置好配置寄存器后,就可以发送数据了.我们先给出具体的时序图,再解释具体流程。
时序图如下:

图4发送时序图
①主MCU将PWR_UP置高,使905进入工作模式,再将TX_EN置高进入发送数据模式。
②将发送地址通过SPI口写入发送地址寄存器TX_ADDRESS,再将数据写入发送数据寄存器TX_PAYLOAD,SPI口的速度由主MCU设置。
③主MCU置高TRX_CE,905自动将数据帧格式补齐,加入包头Preamble,并根据寄存器设置计算CRC校验填人包尾,然后905将整个数据以100 bit/s的速度,采用曼彻斯特编码,以GFSK形式发送出去,发送完毕,DR会置高,通知主MCU可以继续下次发送。
④如果配置成自动重发模式,nRF905会自动重发,直到TRX_CE置低。
⑤发送完后可以将TRX CE置低,这样就进入standby模式,实际操作时可以直接将TRX_CE产生脉冲,持续时间不少于10us,就可以发送完数据。
  发送数据流程图如图5所示:

图5发送数据流程图
2.2.4接受数据流程
    下面我们讨论如何接受数据,同样先给出时序图如图6,再解释流程。

①主MCU将TX_EN置高、TRX_CE置低,过650 us后,则进入接受模式。
②nRF905监控频道使用状况,如果发现频道被占用,则将CD置高,可以利用该特性采取一些冲突避免检测机制,发送数据前如果检测到CD信号,则可以随机延迟一段时间再发送数据,该特性可以有效地避免数据冲突。

一周热门 更多>