From d14dd3a2106de793fbe08dc5a12cf80defd3258a Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Wed, 15 May 2024 17:34:14 +0800
Subject: [PATCH] 继续脉冲和报警线处理
---
Function/POWER_MANAGE/power_manage.c | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 157 insertions(+), 13 deletions(-)
diff --git a/Function/POWER_MANAGE/power_manage.c b/Function/POWER_MANAGE/power_manage.c
index 18440b0..683d3a4 100644
--- a/Function/POWER_MANAGE/power_manage.c
+++ b/Function/POWER_MANAGE/power_manage.c
@@ -22,12 +22,12 @@
void Power_IO_Init(void)
{
CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱ�ӣ�GPIO��ʹ�ܺ���
- OutputIO(LITHIUM_DETECTION_PORT,LITHIUM_DETECTION_PIN,OUT_PUSHPULL);
+ 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_H( ALKALI_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;
@@ -42,7 +42,7 @@
{
CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱ�ӣ�GPIO��ʹ�ܺ���
AnalogIO(LIT_ADC_PORT,LIT_ADC_PIN);//ADC_IN4
- OutputIO(LITHIUM_DETECTION_PORT,LITHIUM_DETECTION_PIN,OUT_PUSHPULL);
+ OutputIO(LITH_DETECTION_PORT,LITH_DETECTION_PIN,OUT_PUSHPULL);
// AnalogIO(LIT_PWR_UNDER_PORT,LIT_PWR_UNDER_PIN);//ADC_5
}
@@ -51,7 +51,13 @@
{
CMU_PERCLK_SetableEx(PADCLK, ENABLE); //PADʱ�ӣ�GPIO��ʹ�ܺ���
AnalogIO_H(ALK_ADC_PIN);
- OutputIO(ALKALI_DETECTION_PORT,ALKALI_DETECTION_PIN,OUT_PUSHPULL);
+ 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);
}
/******************************************
@@ -206,9 +212,11 @@
}
+#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){
@@ -228,9 +236,41 @@
}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;
@@ -254,15 +294,33 @@
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->lith_vcc_per = 0;
+ 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
+ if(fTemp > 20.0)
+ fTemp = 20;
+ else if(fTemp <0)
+ fTemp = 0;
+ pwr_vol_p->alka_vcc_per = fTemp;
}else
{
- pwr_vol_p->lith_vcc_per = 0;
+ 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;
}
}
@@ -283,15 +341,15 @@
if(bat_para_p->lith_bat_used_sec >=3600){
bat_para_p->lith_bat_used_sec = 0;
- bat_para_p->lith_bat_used_hour ++;
+ 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)
{
@@ -315,6 +373,25 @@
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;
@@ -322,7 +399,7 @@
Lith_Bat_Voltage_Status(pwr_vol_p->lith_vcc,pwr_vol_p);
}
- if((pwr_vol_p->alka_flag != LMS_NONE)&&(delay_time_cnt >= DELAY_TIME) ){
+ 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);
@@ -336,13 +413,76 @@
/*���ʹ��ʱ����㣬�ٸ��ݵ�ѹ״̬��ʹ��ʱ��״̬�ۺϵó����յĵ��״̬*/
+ /*﮵��ѹǷѹ����ϳ�Ƿѹ���ٷֱ�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);
+ //?������仯����
+ }
+ }
+ }
+
+
}
@@ -374,14 +514,18 @@
}
//�����,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);
}
--
Gitblit v1.9.3