(1) NRF905模块是带有载波侦听功能(CD引脚),如果侦听到该信道已经被使用,CD引脚被置为1。所以在发送数据之间可以先通过对CD引脚的读取判断该信道是否已被占用,被占用则等待,若没被占用则发送数据。
(2) 带载波侦听仍然可能出现数据碰撞的情况,比如,当前的信道被占用,两个都进行载波侦听,在侦听到信道空闲时,两者又立即发送信号导致发送的帧相互冲突产生干扰。根据经典分隙ALOHA为解决碰撞是为每一个数据块分配一个时间段,本系统也采用在检测到信道空闲之后再为呼叫器分配一个时间段去发送数据。具体实现可以概率p来发送数据。发送前选择一个在0-1之间的随机数i。若i<=p(概率p的大小是事先给定的),则发送数据,否则延迟时间一个时间段t后再重新监听信道。该方法可根据信道上通信量的多少设定不同的p值,因而可以使信道的利用率进一步提高。
这些改进并不意着可以应用到其他任何方面,也并不是说分隙ALOHA存在任何缺陷,这只是根据本系统的需要所改进的。
4.4 跳频实现
系统在防碰撞的基础上,还可以通过设计跳频机制以有效地保证数据传输的准确性。NRF905模块也具有跳频的功能。通过对配置寄存器的第一和第二字节的改写来完成跳频。在配置寄存器中与频率设定有关系的是字节0和字节1中的低2位。也就是:CH_NO[8:0]和HFREQ_PLL位。
NRF905芯片其频率计算公式(4-3)如下:
Freq = (422.4 + CH_NO /10)*(1+HFREQ_PLL)MHz 4-3
由公式(4-3)可以得出,HFREQ_PLL为0:设定在433MHz,
HFREQ_PLL为1:设定在915MHz.
设定好该位后,再设定CH_NO的第8位。
跳频机制的基本原理是将频段分为一系列的通道,发送端查找预先设定的频率列表,以伪随机方式产生通信频道及发射前导码,发射前导码的时间应确保接收机可以扫描所有的通道。接收端以一定的跳频序列扫描,在某一通道上,接收端收到完整的前导码则收发双方频率同步。一旦完成频率捕获,发送端与接收端即可识别对方,并且相互通信。
通常跳频采用时隙跳频方法,即根据一个预定的跳频序列在每个时隙上进行跳频,而不考虑频道本身的状况。自适应跳频只在信道变坏的时候进行跳频,否则会稳定在一个可靠的频道。
本次设计的无线呼叫系统中所采用的是自适应跳频,该算法由3个步骤组成:信道收集、信道评估、信道调整。
4.4.1 信道收集
在网络形成时,主机服务器首先进行一个扫描,并确定一个可用的频道,然后在该频道发送同步信号。每个呼叫器节点加入网络时都要进行信道扫描,然后发送信号和主机服务器同步并汇报自己的扫描结果,之后主机服务器给每个呼叫器分配通信信道。
网络形成后,节点和服务器各自对每一条信道进行统计,并周期性的将结果在服务器中进行汇总。
4.4.2 信道评估
信道评估的指标为丢包率。服务器和呼叫器对通信丢包率进行计算,并采用以下规则评估信道的质量。
(1) 计算当前x次传输丢包率rx;
(2) 如果丢包率rx ≤阈值R则继续使用当前的频道;
(3) 若rx >阈值R,或者前x-1次传输的丢包率rx-1 >R且rx <R则会继续利用该信道传输y次,计算丢包率ry。判断rx-1,rx,ry之间的关系,若R < rx-1 < rx < ry或rx-1 > R > rx < R < ry,那么必须更换频道。 基于NRF905的无线呼叫系统设计与实现(18):http://www.youerw.com/jisuanji/lunwen_1185.html