From 267016d6cf472dd4c8d2a66dc9ed800b55997fea Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Sat, 11 May 2024 17:31:40 +0800
Subject: [PATCH] 继续完善电源管理
---
Function/POWER_MANAGE/power_manage.c | 148 +++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 136 insertions(+), 12 deletions(-)
diff --git a/Function/POWER_MANAGE/power_manage.c b/Function/POWER_MANAGE/power_manage.c
index 6b16adb..18440b0 100644
--- a/Function/POWER_MANAGE/power_manage.c
+++ b/Function/POWER_MANAGE/power_manage.c
@@ -9,8 +9,11 @@
#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;
@@ -108,7 +111,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)
{
@@ -142,7 +145,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;
@@ -203,24 +206,94 @@
}
-/*��ص�ѹ״̬�ж�*/
-#define LITH_LOW_EFFECTIVE_VOLTAGE_VALUE (3.2f - 2.9f)
-void Lith_Bat_Voltage_Status(float lith_vcc,int8_t * pLith_vcc_per)
+/*��ص�ѹ״̬�ж�,״̬���ϱ����Ҫ������ֵ+0.2V����ֹ״̬����ֵ��������*/
+void Lith_Bat_Voltage_Status(float lith_vcc,PWR_VOL_T *pwr_vol_p)
{
-
+ 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;
+ }
}
-void Alka_Bat_Voltage_Status(float alka_vcc)
+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;
+ }
+
+ if(pwr_vol_p->alka_vcc_status == BAT_V_DOWN){
+ pwr_vol_p->lith_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
+ }else
+ {
+ pwr_vol_p->lith_vcc_per = 0;
+ }
+
+ }
+
+}
+/**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;
+
+ bat_para_p->lith_bat_used_hour ++;
+
+ //? �洢���ݶ�ÿСʱ�洢һ��
+ }
+
+
+}
-/*��õ�ص�ѹ*/
-void GetBatVoltagePro(PWR_VOL_T *pwr_vol_p)
+/*��õ�Դ״̬��﮵硢��硢��硢MCU�¶�*/
+void GetPwrStatusPro(PWR_VOL_T *pwr_vol_p)
{
const uint16_t DELAY_TIME = 5;
static uint16_t delay_time_cnt = 0;
@@ -246,20 +319,71 @@
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 != LMS_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�¶Ȼ�ȡ
+
}
+
+ /*���ʹ��ʱ����㣬�ٸ��ݵ�ѹ״̬��ʹ��ʱ��״̬�ۺϵó����յĵ��״̬*/
+ if(__SYS_STATUS_BYTES_GET(power_state) ==RESET)
+ LithBatUseTimeCalculate(&bat_para_g);
+
+
+
+ /****���ʵʱ���******/
}
-
+//�����������Դ�����ʼ���� �״�����жϣ��״ε�ص�ѹ�ɼ�
+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������
+ if(HWIDO_EX_PWR_IO_READ == Bit_RESET){
+ delay_ms(10);
+ if(HWIDO_EX_PWR_IO_READ == Bit_RESET){
+ __SYS_STATUS_BYTES_STATUS(power_state, SET, ALARM_ID_NORMAL);
+ }else{
+ __SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL);
+ }
+ }else{
+ __SYS_STATUS_BYTES_STATUS(power_state, RESET, ALARM_ID_NORMAL);
+ }
+
+
+}
\ No newline at end of file
--
Gitblit v1.9.3