Both_Way_Comm_SY8833/TP3310_Demo.si4project/Backup/charger_module(5227).c

253 lines
5.7 KiB
C
Raw 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 charger_module.c
* @brief charger 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
******************************************************************************
*/
/*_____ I N C L U D E S ____________________________________________________*/
#include "charger_module.h"
#include "adc.h"
#include "sys_tim.h"
#include "discharge_module.h"
#include "system.h"
#include "vox_module.h"
bit Charger_Done = 0;
#if CHARGER_ENABLE
/******************************************************************************\
Macro definitions
\******************************************************************************/
#define NTC_PRO_DEBOUNCE_TIM 10
/******************************************************************************\
Variables definitions
\******************************************************************************/
#if ADC_CHN_ENABLE
bit NTC_Low_Pro_Flag = 0;
bit NTC_High_Pro_Flag = 0;
uint8_t NTC_Pro_Debounce_Cnt = 0;
#endif
/******************************************************************************\
Functions definitions
\******************************************************************************/
/*
*******************************************************************************
* void Charger_init(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Init(void)
{
SFRADDR = PMU_CTL1;
SFRDATA |= 0x07; //电池低压检测 enable 信号电池低压检测档位选择3.3V
/* Setting CV */
REG_CHG2 = 0x00; //0:4.20V;1:4.35V
/* Setting CHG Current */
REG_CHG1 = 0x03; //000:100mA;001:200mA;010:250mA;011:300mA;100:350mA;101:400mA;110:450mA;111:500mA
}
#endif
/*
*******************************************************************************
* uint8_t Charger_NTC_Control(uint8_t Charge_sta)
*
* Description : Charger NTC Control
* NTC 支持 103 和 104 电阻NTC 温度检测由软件通过 ADC 采集 NTC 引脚电压。
* 如果支持电量计温度检测线性化,支持电量计方案 103 的 NTC 需要并一个 8.2k
* 电阻20uA 电流103 NTC 需要串联 10k 电阻104 的 NTC 并联 82k 电阻。
* 在使能充电前软件先检测NTC 温度,如果 NTC 浮空,屏蔽 NTC 功能,
* 并锁定;如果 NTC 下拉到 0V关闭充电和放电。NTC 保护后,软件关闭充电,
* 温度恢复正常并持续 250ms再继续充电。
*
* Arguments : NTC_Protect_Type_e NTC_Type:Shield 、JEITA or IEC;Charge_sta:Charge or not
* Returns :NTC_Flag (0:Shield; 1:JEITA; 2:IEC)
* Notes : NONE
*
*******************************************************************************
*/
#if 1
uint8_t PMU_NTC_Control(void)
{
uint16_t NTC_Adc = 0;
uint8_t NTC_Flag = TRUE;
#if ADC_CHN_ENABLE
#if 1
NTC_Adc = ADC_Chn_Value(ADC_CH4);
#else
NTC_Adc = VNTC_Adc;
#endif
if(NTC_Adc >= 0x2FF) ////屏蔽NTC功能NTC浮空屏蔽 NTC 功能,并锁定。
{
return NTC_Flag;
}
if(CHIP_STA4 & 0x80)
{
if(NTC_Adc <= T_0C && NTC_Adc > T_45C) //正常充电
{
NTC_Flag = TRUE;
if(NTC_Low_Pro_Flag)
{
if( NTC_Adc < T_3C )
{
NTC_Low_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
if(NTC_High_Pro_Flag)
{
if( NTC_Adc > T_42C )
{
NTC_High_Pro_Flag = 0;
NTC_Flag = TRUE;
}
else
{
NTC_Flag = FALSE;
}
}
}
else //异常不充电
{
NTC_Pro_Debounce_Cnt++;
if(NTC_Pro_Debounce_Cnt > NTC_PRO_DEBOUNCE_TIM) //100ms
{
NTC_Pro_Debounce_Cnt = 0;
if(NTC_Adc > T_0C)
{
NTC_Low_Pro_Flag = 1;
}
else
if(NTC_Adc < T_45C)
{
NTC_High_Pro_Flag = 1;
}
CHG_CTL &= ~0x01; //Disable Charger.
NTC_Flag = FALSE;
}
}
}
#endif
return NTC_Flag;
}
#endif
/*
*******************************************************************************
* void Charger_Handler(void)
*
* Description : Charger Handle. ---- 充电过程除了根据 NTC 动态调节充电电流和截止电压外,其他由硬件控制。充电过程
发生异常,硬件进行相应处理,并发送标志位,软件可以进行相应处理。
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
/*
1、充电超时充电超时后软件关闭充电使能等待VIN拔出。
*/
void Charger_Handler(void)
{
uint8_t Ret = 0;
#if 1
if( !(CHIP_STA4 & 0x80) ) //未检测到Power good,则关闭Charger使能后返回。
{
CHG_CTL &= ~0x01; //Disable Charger
Charger_Done = 0;
return;
}
if( CHIP_STA4 & 0x70 ) //Charger BAT over voltage、VIN DPM、temp loop.
{
CHG_CTL &= ~0x01; //Disable Charger
return;
}
/*NTC Handle*/
Ret = PMU_NTC_Control(); //使能Charger前先检测NTC温度异常就不开充电。(CHIP_STA4 & 0x80):PG
if( Ret == FALSE ) //NTC保护不充电。
{
return;
}
if( Charger_Done )
{
#if ADC_ENABLE
#ifdef _DEBUG_CHARGER
printf("Chg Done\r\n");
#endif
if( Vbat_Adc < BAT_RECHARG )
{
CHG_CTL |= 0x01; //Enable Charger
Charger_Done = 0;
#ifdef _DEBUG_CHARGER
printf("En Chg\r\n");
#endif
}
else
{
CHG_CTL &= ~0x01; //Disable Charger
#ifdef _DEBUG_CHARGER
printf("Dis Chg\r\n");
#endif
}
#endif
}
else
#endif
{
CHG_CTL |= 0x01; //Enable Charger
}
}
#endif