294 lines
6.8 KiB
C
294 lines
6.8 KiB
C
/*
|
||
******************************************************************************
|
||
*
|
||
* @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
|
||
\******************************************************************************/
|
||
|
||
idata TE_CHG_STA ChgStatus; // ϵͳ״̬¶¨Òå
|
||
|
||
#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
|
||
IRQ_FLAG9 = 0x10; //δ³äµç£¬ÐèÇåCharg complete interruptÖжÏ
|
||
ChgStatus = CHG_STA_PULLOUT;
|
||
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
|
||
}
|
||
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±£»¤£¬²»³äµç¡£
|
||
{
|
||
return;
|
||
}
|
||
|
||
if( IRQ_FLAG9 & 0x10 ) //Charg complete interrupt
|
||
{
|
||
|
||
#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
|
||
}
|
||
ChgStatus = CHG_STA_COMPLETED;
|
||
|
||
#endif
|
||
}
|
||
else
|
||
{
|
||
CHG_CTL |= 0x01; //Enable Charger
|
||
ChgStatus = CHG_STA_ING;
|
||
}
|
||
}
|
||
|
||
#endif
|
||
|