代码暂存 添加低电压判断及处理逻辑
This commit is contained in:
parent
bf287c5b8a
commit
6e091395d9
|
@ -1,3 +1,3 @@
|
||||||
1.电机停止需判断COIL_ADC优化
|
1.电机停止需判断COIL_ADC优化
|
||||||
2.低电压判断
|
2.低电压判断及后续处理
|
||||||
3.暂时屏蔽4G
|
3.暂时屏蔽4G
|
|
@ -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);\
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
|
@ -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) {
|
||||||
// 确认是真实按键事件
|
// 确认是真实按键事件
|
||||||
// 阻止睡眠
|
// 阻止睡眠
|
||||||
|
|
|
@ -350,12 +350,16 @@ 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)
|
||||||
{
|
{
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue