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

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优化
2.低电压判断
2.低电压判断及后续处理
3.暂时屏蔽4G

View File

@ -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);\

View File

@ -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

View File

@ -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;
}

View File

@ -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) {
// 确认是真实按键事件
// 阻止睡眠

View File

@ -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");
}