5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: 4合1高频头串口模式通信协议,留贴备忘 [打印本页]

作者: t20109020    时间: 2020-5-25 18:45
标题: 4合1高频头串口模式通信协议,留贴备忘
通用协议数据为0-26byte,27以后的附加字节貌似只和frskyX、frskyX2、hott几个协议有关。

byte0
前6bit功能尚未明确,有待分析
0b00000001 0x01 //协议编号(0-63)
0b00000010 0x02 //failsafe

byte1 √
0b10000000 0x80 //绑定标志
0b01000000 0x40 //check 自动绑定
0b00100000 0x20 //check range
0b00011111 0x1F //协议编号(0-31)

byte2 √
0b10000000 0x80 //功率 if rx_ok_buff[2]&0x80 ==1,power is low ,0-power high
0b01110000         //子协议编号(0-7)bits 4-6 //sub_protocol=(rx_ok_buff[2]>>4)& 0x07;
0b00001111 0x0F //rx_num编号(0-15)

byte3
//Option 频率调谐值,大多协议该值都为0

byte4...byte25
最难以理解的是通道数据,每通道11bit(0-2047),共占用22byte。
源码中的通道解码算法如下,相当晦涩难懂,那编码怎么弄呢?
  volatile uint8_t *p=rx_ok_buff+3;
  uint8_t dec=-3;
  for(uint8_t i=0;i<NUM_CHN;i++)
  {
    dec+=3;
    if(dec>=8)
    {
      dec-=8;
      p++;
    }
    p++;

    uint16_t temp=((*((uint32_t *)p))>>dec)&0x7FF;
}
好在编码方面可以利用共用体简单的实现,如下。
union {
  unsigned byte raw[22];
  struct {
    uint32_t channel1:11;
    uint32_t channel2:11;
                     .
                     .
                     .
    uint32_t channel16:11;
  };

}channels;

byte26
//末尾附加标志,第5-6bit功能尚未明确
0b11000000 0xC0 //协议编号(0-255)
0b00110000 0x30 //rx_num编号(0-63)
0b00000001 0x01 //DISABLE_TELEM
0b00000010 0x02 //DISABLE_CH_MAP


作者: 狐狸    时间: 2020-9-9 22:40
通道数据部分的格式与SBUS数据格式一摸一样哈;可以网查一下就容易理解了
作者: 狐狸    时间: 2021-1-3 15:04
楼主:第一字节的前六bit的含义分析出来了么?
作者: 狐狸    时间: 2021-2-1 00:02
这几天细读Multiprotocol中的Multiprotocol.h,在其中的line757开始就是四合一高频头与遥控发射机的串行通信数据格式详解;
byte[0](串行数据的heater),有四种值:
     0x55:        sub_protocol values are 0..31        Stream contains channels 子协议值为编号0至31接收机协议
     0x54:        sub_protocol values are 32..63        Stream contains channels 子协议值为编号32至63接收机协议
     0x57:        sub_protocol values are 0..31        Stream contains failsafe子协议值为编号0至31接收机协议有失控保护
     0x56:        sub_protocol values are 32..63        Stream contains failsafe子协议值为编号32至63接收机协议有失控保护

byte[1]: sub_protocol|BindBit|RangeCheckBit|AutoBindBit; 接收机协议编号|绑定位|范围检查位|自动绑定位
    sub_protocolis 0..31 (bits 0..4), value should be added with 32 if Stream[0] = 0x54 | 0x56
    接收机协议编号(0 . .31)(bits 0..4),如果byte[0]= 0x54 | 0x56,值应该加32
    byte[1]不是很好理解,bit0-4均为1的话,接收机协议已经为31(11111),大于31的必然会使用到bit5;所以估计四合一的MCU会配合 byte[0]处理;
         ----自己作遥控器主板程序的兄弟要注意了----
  *
  *
  后面的byte[2]---[35]的内容与楼主的解释基本一致;

有心的木油可以仔细阅读一下最新版本的DIY-Multiprotocol-TX-Module,到今天版本已经到1.3.1.12。

  
作者: 狐狸    时间: 2021-2-1 00:24
说实在的,四合一程序Multiprotocol的两种接口:串行数据接口和PPM中的 PPM 对咱这些单片机菜鸟木油有点无语;
四合一高频头用来改造旧有的PPM信号FM调频AM调幅发射机有点骨头:旧的PPM发射机主板只有8个(最多10个)标准舵机PWM通道,而且PPM是模拟信号,比较鸡肋,所以还是要搞清楚Multiprotocol的串口通信最爽,毕竟可以扩展16个电位器通道加两个开关通道;SBUS接收机输出再加个SBUS转PWM板子就可以解码16PWM+2开关;
俺们公司的牛人弄了低分辨率(8bit)20电位器通道加16个开关通道的控板,用作救援车样机操作,非常爽哈;

得感谢Mr.Midelic等网上大神,当然还有Rcgroups和GitHub等网络平台哈!




欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://bbs.5imx.com/) Powered by Discuz! X3.3