# dji_driver_v2.0
**Repository Path**: Ljunius/dji_driver_v2.0
## Basic Information
- **Project Name**: dji_driver_v2.0
- **Description**: 支持RM3508,M2006,GM6020等多种大疆电机控制
重新设计了can控制报文
使用了freertos
- **Primary Language**: C
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 3
- **Created**: 2021-04-21
- **Last Updated**: 2025-10-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# dji_driver_v2.0
## 介绍
支持RM3508,M2006,GM6020等多种大疆电机控制
重新设计了can控制报文
使用了freertos
## 使用
### 配置
在`Core/Inc/config.h`中配置两项
`BOARDID`这块板子的ID
`GM6020_USED`是否需要驱动GM6020电机
**注意:若使用GM6020电机,需要将GM6020电机ID设置在1~4之间。将C620、C610电调ID设置在5~8之间。C620和C610在板子中实际ID为电调显示的ID减去4**
### 用户侧使用
#### Simplelib使用
如果一代驱动板程序没有彻底摘除,可能出现重定义问题。需要删除`MotorType_TypeDef` `RM_MotorStatus_t` `MotorType` `RM_MotorStatus` `Motor` 的定义。
**如果需要读取驱动板发回信息,需要进行回调注册**
`can_func.c`中`CAN_AcceptID_Std`需要包含`0x285` `0x286` `0x281`
务必记得修改数组长度
在`CAN_FuncInit()`中添加
```cpp
CAN_CallbackAdd(0x285, CAN_Callback_DJIv2_HomingOver);//接受Homing结束消息
CAN_CallbackAdd(0x286, CAN_Callback_DJIv2_PosArrival);//接受位置环到达信息
CAN_CallbackAdd(0x281, CAN_Callback_DJIv2_ReadInfo);//接受返回的电机信息
```
## CAN通讯协议
## 接受报文格式
| 功能 |
CanID |
D0 |
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
| MotorOn |
boardID + 0x200 |
motorID |
1 |
|
|
|
|
| MotorOff |
2 |
|
|
|
|
| velCfg |
3 |
|
|
|
|
| posCfg maxPosVel |
4 |
maxPosVel |
| curCfg |
5 |
|
|
|
|
| velCtrl vel |
6 |
vel |
| posCtrl pos |
7 |
pos |
| curCtrl cur |
8 |
cur |
| Homing vel cur |
9 |
vel |
cur |
| velCtrlAll |
boardID + 0x204 |
vel1 |
vel2 |
vel3 |
vel4 |
| posCtrlAll |
boardID + 0x208 |
pos1 |
pos2 |
pos3 |
pos4 |
## 反馈报文格式
| 功能 |
CanID |
D0 |
D1 |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
| returnInfo |
boardID + 0x280 |
高两位为电机id,低六位为vel高六位 |
vel低8位(vel采用14位移码存储) |
cur(int16) |
pos(float) |
| homingOver |
boardID + 0x285 |
boardId |
motorId |
|
| PosArrival |
boardID + 0x286 |
boardId |
motorId |
|