#include "abnormalManage.h" #include "parameter.h" #include "capture.h" #include "checkTime.h" #include "FM_GPIO.h" #include "task.h" /* 软件输出过载标志位 */ static BOOL disChargOverLoad = FALSE; /* 短路标志位 */ static uint8_t shortCircuit = 0; static BOOL shortCircuitFlag = FALSE; /* 硬件过载状态位 */ static uint8_t excessiveLoad = 0; static BOOL excessiveLoadFlag = FALSE; /** * @brief 设定放电过载状态 * @param state TRUE 过载 * FALSE 未过载 * @retval * */ void setDisChargOverLoad(void) { if (getDischargCurrent() > 30.0f) { disChargOverLoad = TRUE; } else { disChargOverLoad = FALSE; } } /** * @brief 得到放电过载状态 * @param * @retval * */ BOOL getChargOverLoad(void) { return disChargOverLoad; } /** * @brief 设置短路状态位 * @param * @retval * */ void setShortCircuit(void) { shortCircuit++; } /** * @brief 清零短路状位 * @param * @retval * */ void zeroShortCircuit(void) { shortCircuit = 0; } /** * @brief 得到短路状位 * @param * @retval * */ uint8_t getShortCircuit(void) { return shortCircuit; } /** * @brief 设定短路标志位 * @param state TRUE 短路 * FALSE 未短路 * @retval * */ void setShortCircuitFlag(BOOL state) { if (state == TRUE || state == FALSE) { shortCircuitFlag = state; } } /** * @brief 得到短路标志位 * @param * @retval * */ BOOL getShortCircuitFlag(void) { return shortCircuitFlag; } /** * @brief 设置硬件过载状态位 * @param * @retval * */ void setExcessiveLoad(void) { excessiveLoad++; } /** * @brief 清零硬件过载状态位 * @param * @retval * */ void zeroExcessiveLoad(void) { excessiveLoad = 0; } /** * @brief 得到硬件过载状态位 * @param * @retval * */ uint8_t getExcessiveLoad(void) { return excessiveLoad; } /** * @brief 设定硬件过载标志位 * @param state TRUE 过载 * FALSE 未过载 * @retval * */ void setExcessiveLoadFlag(BOOL state) { if (state == TRUE || state == FALSE) { excessiveLoadFlag = state; } } /** * @brief 得到硬件过载标志位 * @param * @retval * */ BOOL getExcessiveLoadFlag(void) { return excessiveLoadFlag; } /** * @brief 设置输出状态 * @param * @retval * */ void setPowerOutput(BOOL state) { if (state == TRUE) { POW_FF_PCON_Open(); POW_OUT_PCON_Open(); } else { POW_FF_PCON_Close(); POW_OUT_PCON_Close(); } } /** * @brief 判断是否打开充电理想二极管 * @param * @retval * */ void checkFFMOS_CON(void) { if (get_CHG_CURR() > 2.0f) { FFMOS_CON_Open(); } else if (get_CHG_CURR() < 1.0f) { FFMOS_CON_Close(); } } void checkAbnormal(void) { // checkTimeInit(); /* 滤波 */ adcCaptureFir(); /* 转换 */ setChargCurrent(); setDischargCurrent(); setOutputVoltage(); setSolarInCircuitVoltage(); /* 判断 */ checkFFMOS_CON(); setDisChargOverLoad(); // checkAbnormalTime = getCheckTime(); } /** * @brief 工作电压异常中断,过载(输入大于输出) * @param * @retval * */ void WORK_VOLT_Interrupt(void) { setExcessiveLoad(); /* 第一次进入输出过载,启动过载保护任务 */ if (getExcessiveLoad() == 1) { setExcessiveLoadFlag(TRUE); startExcessiveLoadProtection(); } /* 多次进入输出过载,关闭输出 */ if (getExcessiveLoad() > 2) { zeroExcessiveLoad(); setPowerOutput(FALSE); } } /** * @brief 短路中断,输出电流大于一定值 * @param * @retval * */ void DSG_PROT_Interrupt(void) { setShortCircuit(); /* 第一次进入输出短路,启动短路任务 */ if (getShortCircuit() == 1) { setShortCircuitFlag(TRUE); startShortCircuitProtection(); } /* 一定时间内第二次进入输出短路保护,关闭输出 */ else if (getShortCircuit() >= 2) { stopShortCircuitProtection(); setPowerOutput(FALSE); zeroShortCircuit(); } }