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

305 lines
7.1 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 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"
#include "led.h"
#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
/*
*******************************************************************************
* void Charger_Current_Set(void)
*
* Description : Charger Initialization
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
#if 0
void Charger_Current_Set(void)
{
uint16_t Charger_CurADC_Value = 0;
/* 通过外部电阻ADC1值设置充电电流值 */
Charger_CurADC_Value = ADC_Chn_Value(ADC_CH1);
/* 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
*
*******************************************************************************
*/
uint8_t PMU_NTC_Control(void)
{
uint16_t NTC_Adc = 0;
uint8_t NTC_Flag = TRUE;
#if ADC_CHN_ENABLE
NTC_Adc = ADC_Chn_Value(ADC_CH4);
if(NTC_Adc >= 0x2FF) ////屏蔽NTC功能NTC浮空屏蔽 NTC 功能,并锁定。
{
return NTC_Flag;
}
if(CHIP_STA4 & 0x80)
{
if(NTC_Adc <= T_0C && NTC_Adc > T_45C) //正常充电
{
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;
}
/*
*******************************************************************************
* void Charger_Handler(void)
*
* Description : Charger Handle. ---- 充电过程除了根据 NTC 动态调节充电电流和截止电压外,其他由硬件控制。充电过程
发生异常,硬件进行相应处理,并发送标志位,软件可以进行相应处理。
*
* Arguments : NONE
* Returns : NONE
* Notes : NONE
*
*******************************************************************************
*/
/*
1、充电超时充电超时后软件关闭充电使能等待VIN拔出。
*/
void Charger_Handler(void)
{
if( !(CHIP_STA4 & 0x80) ) //未检测到Power good,则关闭Charger使能后返回。
{
CHG_CTL &= ~0x01; //Disable Charger
#ifdef BREATHING_LIGHT //关闭LED UI显示呼吸灯
Breathing_Light_On = 0;
#endif
return;
}
/*各项保护都无需软件处理只处理充电超时超时后需要等VBUS重新插拔后才重新开始Charger流程。*/
if ( IRQ_FLAG9 & 0x0C ) //充电超时,Tricle charg and Fast charge timeout
{
CHG_CTL &= ~0x01; //Disable Charger
if ( IRQ_FLAG10 & 0xC0 ) //Plugin\Plugout interrupt
{
IRQ_FLAG9 = 0x0C;
IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
}
#ifdef BREATHING_LIGHT //关闭LED UI显示呼吸灯
Breathing_Light_On = 0;
#endif
return;
}
else /*充电未超时存在Plug则清Plugin\Plugout int*/
{
if( IRQ_FLAG10 & 0xC0 )
{
IRQ_FLAG10 = 0xC0; //Clear Plugin\Plugout interrupt
}
}
/*NTC Handle*/ //使能Charger前先检测NTC温度异常就不开充电。(CHIP_STA4 & 0x80):PG
if( PMU_NTC_Control() == FALSE ) //NTC保护不充电。
{
#ifdef BREATHING_LIGHT //关闭LED UI显示呼吸灯
Breathing_Light_On = 0;
#endif
return;
}
if( IRQ_FLAG9 & 0x10 ) //Charg complete interrupt
{
#ifdef BREATHING_LIGHT //关闭LED UI显示呼吸灯
Breathing_Light_On = 0;
#endif
#if ADC_ENABLE
#ifdef _DEBUG_CHARGER
printf("Chg Done\r\n");
#endif
if( Vbat_Adc < BAT_RECHARG )
{
CHG_CTL |= 0x01; //Enable Charger
IRQ_FLAG9 = 0x10;
#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
{
CHG_CTL |= 0x01; //Enable Charger
#ifdef BREATHING_LIGHT //LED UI显示呼吸灯
Breathing_Light_On = 1;
#endif
}
}
#endif