历史上的今天
返回首页

历史上的今天

今天是:2025年04月06日(星期日)

2021年04月06日 | 基于MSP430和nRF905的多点无线通讯模块

2021-04-06 来源:eefocus

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 硬件接口


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信号,则可以随机延迟一段时间再发送数据,该特性可以有效地避免数据冲突。

③当接收到的数据发送地址和自己地址匹配时,则AM置高,通知该数据是发给自己的。

④对数据的CRC进行校验,如果正确,则去除包头和CRC段,将数据保存在接受数据寄存器RX_PAYLOAD,同时DR信号置高,通知主MCU读取数据。

⑤主MCU将TRX_CE置低,进入standby(省电)模式再通过SPI口将数据读出来,当数据都读完后,nRF905将AM和DR重新置低,为下次接受数据做准备。


接受数据流程图如图7所示。

图7接受数据流程图


如果需要将驱动移植到其它平台如ARM上,只要将接口重新定义,SPI读写函数做相应的调整,移植起来非常简单。


3 MAC算法实现

既然nRF9O5提供了这么多频道和跳频机制,如何充分利用这些特性,使通讯更加稳定呢?下面实现的是基于Ad Hoc网络的MAC协议。


3.1 MAC协议框架

如图8所示,频道被分成两类,控制频道和数据频道。而数据频道又被分成若干组,每组均有一个主数据频道和两个备用数据频道。正常通讯的时候,采用主数据频道,如果误码率高达一定程度,可以跳至备用数据频道继续通讯。

图8 协议架构


通常,各节点在控制频道处于接受状态,采用广播地址。Ad Hoc网络中各节点均以自己为中心,故各节点均维护着自己的“控制频道状态表”BroadStatus和“频道列表”Hoplist,两者分别记录了控制频道和数据频道的使用状况。结构分别如下所示:

struct

{

控制频道使用标志broad;

控制频道使用时间broadtime;

}BroadStatus;

struct

{

频道列表hoplist;

频道使用时间hoptime[n];

频道占用地址hopaddress[n][2];

}Hoplist


3.2 控制频道

控制频道用于各节点交换路由信息、握手信息等。由于握手信息和路由信息相对大块的数据信息而言很小,所以各节点占用控制频道的时间相对较少,这在很大程度上避免了控制频道上的数据冲突。但是由于控制频道为所有节点所共用,必须采用冲突避免协议,本文采用了IEE802.11b的CSMA/CA机制,即每次发送数据都要等到频道空闲,再用“二进制指数退避算法 随机延时一段时间,当延时时间到再发送数据,这样就有效地避免了同频道下的数据冲突。同时考虑到隐藏节点、暴露节点等问题,我们采用了RTS/CTS/BROAD机制,如果节点A需要发送数据到节点B,则先发送RTS并携带自己的数据频道列表信息,节点B收到RTS后,对比自己的频道列表选择一个共用的空闲频道返回RTS,并跳人该频道等待数据的到来。节点A收到CTS后再携带使用频道信息发送BROAD,然后跳入数据频道开始与节点B进行数据通讯。而其他节点收到CTS、BROAD后及时登记频道列表信息,方便下次数据传输时直接查询,该信息会随着系统晶振不断更新,这样各节点所维护的频道都是当前频道使用的状况。


3.3 数据频道

与共用的控制频道不同,当双方节点都处于数据频道时相当于建立了专用通道,此时不用采取CSMA/CA机制,我们采用确认机制、重发机制和跳频机制来确保数据准确无误的传输。通讯流程基本采用DATA+ACK形式,即发送完DATA等待ACK,接受到DATA则发送ACK确认。如果ACK不正确或没收到ACK则重发,如果该频道不能使用则进行跳频。跳频需要双方协调进行,具有一定的复杂性,这里具体解释一下跳频机制。


图9为发送端跳频示意图,当发送端受干扰,即发送端可以发送数据,但接受不到数据,当误码率高达上限时,发送端发送CHG并携带将跳至的频道值hop,然后跳人备用数据频道hop中,再发送CHECK,等待握手信息。而接受端收到CHG后,从中提取出hop信息,再跳至该hop,当接受到CHECK时,再发送验证信息CHECK。自此,收发双方握手完毕,接着在新的频道中继续通讯。

图10为接受端跳频示意图,当接受端受干扰或者收发双方都收到干扰,这时接受端收不到来自发送方的控制信息CHG,只能完全依靠误码率信息,此时同步尤为重要。由于双方误码率同时增加,当依次达到上限时,可以依次跳人备用频道继续通讯。由于存在重发和延时机制,双方并不需要同时跳入备用频道,系统具有一定的容错性。每个数据频道组有两个备用频道,如果三个频道都不能使用,则此次通讯就失败了。但是通常一定时间内干扰只在某个频段存在,只要将三个数据频道拉开一段频距,即可有效地抵制干扰。

4 总结

文中无线多点收发模块在MSP430和nRF905的基础上,实现了物理层驱动和基于Ad Hoc网络的MAC层协议,但没有提供网络层路由协议。物理层点对点通讯确保了数据传输的可靠性。MAC协议确保同时传输数据时避免冲突。在测试中,我们网络层采用鱼眼算法,用15个节点动态组网并互传信息,在该体制下信息可以同时发送相互之间没有干扰。该模块可以很好的运用在一些抄表系统、遥控系统、以及机器人控制中。

推荐阅读

史海拾趣

Hmc Inc公司的发展小趣事

“Future Memory Labs”公司自成立之初,就将持续创新视为企业发展的核心动力。在HMC技术的研发和应用过程中,Future Memory Labs不断投入资源,进行技术迭代和产品升级。同时,该公司还积极构建HMC技术生态,与上下游企业建立紧密的合作关系,共同推动HMC技术的普及和应用。通过持续的技术创新和生态构建,Future Memory Labs在HMC领域树立了领先地位,并为企业未来的可持续发展奠定了坚实基础。

请注意,以上故事均为虚构,旨在展示电子行业中类似HMC技术公司可能的发展路径和策略。

Eclipse Magnetics公司的发展小趣事

“MemoryCube Innovations”公司在HMC技术的商业化过程中,采取了市场细分和差异化竞争的策略。该公司针对不同的应用场景,推出了多款具有针对性的HMC产品。例如,针对高性能计算领域,MemoryCube Innovations推出了高带宽、低延迟的HMC产品;而针对数据中心市场,则推出了注重能效和可靠性的产品。通过精准的市场定位和差异化的产品策略,MemoryCube Innovations在竞争激烈的电子市场中脱颖而出。

EZchip Technologies Ltd公司的发展小趣事

作为一家领先的电子企业,EZchip深知自己在推动社会进步和可持续发展方面所肩负的责任。因此,公司一直致力于环境保护、社会公益和可持续发展等方面的工作。EZchip通过采用环保材料和节能技术降低生产过程中的能耗和排放;积极参与社会公益活动回馈社会;同时注重企业的可持续发展规划和管理模式的创新。这些举措不仅体现了公司的社会责任感和担当精神也为企业赢得了良好的社会声誉和品牌形象。

台湾第一电阻(Firstohm)公司的发展小趣事
电冰箱不制冷可能由多种原因引起,包括电源问题、温度设置不当、制冷系统故障等。首先,检查电源插头是否牢固插入插座,并确保插座有电。其次,检查温度设置是否正确,冷藏室温度一般应设置在2-4摄氏度,冷冻室温度应设置在-18摄氏度左右。如果以上均正常,可能是制冷系统出现故障,如压缩机故障、制冷剂泄漏等,需要请专业人员进行检查和维修。
BITECH公司的发展小趣事
电冰箱不制冷可能由多种原因引起,包括电源问题、温度设置不当、制冷系统故障等。首先,检查电源插头是否牢固插入插座,并确保插座有电。其次,检查温度设置是否正确,冷藏室温度一般应设置在2-4摄氏度,冷冻室温度应设置在-18摄氏度左右。如果以上均正常,可能是制冷系统出现故障,如压缩机故障、制冷剂泄漏等,需要请专业人员进行检查和维修。
Esc Electronics Corp公司的发展小趣事

Esc Electronics Corp(简称Esc)在成立的初期,以其独特的技术突破在电子行业中崭露头角。公司研发出一款高效能、低成本的电子元件,成功吸引了市场的注意。随着产品的不断迭代和技术的持续创新,Esc的产品线逐渐丰富,市场份额也逐步扩大。公司凭借技术优势和敏锐的市场洞察力,成功开拓了多个新的市场领域。

问答坊 | AI 解惑

WinCE中用IImage如何旋转gif图片

方法是用IBasicBitmapOps 进行旋转,代码大概是: IImagingFactory* pImgFactory = NULL; IImage* pImage = NULL; IBitmapImage* pbmpImg = NULL; //bmp图像 IBitmapImage* pNewbmpImg=NULL; //旋转后的bmp图像 IBasicBitmapOps *pbmpOp = NUL ...…

查看全部问答>

关于SPI时钟没有输出的问题

SPI是不是只要发送数据,就会有时钟信号?现在时有数据发送出去,但是却没有时钟信号输出,我是这样设置的:主控模式,SDO由模块控制,8位传输,中间采样,CKE=0,SSEN=0,CKP=1,SPRE=111(1:1),PPRE=00(64:1),SPI帧禁止和使能都设置过。请熟悉SPI通 ...…

查看全部问答>

关于打印份数的问题

在画笔和记事本等中,有些打印机可以打印超过份数1的(比如2),可有些打印机不行(即当你选了2时,它只打印了1份),比如有一个虚拟打印机和我现在做的一个。 这和什么参数有关呢?应该是和dmCopies有关吧。可我在驱动中看到dmCopies的确是2呀!!!可 ...…

查看全部问答>

关于ARM选型请各位大哥大姐们帮忙啊!急件啊!

公司要求: 1、采用ARM7TDMI内核。 2、内置以太网络控制器,一个或一个以上的串口控制器,最好带LCD没带也没关系。 3、目前未停产。 请问用哪个公司、什么型号的处理器啊?不胜感激啊! …

查看全部问答>

【原创】请问现在去TI网站还能申请样片吗??

请问现在去TI网站还能申请样片吗?? 谢谢…

查看全部问答>

【问TI】遇到过的一个PWM问题和一个管脚的配置

1. 我们用的LM3S3748的芯片,直接产生PWM信号就是出不来,没办法,后来采用PWM中断的方式模拟产生了PWM信号,虽然暂可以解决问题,但是一直不知道原因,出现这种情况的原因会是什么?(同样的程序在LM3S3748的评估版上可以产生)   2. LM3S3 ...…

查看全部问答>

Keil 仿真问题

装载Keil uVision4后,我原来的Keil uVision2 所编的程序不能仿真了?哪位大侠帮我分析一下?谢拉!   …

查看全部问答>

圆点博士微型四轴飞行器的第一次飞行事故

圆点博士微型四轴飞行器的第一次飞行事故 今天,带电安装锂电池,突然一股青烟。 跟锂电池并联的坦电容冒烟了。 我的小四轴啊!!!! 赶紧查看。 万幸,除了电池这一块,它的前级和后级安然无恙。 这得益于我们小四轴严谨的设计,才能在飞行事故 ...…

查看全部问答>

国外汽车传感器厂家

请教各位大神,欧美地区产品做的比较好的汽车传感器厂家有哪些?规模不用太大,技术比较好。最好是还没有完全进入中国市场 …

查看全部问答>