代码暂存 添加低电压判断及处理逻辑
This commit is contained in:
parent
bf287c5b8a
commit
6e091395d9
|
@ -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);\
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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) {
|
||||
// 确认是真实按键事件
|
||||
// 阻止睡眠
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue