From 6e091395d974c609c3ba196d0f06a433deec4f77 Mon Sep 17 00:00:00 2001 From: czq <860517298@qq.com> Date: Thu, 15 May 2025 15:15:37 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9A=82=E5=AD=98=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BD=8E=E7=94=B5=E5=8E=8B=E5=88=A4=E6=96=AD?= =?UTF-8?q?=E5=8F=8A=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- bsp/inc/bsp_led.h | 4 ++-- bsp/inc/bsp_valve.h | 7 ++++--- bsp/src/bsp_adc.c | 20 ++++++++++---------- bsp/src/bsp_bmp390.c | 14 ++++++++------ bsp/src/bsp_valve.c | 27 +++++++++++++++++++++------ 6 files changed, 46 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index ae21f9e..926388b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ 1.电机停止需判断COIL_ADC优化 -2.低电压判断 +2.低电压判断及后续处理 3.暂时屏蔽4G \ No newline at end of file diff --git a/bsp/inc/bsp_led.h b/bsp/inc/bsp_led.h index a74bffe..6b11a2c 100644 --- a/bsp/inc/bsp_led.h +++ b/bsp/inc/bsp_led.h @@ -12,8 +12,8 @@ #define LED_VALVE_R_PIN GPIO_Pin_8 #define LED_VALVE_G_PIN GPIO_Pin_9 -#define LED_ALARM_PIN GPIO_Pin_12 -#define LED_VBAT_PIN GPIO_Pin_1 +#define LED_ALARM_PIN GPIO_Pin_1 +#define LED_VBAT_PIN GPIO_Pin_12 /*********************************************************************************************** #define LED_VALVE_OPEN {GPIOA_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN);\ diff --git a/bsp/inc/bsp_valve.h b/bsp/inc/bsp_valve.h index bcbcfce..c4d6cfa 100644 --- a/bsp/inc/bsp_valve.h +++ b/bsp/inc/bsp_valve.h @@ -31,18 +31,19 @@ extern tmosTaskID vavle_task_id; #define VAVLE_LOOP_DECT_EVT (0x0001 << 8) // 循环检测 +#define VAVLE_LOW_VBAT_LED_OFF_EVT (0x0001 << 10) // 低电压LED关闭事件 #define VALVE_LOW_VBAT_ALARM_PERIOD_MS (1600 * 60 * 10) #define VALVE_DECT_PERIOD_MS (1600 * 60 * 10) -#define CHARGE_TIME_MS (1000) +#define CHARGE_TIME_MS (1500) // 2.2V -#define LOW_VABAT_ALARM_VALUE 22 +#define LOW_VABAT_ALARM_VALUE 24 -#define LOW_VABAT_CLOSE_VALUE 20 +#define LOW_VABAT_CLOSE_VALUE 22 #define FRAME_HEADER 0xAA diff --git a/bsp/src/bsp_adc.c b/bsp/src/bsp_adc.c index afd3d5c..ddd5650 100644 --- a/bsp/src/bsp_adc.c +++ b/bsp/src/bsp_adc.c @@ -166,18 +166,16 @@ void BSP_VBAT_Init(void) vbat_task_id = TMOS_ProcessEventRegister(VBAT_ProcessEvent); tmos_set_event(vbat_task_id, VBAT_EVT_START); } -uint16_t adcBuff[40]; -volatile uint8_t adclen; -volatile uint8_t DMA_end = 0; -uint32_t countadc = 0; -uint16_t min_number = 0; -uint16_t max_number = 0; -double voltage = 0; uint8_t BSP_ReadVbat(void) { +uint16_t adcBuff[40]; +uint16_t min_number = 0; +uint16_t max_number = 0; uint8_t i; uint32_t CountBat = 0; - ADC_InterBATSampInit(); + // ADC_InterBATSampInit(); + ADC_GPIO_Init(); + ADC_ChannelCfg(0); DelayUs(1); ADC_ExcutSingleConver(); DelayUs(1); @@ -198,8 +196,10 @@ uint8_t BSP_ReadVbat(void) } logDebug("min_number = %d, max_number = %d", min_number, max_number); CountBat = (CountBat - min_number - max_number) / 18; // ɾСֵ - CountBat = CountBat * 2.05078125 - 3150; - uint8_t vbat = (uint8_t)(CountBat / 100); + // CountBat = CountBat * 2.05078125 - 3150; + // uint8_t vbat = (uint8_t)(CountBat / 100); + uint32_t vbat_mV = ((CountBat * 1000) / 1024 - 1000) * 105 / 100; + uint8_t vbat = (vbat_mV * 2) / 100; logDebug("AverageCountBat = %dmV, vbat = %d(100mV)", CountBat, vbat); return vbat; } \ No newline at end of file diff --git a/bsp/src/bsp_bmp390.c b/bsp/src/bsp_bmp390.c index 24f5273..8881667 100644 --- a/bsp/src/bsp_bmp390.c +++ b/bsp/src/bsp_bmp390.c @@ -6,6 +6,7 @@ #include "log.h" #include "bsp_ml307r.h" #include "SLEEP.h" +#include "bsp_valve.h" uint8_t flag; uint8_t volatile fault_state = 0; @@ -738,7 +739,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events) { VALVE_CLOSE(); fault_state = 1; - tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(1000)); + tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS)); logDebug("Over pressure state !"); } //Ƿѹ @@ -746,7 +747,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events) { VALVE_CLOSE(); fault_state = 2; - tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(1000)); + tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS)); logDebug("Under voltage status !"); } // @@ -754,7 +755,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events) { VALVE_CLOSE(); fault_state = 3; - tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(1000)); + tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS)); logDebug("Over current status !"); } } @@ -763,13 +764,14 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events) if(motor_flag == 1) { motor_flag = 0; + gValveData.switch_status = kOpened; LED_VALVE_OPEN; VALVE_OPEN(); // DelayMs(1000); IotFlag_t.Valve_Open_flag = 1; fault_state = 0; logDebug("motor/LED open!!!"); - tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(1000)); + tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS)); } else if(motor_flag == 2) { @@ -779,7 +781,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events) // DelayMs(1000); fault_state = 4; logDebug("motor/LED close!!!"); - tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(1000)); + tmos_start_task(check_task_id, MOTOR_STOP_EVT, MS1_TO_SYSTEM_TIME(CHARGE_TIME_MS)); } tmos_start_task(check_task_id, CHECK_EVT_START, MS1_TO_SYSTEM_TIME(200)); //100 return (events ^ CHECK_EVT_START); @@ -813,7 +815,7 @@ void GPIOA_IRQHandler(void) // ǷΪʵ¼ͨȷϵƽǷĽӽ0V if (GPIOA_ReadPortPin(KEY_A_PIN) == 0) { // ٴȷǷΪ͵ƽӽ0V - DelayUs(50); // ʱ + DelayUs(10); // ʱ50 if (GPIOA_ReadPortPin(KEY_A_PIN) == 0) { // ȷʵ¼ // ֹ˯ diff --git a/bsp/src/bsp_valve.c b/bsp/src/bsp_valve.c index fa12ef2..20a0f66 100644 --- a/bsp/src/bsp_valve.c +++ b/bsp/src/bsp_valve.c @@ -350,12 +350,16 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀 logDebug("VAVLE_LOOP_DECT_EVT"); gValveData.bat = BSP_ReadVbat(); + logDebug("BSP_ReadVbat %d",gValveData.bat); // 电压过低就关阀 if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE) { - gValveData.switch_status = kClosed; + logDebug("gValveData.switch_status %d",gValveData.switch_status); + if(gValveData.switch_status != kClosed) + { tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT); + } } else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) { @@ -368,17 +372,22 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀 if (events & VAVLE_LOW_VBAT_ALARM_EVT) // 低电压报警事件 { + gValveData.bat = BSP_ReadVbat(); + if (gValveData.bat > 25) + { + return (events ^ VAVLE_LOW_VBAT_ALARM_EVT); + } logDebug("VAVLE_LOW_VBAT_ALARM_EVT"); // 记录低电压报警事件的调试信息 - // 以下是被注释掉的代码块 - // BSP_BlockSleep(); // 阻止系统进入睡眠模式 + BSP_BlockSleep(); // 阻止系统进入睡眠模式 + LED_VBAT_OPEN; // BSP_RequestBoost(); // 请求提升系统性能 - // LED_ALL_OFF_DEINIT; // 关闭所有LED并反初始化 + tmos_start_task(vavle_task_id, VAVLE_LOW_VBAT_LED_OFF_EVT, MS1_TO_SYSTEM_TIME(500)); // LED_Y_ON; // 打开黄色LED // BEEP_ON; // 打开蜂鸣器 - + tmos_start_task(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT, MS1_TO_SYSTEM_TIME(5000)); // VALVE_LOW_VBAT_ALARM_PERIOD_MS // DelayMs(10); // 延时10毫秒 // LED_ALL_OFF_DEINIT; // 关闭所有LED并反初始化 @@ -393,6 +402,12 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀 return (events ^ VAVLE_LOW_VBAT_ALARM_EVT); // 返回未处理的事件 } + if (events & VAVLE_LOW_VBAT_LED_OFF_EVT) // 低电压LED关闭事件 + { + LED_VBAT_CLOSE; + BSP_RequestSleep(); // 允许系统进入睡眠模式 + return (events ^ VAVLE_LOW_VBAT_LED_OFF_EVT); + } return 0; } @@ -414,7 +429,7 @@ void BSP_VAVLE_Init(void) // 阀门初始化函数 BSP_MOTOR_Init(); // 初始化电机 - tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(VALVE_DECT_PERIOD_MS)); + tmos_start_task(vavle_task_id, VAVLE_LOOP_DECT_EVT, MS1_TO_SYSTEM_TIME(1000)); //VALVE_DECT_PERIOD_MS logInfo("BSP_Valve_Init"); }