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