/******************************************************************************** Copyright (C), Sinowealth Electronic. Ltd. Author: Sino Version: V0.0 Date: 2020/04/26 History: V2.0 2020/04/26 Preliminary ********************************************************************************/ #include "Main.h" BOOL bCHGMOSBk; BOOL bDSGMOSBk; /************************************************************************************************* * 函数名: MosStatusCheck * 参 数: 无 * 返回值: 无 * 描 述: 根据当前电池包的保护状态,确定是否置位对应的MOS控制标志 *************************************************************************************************/ void MosStatusCheck(void) { bCHGMOS = 1; bDSGMOS = 1; if(bAFE_OV || bCTO) { bCHGMOS = 0; } if(bOTD || bUTD || bOCD1 || bOCD2 || bAFE_SC || bCTO) { bDSGMOS = 0; } if(!bDSGING) //检测到放电状态时,以下电压保护不关闭充电MOS(前提条件:bENMOS配置为1) { if(bOTC || bUTC || bOV || bOCC) { bCHGMOS = 0; } } if(!bCHGING) //检测到充电状态时,以下电压保护不关闭放电MOS { if(bUV) { bDSGMOS = 0; } } if(bOCD1 || bOCD2 || bAFE_SC) //放电过流时,如果OCPM配置为1,则关闭充电MOS { bCHGMOS = 0; } if(bOCC) //充电过流时,则关闭放电MOS { bDSGMOS = 0; } } /************************************************************************************************* * 函数名: MosCtrl * 参 数: 无 * 返回值: 无 * 描 述: MOS控制 *************************************************************************************************/ void MosCtrl(void) { MosStatusCheck(); //判断MOS状态有无变化,有变化则通过通讯控制AFE开关MOS if((bCHGMOSBk!=bCHGMOS) || (bDSGMOSBk!=bDSGMOS)) { bCHGMOSBk = bCHGMOS; bDSGMOSBk = bDSGMOS; AFEMosCtl(((U8)bDSGMOS<<1) | bCHGMOS); } }