最近写了个跳频通讯的算法,用nrf24l01测试成功了
花了几个月的时间,写了个跳频算法,目前用msp430+nrf24l01做载体测试成功,基本性能:1000跳每秒,80个信道,跳频信道间隔大于10,自相关不大于2,互相关不大于3,跳频序列长度是2*10的9次方,23天左右。跳频序列长度可以更长。初始同步时间小于300毫秒,看干扰能力很强,定频干扰、其他2.4g设备的干扰、其他算法跳频干扰、同设备的互相干扰都能很好的抑制。现在在优化代码,跳频搞起来确实很麻烦,我写的算法不能共享,但很愿意交流下经验,有兴趣的朋友可以讨论讨论。 支持一下,不共享代码,共享一下什么是跳频,以及原理也好啊{:smile:}谢谢啦! 楼主分享下思路吧 是否基于时间同步,低功耗特性是否有损失
通信速度如何
关注一下 楼主等于啥也没说,想交流啥? 讲讲扩频和调频的 原理吧。 附件是Nordic给的无线键鼠跳频参考协议,这个协议筛选了11个频点作为跳频表。
下面这个链接是傻孩子发表的一个简单的伪随机数发生算法 ,这个算法的特点是根据种子生成一个唯一的随机序列。
http://www.amobbs.com/forum.php?mod=viewthread&tid=3980408
相信没接触过跳频协议的,看了第一个资料即可入门,对跳频协议有了解的,结合第二个资料,就能茅塞顿开。
根据这两个资料实现的跳频协议,在功耗、抗干扰性方面都很有优势。 讲得好! Flyback 发表于 2012-12-26 12:16 static/image/common/back.gif
是否基于时间同步,低功耗特性是否有损失
通信速度如何
基于时间同步的,低功耗还没考虑进去,现在是能通讯成功,在优化现在的代码,nrf24l01在4m的spi速率,2m空中的情况下,16位数据,不应答,从写数据到发送完成约327us,接收后读出数据约110us,这个时间满足1000us一跳需要的速度,勤务同步20ms一次,无数据的时候20ms要通讯一次,协议带应答和重复发送功能,确保通讯正常,带宽平分,最大速率16*475Bit/s。
同步的做法是从机跟主机的时间。 跳频序列是用的RS序列,31位的最小本原多项式,映射到80个信道,设计的跳频间隔要大于10,所以平衡性变差,成了大于97%,RS初始码用同步时及时的时间和等待时间移位得到,信道平衡性计算到了10的7次方,RS初始码测试了几百次,没做详细统计,理论重合几率10的-7次方,由于互相关性不大于3,理论,在饱和通讯的情况下,27对设备通讯基本不互相干扰,超过27对设备通讯速率会下降。 请问LZ,同步是怎么做到的?? 我写的这个跳频理论很简单,就是定时器1ms,每1ms完成一次发送或者接受,然后跳到下一个频道,难点就是同步。主机扫描从机,同步序列长度31个,RS序列初始码有从机得到发送个主机做同步。 1ms感觉 还好。呵呵。 不过1ms好像不能完成 收发吧。 HiWorld 发表于 2012-12-26 13:26 static/image/common/back.gif
请问LZ,同步是怎么做到的??
主机扫描从机,扫描到后先粗同步,然后主机发送2帧同步序列,发送完等待一帧时间,从机收到后算出精确的同步时间,再做调整,误差1us内。精确同步完成后,从机发送RS序列初始码,主机收到确认,完成后等待2帧后,开始通讯。目前做测试同步成功后24小时连续通讯正常,同步的核心就是精确同步的算法,研究了很久的理论,大改了三次算法才完成,现在初始同步的成功率100%。通讯的协议还在修改中,目前是上下行带宽对等通讯,算法简单,带宽利用率不高,在修改算法,想做成动态的上下行速率。 更正下速率,是15*475Bit/s,有一字节是做状态的,协议占用。就是每1ms发送16字节数据,有效数据15字节。 define_avr 发表于 2012-12-26 20:25 static/image/common/back.gif
主机扫描从机,扫描到后先粗同步,然后主机发送2帧同步序列,发送完等待一帧时间,从机收到后算出精确的 ...
LZ很牛啊!!!!!! define_avr 发表于 2012-12-26 20:25 static/image/common/back.gif
主机扫描从机,扫描到后先粗同步,然后主机发送2帧同步序列,发送完等待一帧时间,从机收到后算出精确的 ...
我在用24L01的时候有些问题,收发切换做的还不是很好 mark nrf24跳频 可以一对多吗? johnsonz999 发表于 2012-12-27 08:24 static/image/common/back.gif
可以一对多吗?
一对一的,把现在的通讯协议完善后就开始研究一对多的,一对多太复杂,也许搞不定。 做个记号学习啦! 基于时间同步的射频跳频算法,主要解决的就是主从机的帧长度和帧头的一致,我写的算法就是解决这个这个问题,一般是4种情况 :从机帧长延时,帧短延时,帧长提前,帧短提前。感兴趣的朋友可以建立个模型,分析这4种情况,一般容易完成同步。还有,因为时间帧长1ms,每帧要完成计算下一跳的信道号,加载数据或者读出数据,发送或者接收数据。所以各阶段的函数的运行时长越固定稳定性越好。 这个要多多学习 跳频协议,MARK mark...
来自:amoBBS 阿莫电子论坛 Windows Phone 7 客户端 mark关注 感觉跟蓝牙有点像了哟 innovision 发表于 2012-12-28 10:34 static/image/common/back.gif
感觉跟蓝牙有点像了哟
就是盗版蓝牙,按蓝牙的原理,用容易实现的算法来简化,各项参数比蓝牙差远了,保密性就更差,现在测试传输的都还是明文。我的做法是先实现功能,在完善。下一步还打算盗版GSM,通过时逢来实现组网。 记号,学习 mark,牛人真多,有空研究下同步算法 mark 跳频 楼主犀利啊 我写的跳频算法的初始同步的框架。
跳频通信好难搞的工程,做好了很有用的{:lol:} mark强人,调频算法 define_avr 发表于 2012-12-30 21:10 static/image/common/back.gif
我写的跳频算法的初始同步的框架。
请教LZ几个问题:
1. RS序列由从机产生? 这个跟由主机产生有什么优势?
2. 怎么保证主机和从机 的时钟同步?假设他们首先已经确定能通信了,是不是通过主机传递校正信息给从机? 还有,假如从机没有接收到信息,它跟主机之间的时钟误差会一直累加,那如果是这样,怎么保证它们同步?
3. 跳频的频点越多,传输距离越短? 还是可以通过通信协议的方式来保证通信距离?
本人对跳频是小白,因此对LZ所说的四种模型不是很明白。望LZ赐教!!谢谢!!! ALUMEI 发表于 2013-1-11 08:47 static/image/common/back.gif
请教LZ几个问题:
1. RS序列由从机产生? 这个跟由主机产生有什么优势?
2. 怎么保证主机和从机 的时钟同 ...
1.RS序列产生机制与从机收到同步请求的时间有关,伪随机性比主机产生强,且容易实现。RS序列产生伪随机性越强越好,谁产生都一样,蓝牙的产生机制很好,我这个就是按蓝牙的产生原理简化了再简化的。
2.主机同步请求包含粗同步信息,从机收到先粗同步,粗同步成功在精确同步。粗同步容错性很强,且循环同步,时钟累积影响很小。
3.我这属于射频跳频,不是基带跳频,通讯距离与频点数没有关系,与射频功率有关系。
4.4种模型是粗同步成功后出现的4种可能,一共6种可能,控制主从机基准时钟+-6%误差,减少2种情况,这四种情况分析清楚了,精确同步就实现了。 define_avr 发表于 2013-1-11 09:57 static/image/common/back.gif
1.RS序列产生机制与从机收到同步请求的时间有关,伪随机性比主机产生强,且容易实现。RS序列产生伪随机性 ...
LZ这个是属于时隙跳频的吧? 那移植到其他系统时岂不是很不方便?是不是要求主从机的指令周期是一样的呢? 属于时隙跳频,主从机的指令周期一致的情况很好移植,不一样那移植起来就费神了。跳频与时间关系很密切,我这系统主从机没有采用统一时钟,从机每8ms修正一次同步时钟,容错50ms,普通单片机内部时钟的精度都可以保证跳频的正常工作。说白了我这就是盗版蓝牙在简化,用在常规单片机加普通射频芯片上,系统其实很简单,难点就是精确同步的实现,精确同步了完成了,以跳频的自身抗干扰能力,加上同步修正,基本保证通讯正常。我测试24小时连续通讯,即使是同系统其他的通讯干扰,最严重的情况就是通讯速率下降了点,其他一切正常。 LZ,你有蓝牙协议的中文说明么? 有的话就共享下吧!! define_avr 发表于 2013-1-14 13:53 static/image/common/back.gif
属于时隙跳频,主从机的指令周期一致的情况很好移植,不一样那移植起来就费神了。跳频与时间关系很密切,我 ...
LZ,你所说的四种模型:延时,,提前好理解,但是帧长和帧短代表什么? 比如说nRF24L01,,主机本来发送10字节,但从机接收了10+的字节,这个是帧长? 如果接收少于10个字节,这个是帧短?
无线芯片里边不是带有CRC校验的吗?如果开了校验,那就不存在帧长短的问题了? 这个是我不明白的地方,想楼主请教!!! 楼主强人,学习了。。。 ALUMEI 发表于 2013-1-15 20:35 static/image/common/back.gif
LZ,你所说的四种模型:延时,,提前好理解,但是帧长和帧短代表什么? 比如说nRF24L01,,主机本来发送1 ...
帧是指时缝,系统没有采用统一时钟,主从机时缝会因为自身的时钟出现差距,每帧要完成相应的功能,时缝一定要对齐。 这个协议传输一帧信号需要多长时间? 具体数据忘记了,好像是384us,完成每秒1000跳是搓搓有余的。我测试同步的时候是1000跳,正常通信500跳。 楼主牛人
做个记号先 看了一下lz的分享,收获不小,lz好人啊 跳频好资料,谢谢楼主! 是啊,等待中呢 多谢楼主分享 楼主,想问你,主机扫描,在没连接到之前,从机是否也会跟着扫描,而且如何确保,两机频点最快的重合呢 dreamc 发表于 2013-4-19 10:22 static/image/common/back.gif
楼主,想问你,主机扫描,在没连接到之前,从机是否也会跟着扫描,而且如何确保,两机频点最快的重合呢 ...
同步用了32个频点,从机在每个频点等待32个周期,收到同步信号了在第33-35个周期应答,无同步就切换频点继续等待同步。主机循环32个频点后等待3个周期,有应答就在第36-40周期做粗同步,无应答后继续下一轮,我测试的最长时间是在第3循环同步成功,跳频算法我研究了很久,只要不是这32个频点全部同时被信号覆盖,我这算法都能同步成功。,如果2从机同时等待1主机同步,只有1个能同步成功,失败的返回错误代码。主机的序列是来自从机的。我目前用的序列长度是2的31次方,重合的几率还是很小的。 define_avr 发表于 2013-4-20 17:19 static/image/common/back.gif
同步用了32个频点,从机在每个频点等待32个周期,收到同步信号了在第33-35个周期应答,无同步就切换频点 ...
恩,明白了如何确保频点重合,不过这样花费的时间很长,如果频点少一点的话估计比较有效率。 dreamc 发表于 2013-4-21 14:39 static/image/common/back.gif
恩,明白了如何确保频点重合,不过这样花费的时间很长,如果频点少一点的话估计比较有效率。 ...
蓝牙选的是32个,估计是有测试数据支持的,所以我也抄蓝牙的选32个,我写的这个同步起来也就几百毫秒的事,我觉得这个时间完全可以接受! define_avr 发表于 2013-4-21 16:20 static/image/common/back.gif
蓝牙选的是32个,估计是有测试数据支持的,所以我也抄蓝牙的选32个,我写的这个同步起来也就几百毫秒的事 ...
恩,我觉得你现在大概mcu就是只处理RF部分的数据传输,所以我感觉如果你mcu处理多点事情的话,你的通信基本就不可行了。按你之前说的应该是每秒500帧吧。我也在弄这个,不过跳频这部分搞了不久,频点我用9个,平均分布在2440到2483这个段。我的连接成功率很低啊。除非主机重启就基本能连上 dreamc 发表于 2013-4-21 17:40 static/image/common/back.gif
恩,我觉得你现在大概mcu就是只处理RF部分的数据传输,所以我感觉如果你mcu处理多点事情的话,你的通信基 ...
是的,每秒500跳的话,mcu基本只能处理通信部分的事情,其他事情还得另一块mcu来处理。 跳频蛮难搞的 mark 诺迪官网有个文档,对跳频也说了。 mark,有用的 我最近在做无线语音东西,其他的任务都完成了,就是卡在跳频这块。请教下,你的时间同步,具体是如何实现的,主机会每8ms把本地时钟发给从机对时吗? 我做的数据包包含本地时钟信息,如果无数据传输时才8ms同步一次,我做的容错率是50ms,连续通信时每2ms一数据包,下2ms就同步了。 lizhijieli 发表于 2013-5-6 10:11 static/image/common/back.gif
我最近在做无线语音东西,其他的任务都完成了,就是卡在跳频这块。请教下,你的时间同步,具体是如何实现的 ...
时钟同步一般就两种:
1.如果你8ms一个数据包,当接收到数据的时候,就强行把接收器的时间只是到4MS。
发射: ---------8ms--------|---------8ms--------|---------8ms--------|---------8ms--------|
接收: ---------Xms--------|---------Xms--------|---------Xms--------|---------Xms--------|
接收的周期不一定是8ms,需要你测试调整,将接近8ms。
2.发送同步帧,
发送专用同步帧:比如: 连续发送两帧 间隔1ms的数据。接收第一帧打开定时器计数,接收到第二帧就停止。 define_avr 发表于 2013-4-20 17:19 static/image/common/back.gif
同步用了32个频点,从机在每个频点等待32个周期,收到同步信号了在第33-35个周期应答,无同步就切换频点 ...
请教一下。 “跳频序列长度是2*10的9次方“ 怎么理解这个 ?
你说的主机序列来自从机。这个序列又表示什么含义?? 学习一下。 不懂
define_avr 发表于 2013-5-7 14:41 static/image/common/back.gif
我做的数据包包含本地时钟信息,如果无数据传输时才8ms同步一次,我做的容错率是50ms,连续通信时每2ms一数 ...
我用rf自身的io状态校准1ms定时器,实现了2ms同步一次,可以有效地降低通讯开销。 define_avr 发表于 2013-4-20 17:19 static/image/common/back.gif
同步用了32个频点,从机在每个频点等待32个周期,收到同步信号了在第33-35个周期应答,无同步就切换频点 ...
这32个同步频点是如何确定的,后续会更改吗,是不是事先主从机都已知的? define_avr 发表于 2012-12-26 13:32 static/image/common/back.gif
我写的这个跳频理论很简单,就是定时器1ms,每1ms完成一次发送或者接受,然后跳到下一个频道,难点就是同步 ...
RS序列是在同步时由从机上报给主机,后续序列会更新吗?如果不更新,是不是有些通道会周期性地干扰或被干扰? lizhijieli 发表于 2013-5-8 17:09 static/image/common/back.gif
RS序列是在同步时由从机上报给主机,后续序列会更新吗?如果不更新,是不是有些通道会周期性地干扰或被干 ...
32个频点是已知的,跳频的周期很长,序列是一直向前的,长时间被干扰的通道在通信容错里会有处理的,目前是如果数据传输失败,下一跳继续传,如果在失败,下一跳再传一次。如果所有通道都被占用,通信才会失败,只要有通道可以用就能通信成功,速率降低而已。 define_avr 发表于 2013-5-8 18:18 static/image/common/back.gif
32个频点是已知的,跳频的周期很长,序列是一直向前的,长时间被干扰的通道在通信容错里会有处理的,目前 ...
32个频点是随意定的吗?有没有要求,另外RS序列会不停更新吗? lizhijieli 发表于 2013-5-8 22:12 static/image/common/back.gif
32个频点是随意定的吗?有没有要求,另外RS序列会不停更新吗?
32个频点是要有策略的,选哪些要你自己决定。每跳一次就算出下一次要跳的频点,主从机跳频策略一致,RS序列加通道映射算法一起使用。 Sir:
Do you any example code?
Thanks you. define_avr 发表于 2013-5-9 11:18 static/image/common/back.gif
32个频点是要有策略的,选哪些要你自己决定。每跳一次就算出下一次要跳的频点,主从机跳频策略一致,RS序 ...
能不能公布下RS序列生成的代码或公式? 7 楼道资料不错,顶一下 不懂的菜鸟飞过 学习, 谢谢 lizhijieli 发表于 2013-5-15 10:41 static/image/common/back.gif
能不能公布下RS序列生成的代码或公式?
用31位的原本多项式,公式有好几个,任选。 跳频协议,MARK,最近正好在搞24L01 楼主, 你的算法中有没有进行通道质量评估,就是蓝牙的AFH,避开那些干扰较大的信道? lizhijieli 发表于 2013-6-6 12:46 static/image/common/back.gif
楼主, 你的算法中有没有进行通道质量评估,就是蓝牙的AFH,避开那些干扰较大的信道? ...
这个功能还没写,现在在搞另一个项目,跳频的这个暂停了,这个功能很有用,以后一定要加进去的,还有加密的也没有写,现在都是明文,路还很长,我才搞了个开始。 define_avr 发表于 2013-6-7 09:32 static/image/common/back.gif
这个功能还没写,现在在搞另一个项目,跳频的这个暂停了,这个功能很有用,以后一定要加进去的,还有加密 ...
我现在做好了频率自适应,后面准备做功率自适用,有机会一起探讨下啊 mark……
顶一个… mark Mark!{:lol:} 标记一下 以下的文字是转载。
由于NRF24L01工作在2.4G ISM频段,这个频段上有很多其它的设备在共用,所以存在着很多干扰信号,大致分为两类:连续干扰(WLAN信号)和突发干扰(Bluetooth信号)。 在大部分时间里,NRF24L01持续地工作在一个没有干扰的频点,但是在设备上电时或检测到干扰后,PTX和PRX需要搜索频点,以找到一个没有干扰的频点来通讯。对于频点搜索和干扰躲避,实现起来比较灵活,用户可以根据实际应用情况,自己定义算法和规则。
1、 频点搜索
(1) NOACK包传输
常用方法是:PRX和PTX按照预先定义的频点序列,以不同的速度进行频率切换,同时进行数据包收发,由于PRX和PTX的频率切换速度不同,因此,在某个时刻,某个频点,如果PRX收到数据包,同时PTX也收到PRX发的软件应答包,则说明该频点没有干扰,从而PRX和PTX
停止频率切换,固定在该频点进行通讯。
在搜索频点时,可以用命令REUSE_TX_PL来发送数据包,从而加快搜索速度。 在通讯过程中,如果通讯的任何一方在一段时间不能收到数据包或者应答包,则再次进入搜索频点阶段或者休眠状态。
(2)ACK包传输
对于ACK模式传输的包,PTX可以通过MAX_RT或TX_DS中断来判断数据包是否发送成功,如果发送失败,PTX就重传,如果几次重传仍然失败,就切换到下一频点开始发送;PRX如果一段时间没有接收包,就切换到下一个频点接收。由于PTX和PRX的频率切换速度不一样,因此,就在某一时刻,如果双方在某频点收发成功,则表示该频点可用。
2、干扰检测
当存在蓝牙突发干扰时,由于蓝牙通常在一个频点的驻留时间小于625 us,将重发延迟设置为700us就可以保证两次发射不会都受干扰。 对于连续的干扰信号比如WLAN信号,在PRX模式下,用户可以通过CD来检测,CD检测的具体操作方法请看比较表格“CD检测”项。 但是,在PTX模式下,通过CD来检测连续干扰,则不是很好的方法。这是因为:
(1)、需要切换到RX模式检测CD,会耗费较大的电流,浪费较多的时间。
(2)、很多设备在空中传输包的时间大约100-300us,有可能检测时没有干扰,过几us后,又有干扰出现。
(3)、蓝牙等跳频设备,可能会干扰NRF24L01的一个包,但NRF24L01下一次重传却可能成功。
(4)、天线的方向性及多路径衰减也会影响CD的检测。 good job !!! 这个有时间可以去研究下,现在遇见的问题是无法接收数据报文 dreampet 发表于 2012-12-26 12:50 static/image/common/back.gif
附件是Nordic给的无线键鼠跳频参考协议,这个协议筛选了11个频点作为跳频表。
下面这个链接是傻孩子发表的[ ...
赞一个!!! 记号,收藏 不明觉厉啊,膜拜楼主! define_avr 发表于 2013-1-16 11:26
帧是指时缝,系统没有采用统一时钟,主从机时缝会因为自身的时钟出现差距,每帧要完成相应的功能,时缝一 ...
楼主,我不懂,能继续说说这个时缝吗 mark...调频 以你对两款芯片的认识,请问使用CC1121的射频芯片能否实现类似你达到的这样的功能? 好贴 早就听说跳频了 但是一直都不懂 现在终于明白点了
可以看看蓝牙,GSM的跳频原理,86楼说的也不错 goldtiny 发表于 2013-12-10 15:57
以你对两款芯片的认识,请问使用CC1121的射频芯片能否实现类似你达到的这样的功能? ...
可以的,根据你设置是空中速率和每一包数据的大小和其他的要求来决定你的跳速。原理都是一样的。 楼主牛X,希望以后交流交流 define_avr 发表于 2013-12-11 09:09
可以的,根据你设置是空中速率和每一包数据的大小和其他的要求来决定你的跳速。原理都是一样的。 ...
因为我最近课题刚接触这个,希望用单片机来实现CC1121的跳频收发,最终的数据模型应该是 PC机—MCU—CC1121 无线发送 ; CC1121接收—MCU—PC机。不知道你做的是个什么样的产品,能说说嘛 现在有点无从下手 谢谢! 我的msp430g2533+nrf2401,一周了还没成功。能不能给个调试的步骤呢 我的msp430g2533+nrf2401,一周了还没成功。能不能给个调试的步骤呢