Both_Way_Comm_SY8833/TP3310_Demo.si4project/Backup/discharge_module(1255).c

294 lines
6.3 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.

/*
******************************************************************************
*
* @file discharge_module.c
* @brief discharge module
*
*
* @version 1.0
* @date 2022/07/12 17:35:40
* @author Alex Xu
*
* Copyright (c) 2013-2099,Tkplusemi Technology Co.,Ltd.
* All Rights Reserved
*
* History:
* Revision Date Author Desc
* 1.0.0 2022/07/12 Alex build this file
******************************************************************************
*/
#include "discharge_module.h"
#include "vox_module.h"
#include "adc.h"
#include "charger_module.h"
#include "sys_tim.h"
#include "system.h"
#include "led.h"
#if DISCHARGE_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
/******************************************************************************\
Variables definitions
\******************************************************************************/
bit gBoost_Prepared_Flag = 0; //Boost满足开启条件。
bit gBoost_Opened_Flag = 0; //Boost已正常开启。
bit gBoost_UVLO_Flag = 0;
uint8_t Boost_Open_Debounce = 0;
/******************************************************************************\
Functions definitions
\******************************************************************************/
#ifndef BOOST_AOUT
/*
*******************************************************************************
* void DisCharge_Boost_Open(void)
*
* Description : Boost Open
* VIN 存在时Boost 在电池电压高于 UVLO硬件关闭 2.8/3.0V,硬件清 boost 使能。开
* 软件实现,有 VIN3.6V,无 VIN3.3V)和电池存在的情况下才能开启。
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
void DisCharge_Boost_Open(void)
{
if( gBoost_Prepared_Flag ) //Boost需满足开启条件
{
BST_EN = 1; //Boost Enable异常时由硬件主动关闭。
#ifdef _DEBUG_DISCHARGE
printf("Bst Open\r\n");
#endif
}
}
/*
*******************************************************************************
* void DisCharge_Boost_Close(void)
*
* Description : Boost Close主要是出现异常时由硬件主动关闭软件在电池LOW电量状态下是否需要关闭boost输出
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void DisCharge_Boost_Close(void)
{
if( BST_EN & 0x01 )
{
BST_EN = 0; //Boost Disable
gBoost_Prepared_Flag = 0;
#ifdef _DEBUG_DISCHARGE
printf("Bst Close\r\n");
#endif
}
}
#endif
/*
*******************************************************************************
* void DisCharge_Handler(void)
*
* Description : Boost放电的保护功能包括输出过压保护输出短路保护电池过压保护电池 UVLO 保护放电过流保护NTC 保护,过温保护。
*
* Arguments :
* Returns :
* Notes :
*
*******************************************************************************
*/
void DisCharge_Handler(void)
{
/* 输出过压过流保护 --- 硬件实现,无标志位 */
/*放电过流保护 --- 硬件实现*/
/*过温保护 --- 硬件实现*/
/*输出短路保护 -- 短路保护后一直打嗝或者打嗝BOOST_HICCUP_TIM次之后disable boost打嗝时间 250ms软件实现。*/
if( CHIP_STA0 & 0x40 )
{
#ifdef _DEBUG_DISCHARGE
printf("Boost Pro Output Short!\r\n");
#endif
//一直打嗝
if( F_sys_tim_250ms )
{
F_sys_tim_250ms = 0;
BST_EN = 1; //250ms定时开一次Boost
}
return;
}
/*Boost Input UVLO 硬件保护*/
if( CHIP_STA0 & 0x80 ) //bit8:1:UVLO;0:normal
{
gBoost_Prepared_Flag = 0;
gBoost_Opened_Flag = 0;
gBoost_UVLO_Flag = 1; //在电池检测过程中,
BST_EN = 0;
#ifdef _DEBUG_DISCHARGE
printf("Boost Pro Uvlo!\r\n");
#endif
return;
}
/*BAT Low*/
if( CHIP_STA2 & 0x04 ) //bat low。不开boost BAT LOW detection enabled only when boost is enabled. 未开Boost在进入Standby Mode后还是会被电池低电唤醒。
{
gBoost_Prepared_Flag = 0;
gBoost_Opened_Flag = 0;
BST_EN = 0;
#ifdef _DEBUG_DISCHARGE
printf("BAT LOW Pro!\r\n");
#endif
return;
}
#ifndef BOOST_AOUT
if( gBoost_UVLO_Flag )
{
#if ADC_ENABLE
/*
VIN 存在时Boost 在电池电压高于 UVLO硬件关闭 2.8/3.0V,硬件清 boost 使能。开
软件实现,有 VIN3.6V,无 VIN3.3V)和电池存在的情况下才能开启。
软件上只作有 VIN3.6V开boost无 VIN3.3V开boost逻辑。
*/
if( CHIP_STA4 & 0x07 ) //Get In Charger Mode
{
if( Vbat_Adc >= OPEN_BOOST_VIN )
{
gBoost_Prepared_Flag = 1;
}
else
{
BST_EN = 0; //Boost Disable
gBoost_Prepared_Flag = 0;
}
}
else
{
if( Vbat_Adc >= OPEN_BOOST_NOVIN )
{
gBoost_Prepared_Flag = 1;
}
else
{
BST_EN = 0; //Boost Disable
gBoost_Prepared_Flag = 0;
}
}
#endif
}
else
{
gBoost_Prepared_Flag = 1;
}
#else
gBoost_Prepared_Flag = 1; //未发生Boost相关保护可以开启Boost。
if( gBoost_UVLO_Flag )
{
#if ADC_ENABLE
/*
VIN 存在时Boost 在电池电压高于 UVLO硬件关闭 2.8/3.0V,硬件清 boost 使能。开
软件实现,有 VIN3.6V,无 VIN3.3V)和电池存在的情况下才能开启。
软件上只作有 VIN3.6V开boost无 VIN3.3V开boost逻辑。
*/
if( CHIP_STA4 & 0x07 ) //Get In Charger Mode
{
if( Vbat_Adc >= OPEN_BOOST_VIN )
{
if( gBoost_Prepared_Flag )
{
BST_EN = 1;
gBoost_Opened_Flag = 1;
gBoost_UVLO_Flag = 0;
}
}
else
{
BST_EN = 0; //Boost Disable
gBoost_Prepared_Flag = 0;
gBoost_Opened_Flag = 0;
}
}
else
{
if( Vbat_Adc >= OPEN_BOOST_NOVIN )
{
if( gBoost_Prepared_Flag )
{
BST_EN = 1;
gBoost_Opened_Flag = 1;
gBoost_UVLO_Flag = 0;
}
}
else
{
BST_EN = 0; //Boost Disable
gBoost_Prepared_Flag = 0;
gBoost_Opened_Flag = 0;
}
}
#endif
}
else
{
if( gBoost_Prepared_Flag )
{
if( !(BST_EN & 0x01) )
{
BST_EN = 1;
#ifdef LED_DISPLAY
LED_R_FLASH(50,10);
LED_G_FLASH(50,10);
#endif
}
Boost_Open_Debounce++;
if( Boost_Open_Debounce >= BOOST_OPEN_TIM ) //Boost 开启需要延时一段时间。
{
gBoost_Opened_Flag = 1;
Boost_Open_Debounce = 0;
}
}
}
#endif
}
#endif