OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7156|回复: 0

[转载]2.4g 跳频遥控系统纸上谈兵

[复制链接]

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1863
金钱
1863
注册时间
2011-3-29
在线时间
139 小时
发表于 2015-5-12 12:20:18 | 显示全部楼层 |阅读模式
<span style="font-size:18px;font-family:SimSun;"></span><span style="font-size:18px;font-family:SimSun;">2.4g 跳频遥控系统纸上谈兵</span><br />
<span style="font-size:18px;font-family:SimSun;"> http://bbs.mx3g.com/thread-69268-1-1.html</span><br />
<span style="font-size:18px;font-family:SimSun;"> (出处: 模型论坛|模型中国)</span><br />
<div>
        <br />
<span style="font-size:18px;font-family:SimSun;"> 目前2.4g遥控系统除了futaba以外,都是两点,三点跳频的(也有不跳的),而且都需要发射机上有开关或者按键用来对码,而且对码都比较麻烦。有没有办法做一个设计,能实现匹敌futaba的性能呢。我就在这里抛砖引玉,纸上谈兵,先提一个方案。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 射频部分:</span><br />
<span style="font-size:18px;font-family:SimSun;"> phy: ml2726 (2Mbps), 同futaba使用的ml2724同属于rfmd公司的产品(收购了别的公司得来的),提供了一个透明的无线串口。为了达到20dbm的发射功率,可以使用rfmd同时提供的参考设计。</span><a href="https://estore.rfmd.com/RFMD_Onlinestore/Products/RFMD+Parts/PID-P_ML2724.aspx" target="_blank"><span style="font-size:18px;font-family:SimSun;">https://estore.rfmd.com/RFMD_Onl ... s/PID-P_ML2724.aspx</span></a><br />
<span style="font-size:18px;font-family:SimSun;"> 如果设计支持20个通道,每个通道使用两个字节,则一包数据为40个字节,加上一些附加信息,就算500bit吧,传送也就是0.25ms。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 射频带宽2400M到2483.5M,每频道1Mhz,一共80个频道(凑个整儿)。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> MAC部分:</span><br />
<span style="font-size:18px;font-family:SimSun;"> 功能上要支持:</span><br />
<span style="font-size:18px;font-family:SimSun;"> 1,容易对码,即发射机采用无模式设计,不区分对码和正常工作状态。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 2,支持断线重连。3,支持100个发射机同时使用。4,产送更新速度大于50次/s,传输延迟尽可能小。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 基于以上要求,可采用基于ARM cortex M3的MCU,STM32103就是个不错的选择。调试器功能强,且异常便宜,国产jtag不到100元,usb的,jtag速度稳定在4Mhz,可达6Mhz,是我用过的最为可靠的jtag调试器,(显摆一下我用的jtag调试器:arm multi-ice, ti black halk, adi usb jtag, avr usb jtag, silabs u-ec5, bdi2000...)</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 跳频协议:</span><br />
<span style="font-size:18px;font-family:SimSun;"> 发射机,每台发射机有一个全局唯一的id,发射的时候每真数据都包含这个id。发射机每2ms,跳频一次,要跳到的频率随机生成,但是选频道的范围要剔除上一次的频率。可以随机生成3个,并把这3个频点加到要发送的数据帧中。这样可以保证160ms内,所有的频点都能跳到。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 接收机,接收机上有一个按键,按住以后进入对码模式。在对码模式下,旁边只能有一台发射机,或者以可以只接收信号强度大于某个阈值的数据帧。接收机提取数据帧中的发射机id,并存到自己的eeprom中,并从这时起,检查每帧收到的数据中的id,只有同这个id相同时才接受。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 接收机有两种跳频接收模式,慢跳和快跳。在开始时慢跳,每200ms跳一次。起始频率是随机从80个频道中选取的。反正200ms以后一定能收到发射机发来的数据,一旦受到一帧以后就知道了发射机下一个频点,马上转到那个频点。这样就实现了跳频多址。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 如果中途射频丢失了,接收机超过了3跳没有收到数据,就回到慢跳模式。这样实现了重连。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 由于发射机发射的数据帧中包含了下面3跳的频点,如果本帧,或者下面2帧都被干扰了也不怕,这就实现了大家一起玩。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 比较粗糙,大家拍玉(拍砖就算了,我抛的就是砖)</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 早上测了一下,基本证实了上面的想法。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 而且有些数据竟然蒙对了,没有开发射机的时候,接收机确实是200ms一跳。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 发射机打开以后,发现调频速度没有我想的快,不是2ms,而是在3.4-4ms之间。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 关掉发射机,马上就变成200ms一跳。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 特别的,测试了一下ml2724的din管脚,始终是低电平没有发送数据。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 由此,更加佩服futaba的工程师,真规矩。因为按照国家标准,遥控设备的接受机是不能发送信号的。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 再想想咱们自己的那几家,哎,大家努力吧。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 留个密码吧,0x0588,那天谁做到这儿了,就知道这个数是什么意思了。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 频率碰撞和容量分析。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 首先80个频道,任意时刻有两个人同频的概率是非常高的。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 参看生日悖论</span><a href="http://zh.wikipedia.org/wiki/%E7%94%9F%E6%97%A5%E6%82%96%E8%AE%BA" target="_blank"><span style="font-size:18px;font-family:SimSun;">http://zh.wikipedia.org/wiki/%E7%94%9F%E6%97%A5%E6%82%96%E8%AE%BA</span></a><br />
<span style="font-size:18px;font-family:SimSun;"> 但是好在这不是要关心的问题。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 要关心的问题是,任意时刻有人同你频率相同的概率是多少。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 如果包括你只有两个人,则为1/80, 如果有三个人(包括你)则为2/80。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 此处分析错误,应该用1-(79/80)(79/80)。思路为1减去另外两个人都与你不相同的概率,另外两个人是独立的。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 也可这样分析:第一个人与你相同,第二个人与你不同(1/80)*(79/80) 再加上第一个人与你不同,第二个人与你相同(79/80)*(1/80)再加上连个人都与你相同 (1/80)*(1/80)</span><br />
<span style="font-size:18px;font-family:SimSun;"> 两种算法结果是相同的。但是第一种想法更直接。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 后面的分析已经改好了。概率分析稍不注意就会犯错呀。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 以此类推,如果场子上有30个人一起玩,则任意时刻,有人与你同频的概率为1-(79/80)^29 = 31.43% 。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 所以如果发射机发送的信息中只包含下一跳的频道的话,就非常危险,只有68.57% 的概率能通信,如果不能就只能重新回到慢跳状态了。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 那么发射机到底要包含个下一条频率呢。 如果发射机2ms跳一次,并且我们的要求是20ms内必须成功通信一次,那么就可以包含10跳的信息。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 如果场子上有30个人(包括你),则连续10次有人与你同频的概率是多少呢?应该为(31.43%)^10 = 9.4068e-6 , 成功的概率为1-9.4068e-6 = 99.999%,看上去很高是不是?</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 这意味着,10万次通信中(每20ms更新一次)会有99999次成功。大概相当于33分钟失去同步一次。这只是一个概率。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 这个分析错了,99.999%是每次通信成功的概率。而现在的问题是,10万次连续通信都成功的概率是多少?</span><br />
<span style="font-size:18px;font-family:SimSun;"> 连续10万次都成功的概率是(99.999%)^100000=36.79%</span><br />
<span style="font-size:18px;font-family:SimSun;"> 也就是说2000秒钟不出现不同步的概率为36.79%,也就是说33分钟内一次也没有出现需要再同步的概率是36.7%</span><br />
<span style="font-size:18px;font-family:SimSun;"> 一件事情的发生概率是1/100000,那么100000次实验是不是就一定发生一次呢?不是!</span><br />
<span style="font-size:18px;font-family:SimSun;"> 因为,其不发生的概率是99999/100000, 100000次连续都不发生的概率是(99999/100000)^100000 = 39.79%, 也就是说</span><br />
<span style="font-size:18px;font-family:SimSun;"> 100000次试验发生一次的概率为1 - 39.79% = 60.21%</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 以上分析依然是有缺陷的,在任意时刻没人同你同频不是一次通信能成功的保证,还必须保证在接下来的0.25ms(一次通信的时间)内没有人与你同频。这要看泊松分布了。</span><br />
<a href="http://en.wikipedia.org/wiki/Poisson_distribution" target="_blank"><span style="font-size:18px;font-family:SimSun;">http://en.wikipedia.org/wiki/Poisson_distribution</span></a><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 如果场子上有多余80个人玩,理论上基本上就不能通信了。这好像有悖常理,因为最简单的每个人一个频道不跳,不就没事儿了么。这就是跳频的代价呀。跳频并没有增大信道的总容量。&nbsp;</span><br />
<span style="font-size:18px;font-family:SimSun;"> 这里的分析有问题,在同一时刻,并不是所有的发射机都发射,这跟ppm发射机是不一样的。同一时刻,每个发射机都可能是发射(概率为Pt)或不发射(概率为Pi)。所以先要计算同一时刻N个人同时发射的概率,再计算同频的概率。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 这样看来,rc领域最有效率的做法是,每台发射机开机以后在发射之前都看一看哪还有干净的频率,在干净的频率挑一个发。 但是这需要集体的合作,这是不可能的。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 粗算一下真个2.4g信道的总容量。如果每个发射机最快的调频速度是2ms,则20ms内该信道可以时分复用给10个发射机,总共有80个频道(1M一个),则总共也就能保证800个发射机同时使用(注意不是同时发射)。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 所以,以后做广告的吹牛要有个上限了。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 首先,感谢robust参与讨论。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 基于ARM的MCU以前成本是比较高,而且开发也困难。但是现在情况变化了,ARM Cortex 一出,彻底改变了这种情况。目前,TI(收购了Luminary),ST,Atemel,NXP都提供基于Cortex M3的MCU。芯片成本已经很低了,luminary的东西有1美元以下的芯片,做高频头足够了。ST的STM103C8 也就14,5块RMB。看看咱们国产厂的高频头,里面竟然用了3片mega,不说芯片价格,开发也麻烦呀。Cortex M3的调试也非常简单,jtag一连,程序直接下载到flash中调,调好了,拔掉jtag线直接就可以用。当然不是说mega不能用,只是要做的好,做最适合rc的mac协议,那还得自己处理。</span><br />
<br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 再说说这几颗2.4的transciver吧。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> nRF24L01, 支持Shock Burst协议。其实那只是一种很简单的mac协议。在RC领域关心的是通信的可靠性。shock burst虽然支持ack和重传,但是只能在原定频道上。虽然它最多能重传15次,最大重传延迟4ms,但是在日益干扰严重的2.4g频段上,这没用。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> cc2520和CYRF6936 是支持的DSSS的,注意CC2500是不支持DSSS的。但是那只能起到扩频的作用,展宽了频谱,降低了信噪比要求,对于同频碰撞是没有帮助的。这是因为,DSSS提供的抗干扰性能是chip级,扩频以后,如果每个chip受到几位的干扰,是可能通过与pn码相关解调出来的,而同频碰撞是一个较长时间段,几个毫秒到几秒级的碰撞。芯片采用的DSSS技术可参看802.15.4 6.5节的内容。这里要说明的是DSSS和CDMA不是一个概念,看上去可能很像,但是不是一个东西。DSSS主要是扩展了频谱,系统中大家使用的PN码是相同的,或是很少的几组(CC2520是16组,按照802.15.4的规范)。CDMA是靠PN的不同来实现多址的。RC中用到的几乎都是DSSS而不是CDMA。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 使用先听后发的想法是好的,但是这等于把自己的命运放在别人的手中。严重依赖别人是不是听清了,听准了。而且现在市场上已经有了一些产品,人家可是乱跳的。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 2.4g给了大家一个追求高性能和高可靠性的机会,大家要抓住呀。 毕竟一架飞机上去,都不是一笔小钱,而且还有人身安全的问题。72Mppm/pcm时代模型没有这么普及,现在情况不同了,对遥控器可靠性的要求提高了。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 为跳频增加智能。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 上面提到的发射机跳频方式是最基本的,通过增加一些智能,就能够提高整个系统的性能。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 国家规定了,接收机不能发送信号,可是没有规定发射机不能接收信号。如果发射机发送之前先听一下信道,如果已经有了人占用了这个频道,就不要发这一跳了,直接等过这一跳的时间。这样就减少了干扰别人的可能。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 在相同的信道容量情况下,减小带宽就要求更高的信噪比,即要求更干净的信道。这对于2.4g频段而言是不可能的。2.4g频段越来越乱了。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 这就是为什么802.15.4 (CC2520, CYRF6936)要用DSSS的原因呀。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 我们看看欧洲对2.4g频段设备的要求吧。</span><br />
<span style="font-size:18px;font-family:SimSun;"> ETS EN 300 328</span><br />
<a href="http://www.etsi.org/deliver/etsi_en/300300_300399/300328/01.07.01_60/en_300328v010701p.pdf" target="_blank"><span style="font-size:18px;font-family:SimSun;">http://www.etsi.org/deliver/etsi_en/300300_300399/300328/01.07.01_60/en_300328v010701p.pdf</span></a><br />
<span style="font-size:18px;font-family:SimSun;"> 设备要声明自己的调制方式,可以为两种FHSS或者DSSS。如果不是FHSS,就会被认为是DSSS,就会被按照DSSS的要求来管理。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 如果你不声明自己是FHSS,即不跳。那么你的ERP 限制就是10mW/MHz, 意思是你在1Mhz的带宽上不能发射大于10mW的功率。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 你的通信距离就受到了限制。国内的那个xxxx pro 号称是100mW的发射功率。所以它如果能在欧洲卖的话,就必须声明自己是跳频(FHSS)的。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 对跳频也是有要求的,如果声明自己是跳频(FHSS)的,则至少要在15个频点上跳,每次停留的时间不得大于0.4S,并且最大发射功率不得大于100mW。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 在一个频点上发,紧箍咒是很多地,限制是很大地。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> robust兄说的对,本来是不许要那么高度的数据率的,如果只考虑一台发射机,只考虑RC使用2.4高频带。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 减小带宽就需要更高的信噪比,降低通信速度,势必更长时间的占用频道呀。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 现在的问题是即使咱们RC不跟里边掺和,2.4G频段已经很乱了。想用窄带通信,可靠性是很差的。两台802.11n的路由器就把全部的2.4g频段占满了。使得信道的信噪比下降,要在一定速度下可靠的通信,只有增大带宽,或者增大发射功率(以提高信噪比,但这会带来恶性竞争,就像现在400M的电台一样)。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 关于功率和带宽和DSSS的问题可以参考这篇文章&nbsp;</span><a href="http://www.ed-china.com/ART_8800032151_400014_500012_TS_c6645112.HTM" target="_blank"><span style="font-size:18px;font-family:SimSun;">http://www.ed-china.com/ART_8800032151_400014_500012_TS_c6645112.HTM</span></a><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 另外,CC2500/2520, nRF24L01, CYRF6936 的air rate,空中速度,是不能设的那么细致的,1M或者2M。随着802.15.4(zigbee)的普及,基本上就是2M。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 在这个本来就很混乱的频段上搏杀,跳频,其实是必须的。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 越想越多了,才发现,原来这些问题都有人想过了。</span><br />
<a href="http://en.wikipedia.org/wiki/ALOHAnet" target="_blank"><span style="font-size:18px;font-family:SimSun;">http://en.wikipedia.org/wiki/ALOHAnet</span></a><br />
<a href="http://www.jacksons.net/working%20papers/Dynamic%20Sharing%20%202002%20version.pdf" target="_blank"><span style="font-size:18px;font-family:SimSun;">http://www.jacksons.net/working%20papers/Dynamic%20Sharing%20%202002%20version.pdf</span></a><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 找到希望了,walkera的2801pro的接收机是完全不发射信号,而且有两路完全独立的射频通道。好东西!</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 2.4g跳频的流协议讨论</span><br />
<span style="font-size:18px;font-family:SimSun;"> 其实2.4g跳频的非连接包协议还是不难的。中间丢几个包,只要接收机不乱动,只是增大了延迟。抛开国内对rc控的限制,但从技术上想一下如何实现2.4g跳频的有连接流协议呢。比如可以通过发射机向接受机发送一个文件。最简单的方法就是在接收机收到数据后在当前频率上回发一个确认包,如果发射机收到确认包,就把要发包的id加1,如果没有收到ack,就跳频重发原来的包,保持id不变。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 这有几个问题。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 1,发射机接收机频繁的改变发射和接受模式,导致时间损失较大。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 2,由于重发导致控制延迟感增大。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 我下一步要做个双向的跳频125个频道,每频1M,不知相邻频道干扰大不大,</span><br />
<span style="font-size:18px;font-family:SimSun;"> 测试一下,决定频道是不是改为2M;</span><br />
<span style="font-size:18px;font-family:SimSun;"> isbit 发表于 2009-10-25 20:48</span><br />
<br />
<br />
<span style="font-size:18px;font-family:SimSun;"> 125个频道,不知道是不是我多虑了,标准是2400到2483.5Mhz,一共83.5M,1M一个频道如果不重叠的话怎么做125个频道呀?</span><br />
<span style="font-size:18px;font-family:SimSun;"> 除非你用重叠的方法,或是不考虑标准的限制。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 数字信号的带宽问题是一个比较复杂的问题,可以参看樊昌信版《通信原理》第五版,5.2.2 &nbsp;"基带信号的频谱特性"。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 不过也有一个简单的估计,如果NRZ码的话,基本上1Mbps要占1MHz的带宽,在nRF24L01的手册里也有说明。</span><br />
<span style="font-size:18px;font-family:SimSun;"> 频道数量不用太多,ce的认证要求FHSS最少15个频道,802.15.4就用了16个频道。蓝牙有79和23两个版本。</span><br />
<br />
<span style="font-size:18px;font-family:SimSun;"> --------------------------------------------------------------------------------</span><br />
<br />
<br />
</div>
业余程序玩家。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 13:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表