本帖最后由 wzzzq 于 2021-2-20 20:57 编辑
市面上有很多sbus接收机,它只有一根线就可以实现很多通道的通信,其本质利用了串口通讯的原理,所以arduino也可以解码sbus有很多优点,特别是应用于单片机开发的时候
传统的PWM接收机一根线对应一个通道,要用n个通道就要n根线,而sbus用n个通道(n<=遥控支持的最大通道数)只要1根线,只要一根线!而这还不是最大的优点,有人会说PPM也是一根线,arduino也能解码呀.但是,PPM和PWM读取方式都是pulseIn读取,具体说就是计时脉冲的时间.
那就是说,读取一个1500微秒的脉冲就要1500微秒
反观sbus,sbus的原理是串口通信,信号会被放到arduino的缓冲区,arduino按固定周期读取时只要读取一下信号即可,时间缩短了很多很多
但是sbus的缺点就是读取复杂,不像PWM只要计时就行
一 硬件准备
你需要一个sbus接收机,可以是天地飞的,也可以是futaba的,等等,是sbus都行
还需要一个取反器,线若干
前面我做的机甲大师就用了这种接收机,非常好用
但是sbus的输出信号是反的,所以我们需要一个反向电路来对它取反
淘宝上也有很多这样的取反器,自己做也可以,按照上面的图就可以
然后按照图上接线
将5V,GND接好,这里很简单,然后要接信号线
信号线取反完以后连接至arduino的RX,如果用的是mega这种有很多RX的主板,建议连接到RX2,RX3这样的串口,不要连到RX
因为arduino的RX是用于和电脑串口通讯的,串口监视器就是依靠RX0,TX0实现的,如果连到RX的话会导致串口监视器不可用,会给调试带来大麻烦
如果用的是UNO,NANO这样的主板,那就没有办法 ,只能用RX0了,这时烧程序的时候要把RX0拔掉,烧好了再插回去,否则会烧不上去
二 软件
我们需要一个sbus的库,有国外的大佬已经开发好了这个库,我们只要用就行了,省去了很多程序(文末下载库)
实例代码:
如果用的是Serial n,就把sbus.begin(Serial);改成sbus.begin(Serialn);
在void dataReceived(ChannelData channels) 对数据操作
可以写一个这样的函数
- void dataReceived(ChannelData channels) {
- // do something with the data
- for(int i=1;i<=16;i++)
- {
- rcsig[i]=channels.data[i-1];
- }
- rcsig[17]=channels.channels.channel17;
- rcsig[18]=channels.channels.channel18;
- }
复制代码 这样就存起来了数据可以再打印一下数据,看一下对不对
你会发现sbus的精确度和时间优势令人赞叹
最后,希望本文能帮到你,有问题可以回帖
|