#include "battery_display.h" #include "tasks.h" void Charging_Status_Battery_Display(uint8_t Soc) { static uint32_t Charging1TimeCnt = 0; static uint32_t Charging2TimeCnt = 0; static uint32_t Charging3TimeCnt = 0; static uint32_t Charging4TimeCnt = 0; static uint32_t Charging5TimeCnt = 0; static uint8_t Charging1_Flag = 0; static uint8_t Charging2_Flag = 0; static uint8_t Charging3_Flag = 0; static uint8_t Charging4_Flag = 0; static uint8_t Charging5_Flag = 0; static uint8_t reset_flag = 0; if(Soc < 0x19) { Charging2_Flag = 0; Charging3_Flag = 0; Charging4_Flag = 0; Charging5_Flag = 0; reset_flag = 0; HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET); if(Charging1_Flag == 0) { Charging1TimeCnt = SysTime_5ms; Charging1_Flag = 1; } if(TimeCntDiff_5ms(Charging1TimeCnt) >= CHARGING_TIME) { HAL_GPIO_TogglePin(ONE_GPIO_Port, ONE_Pin); Charging1_Flag = 0; } } else if((Soc >= 0x19) && (Soc < 0x32)) { Charging1_Flag = 0; Charging3_Flag = 0; Charging4_Flag = 0; Charging5_Flag = 0; reset_flag = 0; HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET); if(Charging2_Flag == 0) { Charging2TimeCnt = SysTime_5ms; Charging2_Flag = 1; } if(TimeCntDiff_5ms(Charging2TimeCnt) >= CHARGING_TIME) { HAL_GPIO_TogglePin(TWO_GPIO_Port, TWO_Pin); Charging2_Flag = 0; } } else if((Soc >= 0x32) && (Soc < 0x4B)) { Charging1_Flag = 0; Charging2_Flag = 0; Charging4_Flag = 0; Charging5_Flag = 0; reset_flag = 0; HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET); if(Charging3_Flag == 0) { Charging3TimeCnt = SysTime_5ms; Charging3_Flag = 1; } if(TimeCntDiff_5ms(Charging3TimeCnt) >= CHARGING_TIME) { HAL_GPIO_TogglePin(THREE_GPIO_Port, THREE_Pin); Charging3_Flag = 0; } } else if((Soc >= 0x4B) && (Soc < 0x64)) { Charging1_Flag = 0; Charging2_Flag = 0; Charging3_Flag = 0; Charging5_Flag = 0; reset_flag = 0; HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_RESET); if(Charging4_Flag == 0) { Charging4TimeCnt = SysTime_5ms; Charging4_Flag = 1; } if(TimeCntDiff_5ms(Charging4TimeCnt) >= CHARGING_TIME) { HAL_GPIO_TogglePin(FOUR_GPIO_Port, FOUR_Pin); Charging4_Flag = 0; } } else if(Soc == 0x64) { Charging1_Flag = 0; Charging2_Flag = 0; Charging3_Flag = 0; Charging4_Flag = 0; if(reset_flag == 0) { HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_RESET); reset_flag = 1; } if(Charging5_Flag == 0) { Charging5TimeCnt = SysTime_5ms; Charging5_Flag = 1; } if(TimeCntDiff_5ms(Charging5TimeCnt) >= CHARGING_TIME) { HAL_GPIO_TogglePin(ONE_GPIO_Port, ONE_Pin); HAL_GPIO_TogglePin(TWO_GPIO_Port, TWO_Pin); HAL_GPIO_TogglePin(THREE_GPIO_Port, THREE_Pin); HAL_GPIO_TogglePin(FOUR_GPIO_Port, FOUR_Pin); Charging5_Flag = 0; } } } void Normal_Work_Battery_Display(uint8_t Soc) { static uint32_t LowerPowerTimeCnt = 0; static uint32_t VeryLowerPowerTimeCnt = 0; static uint8_t Low_Power_Flag = 0; static uint8_t Very_Low_Power_Flag = 0; static uint8_t NoBattery_Flag = 0; static uint32_t NoBattery_TimeCnt=0; if(Soc < 0x05)//<5% { if(Very_Low_Power_Flag == 0) { VeryLowerPowerTimeCnt = SysTime_5ms; Very_Low_Power_Flag = 1; } if(TimeCntDiff_5ms(VeryLowerPowerTimeCnt) >= VERY_LOW_POWER_TIME) { HAL_GPIO_TogglePin(ONE_GPIO_Port, ONE_Pin); Very_Low_Power_Flag = 0; } HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET); } if((Soc >= 0x05) && (Soc <= 0x0A))//5%-10% { if(Low_Power_Flag == 0) { LowerPowerTimeCnt = SysTime_5ms; Low_Power_Flag = 1; } if(TimeCntDiff_5ms(LowerPowerTimeCnt) >= LOW_POWER_TIME) { HAL_GPIO_TogglePin(ONE_GPIO_Port, ONE_Pin); Low_Power_Flag = 0; } Very_Low_Power_Flag = 0; HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET); } else if((Soc > 0x0A) && (Soc <= 0x19))//10%-25% { Low_Power_Flag = 0; Very_Low_Power_Flag = 0; HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET); } else if((Soc > 0x19) && (Soc <= 0x32))//25%-50% { Low_Power_Flag = 0; Very_Low_Power_Flag = 0; HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET); } else if((Soc > 0x32) && (Soc <= 0x4B))//50%-75% { Low_Power_Flag = 0; Very_Low_Power_Flag = 0; HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET); } else if(Soc == 0xff) { if(NoBattery_Flag == 0) { NoBattery_TimeCnt = SysTime_5ms; NoBattery_Flag= 1; } if(TimeCntDiff_5ms(NoBattery_TimeCnt) >= 200) { HAL_GPIO_TogglePin(ONE_GPIO_Port, ONE_Pin); HAL_GPIO_TogglePin(TWO_GPIO_Port, TWO_Pin); HAL_GPIO_TogglePin(THREE_GPIO_Port, THREE_Pin); HAL_GPIO_TogglePin(FOUR_GPIO_Port, FOUR_Pin); NoBattery_Flag= 0; } } else if(Soc > 0x4B)//>75% { Low_Power_Flag = 0; Very_Low_Power_Flag = 0; HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_RESET); } } uint8_t Battery_Infor = 0; /* Functional battery information processing */ void Battery_Information_Process(void) { if(BMS_Online_Flag == 1) { Battery_Infor=BMS_RunInfo.SOC; } else if(BMS_Online_Flag!= 0x01) { Battery_Infor=MC_RunInfo.SOC; } if(BMS_ChargingFlag == TRUE) { Charging_Status_Battery_Display(Battery_Infor); } else { Normal_Work_Battery_Display(Battery_Infor); } }