超低成本的2.4G超远距离无线遥控、无线传输方案随笔

     

超低成本的2.4G超远距离无线遥控、无线传输方案随笔

       在2.4G的领域里面。大家比较熟悉的就是蓝牙和wifi。物联网用的比较多的就是zigbee。而在专业的领域用的比较多的就是nrf2401,cc2500等低成本芯片。就距离而言,相同的功率下100mw,17Dbm的增益下。蓝牙只有10米,wifi大概20米。Zigbee也不超过50米。nrf2401,CC2500不会超过100米。

       其实目前2.4G的传输距离为什么近,其最本质的原因是1:该公共频道带宽不足,手机,蓝牙,wifi都占用这个频道。2:功率必须符合100mw,增益在17dbm以下,不然过不了FCC、国家标准。也因此意味着你无法通过加大功率的办法来增加距离。有人会反问我:网络上有看过人家wifi能传300km的呢。是的,我也相信这是真的。只是这根本没有可比性,也没有实用价值。这好比你硬要在自行车上实现飞机那样的速度,你说可以吗?我的答案是完全可以。我需要增加最先进的动力设备,加最轻的机壳材料,加最好的传感器,把飞机上得所有东西放在自行车上。相信最后做出来的自行车飞机,那完全就不叫自行车了,也许最后我们连自行车的轮子都看不到了。更可悲的是这个产品的造价也许够人家飞机厂做几台这样的飞机出来了。

       如果你得产品要获得出口到美国,中欧一些国家的话。使用2.4G的公共频道是不需要申请的。但是辐射功率必须在100mv以下。甚至有些国家还要求RF发送的时间间隙要在3ms以上。否则你的产品没办法在这些国家销售。中国的话没有强制的要求,但2016年之后中国也会出台相关的强制标准。

       那是不是除了上面两个条件,就没有其他办法来增加传输的距离了呢?答案当然是可以。本文就针对该问题提出了一整套的解决方案。至于你能不能领悟到其中的奥秘,那就看你的造化了。

       废话少说,我们转入正题。方案好不好,首先我们得要选一个好的硬件平台,就好像做饭一样,巧妇难为无米之炊,我们要做一个上好的牛扒,选对牛肉是关键。无线传输中,选对一个RF芯片是非常重要的。

       那如何选对一颗好的芯片呢,其实无线传输最重要的一个指标就是灵敏度和传输速率。理论上是灵敏度越高,传输距离会越远。传输速率越快,传输距离也会越远。简单的说,就是你灵敏度高了,同样的距离下,你很微弱的信号都能让对方接收到,然后你才有条件来作数据的转换,才能变成有效的信息。而传输的速率快,换句话说,同样的时间内,以1秒为一个单位,假设芯片A一共发送10个包,其中在500米的地方只能成功收到2个包,再远就收不到了。假设芯片B速率快,它在1秒内可以发送20个包,同样条件下在500米的地方能成功的收到4个包,这样的话芯片B其实还能把距离再拉远一点,也许在700米的地方它还能成功收到2个包,那我们就说芯片B的传输距离比芯片A的要远。如果有个芯片灵敏度又高,速率又快,那就完美了。不过现实总是那么的残酷,鱼与熊掌不可兼得。我们做产品的首先考虑的还是性价比问题。这在低成本的产品中更为突出。所以我们都是在同价格中选功能,同功能中我们选性能。总之你如果能用最小的成本做最好的产品,那你就是厉害的了。你不能只出自行车的价格要求做出摩托车那样的速度,你也不能用摩托车的价格来跟汽车这样的产品。这个道理你懂的。[1]

       下面我们对比一下几个常用RF芯片的硬件参数。

参数

nrf2401

cc2500

RF79L01

工作频率

2.400GHz2.524GHz

2.400GHz2.483GHz

2.400GHz2.480GHz

调频方式

GFSK

OOK ASK FSK

GFSK/FSK/DSS

传输速率

250Kbps1Mbps

500k,250k

250K,1M

工作电流

18mA

15.6mA

20mA

掉电模式

400uA

<1uA

<1uA

灵敏度

90dBm

98dBm

97dBm

通道数

125

90

80

CRC校验

支持

支持

通讯接口

SPI

SPI

SPI

发射功率

17dBm

17dBm

17dBm

传输距离

200米

300米

Xx米

价格

3

7

5

       从上面的表格中,我们可以大概的得出一个结论,就是灵敏度和速度确实跟传输距离有关系。那是不是我们一味的去追求这两个指标呢?答案是否定的。什么都是相对的,当然我们可以初步从这两点来选择芯片,但它还不是决定性的因素。就好比一个人的学历,并不能表明他的能力就很高,但你一开始还不理解这个人的时候,学历在某种程度上可以代表这个人的能力。那怎样才能找到真正适合自己做方案的芯片呢?。我的方法其实很简单。首先我们大家都会用百度,在百度上搜索一下改芯片的资料,如果该芯片的资料很多。那表示这个芯片很多人用,再找几个有代表性的产品自己回来测一下,就能大概知道这个芯片的优势和缺点了,然后你就能评估这个芯片适不适合你的项目。所以上面的NRF2401和CC2500都不是我要找的那个。因为这两个IC大把人在做,已经很成熟,距离最远也就那样了,你如果自信自己比任何人都聪明或者能力超天的话,可以耗时间来把200米的距离做到1000米。但我估计你会死的很惨。

       我还是相信群众,所以我觉得我测试的NRF2401和CC2500已经是它的极限距离了。我不想做无谓的工作。一个很成熟的产品如果达不到我的要求,我就认为它确实就那样,但是一个不成熟,也没多少人在做的产品它达不到我的要求,那这个产品就还是有希望能做的更好的。所以我选择RF79L01,只是这必然面临一个痛苦,就是它的资料非常少,而且你必须是该芯片的大客户,代理才会对你有兴趣,才会给你有用的资料,才会给你技术支持。所以普通的个人用户,在这个问题上就很悲催了。

       现在选定好了硬件平台,接下来就是痛苦的看数据手册,画原理图、PCB,写驱动,测试代码的时间了。很多没接触或者刚接触无线传输的人,都会或多或少的把它想的太简单了,无线没几年的沉淀是做不好的。下面就分享下我的痛苦经历吧。

       第一步先从简单的开始,两个模块,一发一收。这是基础,任何的上层都居于这个基础上开发的。这基本上只要把驱动写好,这一步都会成功。但不要高兴的太早,这只是万里长征的第一步。你会发现越来越多的问题了,譬如,有时候发对方能收到,有时候对方又收不到。经常会收到一些干扰的信息,或者今天能收到,第二天又不行了。总之就是时好时坏。究其原因主要是因为2.4G本来就是一个非常不干净的频段。就好比国道是免费的,大家都把车开到上面,那会不拥挤的呢?关键是你要学会躲车和见缝插针。这就是你设计的物理层的算法了。2.4G的带宽是不能变的,就好比免费得高速路上几车道已经定好,而且2.4G的通道同一条车道只能走一台车,下一台车要跑,只能等前面的车下高速了你才能够用,也就是说,[2]一个设备会在某一个时刻会完全占用了这个车道。如果大家都有默契轮候排队使用这个车道那也是不会乱得。但不是每个人的素质都那么高得,2.4G上有太多的流氓了,他们完全不安规矩办事,因为没有监管部门,所以在这个平台上,拼得就是实力了。好比一个混乱的江湖,胜者为王。所以说编程的人不能一味的理想主义,教条主义,任何的程序都是一个现实的产物,你要把你的产品放到一个现实的世界里面,才能设计出好的算法,才能设计出好的产品。实验室里面的产品,要真用到产品中,绝对就是见光死了。

       现在当我们了解到了这个道理后,我们反思一下上面讲得硬件参数,你是不是想说:这都不是事了。你传输速率再快,灵敏度再高,如果你不够人家抢信道,你功夫不够硬,其他的都是白搭。所以如何能在刀光剑影中胜出,这就是你能力的体现了。

       到这里我们大概应该明白了,你要做出超远距离的产品,硬件参数不是主要的,关键是软件部分。软件又分驱动层和系统层以及应用层,驱动层都是对寄存器的操作而已,这一般都是芯片厂家提供,大家都一样没区别,然后就是系统层,就好比是操作系统,其负责资源的合理调配,每个硬件的协同工作,各种竞争策略的合理优化,以及软件接口的封装等等。这部分是做单片机最常见的东西,跟RF基本无关,但是做过多年嵌入式的有经验的人和刚接触的人所做出来的系统区别是很大的。这部分是整个系统的关键所在,做出来的产品性能如何,成本低不低,以及会不会经常死机,这类的问题都跟系统层息息相关。剩下的就是应用层,这里就涉及到具体的RF协议层了,RF相关的协议也有不少,BLE,WIFI,ZIGBEE这些都是RF协议。但这些都是别人的,而且这些都是短距离的传输协议。要想做超远距离的传输,目前还没有哪家公开的协议,所以我们要自己来写这部分的协议,难度可想而知了,这里就涉及到多个领域的知识了,通讯编码,数据压缩,竞争策略,互斥机制,网络路径优化等,这属于数学以及人工智能的领域范畴,光是做单片机编程的人是做不好的。甚至可以夸张的说,协议都是不会编程的人想出来的东西。说到这有人就好反驳我了,我就是个全才,硬件,编程,协议都会啊,有什么了不得的。你要这样说,我只能呵呵了。一个负责买菜,洗菜,切菜,做菜,最后还要端菜的厨师,他只能说是一个厨子,也只能在路边摊任职了。人家五星级的专业厨师,甚至连炒菜都不需要做,就这个道理。所以每个专业的事情交给专业的人做,最后你的产品在每一个环节都是专业的,别人抄袭也抄不来。当然一个小得企业不可能配备各种专业的人员,所以目前最合适中小企业的就是整合资源,把自己专业的加上别人专业的,做出一个专业的产品。等产品挣钱了再考虑配备专业的人员,最后做真正意义上自己的产品。

       说着说着有点跑题了,现在我们正式来说说专业级别超远距离的无线通讯需要解决最普遍的功能

       一:频道如何选择。一个频道如何监测是不是可用频道,遇到不可用的频道该怎么办,自己用的频道被别人干扰了又需要怎样的策略。需不需要预先预估可能会被占用的频道,提前错开。

       二:自动互连。开机时如何识别是配对的设备,收发双方失联的时候要如何恢复通信。多个设备在一起时,如何不互相打架,锁定自己配对的设备。这里特别要注意的一个问题就是,蓝牙和wifi的协议太过臃肿,每次失联后再次恢复的时间太久,基本上10秒左右。这在远距离的通信中是最忌讳的。

       三:身份识别,安全加密,就是一旦对码成功后,就是一对一的关系了,不允许出现交叉控制了。如果协议做的不好,经常是别人的干扰不了你的设备,但是自己的设备之间会发生干扰。

       四:传输的延时。这在短距离的传输中不会明显,在远距离中这个就是很关键的了。譬如要求100ms必须要收到一次完整的正确的帧。

以上几点就是能充分体现距离长短的关键因素了。网上很多模块鼓吹自己的能做到1000米,甚至2000米,对于这种说法我多是笑而置之。因为这测试必须得要有个标准的前提:1:测试环境。2:RF功率(100mw)。3:天线增益17dBm。4:单位时间内(1秒)能收到多少个有效的帧(假设1帧按16字节)为单位。

       对于前面3个硬性的标准,很多模块都能达到,但是第4个标准,每家都会在这里做文章了。很多说自己的模块能有1000米的距离,也许他得测量标准是1小时内只要能收到一个正确的包,都认为是有效的传输距离了。如果按这个逻辑,我建议他可以说这模块传输距离是10km。因为你只要把单位时间改到足够大的话,一个星期,一个月,或者一年,基本上没人敢说你是错的。但这种玩概念的东西,有实际意义吗?相信你懂的。

       最后奉献给大家一个个人的建议,一个产品要做出功能,其实是很容易,一个收,一个发,几天就搞定的事。但是要考虑到整个生态系统及各种极端的条件,而且要在低成本的基础上实现别人用高成本才能搞出来的东西,这需要好高的个人能力和长久的研发时间,动辄几个月,甚至几年。普通的玩具遥控器,可能你只需要驱动层的代码就可能实现,好一点的弄一个简单的协议也是能凑合着用。反正稳不稳定,距离远不远,手感好不好,会不会被干扰这些都不重要。另外还要告诫初学者,切勿奢望把蓝牙或wifi的协议移植到这样低成本的芯片上,就好比穿着华丽的晚礼服去农村赶集一样,虽然表面光鲜亮丽,可不实用。也无法用。

       俺在无线领域工作了多年,做过很多的无线控制方案,算是有点技术的积累。也是经过好多人的不断积累,交过很多学费,走过很多弯路,没办法,做技术的人就是那股自大的劲。一开始也就是没把专业的事情找专业的人做,让自己浪费了太多的时间。到今天算是经过了好几年的产品验证,我们的产品在专业的无人机领域也占有一席之地了。在国内来说不敢说第一,但我们可以自信的说,还没哪家在低成本的方案上能达到我们的性能。我们测试的标准就是,几十台遥控器同时工作要能配对成功,互相不能干扰,控制不能有卡顿,距离不受影响,能避开蓝牙WIFI等无线设备,最后就是生产的一致性也很重要。

       另外一个让我们自信的原因就是,大疆第一代的产品也曾经用过我们这个芯片,但是他得有效距离只能做到600米左右,而且跟其他品牌的遥控器一起的话抗干扰比较差,后来不得不使用了比我们价格贵好几倍的芯片才能做到1km的有效距离。说明白点,就是同样性能的情况下,大疆的方案要比俺的贵很多。就好比我只用自行车的价格就能跑到摩托车那样的速度。孰优孰劣你们来定夺吧。



 

 技术交流:email:[email protected]  qq:19447502

发布了21 篇原创文章 · 获赞 12 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/fgh00000/article/details/51458888