From 29651cb059e56969ed845b045ab46505c89dc0c5 Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Mon, 13 May 2024 20:11:38 +0800
Subject: [PATCH] 继续完善电源管理
---
Function/POWER_MANAGE/power_manage.c | 559 +++++++++++++++++++++++++++++++++----------------------
1 files changed, 336 insertions(+), 223 deletions(-)
diff --git a/Function/POWER_MANAGE/power_manage.c b/Function/POWER_MANAGE/power_manage.c
index cf41c58..683d3a4 100644
--- a/Function/POWER_MANAGE/power_manage.c
+++ b/Function/POWER_MANAGE/power_manage.c
@@ -1,21 +1,19 @@
-
+#include "power_manage.h"
#include "adc.h"
#include "stdlib.h"
-
#include "uart.h"
-#include "sundry.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 = {LMS_PERIOD, AMS_PERIOD, SET,.lith_vcc_per = 100}; // Ĭ���ϵ�ɼ�һ�ε�����MCU�¶�
+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;
@@ -24,15 +22,42 @@
void Power_IO_Init(void)
{
CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱ�ӣ�GPIO��ʹ�ܺ���
- OutputIO(LITHIUM_DETECTION_PORT,LITHIUM_DETECTION_PIN,OUT_PUSHPULL);
- InputtIO( LITHIUM_PWR_DOWN_PORT, LITHIUM_PWR_DOWN_PIN, IN_NORMAL);
-// InputtIO( LIT_PWR_UNDER_PORT, LIT_PWR_UNDER_PIN, IN_NORMAL);
+ OutputIO(LITH_DETECTION_PORT,LITH_DETECTION_PIN,OUT_PUSHPULL);
+ InputtIO( LITH_PWR_LOSE_PORT, LITH_PWR_LOSE_PIN, IN_NORMAL);
+
- OutputIO(ALKALI_DETECTION_PORT,ALKALI_DETECTION_PIN,OUT_PUSHPULL);
- InputtIO( ALKALI_PWR_DOWN_PORT, ALKALI_PWR_DOWN_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);
}
/******************************************
@@ -92,7 +117,7 @@
Alka_Battery_GPIO_Clk_Init();
ADC_IN8_Init();
ALK_DEC_ON;
-// delay_ms(10);
+ delay_ms(5);
// �������������ڴ�ռ�
if ((data_ins = (ad_data_s *)malloc(sizeof(ad_data_s) + sizeof(uint16_t) * AD_ALKA_BAT_CNT)) != NULL)
{
@@ -126,7 +151,7 @@
Lith_Battery_GPIO_Clk_Init();
ADC_IN4_Init();
LIT_DEC_ON;
-// delay_ms(10);
+ 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;
@@ -185,236 +210,324 @@
ADC_CR_EN_Setable(DISABLE);
return temperature;
}
-/*Mcu�¶�״̬��������*/
-#define LCD_TEMPERATURE_LOW_VALUE (-15)
-void Mcu_TempStateAlarmHandler(float mcu_temperature, SYS_TEMP_ALARM_CFG_T *sys_temp_alarm_p)
+
+
+#define LITH_BAT_VCC_MAX 7.2f
+/*��ص�ѹ״̬�ж�,״̬���ϱ����Ҫ������ֵ+0.2V����ֹ״̬����ֵ��������*/
+void Lith_Bat_Voltage_Status(float lith_vcc,PWR_VOL_T *pwr_vol_p)
{
- if (mcu_temperature < sys_temp_alarm_p->cpu_temp_up_scope &&
- mcu_temperature > sys_temp_alarm_p->cpu_temp_down_scope) // �����¶� cpu_temp_down < mcu_temp_now < cpu_temp_up
- {
- __SYS_STATUS_BYTES_STATUS(cpu_temp_up, RESET, AV_CPU_TEMP_UP);
- __SYS_STATUS_BYTES_STATUS(cpu_temp_down, RESET, AV_CPU_TEMP_DOWN);
- }
- else if (mcu_temperature >= sys_temp_alarm_p->cpu_temp_up_scope)
- __SYS_STATUS_ALARM_BYTES_SET(cpu_temp_up);
- else if (mcu_temperature <= sys_temp_alarm_p->cpu_temp_down_scope)
- __SYS_STATUS_ALARM_BYTES_SET(cpu_temp_down);
-
- if(mcu_temperature <= LCD_TEMPERATURE_LOW_VALUE)
- __SYS_STATUS_ALARM_BYTES_SET(lcd_temp_low);
- else
- __SYS_STATUS_BYTES_STATUS(lcd_temp_low,RESET,AV_LCD_TEMP_LOW);
-}
-/*��ص�ѹ״̬�ж�*/
-#define LITH_LOW_EFFECTIVE_VOLTAGE_VALUE (3.2f - 2.9f)
-void Lith_Bat_Voltage_Status(float lith_vcc,int8_t * pLith_vcc_per)
-{
- if(lith_vcc < 3.2f)
- {
- if(__SYS_STATUS_BYTES_GET(lith_under) == RESET || __SYS_STATUS_BYTES_GET(lith_remove) == RESET)
- {
- *pLith_vcc_per = (float)(lith_vcc - 2.9f) / (float)LITH_LOW_EFFECTIVE_VOLTAGE_VALUE * 20;
- if(*pLith_vcc_per < 0)
- *pLith_vcc_per = 1;
+ 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;
}
- else
- *pLith_vcc_per = 100;
-
- if (__SYS_STATUS_BYTES_GET(lith_low) == 0 && lith_vcc < 3.2f) // ﮵�͵�״̬��δ��λ && ﮵� < ij���� = ﮵�͵�
- __SYS_STATUS_ALARM_BYTES_SET(lith_low);
- else if (__SYS_STATUS_BYTES_GET(lith_low) && lith_vcc >= 3.25f)
- __SYS_STATUS_BYTES_STATUS(lith_low, RESET, AV_LITH_LOW); // ���﮵�͵�״̬
- if (__SYS_STATUS_BYTES_GET(lith_under) == 0 && lith_vcc < 2.9f)
+ /*****���ݵ�ѹֵ����ٷֱȣ����簴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
{
- pwr_vol_g.lith_vcc_per = 0;
- __SYS_STATUS_ALARM_BYTES_SET(lith_under);
- }
- else if (__SYS_STATUS_BYTES_GET(lith_under) && lith_vcc >= 2.95f)// ﮵�Ƿѹ����
- __SYS_STATUS_BYTES_STATUS(lith_under, RESET, AV_LITH_UNDER);
-
- if (__SYS_STATUS_BYTES_GET(lith_remove) && lith_vcc >= 2.5f &&
- GPIO_ReadInputDataBit(LITHIUM_PWR_DOWN_PORT,LITHIUM_PWR_DOWN_PIN) == Bit_SET)// ﮵��Ƴ�/��������
- {
- __SYS_STATUS_BYTES_STATUS(lith_remove, RESET, AV_LITH_REMOVE);
- SLAVE_PWR_ON;
+ 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;
+ }
+
}
}
-void Alka_Bat_Voltage_Status(float alka_vcc)
+#define ALKA_BAT_VCC_MAX 6.4f
+void Alka_Bat_Voltage_Status(float alka_vcc,PWR_VOL_T *pwr_vol_p)
{
- if (__SYS_STATUS_BYTES_GET(alka_low) == 0 && alka_vcc < 4.85f) // ���͵�
- __SYS_STATUS_ALARM_BYTES_SET(alka_low);
- else if (__SYS_STATUS_BYTES_GET(alka_low) && alka_vcc >= 4.95f)
- {
- __SYS_STATUS_BYTES_STATUS(alka_low, RESET, AV_ALKA_LOW);
- }
-
- if (__SYS_STATUS_BYTES_GET(alka_under) == 0 && alka_vcc < 4.5f) // ���Ƿѹ
- __SYS_STATUS_ALARM_BYTES_SET(alka_under);
- else if (__SYS_STATUS_BYTES_GET(alka_under) && alka_vcc >= 4.6f)
- __SYS_STATUS_BYTES_STATUS(alka_under, RESET, AV_ALKA_UNDER);
+ 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;
+ }
-
- if (__SYS_STATUS_BYTES_GET(alka_remove) && alka_vcc >= 3.0f &&
- GPIO_ReadInputDataBit(ALKALI_PWR_DOWN_PORT,ALKALI_PWR_DOWN_PIN) == Bit_SET) // ����Ƴ�/��������
- __SYS_STATUS_BYTES_STATUS(alka_remove, RESET, AV_ALKA_REMOVE);
+ /*****���ݵ�ѹֵ����ٷֱȣ����簴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;
+ }
+
+ }
- if(GPIO_ReadOutputDataBit(LCD_PWR_GPIO_PORT,LCD_PWR_PIN))
- LCD_BACKLIGHT_SELECT(__SYS_STATUS_BYTES_GET(alka_low));
+}
+
+/**MCU�¶�״̬�ж�*/
+void MCU_temperature_Status(float mcu_tem,PWR_VOL_T *pwr_vol_p)
+{
+
}
-/*��Դ����ʱ������*/
-void Power_PeriodTimeSet(PWR_VOL_T *pwr_vol_p_p, __IO SYS_STATUS_T *sys_state_p)
+//﮵��ʹ��ʱ�����
+void LithBatUseTimeCalculate(BAT_PARA_T *bat_para_p)
{
- static uint8_t alka_last_state[3] = {0}, lith_last_state[3] = {0};
- static uint16_t alka_get_power_period_time_set = 720, lith_get_power_period_time_set = 720;
- /*���*/
- if (alka_last_state[0] != sys_state_p->alka_low) // ���͵�
- {
- if (sys_state_p->alka_low)
- alka_get_power_period_time_set = 360; // 6Сʱ
- else
- alka_get_power_period_time_set = 720;
- alka_last_state[0] = sys_state_p->alka_low;
- __PERIOD_FIRST_CALC_FLAG_SET(alka_get_power_period);
- }
- if (alka_last_state[1] != sys_state_p->alka_under)
- {
- if (sys_state_p->alka_under)
- alka_get_power_period_time_set = 60; // 1Сʱ
- else
- alka_get_power_period_time_set = 720;
- alka_last_state[1] = sys_state_p->alka_under;
- __PERIOD_FIRST_CALC_FLAG_SET(alka_get_power_period);
- }
- if (alka_last_state[2] != sys_state_p->alka_remove)
- {
- if (sys_state_p->alka_remove)
- alka_get_power_period_time_set = 10; // 1/6Сʱ
- else
- alka_get_power_period_time_set = 720;
- alka_last_state[2] = sys_state_p->alka_remove;
- __PERIOD_FIRST_CALC_FLAG_SET(alka_get_power_period);
- }
- /*﮵�*/
- if (lith_last_state[0] != sys_state_p->lith_low)
- {
- if (sys_state_p->lith_low)
- lith_get_power_period_time_set = 360; // 6Сʱ
- else
- lith_get_power_period_time_set = 720;
- lith_last_state[0] = sys_state_p->lith_low;
- __PERIOD_FIRST_CALC_FLAG_SET(lith_get_power_period);
- }
- if (lith_last_state[1] != sys_state_p->lith_under)
- {
- if (sys_state_p->lith_under)
- lith_get_power_period_time_set = 60; // 1Сʱ
- else
- lith_get_power_period_time_set = 720;
- lith_last_state[1] = sys_state_p->lith_under;
- __PERIOD_FIRST_CALC_FLAG_SET(lith_get_power_period);
- }
- if (lith_last_state[2] != sys_state_p->lith_remove)
- {
- if (sys_state_p->lith_remove)
- lith_get_power_period_time_set = 10; // 1/6Сʱ
- else
- lith_get_power_period_time_set = 720;
- lith_last_state[2] = sys_state_p->lith_remove;
- __PERIOD_FIRST_CALC_FLAG_SET(lith_get_power_period);
- }
- if (calendar_g.Second == 0x10 &&
- Func_PeriodStartHandler(0, alka_get_power_period_time_set, &period_para_g.alka_get_power_period.period_flag, &period_para_g.alka_get_power_period.last_time_m, &calendar_g))
- pwr_vol_p_p->alka_flag = AMS_PERIOD;
- if (
- calendar_g.Second == 0x12 &&
- Func_PeriodStartHandler(0, lith_get_power_period_time_set, &period_para_g.lith_get_power_period.period_flag, &period_para_g.lith_get_power_period.last_time_m, &calendar_g))
- pwr_vol_p_p->lith_flag = LMS_PERIOD;
- if (calendar_g.Second == 0x14 &&
- Func_PeriodStartHandler(0, 30, &period_para_g.mcu_get_temperature_period.period_flag, &period_para_g.mcu_get_temperature_period.last_time_m, &calendar_g))
- pwr_vol_p_p->mcu_temp_flag = SET;
+ 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 ++;
+
+ //? �洢���ݶ�ÿСʱ�洢һ��
+ }
+
}
-uint8_t sys_bst_flag = 0;
-void Sys_BST_LithStatus(float lith_vcc)
+#define EX_PWR_CONTINUE_TIME 5 //������ʱ�䣬����X������Ч
+/*��õ�Դ״̬��﮵硢��硢��硢MCU�¶�*/
+void GetPwrStatusPro(PWR_VOL_T *pwr_vol_p)
{
- if(first_power_get_cnt_g >= FIRST_POWER_TIM_MAX)
- {
- if(lith_vcc >= 3.2f)
- {
- SYS_BST_DIS;
- sys_bst_flag = 0;
- }
- else if(lith_vcc < /*3.1f*/3.0f)
- {
- SYS_BST_EN;
- sys_bst_flag = 1;
+ 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); //?﮵����֮����ҪһЩ������������ʵʱ��������洢һ��
}
}
+
+ //������ȷ��
+ 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);
+ }
+ }
+
+
+
+ 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 Get_Double_Bat_Voltage(PWR_VOL_T *pwr_vol_p)
+
+//�����������Դ�����ʼ���� �״�����жϣ��״ε�ص�ѹ�ɼ�
+void PowerManagrInit(void)
{
- /*Զ��������*/
- if((gprs_soft_para_g.gprs_state != GPRS_IDLE) && (gprs_soft_para_g.gprs_state != GPRS_RESTART))
- {
- if(__SYS_STATUS_BYTES_GET(lith_under) || __SYS_STATUS_BYTES_GET(lith_remove))
- {
- __SYS_DELAY_SEC_TIME_SET_(gprs_timeout_para, 0);//��ʱʱ�����㣬��������ʱflag
- gprs_soft_para_g.gprs_state = GPRS_CLOSE_PWR;//�ر�GPRS��Դ
- __SYS_DELAY_SEC_TIME_SET_(gprs_delay_para, 1);
- }
+ 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);
}
- /*���ڲɼ���ѹ*/
- Power_PeriodTimeSet(pwr_vol_p, &sys_admin_g.sys_admin.state_bytes);
- if(LargeCurrent_LimitingProcess() == 3)
- {
- if (pwr_vol_p->alka_flag != AMS_NONE) // �ɼ����
- {
- pwr_vol_p->alka_vcc = Get_Alka_Bat_Voltage();
- sys_realtime_data_g.state_para_s.alka_vcc = pwr_vol_p->alka_vcc * 10;
-#ifdef RS232_PRINTF
- printf("alka vcc = %.2f \r\n", pwr_vol_p->alka_vcc);
-#endif
- Alka_Bat_Voltage_Status(pwr_vol_p->alka_vcc); // ��Դ����״̬�ж�
- if((pwr_vol_p->alka_flag == AMS_GPRS_BEFORE) && (pwr_vol_p->alka_vcc >= 4.5f))
- gprs_soft_para_g.gprs_state = GPRS_OPEN_PWR;
- else if(pwr_vol_p->alka_flag == AMS_GPRS_BEFORE)
- sys_mode_conversion_show_g = ERROR_1;
- pwr_vol_p->alka_flag = AMS_NONE;
- }
- if (pwr_vol_p->lith_flag != LMS_NONE) // �ɼ�﮵�
- {
- pwr_vol_p->lith_vcc = Get_Lith_Bat_Voltage();
- sys_realtime_data_g.state_para_s.lith_vcc = pwr_vol_p->lith_vcc * 10; // float���ͷŴ�ʮ�����uint8_t����
-#ifdef RS232_PRINTF
- printf("lith vcc = %.2f \r\n", pwr_vol_p->lith_vcc);
-#endif
- Lith_Bat_Voltage_Status(pwr_vol_p->lith_vcc,&pwr_vol_p->lith_vcc_per); // ��Դ����״̬�ж�
-#ifdef CAL_TEST
- Sys_BST_LithStatus(pwr_vol_p->lith_vcc);
-#endif
- if((pwr_vol_p->lith_flag == LMS_OPEN_VALVE_BEFORE) && (pwr_vol_p->lith_vcc >= 2.9f))
- sys_valve_ctl_id_g = V_KEY_OP;
- else if(pwr_vol_p->lith_flag == LMS_OPEN_VALVE_BEFORE)
- sys_mode_conversion_show_g = ERROR_1;
- pwr_vol_p->lith_flag = LMS_NONE;
- }
- if (pwr_vol_p->mcu_temp_flag == SET) // �ɼ�MCU�¶�
- {
- pwr_vol_p->mcu_temp_flag = RESET;
- sys_realtime_data_g.state_para_s.cpu_temperature = pwr_vol_p->mcu_temperature = Get_Mcu_Temp();
- Mcu_TempStateAlarmHandler(pwr_vol_p->mcu_temperature, &sys_temp_alarm_cfg_g);
- }
+
+ 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);
}
- Remaining_WorkingTime_CalculateProcess(pwr_vol_p->lith_vcc_per,pwr_vol_p->lith_vcc);
-}
-
-
-
+
+ //�����,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);
+ }
+
+
+}
\ No newline at end of file
--
Gitblit v1.9.3