浅谈无人机接收机的通信协议

浅谈无人机接收机的通信协议

关于遥控器与无人机飞控之间的通信协议有很多种,常见的数据协议如下:

1、PWM:需要在接收机上接上全部PWM输出通道,每一个通道就要接一组线,解析程序需要根据每一个通道的PWM高电平时长计算通道数值。

2、PPM:按固定周期发送所有通道PWM脉宽的数据格式,一组接线,一个周期内发送所有通道的PWM值,解析程序需要自行区分每一个通道的PWM时长。

3、S.BUS:每11个bit位表示一个通道数值的协议,串口通信,但是S.BUS的接收机通常是反向电平、100K波特率,连接到无人机时需要接电平反向器,大部分支持S.BUS的飞行控制板已经集成了反向器,直接将以旧换新机连接到飞行控制器即可。

4、XBUS:常规通信协议,支持18个通道,数据包较大,串口通信有两种模式,可以在遥控器的配置选项中配置。接收机无需做特殊配置。

图片

一、PWM协议

PWM信号用于控制单个电调或者单个舵机脉冲宽度调制信号。

图片

电机(电调)上用到PWM信号种类很多,此处对常见的PWM信号特征进行描述:

1、 PWM信号是一个周期性的方波信号,周期为20ms,也就是50Hz的刷新频率。

2、 PWM每一周期中的高电平持续时间为12ms(1000us2000us),代表了油门控制量。一般四旋翼中,使用1100~1900us,1100us对应0油门,1900us对应满油门。

PCM是英文pulse-code modulation的缩写,中文的意思是:脉冲编码调制,又称脉码调制。PPM是英文pulse position modulation的缩写,中文意思是:脉冲位置调制,又称脉位调制,这里顺便提一句,有些航模爱好者误将PPM编码说成是FM,其实这是两个不同的概念。前者指的是信号脉冲的编码方式,后者指的是高频电路的调制方式。比例遥控发射电路的工作原理如图1所示。操作通过操纵发射机上的手柄,将电位器组值的 变化信息送人编码电路。编码电路将其转换成一组脉冲编码信号(PPM或PCM)。这组脉冲编码信号经过高频调制电路(AM或FM)调制后,再经高放电路发送出去。PPM的编解码方式一般是使用积分电路来实现的,而PCM编解码则是用模/数(A/D)和数/模(D/A)转技术实现的。

目前,比例遥控设备中最常用的两种脉冲编码方式就是PPM和PCM:最常用的两种高频调制方式是FM调频和AM调幅:最常见的组合为PPM/AM脉位调制 编码/调幅、PPM/FM脉位调制编码/调频、PPM/FM脉冲调只编码/调频三种形式。通常的PPM接收解码电路都由通用的数字集成电路组成,如 CD4013,CD4015等。对于这类电路来说,只要输入脉冲的上升沿达到一定的高度,都可以使其翻转。这样,一旦输入脉冲中含有干扰脉冲,就会造成输 出混乱。由于干扰脉冲的数量和位置是随机的,因此在接收机输出端产生的效果就是“抖舵”。除此之外,因电位器接触不好而造成编码波形的畸变等原因,也会影 响接收效果,造成“抖舵”。对于窄小的干扰脉冲,一般的PPM电路可以采用滤波的方式消除;而对于较宽的干扰脉冲,滤波电路就无能为力了。这就是为什么普 通的PPM比例遥控设备,在强干扰的环境下或超出控制范围时会产生误动作的原因。尤其是在有同频干扰的情况下,模型往往会完全失控。

二、PPM协议

每一个遥控器通道都需要一个PWM采集器进行采集,但是对于STM32来说不可能使用多个定时器来采集多个通道的PWM,这对于STM32的资源来说十分浪费。因此采用的就是PPM编码。PPM编码是PWM的扩展协议,可以在一个管脚中传输多路PWM信号。

PPM协议只需要一根线就可以传输,避免了PWM需要多路才能传输多个通道的问题。下面是PPM协议的波形图:

图片

PPM协议最多传输20个通道,使用一个定时器就可以轻松解决了。

PPM的频率通常是50Hz,周期长度20ms,每一个周期中可以存放最多10路PWM信号,每一路PWM的周期为2ms,如下图所示:

图片

图片

使用STM32的管脚中断配合定时器中的计数可以准确的捕获一个周期内的PPM信号中的高低电平变化,每2ms就是一路PWM信号的周期。每个通道信号脉宽02ms,变化范围为12ms之间。1帧PPM信号长度为20ms,理论上最多可以有10个通道,但是同步脉冲也需要时间,模型遥控器最多9个通道。

PPM转PWM示例:

PPM和PWM的对应关系如下图:

图片

遥控接收器接收到遥控指令,输出PPM信号,PPM信号经过PPM解码电路输出8路PWM信号。

图片

上图为多个通道的PWM信号通过PPM编码电路转化PPM信号输出。

三、S.BUS协议

S.BUS本质是一种串口通信协议,使用的是TTL电平的反向电平,即标准TTL中的1取反为0,而0则取反为1,采用100K的波特率,8位数据位,2位停止位,偶校验,即8E2的串口通信。

S.BUS是一个接收机串行总线输出,通过这根总线,可以获得遥控器上所有zhi通道的数据。目前很多模型及无人机电子设备都支持S.BUS总线的接入。使用SBUS总线获取通道数据,效率高的,而且节省硬件资源,只需要一根线即可获取所有通道的数据。

值得注意的有三点:

(一)S.BUS采用负逻辑,所以无论接收还是发送都要进行硬件取反(注意,一定要硬件取反),电路如下(这是网上看资料时看到的电路,实际上可以使用7404电路):

图片

(二)S.BUS有两种模式:

a.高速模式:每4ms发送一次;

b.低速模式:每14ms发送一次。就是说每间隔4或者14ms这个串口就发送25个字节的数据,这25个字节的数据最多可以包含16个信息。

(三)100K的波特率不是标准波特率,一般串口工具都不能直接读取(所以不要直接用电脑调试,除非你的电脑写好了非标准串口),可以用单片机读取。

S.BUS具体协议的格式如下:

​ [数据头] [第一个字节] [第二个字节] ......[第二十二字节] [标志位] [数据尾];

数据头、标志位、数据尾不携带信息,而且数据头和数据尾是固定的,数据头=0x0f, 数据尾=0x00;

数据头(1字节)+数据(22字节)+标志位(1字节)+数据尾(1字节) 。

解释如下:

S.BUS一帧数据的长度为25个字节,其中:

第"0"个字节为帧头:0x0f;

第24个字节为帧尾:0x00;

从第1个字节到第22个字节为1-16号比例通道的数据字节;

第23字节中,第7位为数字开关通道17通道,第6位为数字开关通道18通道;第5位为帧状态标志为(判断是否丢帧),用于控制接收机上的LED的状态,第4位为失控保护激活标志位,此位为1时,表示接收机进入失控保护状态。

编解码C语言源码:

编码原理:

​ 一个信息是二进制的11bit,比如1111 1111 111就可以表示一个信息,一共16个这样的信息,按照顺序将这16个信息依次排成一串,得到一个176bit(11 *16)的数据,也就是22字节(176 / 8 = 22)的数据,再加上数据头数据尾校验位就组成了一个要通过串口传送的信息。每隔4或者14ms就传送一个这样的信息。所以这16个信息每一个所能表示的最大值是2^11 = 2048,也就是它的精度。

标志位

标志位的高四位有特殊含义,第四位并没有使用,依照我的理解,第七位和第六位表示两个数字通道(通道17和18)信息(就是只有高低电平的通道,一般用来控制通断或者某个电机简单的启动或者停止,比如1表示启动电机0表示停止电机),第五位表示帧丢失,接收机红色LED亮起,我的理解是,如果这一位为1,表示这一帧信号出问题了,接收机红色LED亮起。第四位表示故障保护激活,意思应该是说如果这一位为1,激活接收方故障保护。

   bit7 = ch17 = digital channel (0x80)
   bit6 = ch18 = digital channel (0x40)
   bit5 = Frame lost, equivalent red LED on receiver (0x20)
   bit4 = failsafe activated (0x10)
   bit3 = n/a
   bit2 = n/a
   bit1 = n/a
   bit0 = n/a

来源:雨飞工作室

posted @ 2024-06-15 12:49  Dapenson  阅读(1082)  评论(0编辑  收藏  举报