277 lines
4.2 KiB
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();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|