init 3.0
This commit is contained in:
97
Driver/ESHL_protocol.h
Normal file
97
Driver/ESHL_protocol.h
Normal file
@@ -0,0 +1,97 @@
|
||||
//
|
||||
// Created by E_LJF on 25-7-17.
|
||||
//
|
||||
|
||||
|
||||
/*电调在通信过程中始终作为从机
|
||||
|
||||
构成:
|
||||
帧头[0]+电调地址[1]+数据包长[3]+命令码[4]+数据[5]+整包CRC16校验码
|
||||
|
||||
帧头:
|
||||
主机→电调: 0XEC
|
||||
电调→主机: 0XCE
|
||||
|
||||
地址:
|
||||
默认 EC00(可更改)
|
||||
广播地址 AAAA
|
||||
|
||||
命令码:
|
||||
0XC1:油门命令,表示数据包传输油门百分比,float类型,4字节
|
||||
0XC2:关闭电调,电调数据0XD0表示电调成功关闭,主机不发送数据,填0,uint8_t,类型,1字节
|
||||
0XC3:启动电调,数据0XA1表示顺时针启动,0XA2表示逆时针启动,uint8_t类型,1字节
|
||||
0XC4:电调刹车,电调数据0XA3表示刹车完毕,主机不发送数据,填0,uint8_t,类型,1字节
|
||||
0XC5:更改电调运行电流限制ADC值,uint16_t类型
|
||||
0XC6:电调异常,表示数据包传输电调异常代码,uint8_t类型,1字节
|
||||
0XC7:更改电调地址,主机用广播地址发送此命令,更改地址时,所有已连接的电调地址都需要重新设置
|
||||
地址设置方法: 快速旋转已经连接上电调的电机,此时电调将自动将自身地址设为EC00
|
||||
同时电调状态指示灯会闪烁,闪烁次数代表电调地址
|
||||
此时旋转第二个电调的电机,此时电调将自动将自身地址设为EC01,以此类推,直到所有电调地址设置完毕
|
||||
电调设置地址后需要重新上电才能使用
|
||||
设置地址主机不发送数据,电调广播自身地址表示该地址已被占用
|
||||
|
||||
电调异常代码:
|
||||
0XE0:MOS异常
|
||||
0XE1:电流异常
|
||||
0XE2:电调开环启动达到最大重启次数,开环启动失败
|
||||
0XE3:电机运行过程中意外停转
|
||||
0XE4:电池电压异常*/
|
||||
|
||||
|
||||
#ifndef ESHL_PROTOCOL_H
|
||||
#define ESHL_PROTOCOL_H
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#define ESHL_PROTOCOL_HEAD_ESC_TO_HOST 0xCE //数据从电调发往主机帧头
|
||||
#define ESHL_PROTOCOL_HEAD_HOST_TO_ESC 0xEC //数据从电调发往主机帧头
|
||||
|
||||
|
||||
#define ESHL_PROTOCOL_BROADCAST_ADDR 0xAAAA //ESHL协仪广播地址
|
||||
|
||||
|
||||
#define ESHL_PROTOCOL_CMD_THR 0xC1 //油门命令,表示数据包传输油门百分比,float类型,4字节
|
||||
#define ESHL_PROTOCOL_CMD_ESC_OFF 0xC2 //关闭电调,电调数据0XD0表示电调成功关闭,主机不发送数据,填0,uint8_t,类型,1字节
|
||||
#define ESHL_PROTOCOL_CMD_ESC_ON 0xC3 //启动电调,数据0XA1表示顺时针启动,0XA2表示逆时针启动,uint8_t类型,1字节
|
||||
#define ESHL_PROTOCOL_CMD_BREAK 0xC4 //电调刹车,电调数据0XA3表示刹车完毕,主机不发送数据,填0,uint8_t,类型,1字节
|
||||
#define ESHL_PROTOCOL_CMD_CURRENT_LIMIT 0xC5 //更改电调运行电流限制ADC值,uint16_t类型
|
||||
#define ESHL_PROTOCOL_CMD_ERROR 0xC6 //电调异常,表示数据包传输电调异常代码,uint8_t类型,1字节
|
||||
#define ESHL_PROTOCOL_CMD_CHANGE_ADDR 0xC7 //更改电调地址,主机用广播地址发送此命令,更改地址时,所有已连接的电调地址都需要重新设置
|
||||
|
||||
|
||||
#define ESHL_PROTOCOL_ERROR_CODE_MOS 0xE0 //MOS异常
|
||||
#define ESHL_PROTOCOL_ERROR_CODE_CURRENT 0xE1 //电流异常
|
||||
#define ESHL_PROTOCOL_ERROR_CODE_START_FAIL 0xE2 //电调开环启动达到最大重启次数,开环启动失败
|
||||
#define ESHL_PROTOCOL_ERROR_CODE_RUNING_STOP 0xE3 //电机运行过程中意外停转
|
||||
|
||||
|
||||
|
||||
|
||||
typedef enum{
|
||||
ESHL_DATA_ESC_TO_HOST,//数据从电调发往主机
|
||||
ESHL_DATA_HOST_TO_ESC,//数据从主机发往电调
|
||||
}ESHL_PROTOCOL_ENUM;//ESHL协议枚举
|
||||
|
||||
|
||||
typedef struct ESHL_PROTOCOL_PACK_ANALYSIS_T
|
||||
{
|
||||
uint8_t head;//数据包帧头
|
||||
uint16_t addr;//数据包地址
|
||||
uint8_t len;//数据包大小
|
||||
|
||||
uint8_t cmd;//数据包命令码
|
||||
uint8_t data;//发送或接收的数据
|
||||
uint16_t addr_dat;//发送或接收地址
|
||||
uint16_t current_limit;//发送或接收电调运行电流限制
|
||||
float throttle;//发送或接收油门百分比
|
||||
}ESHL_PROTOCOL_PACK_ANALYSIS_T;
|
||||
|
||||
|
||||
void float_to_uint8(float f,uint8_t* u8);
|
||||
void uint8_to_float(const uint8_t* u8,float* f);
|
||||
void ESHL_ProtocolPackMake(uint8_t* pack,ESHL_PROTOCOL_PACK_ANALYSIS_T* dat_str,ESHL_PROTOCOL_ENUM dat_direction);
|
||||
uint8_t ESHL_ProtocolAnalysisAddr(uint8_t* pack,ESHL_PROTOCOL_PACK_ANALYSIS_T* analysis_str);
|
||||
void ESHL_ProtocolAnalysisData(uint8_t* pack,ESHL_PROTOCOL_PACK_ANALYSIS_T* analysis_str);
|
||||
void ESHL_ProtocolPackAnalysis(uint8_t* pack,ESHL_PROTOCOL_PACK_ANALYSIS_T* analysis_str);
|
||||
|
||||
#endif //ESHL_PROTOCOL_H
|
||||
Reference in New Issue
Block a user