STorM32 BGC 三轴云台学习(一) 通信协议分析

在淘宝买了个三轴云台,基于STorM32 BGC的,用调试软件控制没有问题,但是自动飞行时候也得通过程序自动控制,所以研究下官网协议,并对其进行了翻译说明。

参考链接Serial Communication

Storm32板可通过串口USB、UART和蓝牙进行通信。三组命令可用于串口通信:

  • 简单指令:这个集合有一个非常简单的命令结构,用于GUI的主要任务。
  • RC指令:这套设备的目标是远程控制Storm32万向节。
  • mavlink指令:这个集合是“real”mavlink。

简单指令和RC指令有许多相似之处,都是由固件中相同代码处理的。它们往往比mavlink命令更有效。任何一组命令都可以通过任何串口(USB、UART和蓝牙)进行处理。然而,当mavlink心跳被激活时,UART只接受mavlink命令,并且蓝牙可能不再使用(USB仍然接受所有命令)。

这三个命令集的每个命令都可以互换使用。命令所属的命令集由第一个字符决定。这意味着在通信错误的情况下,消息解析器可能会误解错误后面的字符。消息分析器在超时后重置。

为了理解通信的所有细节,通常最好查看GUI的源代码(包含在任何固件包中)。它是用Perl编写的,Perl足够原始,可以轻松理解代码。

1 串口通信——简单指令

通过串口进行通信的协议遵循以下规则:

  • 控制板根据接收到的命令发送一个或多个字符的对应数据流进行相应。
  • 控制板不会主动发送数据,它只会根据接收到的指令来进行响应而发数据。
  • 控制板会一直响应任何传入的命令,无论是否有效。

控制板返回的任何数据流以以下字符之一结尾:

  • “o”:表示一切正常,即已识别接收的命令
  • “e”:表示发生错误,即接收到无效命令
  • “T”:表示已发生超时,即由多个字符组成的命令未在某个时间窗口内完成。
  • “C”:表示发生校验和错误

每当传输数据时都会调用校验和,例如对于“p”、“g”和“d”命令。

下面列出最重要的简单命令。与GUI交互还需要更多的命令,可以通过查看GUI源代码来获得。

  • 命令t:此命令只返回字符“o”。主机可以使用它来检查板是否仍然连接。
  • 命令v:此命令返回有关已安装固件版本、板名和板类型的信息。数据流有校验位并以字符“o”结束。
  • 命令g:此命令返回包含所有参数值的数据流。数据流有校验位并以字符“o”结束。
  • 命令p:此命令设置所有参数值。命令字符“p”后面需要跟一个包含所有参数值的数据流,数据流有校验位。它返回字符“o”。
  • 命令 d :收到命令“d”后,控制板传输当前的实时数据流,最后附加一个2字节的校验位,并以一个字符’o’结束。协议完整信息可以参考链接获得。
  • 命令s:这个功能基本与命令d相同,但是只传输前5个数据值。

注:程序中所有的校验位计算算法源码请参考3轴云台校验位计算源码

2 串口通信——RC 指令

除了上一节中描述的简单串口指令外,Storm32控制器还能处理一些针对万向节远程控制的消息。这些消息具有更严格的数据格式,并可能提供更高级别的传输可靠性。传输的规则与前面一样。

数据帧的一般结构是:

  • 包头:0xFA用于信息输入,0xFB用于信息输出
  • 长度:有效数据包长度,即数据包的字节数,不包括起始符号、长度字节、命令字节和CRC字
  • 命令:命令字节
  • 有效数据:数据和长度根据需求确定
  • 校验位:x25 16-bit 校验位,不包括起始字节。

如果不需要回应的话,可以将0xfa替换为0xf9。下面是几种常用的控制指令

  • CMD_GETVERSION(#1) 指令:0xFA 0x00 0x01 crc-low-byte crc-high-byte
    如果发生错误,则接收到一个CMD_ACK消息,否则将返回得到固件版本、安装布局版本和此格式的板功能的消息。
    0xFB 0x06 0x00 data1-low data1-high data2-low data2-high data3-low data3-high crc-low-byte crc-high-byte
    其中data1表示固件版本,data2表示安装布局版本,data3表示版功能值。

  • CMD_GETVERSIONSTR(#2) 指令:0xFA 0x00 0x02 crc-low-byte crc-high-byte
    如果发生错误,将发出CMD_ACK消息。否则,将发出包含此格式的版本字符串,名称字符串和电路板字符串的消息:
    0xFB 0x30 0x02 data-stream crc-low-byte crc-high-byte
    数据流包含16字节版本字符串,16字节名称字符串和16字节板字符串。

  • CMD_GETPARAMETER(#3) 指令:0xFA 0x02 0x03 data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,表示请求的参数编号。如果发生错误,将发出CMD_ACK消息。否则,将发出包含此格式的参数值的消息:
    0xFB 0x04 0x03 data1-low-byte data1-high-byte data2-low-byte data2-high-byte crc-low-byte crc-high-byte
    Data1是参数编号,data2是参数值。

  • CMD_SETPARAMETER(#4) 指令:0xFA 0x04 0x04 data1-low-byte data1-high-byte data2-low-byte data2-high-byte crc-low-byte crc-high-byte
    Data1是参数编号,data2是参数值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_GETDATA(#5) 指令:0xFA 0x01 0x05 type-byte crc-low-byte crc-high-byte
    Type指定所请求数据流的类型; 目前只支持类型0。如果发生错误,将发出CMD_ACK消息。否则,将发出包含此格式的数据流的消息:
    0xFB 0x4A 0x05 type-byte 0x00 data-stream crc-low-byte crc-high-byte
    数据流包含与’d’命令发送的数据相同的数据。

  • CMD_GETDATAFIELDS(#6) 指令:0xFA 0x02 0x06 data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,表示一个位掩码,用于指定应发送哪些数据。如果发生错误,将发出CMD_ACK消息。否则,将发出包含位掩码字和此格式的所有请求数据的消息:
    0xFB LEN 0x06 data1-low-byte data1-high-byte data-stream crc-low-byte crc-high-byte
    Data1是位掩码字,数据流保存数据。可以触发以下数据位:

0x0001 = LIVEDATA_STATUS_V1 //已弃用,请勿使用
0x0002 = LIVEDATA_TIMES
0x0004 = LIVEDATA_IMU1GYRO
0x0008 = LIVEDATA_IMU1ACC
0x0010 = LIVEDATA_IMU1R
0x0020 = LIVEDATA_IMU1ANGLES
0x0040 = LIVEDATA_PIDCNTRL
0x0080 = LIVEDATA_INPUTS
0x0100 = LIVEDATA_IMU2ANGLES
0x0200 = LIVEDATA_STATUS_DISPLAY
0x0400 = LIVEDATA_STORM32LINK
0x0800 = LIVEDATA_IMUACCCONFIDENCE
0x1000 = LIVEDATA_ATTITUDE_RELATIVE
0x2000 = LIVEDATA_STATUS_V2
0x4000 = LIVEDATA_ENCODERANGLES
0x8000 = LIVEDATA_IMUACCABS
  • CMD_SETPITCH(#10) 指令:0xFA 0x02 0x0A data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,可以采用值700 … 2300。它代表音俯仰输入值。如果发送值0,则将重新调整俯仰轴,忽略任何其他值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETROLL(#11) 指令:0xFA 0x02 0x0B data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,可以采用值700 … 2300。它表示滚转输入值。如果发送值0,则将重新定位滚动轴。忽略任何其他值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETYAW(#12) 指令:0xFA 0x02 0x0C data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,可以采用值700 … 2300。它代表偏航输入值。如果发送值0,则偏移轴将被重新定位。忽略任何其他值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETPANMODE(#13) 指令:0xFA 0x01 0x0D data-byte crc-low-byte crc-high-byte
    该数据的类型为uint8_t,并且可以假设这些值:0 = off,1 = HOLDHOLDPAN,2 = HOLDHOLDHOLD,3 = PANPANPAN,4 = PANHOLDHOLD,5 = PANHOLDPAN,6 = HOLDPANPAN。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETSTANDBY(#14) 指令:0xFA 0x01 0x0E data-byte crc-low-byte crc-high-byte
    数据类型为uint8_t,可以采用以下值:0 = off,1 = on。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_DOCAMERA(#15) 指令:0xFA 0x06 0x0F dummy-byte data-byte dummy-byte dummy-byte dummy-byte dummy-byte crc-low-byte crc-high-byte
    数据类型为uint8_t,并且可以采用以下值:0 =关闭,1 = IRSHUTTER,2 = IRSHUTTERDELAYED,3 = IRVIDEOON,4 = IRVIDEOOFF。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETSCRIPTCONTROL(#16) 指令:0xFA 0x02 0x10 data1-byte data2-byte crc-low-byte crc-high-byte
    data1和data2的类型为uint8_t。Data1是脚本的编号,data2可以采用以下值:0 = off,1 = CASE#DEFAULT,2 = CASE#1,3 = CASE#2,4 = CASE#3。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETANGLE(#17) 指令:0xFA 0x0E 0x11 float1 float2 float3 flags-byte type-byte crc-low-byte crc-high-byte
    float1,float2,float3字段各占4个字节。它们是浮点型,对应于俯仰,滚转和偏航角度。flags字节允许修改每个轴的角度设置的行为。它们可以处于无限制或有限模式。在无限制模式下,相应的轴可以无限制地设置为任何角度,绕过RcMin和RcMax设置,并且可以同时用于“相对”和“绝对”。在限制模式下,角度设置受RcMin和RcMax的影响设置,仅适用于“绝对”。标志字节的第一位0x01对应于音高,0x02对应于滚动,0x04对应于偏航,并且当设置时,相应的轴处于受限模式。当前未使用类型字节,必须将其设置为零。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETPITCHROLLYAW(#18) 指令:0xFA 0x06 0x12 data1-low-byte data1-high-byte data2-low-byte data2-high-byte data3-low-byte data3-high-byte crc-low-byte crc-high-byte
    data1,data2和data3各自为uint16_t类型,并且可以采用值700 … 2300。它们代表俯仰,滚转,偏航输入值。如果发送值0,则将重新定位相应的轴。忽略任何其他值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETPWMOUT(#19) 指令:0xFA 0x02 0x13 data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,可以采用值700 … 2300。它代表pwm传递输入值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_RESTOREPARAMETER(#20) 指令:0xFA 0x02 0x14 data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t并保存参数编号。此命令将参数设置为EEPROM中的值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_RESTOREALLPARAMETER(#21) 指令:0xFA 0x00 0x15 crc-low-byte crc-high-byte
    该命令将所有参数设置为存储在EEPROM中的值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETINPUTS(#22) 指令:0xFA 0x17 0x16 data-bytes crc-low-byte crc-high-byte
    如果未配置虚拟输入,则会覆盖从虚拟输入接收的数据。数据字节的格式与sbus类似:16个11位值的通道组合成22个字节,加上一个状态字节。

  • CMD_SETHOMELOCATION(#23) 指令:0xFA 0x0E 0x17 data-bytes crc-low-byte crc-high-byte
    这将设置STorM32控制器的起始位置。

  • CMD_SETTARGETLOCATION(#24) 指令:0xFA 0x0E 0x18 data-bytes crc-low-byte crc-high-byte
    这将设置STorM32控制器应将摄像机指向的目标位置。

  • CMD_ACTIVEPANMODESETTING(#100) 指令:0xFA 0x01 0x64 data-byte crc-low-byte crc-high-byte
    数据类型为uint8_t,是与平移模式设置相关的位字段:默认设置= 0x00,设置#1 = 0x01,设置#2 = 0x02,设置#3 = 0x03。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_ACK(#150) 指令:0xFB 0x01 0x96 data-byte crc-low-byte crc-high-byte
    该命令由STorM32控制器发送,以确认执行收到的RC命令消息(如果消息本身不导致响应,例如get参数命令)。数据类型为uint8_t,可以采用以下值:

0 = SERIALRCCMD_ACK_OK
1 = SERIALRCCMD_ACK_ERR_FAIL
2 = SERIALRCCMD_ACK_ERR_ACCESS_DENIED
3 = SERIALRCCMD_ACK_ERR_NOT_SUPPORTED
150 = SERIALRCCMD_ACK_ERR_TIMEOUT
151 = SERIALRCCMD_ACK_ERR_CRC 
152 = SERIALRCCMD_ACK_ERR_PAYLOADLEN
  • CMD_CONNECT(#120) 指令:
    特殊命令:用于处理ArduPilot passthrough。

  • CMD_GETDATADISPLAY(#123) 指令:
    特殊命令:用于将状态信息发送到例如连接的OLED显示器。

  • CMD_WIFICONNECTEDPING(#215) 指令:
    特殊命令:由连接的ESP8266 wifi模块发送,指示wifi连接状态。

  • CMD_STORM32LINK_V1(#217) 指令:
    特殊命令:用于从飞行控制器发送到STorM32-Link的STorM32。

  • CMD_STORM32LINK_V2(#218) 指令:
    特殊命令:用于从飞行控制器发送到STorM32-Link的STorM32。

3 串口通信——Mavlink指令

目前自己没有Mavlink的开发经验,这里先空着,等需要时候再进行分析。

4 总结

基本上目前需要的功能协议都已经获得,下一步就是根据这些协议对目标进行控制。刚开始研究三轴云台,欢迎讨论。

  • 12
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
### 回答1: Storm32BGC是一种用于相机云台的稳定器控制板。它的原理图是用于显示硬件电路和部件连接的图纸。原理图显示了Storm32BGC内部的电路板设计和各个元件之间的连接方式。它是电子工程师在设计和制造Storm32BGC时所使用的参考图纸。 原理图通常包括电源部分、控制电路部分和传感器部分。电源部分显示如何提供所需的电源电压和电流给整个系统。控制电路部分描述了如何实现稳定器控制功能,包括控制电机的速度和位置。传感器部分显示了如何使用各种传感器来检测相机云台的倾斜角度和角速度。 在原理图中,不同的电路和元件使用符号和线路来表示。符号表示电子元件,如电位器、电容器、电感器等。线路则表示不同元件之间的连接方式,例如电源线、信号线和地线。 通过查看Storm32BGC的原理图,电子工程师可以了解到如何将电路板组装起来,并将不同的元件正确连接在一起。在需要维修或修改Storm32BGC时,原理图也提供了重要的参考资料。 总之,Storm32BGC的原理图是一份重要的参考图纸,用于展示它内部电路的设计和元件的连接方式,对于电子工程师来说具有重要意义。 ### 回答2: storm32bgc是一种用于摄像机云台稳定器的开源硬件和软件平台。它主要用于保持相机稳定并减少震动,以便在运动中拍摄平滑的视频。 Storm32bgc的原理图是指设计师绘制的电路图,显示了该设备的电子元件之间的连接和电路连接方式。这个原理图是为了帮助工程师和技术人员理解storm32bgc的内部结构和工作原理,以便进行相关操作和维护工作。 在原理图中,可以看到各种电子元件的连接方式,比如电路板上的电阻、电容、电感、晶体管等等。通过电阻、电容等元器件的串联、并联或者并串联等方式,形成各种电路结构,实现storm32bgc的各项功能。 此外,原理图还显示了各个元件之间的连接线路,以及与其他外界设备的连接方式。例如,摄像机、电池、控制器之间的连接线路。这些线路连接的正确性和稳定性,对于确保storm32bgc的正常工作至关重要。 总之,通过阅读storm32bgc的原理图,技术人员可以更好地理解设备的内部结构和工作原理,进而进行相应的操作和维护工作。这对于确保摄像机云台稳定器的良好性能和长期使用具有重要作用。 ### 回答3: Storm32bgc是一种用于稳定云台控制的开源硬件。它通过使用传感器和电机来实现云台的稳定,并允许用户对其进行控制和配置。在Storm32bgc的原理图中,主要包含以下几个关键部分: 1. MPU6050加速度计和陀螺仪模块:这个模块用于检测云台的倾角和角速度。通过检测这些数据,系统可以进行实时校准和调整以保持云台的稳定性。 2. MOSFET驱动器:这个模块用于控制云台的电机。通过根据用户输入的指令来改变电机的转速和方向,从而实现云台的平稳移动。 3. 固态电容:这个组件用于消除电机产生的噪声和干扰,从而提高信号的质量。 4. 控制接口:原理图中还包含各种连接接口,例如UART,I2C和PWM接口,用于连接其他设备,例如遥控器或计算机,以实现云台的远程控制和配置。 总的来说,Storm32bgc的原理图包含了控制云台稳定的关键部件和连接接口。通过在这些模块之间传递信号和数据,系统能够实时监测云台的状态并进行相应的调整,从而实现云台的稳定控制。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值