chargeController/APP/businessLogic/Src/abnormalManage.c

277 lines
4.2 KiB
C

#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();
}
}