123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- #include "gas_sensor.h"
- #include "math_tools.h"
- #include "log_save.h"
- uint16_t GasSensor_OffSet = 0;
- GasSensorCruiceCheckParam_Struct_t GasSensorCruiceCheckParam = {0, 0, RESET, 0, FALSE};
- TrueOrFalse_Flag_Struct_t IsGasSensorConnectedFlag = FALSE;
- #define ZeroOffSetData 100
- //指拨零点值初始化
- void GasSensorOffSet_Init(uint16_t* OffSet, uint16_t AdcData)
- {
- //根据开始时刻采集值判断是否连接转把
- if(AdcData < 300)
- {
- IsGasSensorConnectedFlag = FALSE;
- }
- else
- {
- IsGasSensorConnectedFlag = TRUE;
- }
-
- *OffSet = AdcData + ZeroOffSetData;
- }
- //指拨零点值更新
- void GasSensorOffSetData_Update(uint16_t* PresentData, uint16_t AdcData, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
- {
- static uint16_t Array[50];
- static TrueOrFalse_Flag_Struct_t IsArrayFullFalg = FALSE;
- static uint8_t i = 0;
- uint16_t TempData;
- static uint32_t ErrorDelayTimeCnt = 0;
-
- //刚开机时,数组未存满
- if(IsArrayFullFalg == FALSE)
- {
- Array[i++] = AdcData;
- if(i >= 50)
- {
- IsArrayFullFalg = TRUE;
- i = 0;
- }
- }
- //存满后取滑动均值
- else
- {
- TempData = MovingAverageFilter(AdcData, Array, sizeof(Array) / 2) + ZeroOffSetData;
- if(TempData < *PresentData)
- {
- //更新零点值
- if(TempData > 300)//避免线缆松脱导致零点变为异常值
- {
- *PresentData = TempData;
- }
- }
- }
- //判断零点是否超出范围
- if(p_MC_ErrorCode->ERROR_Bit.Fault_GasSensor == 0)
- {
- if(*PresentData <= 1500)
- {
- ErrorDelayTimeCnt = HAL_GetTick();
- }
- if((HAL_GetTick() - ErrorDelayTimeCnt) > 10000)
- {
- p_MC_ErrorCode->ERROR_Bit.Fault_GasSensor = 1;
- //记录故障日志
- MC_ErrorLogSaveInfo.NotesInfo1 = 1;
- MC_ErrorLogSaveInfo.NotesInfo2 = *PresentData;
- ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
- IsErrorLogSaveInfoUpdateFlag = TRUE;
- //存储故障次数
- MC_RunLog2.GasSensor_FaultCnt++;
- RunLogSaveIndex = 2;
- }
- }
- }
- //定速巡航检测
- void GasSensorCruiceCheck(uint16_t GasSensorData, uint16_t BikeSpeed, TrueOrFalse_Flag_Struct_t IsBreakFlag, MC_GearSt_Struct_t GearSt, GasSensorCruiceCheckParam_Struct_t* p_GasSensorCruiceCheckParam)
- {
- //进入定速巡航检测
- if(p_GasSensorCruiceCheckParam->CruiceFlag == RESET)
- {
- //转把大于启动值、车速低于3km/h、刹车,清除巡航标志
- if((GasSensorData < 100) || (BikeSpeed < 30) || (IsBreakFlag == TRUE) || (GearSt == MC_GearSt_OFF) || (abs(GasSensorData - p_GasSensorCruiceCheckParam->Old_Data) > 100))
- {
- p_GasSensorCruiceCheckParam->CruiceFlag = RESET;
- p_GasSensorCruiceCheckParam->CruiceSetData = 0;
- p_GasSensorCruiceCheckParam->DelayTimeCnt = HAL_GetTick();
- }
- //巡航判断,持续时间8s
- else
- {
- if((HAL_GetTick() - p_GasSensorCruiceCheckParam->DelayTimeCnt) > 8000)
- {
- p_GasSensorCruiceCheckParam->CruiceFlag = SET;
- p_GasSensorCruiceCheckParam->CruiceSetData = GasSensorData;
- p_GasSensorCruiceCheckParam->IsGasReleaseFlag = FALSE;
- }
- }
- p_GasSensorCruiceCheckParam->Old_Data = GasSensorData;
- }
- //退出定速巡航检测
- else
- {
- //刹车、关闭助力、档位变化
- static MC_GearSt_Struct_t GearSt_Old;
- if((IsBreakFlag == TRUE) || (GearSt == MC_GearSt_OFF) || (GearSt_Old != GearSt))
- {
- p_GasSensorCruiceCheckParam->CruiceFlag = RESET;
- p_GasSensorCruiceCheckParam->CruiceSetData = 0;
- p_GasSensorCruiceCheckParam->DelayTimeCnt = HAL_GetTick();
- }
- GearSt_Old = GearSt;
- //松开转把后,再转动转把
- if(GasSensorData < 100)
- {
- p_GasSensorCruiceCheckParam->IsGasReleaseFlag = TRUE;
- }
- else if(GasSensorData > 300)
- {
- if(p_GasSensorCruiceCheckParam->IsGasReleaseFlag == TRUE)
- {
- p_GasSensorCruiceCheckParam->CruiceFlag = RESET;
- p_GasSensorCruiceCheckParam->CruiceSetData = 0;
- p_GasSensorCruiceCheckParam->IsGasReleaseFlag = FALSE;
- p_GasSensorCruiceCheckParam->DelayTimeCnt = HAL_GetTick();
- }
- }
- }
- }
|