From e7ca42e6e972f873ebd26164ee464d9b512034d0 Mon Sep 17 00:00:00 2001 From: lrc <571244399@qq.com> Date: Tue, 22 Jul 2025 22:26:10 +0800 Subject: [PATCH] update 3.1 --- Core/Src/main.c | 2 ++ Driver/ESHL_driver.c | 6 +++--- Driver/ESHL_protocol.c | 34 +------------------------------ Driver/ESHL_protocol.h | 2 +- Driver/communication_management.c | 8 ++++---- Driver/communication_management.h | 2 +- 6 files changed, 12 insertions(+), 42 deletions(-) diff --git a/Core/Src/main.c b/Core/Src/main.c index 2671fd1..34b655e 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -137,6 +137,8 @@ int main(void) //-------------------------------------------------- //浅蓝闪烁 表示电池电压异常 //-------------------------------------------------- + //绿色与蓝色交替闪烁 表示电调串口接收到数据,但不是发给本电调的 + //-------------------------------------------------- ESHL_ESC_Init(); diff --git a/Driver/ESHL_driver.c b/Driver/ESHL_driver.c index 0ba4203..1c6b6f4 100644 --- a/Driver/ESHL_driver.c +++ b/Driver/ESHL_driver.c @@ -278,15 +278,15 @@ void ESHL_Start(ESHL_DIRECTION_ENUM_T direction) while (1) { for (uint16_t i = 0; i < time; ++i) { - delay_us(&ESHL_US_TIM,80); + delay_us(&ESHL_US_TIM,55); } - if (time < 25) + if (time < 20) { time = 100; MOS_CloseAll(); - if ((BMEF_num >= 30) && (BMEF_num <= 35))//开环启动成功 + if ((BMEF_num >= 18) && (BMEF_num <= 35))//开环启动成功 { HAL_COMP_Stop(&ESHL_COMP); HAL_COMP_Start_IT(&ESHL_COMP); diff --git a/Driver/ESHL_protocol.c b/Driver/ESHL_protocol.c index e75f6b6..5223bf0 100644 --- a/Driver/ESHL_protocol.c +++ b/Driver/ESHL_protocol.c @@ -22,39 +22,7 @@ 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:电池电压异常*//*电调在通信过程中始终作为从机 - -构成: -帧头[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类型 +0XC5:更改电调运行电流限制ADC值,uint16_t类型,电调回复0xAA表示更改成功 0XC6:电调异常,表示数据包传输电调异常代码,uint8_t类型,1字节 0XC7:更改电调地址,主机用广播地址发送此命令,更改地址时,所有已连接的电调地址都需要重新设置 地址设置方法: 快速旋转已经连接上电调的电机,此时电调将自动将自身地址设为EC00 diff --git a/Driver/ESHL_protocol.h b/Driver/ESHL_protocol.h index 5f354e8..a97ad66 100644 --- a/Driver/ESHL_protocol.h +++ b/Driver/ESHL_protocol.h @@ -21,7 +21,7 @@ 0XC2:关闭电调,电调数据0XD0表示电调成功关闭,主机不发送数据,填0,uint8_t,类型,1字节 0XC3:启动电调,数据0XA1表示顺时针启动,0XA2表示逆时针启动,uint8_t类型,1字节 0XC4:电调刹车,电调数据0XA3表示刹车完毕,主机不发送数据,填0,uint8_t,类型,1字节 -0XC5:更改电调运行电流限制ADC值,uint16_t类型 +0XC5:更改电调运行电流限制ADC值,uint16_t类型,电调回复0xAA表示更改成功 0XC6:电调异常,表示数据包传输电调异常代码,uint8_t类型,1字节 0XC7:更改电调地址,主机用广播地址发送此命令,更改地址时,所有已连接的电调地址都需要重新设置 地址设置方法: 快速旋转已经连接上电调的电机,此时电调将自动将自身地址设为EC00 diff --git a/Driver/communication_management.c b/Driver/communication_management.c index 79ea507..3defebe 100644 --- a/Driver/communication_management.c +++ b/Driver/communication_management.c @@ -132,10 +132,10 @@ static void ESHL_CMDProcessing() { break; case ESHL_PROTOCOL_CMD_CURRENT_LIMIT://更改电调运行电流限制ADC值 - ESHL_ChangeRuningCurrentLimit(recv_str.current_limit); - // if (state == ESHL_STATE_SET_HOST_TIMEOUT) {//退出超时 - // ESHL_SetState(EShl_STATE_READY); - // } + if ((state == ESHL_STATE_OFF) || (state == EShl_STATE_READY) || (state == ESHL_STATE_SET_HOST_TIMEOUT)) {//电调非运动状态才能修改电流限制 + ESHL_ChangeRuningCurrentLimit(recv_str.current_limit); + ESHL_CommunicationSendCode(ESHL_PROTOCOL_CMD_CURRENT_LIMIT,0xAA); + } break; case ESHL_PROTOCOL_CMD_CHANGE_ADDR: //更改电调地址 diff --git a/Driver/communication_management.h b/Driver/communication_management.h index 72667fd..d8382d6 100644 --- a/Driver/communication_management.h +++ b/Driver/communication_management.h @@ -13,7 +13,7 @@ #define ESHL_TX_PACK_LEN 20 //电调发送缓存大小 #define ESHL_DATA_PACK_MAX_LEN 11 //电调数据包最大长度 -#define ESHL_HOST_TIMEOUT 1500 //主机离线时间(ms)阈值,超过此值视为主机离线 +#define ESHL_HOST_TIMEOUT 1200 //主机离线时间(ms)阈值,超过此值视为主机离线 void ESHL_CommunicationStart();