|
@@ -4,7 +4,7 @@
|
|
|
#include "motor_control.h"
|
|
|
#include "log_save.h"
|
|
|
#include "can_process.h"
|
|
|
-
|
|
|
+#include "eeprom_24c02.h"
|
|
|
|
|
|
Enviolo_Struct_t CanEnvioloData = {0};
|
|
|
Enviolo_SetVal_Struct_t EnvioloSetData = {0};
|
|
@@ -83,88 +83,97 @@ void GetWorkSetVal(uint8_t* Data, Enviolo_SetVal_Struct_t *RetVal, Calibration_S
|
|
|
*******************************************************************************/
|
|
|
void sendDataToEnviolo(Enviolo_SetVal_Struct_t *st_SendData, Calibration_Struct_t *st_Calib)
|
|
|
{
|
|
|
+ static uint8_t u8SendCnt = 0;
|
|
|
uint8_t sendbuf[8]={0};
|
|
|
+
|
|
|
+ //发送100次控制指令后再发送一次配置指令
|
|
|
+ u8SendCnt++;
|
|
|
+ if(u8SendCnt >= 100)
|
|
|
+ {
|
|
|
+ u8SendCnt = 0;
|
|
|
+ CanEnvioloData.u8SendConfigDataToEnviolo = SEND_CONFIG;
|
|
|
+ }
|
|
|
//参数配置只发送一次
|
|
|
- if((st_SendData->u8DesiredGearBoxMode == WORKMODE_MANUAL)||(st_SendData->u8DesiredGearBoxMode == WORKMODE_AUTO))
|
|
|
+ if(CanEnvioloData.u8SendConfigDataToEnviolo == SEND_CONFIG)
|
|
|
{
|
|
|
- if(CanEnvioloData.u8SendConfigDataToEnviolo == 0)
|
|
|
+ if((st_SendData->u8DesiredGearBoxMode == WORKMODE_MANUAL)||(st_SendData->u8DesiredGearBoxMode == WORKMODE_AUTO))
|
|
|
{
|
|
|
- sendbuf[0] = DU_FRONT_CHAINRING; //DU_Front_Chainring
|
|
|
- sendbuf[1] = DU_REARSPROCKET; //DU_RearSprocket
|
|
|
- sendbuf[2] = DU_CADENCE_LOWLIMIT; //DU_Cadence_LowLimit
|
|
|
- sendbuf[3] = DU_CADENCE_HIGHLIMIT;//DU_Cadence_HighLimit
|
|
|
- sendbuf[4] = 0x00; //Reserved
|
|
|
+ GetParamFromEEprom_24C02(&I2C_Handle_EEPROM, EEPROM_24C02_ADDR_CONFIG_PARAM1, sizeof(MC_ConfigParam1), (uint8_t*)&MC_ConfigParam1.GasCtrlMode_Flag);
|
|
|
+ sendbuf[0] = MC_ConfigParam1.TeethNum_F*2.4; //DU_Front_Chainring
|
|
|
+ sendbuf[1] = MC_ConfigParam1.TeethNum_B; //DU_RearSprocket
|
|
|
+ sendbuf[2] = DU_CADENCE_LOWLIMIT; //DU_Cadence_LowLimit
|
|
|
+ sendbuf[3] = DU_CADENCE_HIGHLIMIT; //DU_Cadence_HighLimit
|
|
|
+ sendbuf[4] = 0x00; //Reserved
|
|
|
sendbuf[5] = (MC_ConfigParam1.WheelSize > 100)?(MC_ConfigParam1.WheelSize - 100):0;//
|
|
|
sendbuf[6] = DU_SLEEPTIME; //DU_SleepTime
|
|
|
sendbuf[7] = 0x00; //Reserved
|
|
|
CAN_SendData(ID_ENVIOLO_CONFIG, sendbuf, sizeof(sendbuf));
|
|
|
- CanEnvioloData.u8SendConfigDataToEnviolo = 1;
|
|
|
+ CanEnvioloData.u8SendConfigDataToEnviolo = SEND_DATA;
|
|
|
}
|
|
|
}
|
|
|
- if((MC_ControlCode.GearSt == MC_GearSt_WALK)||(MC_ControlCode.GearSt == MC_GearSt_OFF))//推行模式和0档位将档位设置为最低档
|
|
|
+ else if(CanEnvioloData.u8SendConfigDataToEnviolo == SEND_DATA)
|
|
|
{
|
|
|
- sendbuf[0] = WORKMODE_MANUAL;
|
|
|
- sendbuf[1] = (uint8_t)(Ratio_Table[0]>>8);
|
|
|
- sendbuf[2] = (uint8_t)(Ratio_Table[0]);
|
|
|
- sendbuf[3] = 0X00;
|
|
|
- sendbuf[4] = 0X00;
|
|
|
- CAN_SendData(ID_ENVIOLO_CONTROL, sendbuf, sizeof(sendbuf));
|
|
|
- }
|
|
|
-// else if(MC_ControlCode.GearSt == MC_GearSt_OFF)//关机状态 关闭自动变速器
|
|
|
-// {
|
|
|
-// CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,sizeof(sendbuf));
|
|
|
-// }
|
|
|
- else
|
|
|
- {
|
|
|
- if(st_SendData->u8DesiredGearBoxMode == WORKMODE_MANUAL)//如果是手动模式
|
|
|
+ if((MC_ControlCode.GearSt == MC_GearSt_WALK)||(MC_ControlCode.GearSt == MC_GearSt_OFF))//推行模式和0档位将档位设置为最低档
|
|
|
{
|
|
|
- sendbuf[0] = st_SendData->u8DesiredGearBoxMode;
|
|
|
- sendbuf[1] = (uint8_t)(st_SendData->u16DesiredGearRatio>>8);
|
|
|
- sendbuf[2] = (uint8_t)(st_SendData->u16DesiredGearRatio);
|
|
|
+ sendbuf[0] = WORKMODE_MANUAL;
|
|
|
+ sendbuf[1] = (uint8_t)(Ratio_Table[0]>>8);
|
|
|
+ sendbuf[2] = (uint8_t)(Ratio_Table[0]);
|
|
|
sendbuf[3] = 0X00;
|
|
|
sendbuf[4] = 0X00;
|
|
|
- CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,sizeof(sendbuf));
|
|
|
- }
|
|
|
- else if(st_SendData->u8DesiredGearBoxMode == WORKMODE_AUTO)//如果是自动模式
|
|
|
- {
|
|
|
- sendbuf[0] = st_SendData->u8DesiredGearBoxMode;
|
|
|
- sendbuf[1] = 0X00;
|
|
|
- sendbuf[2] = 0X00;
|
|
|
- sendbuf[3] = (uint8_t)(st_SendData->u16DesiredCanence>>8);
|
|
|
- sendbuf[4] = (uint8_t)(st_SendData->u16DesiredCanence);
|
|
|
- CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,sizeof(sendbuf));
|
|
|
+ CAN_SendData(ID_ENVIOLO_CONTROL, sendbuf, sizeof(sendbuf));
|
|
|
}
|
|
|
- else if(st_SendData->u8DesiredGearBoxMode == WORKMODE_CALIB)//校准模式
|
|
|
+ else
|
|
|
{
|
|
|
- if(st_Calib->u8CalibrationCmdToEnviolo == 1)//第一次关闭自动变速器
|
|
|
+ if(st_SendData->u8DesiredGearBoxMode == WORKMODE_MANUAL)//如果是手动模式
|
|
|
{
|
|
|
- sendbuf[0] = 0X00;
|
|
|
+ sendbuf[0] = st_SendData->u8DesiredGearBoxMode;
|
|
|
+ sendbuf[1] = (uint8_t)(st_SendData->u16DesiredGearRatio>>8);
|
|
|
+ sendbuf[2] = (uint8_t)(st_SendData->u16DesiredGearRatio);
|
|
|
+ sendbuf[3] = 0X00;
|
|
|
+ sendbuf[4] = 0X00;
|
|
|
CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,sizeof(sendbuf));
|
|
|
- st_Calib->u8CalibrationCmdToEnviolo++;
|
|
|
}
|
|
|
- else if(st_Calib->u8CalibrationCmdToEnviolo == 2)//第二次让enviolo进入到校准指令中
|
|
|
+ else if(st_SendData->u8DesiredGearBoxMode == WORKMODE_AUTO)//如果是自动模式
|
|
|
{
|
|
|
- sendbuf[0] = 0X08;
|
|
|
+ sendbuf[0] = st_SendData->u8DesiredGearBoxMode;
|
|
|
+ sendbuf[1] = 0X00;
|
|
|
+ sendbuf[2] = 0X00;
|
|
|
+ sendbuf[3] = (uint8_t)(st_SendData->u16DesiredCanence>>8);
|
|
|
+ sendbuf[4] = (uint8_t)(st_SendData->u16DesiredCanence);
|
|
|
CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,sizeof(sendbuf));
|
|
|
- st_Calib->u8CalibrationCmdToEnviolo++;
|
|
|
}
|
|
|
- else if(st_Calib->u8CalibrationCmdToEnviolo == 3)//第三次使能enviolo的ACTIVE模式
|
|
|
+ else if(st_SendData->u8DesiredGearBoxMode == WORKMODE_CALIB)//校准模式
|
|
|
+ {
|
|
|
+ if(st_Calib->u8CalibrationCmdToEnviolo == 1)//第一次关闭自动变速器
|
|
|
+ {
|
|
|
+ sendbuf[0] = 0X00;
|
|
|
+ CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,sizeof(sendbuf));
|
|
|
+ st_Calib->u8CalibrationCmdToEnviolo++;
|
|
|
+ }
|
|
|
+ else if(st_Calib->u8CalibrationCmdToEnviolo == 2)//第二次让enviolo进入到校准指令中
|
|
|
+ {
|
|
|
+ sendbuf[0] = 0X08;
|
|
|
+ CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,sizeof(sendbuf));
|
|
|
+ st_Calib->u8CalibrationCmdToEnviolo++;
|
|
|
+ }
|
|
|
+ else if(st_Calib->u8CalibrationCmdToEnviolo == 3)//第三次使能enviolo的ACTIVE模式
|
|
|
+ {
|
|
|
+ sendbuf[0] = 0X01;//开启变速器的数据报文模式做监听 Active
|
|
|
+ CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,sizeof(sendbuf));
|
|
|
+ st_Calib->u8CalibrationCmdToEnviolo++;
|
|
|
+ st_Calib->u8CalibrationCmdToOBC = DIS_PEDALLING;//让ui显示校准中
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- sendbuf[0] = 0X01;//开启变速器的数据报文模式做监听 Active
|
|
|
+ sendbuf[0] = WORKMODE_OFF; //关闭
|
|
|
+ sendbuf[1] = 0X00;
|
|
|
+ sendbuf[2] = 0X00;
|
|
|
+ sendbuf[3] = 0X00;
|
|
|
+ sendbuf[4] = 0X00;
|
|
|
CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,sizeof(sendbuf));
|
|
|
- st_Calib->u8CalibrationCmdToEnviolo++;
|
|
|
- st_Calib->u8CalibrationCmdToOBC = DIS_PEDALLING;//让ui显示校准中
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
- sendbuf[0] = WORKMODE_OFF; //关闭
|
|
|
- sendbuf[1] = 0X00;
|
|
|
- sendbuf[2] = 0X00;
|
|
|
- sendbuf[3] = 0X00;
|
|
|
- sendbuf[4] = 0X00;
|
|
|
- CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,sizeof(sendbuf));
|
|
|
- }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -230,7 +239,7 @@ void sendDataToOBC(uint8_t u8Step)
|
|
|
void sendDataToEnvioloPwroff(void)
|
|
|
{
|
|
|
uint8_t sendbuf[8]={0};
|
|
|
- CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,sizeof(sendbuf));
|
|
|
+ CAN_SendData(ID_ENVIOLO_CONTROL,sendbuf,8);
|
|
|
}
|
|
|
|
|
|
/******************************************************************************
|
|
@@ -294,7 +303,7 @@ void MC_Fault_Enviolo_SpeedSensor_Process(MC_ErrorCode_Struct_t* p_MC_ErrorCode)
|
|
|
{
|
|
|
p_MC_ErrorCode->ERROR_Bit.Fault_SpeedSensor = 1;
|
|
|
//记录故障日志
|
|
|
- MC_ErrorLogSaveInfo.NotesInfo1 = 1;
|
|
|
+ MC_ErrorLogSaveInfo.NotesInfo1 = 3;
|
|
|
ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
|
|
|
IsErrorLogSaveInfoUpdateFlag = TRUE;
|
|
|
//存储故障次数
|