|
本帖最后由 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); tigerzq,如果您要查看本帖隐藏内容请回复 在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的精确度和时间优势令人赞叹 最后,希望本文能帮到你,有问题可以回帖 |
|