ZDBMS/code_drv/MosCtrl.c

84 lines
1.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/********************************************************************************
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);
}
}