#include "power_manage.h"
|
#include "adc.h"
|
#include "stdlib.h"
|
#include "uart.h"
|
#include "extern_rtc.h"
|
#include "lcd.h"
|
#include "gpio.h"
|
#include "lcd.h"
|
#include "tim.h"
|
#include "sizhu_ctrl_word.h"
|
#include "system_run_fun.h"
|
#include "system_mem_para.h"
|
#include "sizhu_ctrl_word.h"
|
#include "linked_list.h"
|
|
PWR_VOL_T pwr_vol_g = {.lith_flag = LMS_PERIOD, .alka_flag = AMS_PERIOD, .mcu_temp_flag = SET,.lith_vcc_per = 100}; // ĬÈÏÉϵç²É¼¯Ò»´ÎµçÁ¿ºÍMCUζÈ
|
|
|
uint8_t first_power_get_cnt_g = 0;
|
|
|
void Power_IO_Init(void)
|
{
|
CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
|
OutputIO(LITH_DETECTION_PORT,LITH_DETECTION_PIN,OUT_PUSHPULL);
|
InputtIO( LITH_PWR_LOSE_PORT, LITH_PWR_LOSE_PIN, IN_NORMAL);
|
|
|
OutputIO(ALKA_DETECTION_PORT,ALKA_DETECTION_PIN,OUT_PUSHPULL);
|
InputtIO_H( ALKA_PWR_LOSE_PIN, IN_NORMAL);
|
|
ALK_DEC_OFF;
|
LIT_DEC_OFF;
|
|
OutputIO(BORROW_PWR_PORT,BORROW_PWR_PIN,OUT_PUSHPULL);
|
OutputIO(EX_PWR_EN_PORT,EX_PWR_EN_PIN,OUT_PUSHPULL);
|
BORROW_PWR_OFF;
|
EX_PWR_OFF;
|
}
|
|
void Lith_Battery_GPIO_Clk_Init(void)
|
{
|
CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
|
AnalogIO(LIT_ADC_PORT,LIT_ADC_PIN);//ADC_IN4
|
OutputIO(LITH_DETECTION_PORT,LITH_DETECTION_PIN,OUT_PUSHPULL);
|
// AnalogIO(LIT_PWR_UNDER_PORT,LIT_PWR_UNDER_PIN);//ADC_5
|
|
}
|
|
void Alka_Battery_GPIO_Clk_Init(void)
|
{
|
CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
|
AnalogIO_H(ALK_ADC_PIN);
|
OutputIO(ALKA_DETECTION_PORT,ALKA_DETECTION_PIN,OUT_PUSHPULL);
|
}
|
|
void EX_Pwr_GPIO_Clk_Init(void)
|
{
|
CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
|
InputtIO( HWIDO_EX_PWR_PORT, HWIDO_EX_PWR_PIN, IN_NORMAL);
|
}
|
|
/******************************************
|
* func: Get_vol_Average
|
* desc:
|
* - sample total 100 data,list data from low to hign,get middle 64 data
|
* - calculation sample mean of 64 middle data
|
* input:
|
* ch - select sample channel of adc1
|
* vref_adc - Voltage reference of adc1 multiply by 1000. eg:3.3v ->33000
|
* output: none
|
* return: calculation sample mean of 64 middle data,multiply by 1000. eg:1.0v -> 1000
|
*****************************************/
|
uint32_t Get_vol_Average(ad_data_s *data_p)
|
{
|
u32 i, j, t;
|
uint32_t temp;
|
uint32_t temp_vol = 0;
|
|
for (i = 0; i < data_p->ad_buffer_cnt; i++)
|
{
|
data_p->ad_get_buffer[i] = Get_AdcValue();
|
}
|
|
for (i = 0; i < data_p->ad_buffer_cnt; i++)
|
{
|
for (j = (i + 1); j < data_p->ad_buffer_cnt; j++)
|
if (data_p->ad_get_buffer[j] < data_p->ad_get_buffer[i])
|
{
|
temp = data_p->ad_get_buffer[j];
|
data_p->ad_get_buffer[j] = data_p->ad_get_buffer[i];
|
data_p->ad_get_buffer[i] = temp;
|
}
|
}
|
|
for (t = 1; t < (data_p->ad_buffer_cnt - 1); t++)
|
{
|
temp_vol += data_p->ad_get_buffer[t];
|
}
|
temp_vol = temp_vol / (data_p->ad_buffer_cnt - 2);
|
return temp_vol;
|
}
|
|
/******************************************
|
* func: get_alka_bat_voltage
|
* desc: Get alka ADC data
|
* input: none
|
* output: none
|
* return: none
|
*****************************************/
|
float Get_Alka_Bat_Voltage(void)
|
{
|
uint32_t volt_ret;
|
float sample_vol;
|
float battery_vol = 0;
|
ad_data_s *data_ins;
|
Alka_Battery_GPIO_Clk_Init();
|
ADC_IN8_Init();
|
ALK_DEC_ON;
|
delay_ms(5);
|
// ÉêÇëÈáÐÔÊý×éÄÚ´æ¿Õ¼ä
|
if ((data_ins = (ad_data_s *)malloc(sizeof(ad_data_s) + sizeof(uint16_t) * AD_ALKA_BAT_CNT)) != NULL)
|
{
|
data_ins->ad_buffer_cnt = AD_ALKA_BAT_CNT;
|
data_ins->ad_ch = AD_ALKA_BAT_CH;
|
volt_ret = Get_vol_Average(data_ins);
|
|
sample_vol = (float)volt_ret * 0.001;
|
battery_vol = sample_vol * ALKA_VOL_COE;
|
ALK_DEC_OFF;
|
/*ÊÍ·ÅÄÚ´æ*/
|
free(data_ins);
|
data_ins = NULL;
|
}
|
ADC_CR_EN_Setable(DISABLE);
|
return battery_vol;
|
}
|
/******************************************
|
* func: get_lith_bat_voltage
|
* desc: Get lith_bat ADC data
|
* input: none
|
* output: none
|
* return: none
|
*****************************************/
|
float Get_Lith_Bat_Voltage(void)
|
{
|
uint32_t volt_ret;
|
float sample_vol;
|
float battery_vol = 0;
|
ad_data_s *data_ins;
|
Lith_Battery_GPIO_Clk_Init();
|
ADC_IN4_Init();
|
LIT_DEC_ON;
|
delay_ms(5);
|
if ((data_ins = (ad_data_s *)malloc(sizeof(data_ins) + sizeof(uint16_t) * AD_LITH_BAT_CNT)) != NULL)
|
{
|
data_ins->ad_buffer_cnt = AD_LITH_BAT_CNT;
|
data_ins->ad_ch = AD_LITH_BAT_CH;
|
volt_ret = Get_vol_Average(data_ins);
|
sample_vol = (float)volt_ret * 0.001;
|
battery_vol = sample_vol * LITH_VOL_COE;
|
LIT_DEC_OFF;
|
/*ÊÍ·ÅÄÚ´æ*/
|
free(data_ins);
|
data_ins = NULL;
|
}
|
ADC_CR_EN_Setable(DISABLE);
|
return battery_vol;
|
}
|
|
//float Get_PF6_Bat_Voltage(void)
|
//{
|
// uint32_t volt_ret;
|
// float sample_vol;
|
// float battery_vol = 0;
|
// ad_data_s *data_ins;
|
// Lith_Battery_GPIO_Clk_Init();
|
// ADC_IN5_Init();
|
// if ((data_ins = (ad_data_s *)malloc(sizeof(data_ins) + sizeof(uint16_t) * AD_LITH_PF6_BAT_CNT)) != NULL)
|
// {
|
// data_ins->ad_buffer_cnt = AD_LITH_PF6_BAT_CNT;
|
// data_ins->ad_ch = AD_LITH_PF6_BAT_CH;
|
// volt_ret = Get_vol_Average(data_ins);
|
// sample_vol = (float)volt_ret * 0.001;
|
// battery_vol = sample_vol * LITH_PF6_VOL_COE;
|
// /*ÊÍ·ÅÄÚ´æ*/
|
// free(data_ins);
|
// data_ins = NULL;
|
// }
|
// ADC_CR_EN_Setable(DISABLE);
|
// return battery_vol;
|
//}
|
|
|
float Get_Mcu_Temp(void)
|
{
|
ad_data_s *data_ins_vtem;
|
float temperature;
|
ADC_Temp_Init();
|
|
if ((data_ins_vtem = (ad_data_s *)malloc(sizeof(ad_data_s) + sizeof(uint16_t) * AD_VTEM_CNT)) != NULL)
|
{
|
data_ins_vtem->ad_buffer_cnt = AD_VTEM_CNT;
|
// data_ins_vtem->ad_ch = AD_VTEM_CH; //ûÄñÓÃ
|
temperature = Get_AdcTempValue(); // »ñȡζȵçѹֵ,¿ªÆôζÈADC
|
/*ÊÍ·ÅÄÚ´æ*/
|
free(data_ins_vtem);
|
data_ins_vtem = NULL;
|
}
|
ADC_CR_EN_Setable(DISABLE);
|
return temperature;
|
}
|
|
|
#define LITH_BAT_VCC_MAX 7.2f
|
/*µç³Øµçѹ״̬ÅжÏ,״̬ÍùÉϱä¸üÐèÒª´óÓÚãÐÖµ+0.2V£¬·Àֹ״̬ÔÚãÐÖµÉÏÏÂÌø¶¯*/
|
void Lith_Bat_Voltage_Status(float lith_vcc,PWR_VOL_T *pwr_vol_p)
|
{
|
float fTemp;
|
if(lith_vcc < bat_para_g.lith_bat_under_v*0.1){
|
pwr_vol_p->lith_vcc_status = BAT_V_DOWN;
|
}else if(lith_vcc < bat_para_g.lith_bat_under_v*0.1 + 0.2){
|
if(pwr_vol_p->lith_vcc_status == BAT_V_DOWN){
|
pwr_vol_p->lith_vcc_status = BAT_V_DOWN;
|
}else{
|
pwr_vol_p->lith_vcc_status = BAT_V_LOW;
|
}
|
}else if(lith_vcc < bat_para_g.lith_bat_low_v*0.1){
|
pwr_vol_p->lith_vcc_status = BAT_V_LOW;
|
}else if(lith_vcc < bat_para_g.lith_bat_low_v*0.1 + 0.2){
|
if(pwr_vol_p->lith_vcc_status == BAT_V_LOW){
|
pwr_vol_p->lith_vcc_status = BAT_V_LOW;
|
}else{
|
pwr_vol_p->lith_vcc_status = BAT_V_NONE;
|
}
|
}else{
|
pwr_vol_p->lith_vcc_status = BAT_V_NONE;
|
}
|
|
/*****¸ù¾Ýµçѹֵ¼ÆËã°Ù·Ö±È£¬Âúµç°´LITH_BAT_VCC_MAXËã***/
|
if(pwr_vol_p->lith_vcc_status == BAT_V_DOWN){
|
pwr_vol_p->lith_vcc_per = 0;
|
}else if(pwr_vol_p->lith_vcc_status == BAT_V_LOW){
|
if(bat_para_g.lith_bat_low_v > bat_para_g.lith_bat_under_v){
|
fTemp = BAT_PERSENT_LEVEL_1*(lith_vcc - bat_para_g.lith_bat_low_v*0.1) /(0.1*(bat_para_g.lith_bat_low_v - bat_para_g.lith_bat_under_v));
|
if(fTemp > 20.0)
|
fTemp = 20;
|
else if(fTemp <0)
|
fTemp = 0;
|
pwr_vol_p->lith_vcc_per = fTemp;
|
}else
|
{
|
pwr_vol_p->lith_vcc_per = 0;
|
}
|
|
}else
|
{
|
if(LITH_BAT_VCC_MAX>bat_para_g.lith_bat_low_v*0.1){
|
fTemp = (100-BAT_PERSENT_LEVEL_1)*(lith_vcc - bat_para_g.lith_bat_low_v*0.1) /(LITH_BAT_VCC_MAX - bat_para_g.lith_bat_low_v*0.1);
|
if(fTemp > 80.0)
|
fTemp = 80;
|
else if(fTemp <0.0)
|
fTemp = 0.0;
|
pwr_vol_p->lith_vcc_per = fTemp + 20.0;
|
}else{
|
pwr_vol_p->lith_vcc_per = 20;
|
}
|
|
}
|
|
}
|
|
#define ALKA_BAT_VCC_MAX 6.4f
|
void Alka_Bat_Voltage_Status(float alka_vcc,PWR_VOL_T *pwr_vol_p)
|
{
|
float fTemp;
|
if(alka_vcc < bat_para_g.alka_bat_under_v*0.1){
|
pwr_vol_p->alka_vcc_status = BAT_V_DOWN;
|
}else if(alka_vcc < bat_para_g.alka_bat_under_v*0.1 + 0.2){
|
if(pwr_vol_p->alka_vcc_status == BAT_V_DOWN){
|
pwr_vol_p->alka_vcc_status = BAT_V_DOWN;
|
}else{
|
pwr_vol_p->alka_vcc_status = BAT_V_LOW;
|
}
|
}else if(alka_vcc < bat_para_g.alka_bat_low_v*0.1){
|
pwr_vol_p->alka_vcc_status = BAT_V_LOW;
|
}else if(alka_vcc < bat_para_g.alka_bat_low_v*0.1 + 0.2){
|
if(pwr_vol_p->alka_vcc_status==BAT_V_LOW){
|
pwr_vol_p->alka_vcc_status = BAT_V_LOW;
|
}else{
|
pwr_vol_p->alka_vcc_status = BAT_V_NONE;
|
}
|
}else{
|
pwr_vol_p->alka_vcc_status = BAT_V_NONE;
|
}
|
|
/*****¸ù¾Ýµçѹֵ¼ÆËã°Ù·Ö±È£¬Âúµç°´ALKA_BAT_VCC_MAXËã***/
|
if(pwr_vol_p->alka_vcc_status == BAT_V_DOWN){
|
pwr_vol_p->alka_vcc_per = 0;
|
}else if(pwr_vol_p->alka_vcc_status == BAT_V_LOW){
|
if(bat_para_g.alka_bat_low_v > bat_para_g.alka_bat_under_v){
|
fTemp = BAT_PERSENT_LEVEL_1*(alka_vcc - bat_para_g.alka_bat_low_v*0.1) /(0.1*(bat_para_g.alka_bat_low_v - bat_para_g.alka_bat_under_v));
|
if(fTemp > 20.0)
|
fTemp = 20;
|
else if(fTemp <0)
|
fTemp = 0;
|
pwr_vol_p->alka_vcc_per = fTemp;
|
}else
|
{
|
pwr_vol_p->alka_vcc_per = 0;
|
}
|
|
}else
|
{
|
if(ALKA_BAT_VCC_MAX>bat_para_g.alka_bat_low_v*0.1){
|
fTemp = (100-BAT_PERSENT_LEVEL_1)*(alka_vcc - bat_para_g.alka_bat_low_v*0.1) /(ALKA_BAT_VCC_MAX - bat_para_g.alka_bat_low_v*0.1);
|
if(fTemp > 80.0)
|
fTemp = 80;
|
else if(fTemp <0.0)
|
fTemp = 0.0;
|
pwr_vol_p->alka_vcc_per = fTemp + 20.0;
|
}else{
|
pwr_vol_p->alka_vcc_per = 20;
|
}
|
|
}
|
|
}
|
|
/**MCUζÈ״̬ÅжÏ*/
|
void MCU_temperature_Status(float mcu_tem,PWR_VOL_T *pwr_vol_p)
|
{
|
|
}
|
|
|
//ï®µç³ØÊ¹ÓÃʱ¼ä¼ÆÊý
|
void LithBatUseTimeCalculate(BAT_PARA_T *bat_para_p)
|
{
|
bat_para_p->lith_bat_used_sec ++;
|
if(bat_para_p->lith_bat_used_sec >=3600){
|
bat_para_p->lith_bat_used_sec = 0;
|
|
if(bat_para_p->lith_bat_used_hour < 87600) //24Сʱ*365Ìì*10Äê
|
bat_para_p->lith_bat_used_hour ++;
|
|
//? ´æ´¢£¬Ôݶ¨Ã¿Ð¡Ê±´æ´¢Ò»´Î
|
}
|
|
}
|
|
#define EX_PWR_CONTINUE_TIME 5 //Íâµç³ÖÐøÊ±¼ä£¬³ÖÐøXÃëËãÓÐЧ
|
/*»ñµÃµçԴ״̬¡£ï®µç¡¢¼îµç¡¢Íâµç¡¢MCUζÈ*/
|
void GetPwrStatusPro(PWR_VOL_T *pwr_vol_p)
|
{
|
const uint16_t DELAY_TIME = 5;
|
static uint16_t delay_time_cnt = 0;
|
|
/*¸ß¹¦ºÄ¹¦ÄÜÔËÐнáÊøÖ®ºóÑÓʱһ¶¨Ê±¼äÔÙ¼ì²âµç³Ø*/
|
if((sys_fun_run_ctrl_g.rs485_ctrl_flag.running_flag == RESET)&&(sys_fun_run_ctrl_g.wrc_ctrl_flag.running_flag == RESET)&&(sys_fun_run_ctrl_g.valve_ctrl_flag.running_flag == RESET)){
|
if(delay_time_cnt < DELAY_TIME) delay_time_cnt ++;
|
}
|
else
|
delay_time_cnt = 0;
|
|
/*﮵ç¼îµçÖÜÆÚ´¥·¢*/ //Ôݶ¨¼òµ¥´¦Àí£¬Ò»Ìì¼ì²âÒ»´Î
|
if((sys_clockBCD_g.hour == 23)&&(sys_clockBCD_g.min == 57)&&(sys_clockBCD_g.sec == 57)){
|
pwr_vol_p->lith_flag = LMS_PERIOD;
|
pwr_vol_p->alka_flag = AMS_PERIOD;
|
}
|
|
/*MCUζÈÖÜÆÚÐÔ¼ì²â*/ //Ôݶ¨Ã¿Ð¡Ê±¼ì²âÒ»´Î
|
if((sys_clockBCD_g.min == 57)&&(sys_clockBCD_g.sec == 58))
|
pwr_vol_p->mcu_temp_flag = SET;
|
|
//﮵çµôµçÈ·ÈÏ
|
if(pwr_vol_p->lith_lose_check_flag == SET){
|
pwr_vol_p->lith_lose_check_flag = RESET;
|
if(LITH_PWR_LOSE_IO_READ == Bit_RESET){
|
//È·ÈÏ﮵çµôµç
|
__SYS_STATUS_ALARM_BYTES_SET(lith_remove,ALARM_ID_LITH_BAT_REMOVAL); //?﮵çµôµçÖ®ºóÐèҪһЩ½ô¼±´¦Àí£¬±ÈÈçʵʱÊý¾ÝÁ¢Âí´æ´¢Ò»´Î
|
}
|
}
|
|
//¼îµçµôµçÈ·ÈÏ
|
if(pwr_vol_p->alka_lose_check_flag == SET){
|
pwr_vol_p->alka_lose_check_flag = RESET;
|
if(ALKA_PWR_LOSE_IO_READ == Bit_RESET){
|
//È·ÈÏ﮵çµôµç
|
__SYS_STATUS_ALARM_BYTES_SET(alka_remove,ALARM_ID_ALKA_BAT_REMOVAL);
|
}
|
}
|
|
|
|
if(pwr_vol_p->lith_flag != LMS_NONE ){
|
pwr_vol_p->lith_flag = LMS_NONE;
|
pwr_vol_p->lith_vcc = Get_Lith_Bat_Voltage();//﮵ç¼ì²â
|
Lith_Bat_Voltage_Status(pwr_vol_p->lith_vcc,pwr_vol_p);
|
}
|
|
if((pwr_vol_p->alka_flag != AMS_NONE)&&(delay_time_cnt >= DELAY_TIME) ){
|
pwr_vol_p->alka_flag = AMS_PERIOD;
|
pwr_vol_p->alka_vcc = Get_Alka_Bat_Voltage();//¼îµç¼ì²â
|
Alka_Bat_Voltage_Status(pwr_vol_p->alka_vcc,pwr_vol_p);
|
}
|
|
if(pwr_vol_p->mcu_temp_flag == SET){
|
pwr_vol_p->mcu_temp_flag = RESET;
|
pwr_vol_p->mcu_temperature = Get_Mcu_Temp();//mcuζȻñÈ¡
|
|
}
|
|
|
/*µç³ØÊ¹ÓÃʱ¼ä¼ÆË㣬ÔÙ¸ù¾Ýµçѹ״̬ºÍʹÓÃʱ¼ä״̬×ۺϵóö×îÖÕµÄµç³Ø×´Ì¬*/
|
/*﮵çµçѹǷѹ£¬ÔòºÏ³ÉǷѹ£¬°Ù·Ö±È0£»ï®µçµçѹµÍµç£¬ÔòºÏ³ÉµÍµç£¬°Ù·Ö±È°´µçѹֵÏÔʾ0-20£» ·ñÔò£¬ºÏ³É=ʹÓÃʱ¼äÊ£Ó࣬ºÏ³ÉСÓÚ20ÅжÏΪµÍµç£¬20-100ΪÕý³£*/
|
|
if(__SYS_STATUS_BYTES_GET(power_state) ==RESET)
|
LithBatUseTimeCalculate(&bat_para_g);
|
|
if(bat_para_g.lith_bat_used_hour >= bat_para_g.lith_bat_max_hour){
|
pwr_vol_p->lith_remain_use_time_per = 0;
|
}else{
|
pwr_vol_p->lith_remain_use_time_per = 100*(bat_para_g.lith_bat_max_hour - bat_para_g.lith_bat_used_hour)/bat_para_g.lith_bat_max_hour;
|
}
|
|
if(pwr_vol_p->lith_vcc_status == BAT_V_DOWN){
|
__SYS_STATUS_BYTES_STATUS(lith_down, SET, ALARM_ID_LITH_BAT_DOWN);
|
__SYS_STATUS_BYTES_STATUS(lith_low, SET, ALARM_ID_LITH_BAT_LOW);
|
pwr_vol_p->lith_synthesize_per = 0;
|
}else if(pwr_vol_p->lith_vcc_status == BAT_V_LOW){
|
__SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN);
|
__SYS_STATUS_BYTES_STATUS(lith_low, SET, ALARM_ID_LITH_BAT_LOW);
|
pwr_vol_p->lith_synthesize_per = pwr_vol_p->alka_vcc_per;
|
}else{
|
pwr_vol_p->lith_synthesize_per = (pwr_vol_p->lith_remain_use_time_per ==100)? 100:pwr_vol_p->lith_remain_use_time_per + 1; //ΪÁË100%Äܹ»Î¬³ÖÒ»¶Îʱ¼ä£¬µçѹÕý³£×´Ì¬Ê±°Ù·Ö±È²»ÄÜΪ0£¬Îª0¾ÍÒªÏÔʾ¿ÕÁË£¬±£³Ö1¸ñÖÁµçѹ״̬±äΪǷѹ
|
|
if(pwr_vol_p->lith_synthesize_per < 20){
|
__SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN);
|
__SYS_STATUS_BYTES_STATUS(lith_low, SET, ALARM_ID_LITH_BAT_LOW);
|
}else{
|
__SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN);
|
__SYS_STATUS_BYTES_STATUS(lith_low, RESET, ALARM_ID_LITH_BAT_LOW);
|
}
|
|
}
|
/*¼îµç³Ø¿ÉÄܸù¾ÝʹÓôÎÊý£¬¶ø²»ÊÇʱ¼ä£¬×îÖÕ״̬ÅжϷ½Ê½´ý¶¨£¿*/
|
|
|
/****Íâµçʵʱ¼à²â******/
|
EX_Pwr_GPIO_Clk_Init();
|
if(HWIDO_EX_PWR_IO_READ == Bit_RESET){
|
if((pwr_vol_p->ex_pwr_out_cnt!=0)&&(pwr_vol_p->ex_pwr_out_cnt!=EX_PWR_CONTINUE_TIME)){
|
//³ÖÐøÖÐ;״̬¸Ä±ä£¬¿ÉÄÜ´ú±íÍâµç²»Îȶ¨£¬Æµ·±³öÏÖÔò±¨¾¯
|
}
|
pwr_vol_p->ex_pwr_out_cnt = 0;
|
if(pwr_vol_p->ex_pwr_in_cnt < EX_PWR_CONTINUE_TIME )
|
pwr_vol_p->ex_pwr_in_cnt++;
|
|
if(pwr_vol_p->ex_pwr_in_cnt >=EX_PWR_CONTINUE_TIME){
|
if(__SYS_STATUS_BYTES_GET(power_state) != SET){
|
EX_PWR_ON;
|
__SYS_STATUS_BYTES_STATUS(power_state, SET, ALARM_ID_NORMAL);
|
//?Ìí¼ÓÍâµç±ä»¯±¨¾¯
|
}
|
}
|
}else
|
{
|
if((pwr_vol_p->ex_pwr_in_cnt!=0)&&(pwr_vol_p->ex_pwr_in_cnt!=EX_PWR_CONTINUE_TIME)){
|
//³ÖÐøÖÐ;״̬¸Ä±ä£¬¿ÉÄÜ´ú±íÍâµç²»Îȶ¨£¬Æµ·±³öÏÖÔò±¨¾¯
|
}
|
pwr_vol_p->ex_pwr_in_cnt = 0;
|
if(pwr_vol_p->ex_pwr_out_cnt < EX_PWR_CONTINUE_TIME )
|
pwr_vol_p->ex_pwr_out_cnt++;
|
|
if(pwr_vol_p->ex_pwr_out_cnt >=EX_PWR_CONTINUE_TIME){
|
if(__SYS_STATUS_BYTES_GET(power_state) != RESET){
|
EX_PWR_OFF;
|
__SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL);
|
//?Ìí¼ÓÍâµç±ä»¯±¨¾¯
|
}
|
}
|
}
|
|
|
}
|
|
|
//³ÌÐòÆô¶¯ºóµçÔ´¹ÜÀí³õʼ»¯£¬ Ê×´ÎÍâµçÅжϣ¬Ê×´Îµç³Øµçѹ²É¼¯
|
void PowerManagrInit(void)
|
{
|
pwr_vol_g.lith_vcc = Get_Lith_Bat_Voltage();//﮵ç¼ì²â
|
if(pwr_vol_g.lith_vcc < bat_para_g.lith_bat_under_v*0.1){
|
__SYS_STATUS_BYTES_STATUS(lith_down, SET, ALARM_ID_LITH_BAT_DOWN);
|
__SYS_STATUS_BYTES_STATUS(lith_low, SET, ALARM_ID_LITH_BAT_LOW);
|
}else if(pwr_vol_g.lith_vcc < bat_para_g.lith_bat_low_v*0.1){
|
__SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN);
|
__SYS_STATUS_BYTES_STATUS(lith_low, SET, ALARM_ID_LITH_BAT_LOW);
|
}else{
|
__SYS_STATUS_BYTES_STATUS(lith_down, RESET, ALARM_ID_LITH_BAT_DOWN);
|
__SYS_STATUS_BYTES_STATUS(lith_low, RESET, ALARM_ID_LITH_BAT_LOW);
|
}
|
|
pwr_vol_g.alka_vcc = Get_Alka_Bat_Voltage();//¼îµç¼ì²â
|
if(pwr_vol_g.alka_vcc < bat_para_g.alka_bat_under_v*0.1){
|
__SYS_STATUS_BYTES_STATUS(alka_down, SET, ALARM_ID_ALKA_BAT_DOWN);
|
__SYS_STATUS_BYTES_STATUS(alka_low, SET, ALARM_ID_ALKA_BAT_LOW);
|
}else if(pwr_vol_g.alka_vcc < bat_para_g.alka_bat_low_v*0.1){
|
__SYS_STATUS_BYTES_STATUS(alka_down, RESET, ALARM_ID_ALKA_BAT_DOWN);
|
__SYS_STATUS_BYTES_STATUS(alka_low, SET, ALARM_ID_ALKA_BAT_LOW);
|
}else{
|
__SYS_STATUS_BYTES_STATUS(alka_down, RESET, ALARM_ID_ALKA_BAT_DOWN);
|
__SYS_STATUS_BYTES_STATUS(alka_low, RESET, ALARM_ID_ALKA_BAT_LOW);
|
}
|
|
//Íâµç¼ì²â,HWID0µÍλÓÐÍâµç
|
EX_Pwr_GPIO_Clk_Init();
|
if(HWIDO_EX_PWR_IO_READ == Bit_RESET){
|
delay_ms(10);
|
if(HWIDO_EX_PWR_IO_READ == Bit_RESET){
|
EX_PWR_ON;
|
__SYS_STATUS_BYTES_STATUS(power_state, SET, ALARM_ID_NORMAL);
|
}else{
|
EX_PWR_OFF;
|
__SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL);
|
}
|
}else{
|
EX_PWR_OFF;
|
__SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL);
|
}
|
|
|
}
|