Files
Simba-OmniInfantry/电机配置.md
T

152 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Simba-OmniInfantry 电机配置与 CAN 通信地址总表
本文档汇总整车(云台主控板 + 底盘主控板)所有电机的硬件拨码、通信总线分配、CAN 报文帧头(StdId)、数据槽位(Byte 位)、控制模式与发包上下限。
---
## 1. 整车物理通信拓扑
整车采用双主控板(云台板 + 底盘板)分布式架构,物理走线分为三组总线回路:
```mermaid
graph TD
subgraph 云台主控板
G_CAN1[云台 CAN1 独立总线]
G_CAN2[云台 CAN2 总线]
end
subgraph 底盘主控板
C_CAN1[底盘 CAN1 独立总线]
C_CAN2[底盘 CAN2 总线]
end
G_CAN1 --- M_FL[左摩擦轮 M3508]
G_CAN1 --- M_FR[右摩擦轮 M3508]
G_CAN1 --- M_PIT[Pitch 轴 GM6020]
C_CAN1 --- W_RF[右前轮 RF M3508]
C_CAN1 --- W_LF[左前轮 LF M3508]
C_CAN1 --- W_LR[左后轮 LR M3508]
C_CAN1 --- W_RR[右后轮 RR M3508]
G_CAN2 ===|跨板双绞线互联| C_CAN2
G_CAN2 --- M_YAW[Yaw 轴 GM6020]
G_CAN2 --- M_RAM[拨弹盘 M2006]
G_CAN2 -.- C_TOC[CToC 板间通讯数据帧]
```
- **云台 CAN1(独立总线)**:摩擦轮(2×M3508)+ 俯仰 Pitch(GM6020 电流环);
- **底盘 CAN1(独立总线)**:四轮麦克纳姆轮驱动(4×M3508);
- **云台 CAN2 ⟷ 底盘 CAN2(跨板直连互联总线)**:偏航 Yaw(GM6020 电流环)+ 拨弹(M2006)+ 底盘/云台板间通讯(CToC)。
---
## 2. 各物理总线电机配置明细表
### 2.1 【云台 CAN1】发射与俯仰机构
| 机构名称 | 电机型号 | 电调/电机拨码 | 反馈 ID (Rx StdId) | 控制帧头 (Tx StdId) | 控制数据槽位 (Bytes) | 控制模式 | 发包上下限 (数值) | 物理对应量程 | 代码发送函数 |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :--- |
| **左摩擦轮** | M3508 | **ID 1** | `0x201` | **`0x200`** | 槽 1 (`DATA[0..1]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `shoot_send_cmd()` |
| **右摩擦轮** | M3508 | **ID 2** | `0x202` | **`0x200`** | 槽 2 (`DATA[2..3]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `shoot_send_cmd()` |
| **Pitch 轴** | GM6020 | **ID 2** | `0x206` | **`0x1FE`** | 槽 2 (`DATA[2..3]`) | **电流环** | **`[-16384, 16384]`** | $\pm 3.0\,\text{A}$ | `gimbal_control()` |
> **云台 CAN1 下发报文打包格式**:
> - **`0x200` 帧**:`[左摩擦轮电流 (int16), 右摩擦轮电流 (int16), 0, 0]`(2ms 周期)
> - **`0x1FE` 帧**:`[0, Pitch轴电流 (int16), 0, 0]`(2ms 周期)
---
### 2.2 【底盘 CAN1】四轮底盘行走机构
| 机构名称 | 电机型号 | 电调拨码 | 反馈 ID (Rx StdId) | 控制帧头 (Tx StdId) | 控制数据槽位 (Bytes) | 控制模式 | 发包上下限 (数值) | 物理对应量程 | 代码发送函数 |
| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :--- |
| **右前轮 (RF)** | M3508 | **ID 1** | `0x201` | **`0x200`** | 槽 1 (`DATA[0..1]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `chassis_control()` |
| **左前轮 (LF)** | M3508 | **ID 2** | `0x202` | **`0x200`** | 槽 2 (`DATA[2..3]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `chassis_control()` |
| **左后轮 (LR)** | M3508 | **ID 3** | `0x203` | **`0x200`** | 槽 3 (`DATA[4..5]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `chassis_control()` |
| **右后轮 (RR)** | M3508 | **ID 4** | `0x204` | **`0x200`** | 槽 4 (`DATA[6..7]`) | 速度环→电流 | `[-15000, 15000]` | $\pm 18.3\,\text{A}$ | `chassis_control()` |
> **底盘 CAN1 下发报文打包格式**:
> - **`0x200` 帧**:`[RF轮电流 (int16), LF轮电流 (int16), LR轮电流 (int16), RR轮电流 (int16)]`(2ms 周期)
---
### 2.3 【云台 CAN2 ⟷ 底盘 CAN2】互联总线(偏航、拨弹与板间通信)
此总线为**跨板物理直连**,挂载了 2 台电机以及板间双向通讯帧。所有报文 ID 全局唯一、互不干扰:
| 通信对象 / 机构 | 设备类型 | 硬件拨码 ID | 报文帧 ID (StdId) | 方向 / 槽位 | 控制量限幅 (数值) | 报文功能与用途说明 |
| :--- | :---: | :---: | :---: | :---: | :---: | :--- |
| **拨弹盘控制** | M2006 | **ID 1** | **`0x200`** | 云台下发 / 槽 1 (`DATA[0..1]`) | `[-10000, 10000]` | **拨弹电流**($\pm 10.0\,\text{A}$) |
| **Yaw 轴控制** | GM6020 | **ID 1** | **`0x1FE`** | 云台下发 / 槽 1 (`DATA[0..1]`) | **`[-16384, 16384]`** | **Yaw 电流**($\pm 3.0\,\text{A}$) |
| **拨弹盘反馈** | M2006 | ID 1 | **`0x201`** | 电机回传 → 云台板 | — | M2006 角度、转速、转矩反馈 |
| **Yaw 轴反馈** | GM6020 | ID 1 | **`0x205`** | 电机回传 → 双板接收 | — | GM6020 角度反馈(云台闭环 + 底盘跟随) |
| **底盘状态回传** | CToC 数据 | — | **`0x019`** | 底盘板 → 云台板 | — | 发射机构上电状态、底盘离线/故障位 |
| **遥控摇杆数据** | CToC 数据 | — | **`0x149`** | 云台板 → 底盘板 | — | DR16 遥控器四路摇杆通道量 |
| **控制状态信号** | CToC 数据 | — | **`0x189`** | 云台板 → 底盘板 | — | 遥控状态、小陀螺使能、云台故障位 |
| **世界系姿态角** | CToC 数据 | — | **`0x1A9`** | 云台板 → 底盘板 | — | 云台世界系 yaw(float)供底盘双 INS 跟随 |
> **互联总线零冲突机制**:
> - **控制下发**:M2006 接收 `0x200` 槽 1;GM6020 接收 `0x1FE` 槽 1,电调/电机内部硬件过滤器各自接收,互不干扰;
> - **反馈回传**:M2006 回传 `0x201`;GM6020 回传 `0x205`;CToC 回传 `0x019`,仲裁 ID 全网唯一。
---
## 3. 电机硬件拨码与接线操作防错清单
| 电机机构名称 | 电机型号 | 物理接线接口 | 硬件拨码开关设定 | 对应反馈 ID | 调车注意事项 |
| :--- | :---: | :---: | :---: | :---: | :--- |
| **左摩擦轮** | M3508 (C620) | 云台板 **CAN1** | **ID 1** | `0x201` | 保持不变 |
| **右摩擦轮** | M3508 (C620) | 云台板 **CAN1** | **ID 2** | `0x202` | 保持不变 |
| **Pitch 轴** | GM6020 | 云台板 **CAN1** | **ID 2** | `0x206` | 保持不变 |
| **Yaw 轴** | GM6020 | 云台板 **CAN2** | **ID 1** | `0x205` | 保持不变 |
| **拨弹盘** | M2006 (C610) | 云台板 **CAN2** | **ID 1** | `0x201` | ⚠️ **需修改:拨码从 7 改为 1,插头换插到云台 CAN2** |
| **底盘右前 (RF)** | M3508 (C620) | 底盘板 **CAN1** | **ID 1** | `0x201` | 保持不变 |
| **底盘左前 (LF)** | M3508 (C620) | 底盘板 **CAN1** | **ID 2** | `0x202` | 保持不变 |
| **底盘左后 (LR)** | M3508 (C620) | 底盘板 **CAN1** | **ID 3** | `0x203` | 保持不变 |
| **底盘右后 (RR)** | M3508 (C620) | 底盘板 **CAN1** | **ID 4** | `0x204` | 保持不变 |
---
## 4. 大疆 DJI 电机 CAN 协议控制帧标准速查
### 4.1 控制帧标识符(StdId)与数据槽位定义
| 控制标识符 (StdId) | 目标电机类型与编号 | 槽 1 (`DATA[0..1]`) | 槽 2 (`DATA[2..3]`) | 槽 3 (`DATA[4..5]`) | 槽 4 (`DATA[6..7]`) | 数据取值范围 |
| :---: | :--- | :---: | :---: | :---: | :---: | :---: |
| **`0x200`** | M3508 / M2006 (ID 1 ~ 4) | 电机 ID 1 | 电机 ID 2 | 电机 ID 3 | 电机 ID 4 | `[-16384, 16384]` (电流) |
| **`0x1FF`** | M3508 / M2006 (ID 5 ~ 8) | 电机 ID 5 | 电机 ID 6 | 电机 ID 7 | 电机 ID 8 | `[-16384, 16384]` (电流) |
| **`0x1FE`** | **GM6020 (ID 1 ~ 4) 电流控制** | **GM6020 ID 1** | **GM6020 ID 2** | **GM6020 ID 3** | **GM6020 ID 4** | **`[-16384, 16384]` (电流)** |
| **`0x2FE`** | **GM6020 (ID 5 ~ 7) 电流控制** | **GM6020 ID 5** | **GM6020 ID 6** | **GM6020 ID 7** | 保留 | **`[-16384, 16384]` (电流)** |
| *`0x1FF`* | *GM6020 (ID 1 ~ 4) 旧电压控制* | *GM6020 ID 1* | *GM6020 ID 2* | *GM6020 ID 3* | *GM6020 ID 4* | *`[-25000, 25000]` (电压)* |
| *`0x2FF`* | *GM6020 (ID 5 ~ 7) 旧电压控制* | *GM6020 ID 5* | *GM6020 ID 6* | *GM6020 ID 7* | *保留* | *`[-25000, 25000]` (电压)* |
### 4.2 电机反馈报文格式(Rx 反馈,全电机统一 DLC = 8)
```text
DATA[0..1] : 机械角度 raw_angle (uint16_t, 0 ~ 8191 对应 0 ~ 360°)
DATA[2..3] : 转子转速 rotor_speed (int16_t, 单位 RPM)
DATA[4..5] : 实际转矩 raw_torque (int16_t, 反馈转矩电流值)
DATA[6] : 电机温度 temperature (uint8_t, 单位 ℃)
DATA[7] : 保留字节 (NULL)
```
---
## 5. 代码实现与参数映射对照
### 5.1 参数配置文件:`robot_param.h`
- 拨弹盘 CAN 反馈 ID:
```c
#define GIMBAL_RAMMER_CAN_ID 0x201 // M2006 反馈 ID (CAN2 0x200 帧槽 1)
```
- Pitch 轴电流环限幅:
```c
#define GIMBAL_PITCH_SPEED_OUT_LIMIT 16384.0f // GM6020 电流满量程 (±3A)
```
- Yaw 轴电流环限幅:
```c
#define GIMBAL_YAW_SPEED_OUT_LIMIT 16384.0f // GM6020 电流满量程 (±3A)
```