From 06eb862d46c3d6c2aab6ae9853eb84a59d6b89fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B7=E5=BA=8A=E5=B0=B1=E7=8A=AF=E5=9B=B0?=
<11730503+psx123456@user.noreply.gitee.com>
Date: Thu, 25 Sep 2025 17:18:23 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BB=E9=A2=91=E4=B8=BA17?=
=?UTF-8?q?0M=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=BC=82=E5=B8=B8=E6=A3=80?=
=?UTF-8?q?=E6=B5=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
APP/businessLogic/Src/task.c | 63 ++++++++++-----
Core/Src/adc.c | 4 +-
Core/Src/main.c | 8 +-
Core/Src/spi.c | 2 +-
Core/Src/tim.c | 12 +--
EWARM/chargeController.ewd | 148 +++++++++++++++++------------------
EWARM/stm32g431xx_flash.icf | 2 +-
chargeController.ioc | 82 +++++++++----------
8 files changed, 175 insertions(+), 146 deletions(-)
diff --git a/APP/businessLogic/Src/task.c b/APP/businessLogic/Src/task.c
index 3bafcb6..bd249cc 100644
--- a/APP/businessLogic/Src/task.c
+++ b/APP/businessLogic/Src/task.c
@@ -34,7 +34,7 @@ static STR_TimeSliceOffset m_wdi;
static void Task_wdi(void);
/* 刷新寄存器中的数据 */
-#define refreshJudgeData_reloadVal 1000 /* 任务执行间隔 */
+#define refreshJudgeData_reloadVal 200 /* 任务执行间隔 */
#define refreshJudgeData_offset 0 /* 任务执行偏移量 */
static STR_TimeSliceOffset m_refreshJudgeData;
static void Task_refreshJudgeData(void);
@@ -355,48 +355,75 @@ void Task_refreshJudgeData(void)
}
/* 反向充电电流检测 */
+ static uint8_t ExChargeCurrNum = 0;
if (getExChargeCurr() > g_cfgParameter.reverseChargProtectionCurr) {
- setPowerOutput(FALSE);
- insertEventsOrderRecord(InputProtection);
+ ExChargeCurrNum++;
+ if (ExChargeCurrNum > 5) {
+ setPowerOutput(FALSE);
+ insertEventsOrderRecord(InputProtection);
+ ExChargeCurrNum = 0;
+ }
+ }
+ else {
+ ExChargeCurrNum = 0;
}
/* 充电输入电压过高 */
+ static uint8_t solarInCircuitVoltageNum = 0;
if (getSolarInCircuitVoltage() >= g_cfgParameter.maxOpenSolarOutputCircuitV) {
// log_info("getSolarInCircuitVoltage : %f", getSolarInCircuitVoltage());
// log_info("g_cfgParameter.maxOpenSolarOutputCircuitV : %f", g_cfgParameter.maxOpenSolarOutputCircuitV);
- TimeSliceOffset_Unregister(&m_startControl);
- m_startControl.runFlag = 0;
- stopChargWork();
- insertEventsOrderRecord(overInputVolt);
+ solarInCircuitVoltageNum++;
+ if (solarInCircuitVoltageNum > 3) {
+ TimeSliceOffset_Unregister(&m_startControl);
+ m_startControl.runFlag = 0;
+ stopChargWork();
+ insertEventsOrderRecord(overInputVolt);
+ solarInCircuitVoltageNum = 0;
+ }
+ }
+ else {
+ solarInCircuitVoltageNum = 0;
}
- static uint8_t num = 0;
- if (20 == num++) {
- num = 0;
+ static uint8_t socNum = 0;
+ if (50 == socNum++) {
+ socNum = 0;
setSOC();
}
/* 欠压保护 */
/* 连续两次电池电压过低,则关闭输出 */
static uint8_t numLow = 0;
+ static uint8_t numHigh = 0;
static uint8_t volageLowFlag = 0;
- if (getBatteryState()
+ if (!volageLowFlag
+ && getBatteryState()
&& (getBatteryVoltage() < g_cfgParameter.underVoltageProtection)
&& (getChargBatteryCurrent() < 0.5f)) {
numLow++;
+ if (numLow == 20) {
+ setPowerOutput(FALSE);
+ insertEventsOrderRecord(underVoltageProtection);
+ volageLowFlag = 1;
+ numLow = 0;
+ }
}
else {
numLow = 0;
}
- if (numLow == 2) {
- setPowerOutput(FALSE);
- insertEventsOrderRecord(underVoltageProtection);
- volageLowFlag = 1;
- }
+
/* 电压过低后,再次恢复正常电压,则打开输出接口 */
if (volageLowFlag && getBatteryState() && getBatteryVoltage() > g_cfgParameter.underVoltageProtection + 0.5f) {
- setPowerOutput(TRUE);
- volageLowFlag = 0;
+ numHigh++;
+ if (numHigh == 20) {
+ setPowerOutput(TRUE);
+ volageLowFlag = 0;
+ numHigh = 0;
+ }
+ }
+ else {
+ numHigh = 0;
}
}
diff --git a/Core/Src/adc.c b/Core/Src/adc.c
index 86edbc8..2732b20 100644
--- a/Core/Src/adc.c
+++ b/Core/Src/adc.c
@@ -46,7 +46,7 @@ void MX_ADC1_Init(void)
/** Common config
*/
hadc1.Instance = ADC1;
- hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
+ hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc1.Init.Resolution = ADC_RESOLUTION_12B;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.GainCompensation = 0;
@@ -136,7 +136,7 @@ void MX_ADC2_Init(void)
/** Common config
*/
hadc2.Instance = ADC2;
- hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
+ hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
hadc2.Init.Resolution = ADC_RESOLUTION_12B;
hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc2.Init.GainCompensation = 0;
diff --git a/Core/Src/main.c b/Core/Src/main.c
index 7d18c24..7c0fc60 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -142,7 +142,7 @@ void SystemClock_Config(void)
/** Configure the main internal regulator output voltage
*/
- HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);
+ HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1_BOOST);
/** Configure LSE Drive Capability
*/
@@ -157,8 +157,8 @@ void SystemClock_Config(void)
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1;
- RCC_OscInitStruct.PLL.PLLN = 18;
+ RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV2;
+ RCC_OscInitStruct.PLL.PLLN = 85;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
@@ -176,7 +176,7 @@ void SystemClock_Config(void)
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
- if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
{
Error_Handler();
}
diff --git a/Core/Src/spi.c b/Core/Src/spi.c
index 71e6571..3e5e19c 100644
--- a/Core/Src/spi.c
+++ b/Core/Src/spi.c
@@ -44,7 +44,7 @@ void MX_SPI1_Init(void)
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
- hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
+ hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
diff --git a/Core/Src/tim.c b/Core/Src/tim.c
index d9c0e0f..bdcbec3 100644
--- a/Core/Src/tim.c
+++ b/Core/Src/tim.c
@@ -47,7 +47,7 @@ void MX_TIM3_Init(void)
htim3.Instance = TIM3;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim3.Init.Period = 719;
+ htim3.Init.Period = 169;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
@@ -88,7 +88,7 @@ void MX_TIM6_Init(void)
/* USER CODE END TIM6_Init 1 */
htim6.Instance = TIM6;
- htim6.Init.Prescaler = 71;
+ htim6.Init.Prescaler = 169;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 9;
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@@ -121,7 +121,7 @@ void MX_TIM7_Init(void)
/* USER CODE END TIM7_Init 1 */
htim7.Instance = TIM7;
- htim7.Init.Prescaler = 71;
+ htim7.Init.Prescaler = 169;
htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
htim7.Init.Period = 99;
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@@ -155,9 +155,9 @@ void MX_TIM15_Init(void)
/* USER CODE END TIM15_Init 1 */
htim15.Instance = TIM15;
- htim15.Init.Prescaler = 1;
+ htim15.Init.Prescaler = 3;
htim15.Init.CounterMode = TIM_COUNTERMODE_UP;
- htim15.Init.Period = 35999;
+ htim15.Init.Period = 42499;
htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim15.Init.RepetitionCounter = 0;
htim15.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@@ -193,7 +193,7 @@ void MX_TIM16_Init(void)
/* USER CODE END TIM16_Init 1 */
htim16.Instance = TIM16;
- htim16.Init.Prescaler = 71;
+ htim16.Init.Prescaler = 169;
htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
htim16.Init.Period = 999;
htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
diff --git a/EWARM/chargeController.ewd b/EWARM/chargeController.ewd
index c6ca389..7d0416d 100644
--- a/EWARM/chargeController.ewd
+++ b/EWARM/chargeController.ewd
@@ -36,7 +36,7 @@
@@ -294,7 +294,7 @@
@@ -1905,7 +1905,7 @@