Skip to content

Commit

Permalink
增加了部分docs文件
Browse files Browse the repository at this point in the history
  • Loading branch information
ComerLater committed Sep 8, 2024
1 parent 3c332f1 commit 6af1c22
Show file tree
Hide file tree
Showing 16 changed files with 116 additions and 28 deletions.
6 changes: 2 additions & 4 deletions docs/develop/04.通用组件/01.uorb.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
# uORB 消息管理
# uORB 通信机制

## 订阅主题


## 发布主题


## 添加主题

1. 添加自定义主题的头文件和c文件,c文件中注意数据填充。
Expand All @@ -17,4 +15,4 @@
![uorb_count](./image/uorb_count.png)![add_id](./image/add_id.png)

4. 如果需要增加日志记录,在`logger.c`中添加如下代码,其中的4表示记录周期为4ms。
![add_log](./image/add_log.png)
![add_log](./image/add_log.png)
24 changes: 18 additions & 6 deletions docs/develop/04.通用组件/03.param.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# PARAM参数管理


## 定义参数

### 参数文件

参数定义文件是`*_params.c`为后缀的C文件,并需要`#include "param.h`

```
#include "param.h"
Expand All @@ -32,6 +32,7 @@ PARAM_DEFINE_INT32(name, default, flag)
```

### 必要信息

飞控内部用于参数管理(查找、获取、设置、计算等)所必须的信息包括变量名、类型、取值和标志。
Expand All @@ -42,6 +43,7 @@ PARAM_DEFINE_INT32(name, default, flag)
- **flag**:必须,标志位,`bit0表示不允许用户修改,bit1表示修改需要重启,bit2表示解锁后不允许修改`

通过`PARAM_DEFINE_**(name, default, flag);`宏来定义一个参数,其语法格式为:

```
# 定义一个float型param
PARAM_DEFINE_FALOT(name, default, flag);
Expand All @@ -50,6 +52,7 @@ PARAM_DEFINE_FALOT(name, default, flag);
PARAM_DEFINE_INT32(name, default, flag);
```

### 可选信息

可选信息主要是用于地面站参数显示、设置等
Expand All @@ -61,19 +64,22 @@ PARAM_DEFINE_INT32(name, default, flag);
- board
- boolean
- @value value description,可选,允许值

```
// 表示允许取值0,1,2,3
@value 0 Disabled
@value 1 Joystick
@value 2 S.BUS
@value 3 DSM
```

- @bit,可选
- @min,可选,最小值
- @max,可选,最大值
- @increment,可选,修改步长
- @decimal
- @unit,可选,单位,允许以下取值:

```
'%', 'Hz', '1/s', 'mAh',
'rad', '%/rad', 'rad/s', 'rad/s^2', '%/rad/s', 'rad s^2/m', 'rad s/m',
Expand All @@ -89,27 +95,34 @@ PARAM_DEFINE_INT32(name, default, flag);
'N/(m/s)', 'Nm/rad', 'Nm/(rad/s)', 'Nm', 'N',
'normalized_thrust/s', 'normalized_thrust', 'norm', 'SD', ''
```

- @reboot_required true/false,可选,修改是否需要重启飞控
- volatile,可选,不允许用户修改


## 使用参数

### 查找参数

```
uint16_t param_find(const char* name)
```

### 获取参数

```
void param_get(uint16_t handle, void* value)
```

### 设置参数

```
void param_set(uint16_t handle, void* value)
```


## 基本原理

### 参数定义

```
#define PARAM_DEFINE_INT32(_name, _value, _flag) \
__attribute__(used) \ // 防止被优化
Expand All @@ -124,10 +137,9 @@ void param_set(uint16_t handle, void* value)
.status = 0, \ // 状态位
}
```
### 参数存储


### 参数存储

### 机架参数

由于NextPilot支持多机架切换,但是不同机架之间有些参数是不一致的,因此切换机架的时候需要将参数重置为当前机架的默认值。
由于NextPilot支持多机架切换,但是不同机架之间有些参数是不一致的,因此切换机架的时候需要将参数重置为当前机架的默认值。
12 changes: 2 additions & 10 deletions docs/develop/04.通用组件/05.mavlink.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
# MAVLink遥控遥测
# MAVLink 遥控遥测

## 添加下行数据


## 添加上行数据


## 生成代码



## 帮助命令

mavlink模块提供了必要的shell命令,可以在nextpilot调试终端使用相关命令实现mavlink实例启动、停止、查看状态、设置消息频率等。



### 格式

命令格式为:`mavlink <command> [arguments...]`
Expand Down Expand Up @@ -48,8 +42,6 @@ mavlink模块提供了必要的shell命令,可以在nextpilot调试终端使
msh />mavlink status stream
```



### stream设置指令

#### 设置消息频率
Expand Down Expand Up @@ -81,4 +73,4 @@ mavlink模块提供了必要的shell命令,可以在nextpilot调试终端使

```shell
msh />mavlink stream -u 14556 -s HEARTBEAT -r -1
```
```
1 change: 1 addition & 0 deletions docs/develop/04.通用组件/10.dataman.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 航线管理
7 changes: 1 addition & 6 deletions docs/develop/04.通用组件/11.version.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,6 @@

## 硬件版本


## 软件版本





### 软件版本信息自动生成
### 软件版本信息自动生成
1 change: 0 additions & 1 deletion docs/develop/05.设备驱动/80.gps.md

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 卫星导航
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# OEM718d
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# UB482
Empty file.
Empty file.
1 change: 1 addition & 0 deletions docs/develop/05.设备驱动/遥控器/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 遥控器
16 changes: 16 additions & 0 deletions docs/develop/05.设备驱动/遥控器/dsm.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

# DSM

## 简介

DSM是Digital Spread Spectrum Modulation的缩写,DMS协议一共有三代: DSM、DSM2、DSMX。国内最常见的是DSM2,JR和Spectrum 的遥控器都支持。该协议也是一种串行协议,但是比S.BUS更加通用,使用的标准串口定义,所以市面上兼容接收机更加便宜,兼容的设备也更多。但是该协议并不是一种总线化的协议,要靠接收机取把协议变为PWM来驱动舵机,DSM2接口也只能连接接收机和卫星接收机。

DSMX是DSM2的升级版,协议基本一样就是速率加快了。DSMX协议可以用于双向传输,即能够将飞机上的信息传回遥控器上在液晶屏显示。

## 硬件标准

DSM2设备使用三线连接,黑色线是地线,红色是电源线,另一条是信号线,电源线是3.3V。

## 协议格式

DSM2每一帧16个字节
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
71 changes: 71 additions & 0 deletions docs/develop/05.设备驱动/遥控器/sbus.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Futaba S.BUS

## 简介

SBUS,全称Serial Bus,即串行通信总线。广泛应用于航模遥控器(接收机)中,只用一根信号线就能传输多达16通道的数据,比多路PWM捕获高效且省资源。

S.BUS包含S.BUS1和S.BUS2两个版本,其中S.BUS2是S.BUS1的增强版,并兼容S.BUS1。配合S.BUS2传感器,S.BUS2协议可以把温度、电压、电流、高度、加速度、GPS、角速度、转速等回传到遥控器上,不需要增加无线数传模块。S.BUS2和S.BUS1的区别:

1:总线类型不一样。S.BUS1是单向传输,只做控制使用,不做输入。S.BUS2是非标准的双向总线,可以做控制输出,也可以做信息输入。

2:结束符不一样。S.BUS1结束符为0x00。而S.BUS2的结束符为0x04,0x14, 0x24, 0x34之间循环。

3:S.BUS2和S.BUS1的硬件电路不一样。S.BUS2的传感器不能挂载到S.BUS1的总线上,否则会烧坏。

S.BUS2有接收,是个半双工的双向口,**但是Futaba并没有公开数据协议,属于专有协议**,并不通用。因此S.BUS2只支持Futaba自家的S.BUS2协议的传感器作为回传数据,如温度传感器SB-01TE为温度传感器、SB-01V为电压传感器、SB-02RM为电机转速传感器,这些都是可以用来把飞控端的数据传到遥控器上的。

## 串口配置

100k波特率,8位数据位(在stm32中要选择9位),偶校验(EVEN),2位停止位,无控流,25个字节。

## 硬件标准

S.BUS 采用TTL电平,即3.3V。使用负逻辑,即低电平为“1”,高电平为“0”。也无论接收还是发送都要进行硬件取反(注意:一定要硬件取反,STM32F7系列串口自带有取反功能),电路如下:

![](sbus-reverse.png)

## 协议格式

|变量|字节|长度|取值|意义|
|----|----|----|----|----|
|startbyte|0|1|0x0F|起始标志位,固定为0x0F|
|data|1...22|22|x|22个字节共176bit,每11个bit表示一个通道值(低位在前高位在后),共16个通道,取值范围0-2047,基本上是282~1722,中值为1002。但是航模舵机PWM值是1000~2000,中值为1500,因此需要对S.BUS输出进行一个线性映射|
|flag|23|1|x|bit0是第17通道,bit1是第18通道,也就是说17和18通道是一个布尔值。bit2表示frame_drop(也就是遥控器信号不好,存在丢帧),bit3表示failsafe(也就是遥控器关闭或丢失了)
|endbyte|24|1|0x00,0x04,0x14,0x24,0x34等|不同值表示不同的扩展数据,具体见下面说明|

S.BUS1标准协议包含25个字节,起始位是0X0F,结束位是0X00:

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

S.BUS2对v1进行了扩展,根据endbyte确定后续扩展内容,因此S.BUS2结束位不再是`0x00`,而是`0x04,0x14,0x24,0x34`四个数字之间循环,逐次发送0-31号SLOT中的数据。每个SLOT有自己的唯一名字(SLOT_ID):

```
SLOT_ID = {
0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB
}
```

SLOT数据由3个字节组成,第1个字节是SLOT_ID,后2个字节是数据,即`[SLOT_ID, DATA1, DATA2]`,每次**最多发送8个SLOT数据,也就是最多24个字节**,但是如果某个SLOT没有数据,则该SLOT不发送,如果8个SLOT都没有数据,就什么扩展数据也不发送了,后续直接是S.BUS1。

```
0x00 表示后续是S.BUS1,也就是18路PWM
0x04 表示发送Slot 0 ~ 7数据,共24字节
0x14 表示发送Slot 8 ~ 15数据,共24字节
0x24 表示发送Slot 16 ~ 23数据,共24字节
0x34 表示发送Slot 24 ~ 31数据,共24字节
```

> 有一个特例,S.BUS2的SLOT0(ID=0x03)默认是接收机电压,不能修改和占用,而endbyte=0x04时表示发送SLOT 0 ~ 7中的数据,因此SLOT0接收机电压在此帧会发送出去。这就是为什么endbyte=0x04的时候,后面必定跟一个0x03 xx xx的小尾巴,这里的0x03表示SLOT0,后面两个xx是接收机电压。
## 注意事项

1. 遥控器关闭之后,S.BUS接收机还是会一直输出数据,但是不同的型号接收机会差异

> 绝大部分接收机是继续输出最后一拍的数据,部分接收机可能会将油门通道的值变成最低,但是一般都会将flag的bit2和bit3设置1,因此为了安全,在监测到bit2和bit3变成1之后,一定要禁用遥控器的控制,否则存在很大安全隐患
## 参考链接

S.BUS2数传库:[https://github.com/BrushlessPower/SBUS2-Telemetry](https://github.com/BrushlessPower/SBUS2-Telemetry)
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ ATS108=30 # 发送功率
|ATI /?|显示帮助|
|ATI0=x|设置用户自定义字符串|
|ATI1|产品代码|
|AIT2||固件CRC校验|
|AIT2|固件CRC校验|
|ATI3|固件版本|
|ATI4|固件日期|
|ATI5|固件版权|
Expand Down

0 comments on commit 6af1c22

Please sign in to comment.