84 lines
1.9 KiB
C
84 lines
1.9 KiB
C
/********************************************************************************
|
||
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);
|
||
}
|
||
}
|
||
|
||
|