代码暂存 添加低电压判断及处理逻辑

This commit is contained in:
常正强 2025-05-15 15:15:37 +08:00
parent bf287c5b8a
commit 6e091395d9
6 changed files with 46 additions and 28 deletions

View File

@ -1,3 +1,3 @@
1.电机停止需判断COIL_ADC优化 1.电机停止需判断COIL_ADC优化
2.低电压判断 2.低电压判断及后续处理
3.暂时屏蔽4G 3.暂时屏蔽4G

View File

@ -12,8 +12,8 @@
#define LED_VALVE_R_PIN GPIO_Pin_8 #define LED_VALVE_R_PIN GPIO_Pin_8
#define LED_VALVE_G_PIN GPIO_Pin_9 #define LED_VALVE_G_PIN GPIO_Pin_9
#define LED_ALARM_PIN GPIO_Pin_12 #define LED_ALARM_PIN GPIO_Pin_1
#define LED_VBAT_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);\ #define LED_VALVE_OPEN {GPIOA_ResetBits(LED_VALVE_R_PIN | LED_VALVE_G_PIN | LED_VALVE_Y_PIN);\

View File

@ -31,18 +31,19 @@ extern tmosTaskID vavle_task_id;
#define VAVLE_LOOP_DECT_EVT (0x0001 << 8) // 循环检测 #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_LOW_VBAT_ALARM_PERIOD_MS (1600 * 60 * 10)
#define VALVE_DECT_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 // 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 #define FRAME_HEADER 0xAA

View File

@ -166,18 +166,16 @@ void BSP_VBAT_Init(void)
vbat_task_id = TMOS_ProcessEventRegister(VBAT_ProcessEvent); vbat_task_id = TMOS_ProcessEventRegister(VBAT_ProcessEvent);
tmos_set_event(vbat_task_id, VBAT_EVT_START); 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) uint8_t BSP_ReadVbat(void)
{ {
uint16_t adcBuff[40];
uint16_t min_number = 0;
uint16_t max_number = 0;
uint8_t i; uint8_t i;
uint32_t CountBat = 0; uint32_t CountBat = 0;
ADC_InterBATSampInit(); // ADC_InterBATSampInit();
ADC_GPIO_Init();
ADC_ChannelCfg(0);
DelayUs(1); DelayUs(1);
ADC_ExcutSingleConver(); ADC_ExcutSingleConver();
DelayUs(1); DelayUs(1);
@ -198,8 +196,10 @@ uint8_t BSP_ReadVbat(void)
} }
logDebug("min_number = %d, max_number = %d", min_number, max_number); logDebug("min_number = %d, max_number = %d", min_number, max_number);
CountBat = (CountBat - min_number - max_number) / 18; // 删除最小与最大值 CountBat = (CountBat - min_number - max_number) / 18; // 删除最小与最大值
CountBat = CountBat * 2.05078125 - 3150; // CountBat = CountBat * 2.05078125 - 3150;
uint8_t vbat = (uint8_t)(CountBat / 100); // 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); logDebug("AverageCountBat = %dmV, vbat = %d(100mV)", CountBat, vbat);
return vbat; return vbat;
} }

View File

@ -6,6 +6,7 @@
#include "log.h" #include "log.h"
#include "bsp_ml307r.h" #include "bsp_ml307r.h"
#include "SLEEP.h" #include "SLEEP.h"
#include "bsp_valve.h"
uint8_t flag; uint8_t flag;
uint8_t volatile fault_state = 0; uint8_t volatile fault_state = 0;
@ -738,7 +739,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
{ {
VALVE_CLOSE(); VALVE_CLOSE();
fault_state = 1; 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 !"); logDebug("Over pressure state !");
} }
//欠压检测 //欠压检测
@ -746,7 +747,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
{ {
VALVE_CLOSE(); VALVE_CLOSE();
fault_state = 2; 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 !"); logDebug("Under voltage status !");
} }
//过流检测 //过流检测
@ -754,7 +755,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
{ {
VALVE_CLOSE(); VALVE_CLOSE();
fault_state = 3; 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 !"); logDebug("Over current status !");
} }
} }
@ -763,13 +764,14 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
if(motor_flag == 1) if(motor_flag == 1)
{ {
motor_flag = 0; motor_flag = 0;
gValveData.switch_status = kOpened;
LED_VALVE_OPEN; LED_VALVE_OPEN;
VALVE_OPEN(); VALVE_OPEN();
// DelayMs(1000); // DelayMs(1000);
IotFlag_t.Valve_Open_flag = 1; IotFlag_t.Valve_Open_flag = 1;
fault_state = 0; fault_state = 0;
logDebug("motor/LED open!!!"); 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) else if(motor_flag == 2)
{ {
@ -779,7 +781,7 @@ uint16_t Check_ProcessEvent(uint8_t task_id, uint16_t events)
// DelayMs(1000); // DelayMs(1000);
fault_state = 4; fault_state = 4;
logDebug("motor/LED close!!!"); 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 tmos_start_task(check_task_id, CHECK_EVT_START, MS1_TO_SYSTEM_TIME(200)); //100
return (events ^ CHECK_EVT_START); return (events ^ CHECK_EVT_START);
@ -813,7 +815,7 @@ void GPIOA_IRQHandler(void)
// 检查是否为真实按键事件通过确认电平是否真的接近0V // 检查是否为真实按键事件通过确认电平是否真的接近0V
if (GPIOA_ReadPortPin(KEY_A_PIN) == 0) { if (GPIOA_ReadPortPin(KEY_A_PIN) == 0) {
// 再次确认是否真的为低电平接近0V // 再次确认是否真的为低电平接近0V
DelayUs(50); // ¶ÌÔÝÑÓʱ DelayUs(10); // ¶ÌÔÝÑÓʱ50
if (GPIOA_ReadPortPin(KEY_A_PIN) == 0) { if (GPIOA_ReadPortPin(KEY_A_PIN) == 0) {
// 确认是真实按键事件 // 确认是真实按键事件
// 阻止睡眠 // 阻止睡眠

View File

@ -350,13 +350,17 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
logDebug("VAVLE_LOOP_DECT_EVT"); logDebug("VAVLE_LOOP_DECT_EVT");
gValveData.bat = BSP_ReadVbat(); gValveData.bat = BSP_ReadVbat();
logDebug("BSP_ReadVbat %d",gValveData.bat);
// 电压过低就关阀 // 电压过低就关阀
if (gValveData.bat <= LOW_VABAT_CLOSE_VALUE) 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); tmos_set_event(vavle_task_id, VAVLE_CLOSE_START_EVT);
} }
}
else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE) else if (gValveData.bat <= LOW_VABAT_ALARM_VALUE)
{ {
tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT); tmos_set_event(vavle_task_id, VAVLE_LOW_VBAT_ALARM_EVT);
@ -368,17 +372,22 @@ static uint16_t VAVLE_Task_ProcessEvent(uint8_t task_id, uint16_t events) // 阀
if (events & VAVLE_LOW_VBAT_ALARM_EVT) // 低电压报警事件 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"); // 记录低电压报警事件的调试信息 logDebug("VAVLE_LOW_VBAT_ALARM_EVT"); // 记录低电压报警事件的调试信息
// 以下是被注释掉的代码块 BSP_BlockSleep(); // 阻止系统进入睡眠模式
// BSP_BlockSleep(); // 阻止系统进入睡眠模式 LED_VBAT_OPEN;
// BSP_RequestBoost(); // 请求提升系统性能 // 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 // LED_Y_ON; // 打开黄色LED
// BEEP_ON; // 打开蜂鸣器 // 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毫秒 // DelayMs(10); // 延时10毫秒
// LED_ALL_OFF_DEINIT; // 关闭所有LED并反初始化 // 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); // 返回未处理的事件 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; return 0;
} }
@ -414,7 +429,7 @@ void BSP_VAVLE_Init(void) // 阀门初始化函数
BSP_MOTOR_Init(); // 初始化电机 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"); logInfo("BSP_Valve_Init");
} }