添加启动任务,数据刷新处理任务等

This commit is contained in:
起床就犯困 2024-12-10 18:29:05 +08:00
parent df08730752
commit de2fb8134e
30 changed files with 1831 additions and 1548 deletions

View File

@ -23,6 +23,8 @@
"hd_adc.h": "c", "hd_adc.h": "c",
"hd_tim.h": "c", "hd_tim.h": "c",
"checktime.h": "c", "checktime.h": "c",
"test.h": "c" "test.h": "c",
"task.h": "c",
"other.h": "c"
} }
} }

View File

@ -1,10 +0,0 @@
#ifndef APP_TASK_H_
#define APP_TASK_H_
#include "timeSliceOffset.h"
#endif

View File

@ -2,27 +2,17 @@
#include "chargControl.h" #include "chargControl.h"
#include "parameter.h" #include "parameter.h"
#include "comm_types.h" #include "comm_types.h"
#include "abnormalManage.h"
/** /**
* @brief * @brief
* @param * @param
* @retval * @retval
* *
*/ */
void chargControl(void) void chargControl(void)
{ {
// getCVData(); checkAbnormal();
judgeYNBattery(); bl_chargControl();
chargControlMode();
if (getMPPT_Mode() == noWork) {
return;
}
if (getBatteryState()) {
BatteryChargControl();
} else {
noBatteryChargControl();
}
} }

View File

@ -1,12 +1,13 @@
#include "start.h" #include "start.h"
#include "inFlash.h"
#include "TimeSliceOffset.h" #include "TimeSliceOffset.h"
#include "Init.h"
#include "task.h"
void start(void) void start(void)
{ {
config_info_start(); Init();
TimeSliceOffset_Start(); TimeSliceOffset_Start();

View File

@ -1,9 +0,0 @@
#include "task.h"

View File

@ -3,12 +3,11 @@
#include "chargControlEnum.h" #include "chargControlEnum.h"
#include "FM_TIM.h" #include "FM_TIM.h"
#include "comm_types.h"
void getCVData(void);
void judgeYNBattery(void); void setChargControlFlag(BOOL state);
void chargControlMode(void); void bl_chargControl(void);
void BatteryChargControl(void);
void noBatteryChargControl(void);
extern void chargControl(void); extern void chargControl(void);

View File

@ -0,0 +1,54 @@
#ifndef BL_TASK_H_
#define BL_TASK_H_
#include "timeSliceOffset.h"
void task_Init(void);
/* 控制运行指示灯和喂狗 */
#define runled_reloadVal 1000 /* 任务执行间隔 */
#define runled_offset 0 /* 任务执行偏移量 */
extern STR_TimeSliceOffset m_runled;
void Task_Runled(void);
/* 喂狗 */
#define wdi_reloadVal 1000 /* 任务执行间隔 */
#define wdi_offset 100 /* 任务执行偏移量 */
extern STR_TimeSliceOffset m_wdi;
void Task_wdi(void);
/* 刷新寄存器中的数据 */
#define refreshJudgeData_reloadVal 1000 /* 任务执行间隔 */
#define refreshJudgeData_offset 0 /* 任务执行偏移量 */
extern STR_TimeSliceOffset m_refreshJudgeData;
void Task_refreshJudgeData(void);
/* 启动任务 */
#define startControl_reloadVal 5000 /* 任务执行间隔 */
#define startControl_offset 100 /* 任务执行偏移量 */
extern STR_TimeSliceOffset g_startControl;
void Task_startControl(void);
/* 软启动 */
#define softStart_reloadVal 10 /* 任务执行间隔 */
#define softStart_offset 0 /* 任务执行偏移量 */
extern STR_TimeSliceOffset m_softStart;
void Task_softStart(void);
/* 回路阻抗检测 */
#define impedanceCalculation_reloadVal 100 /* 任务执行间隔 */
#define impedanceCalculation_offset 0 /* 任务执行偏移量 */
extern STR_TimeSliceOffset m_impedanceCalculation;
void Task_impedanceCalculation(void);
#endif

View File

@ -6,9 +6,16 @@
#include "parameter.h" #include "parameter.h"
#include "FM_GPIO.h" #include "FM_GPIO.h"
#include "FM_TIM.h" #include "FM_TIM.h"
#include "uart_dev.h"
extern int getMPPT_Mode(void); extern int getMPPT_Mode(void);
/**
* @brief
* @param None
* @retval None
*
*/
void Init(void) void Init(void)
{ {
config_info_start(); config_info_start();
@ -18,6 +25,9 @@ void Init(void)
FM_GPIO_Init(); FM_GPIO_Init();
tim_Init(); tim_Init();
Init_debug_uart();
Init_BAT485_uart();
Init_GW485_uart();
start_gw485Rx_It();
start_bat485Rx_It();
} }

View File

@ -2,12 +2,13 @@
#include "abnormalManage.h" #include "abnormalManage.h"
#include "parameter.h" #include "parameter.h"
#include "capture.h" #include "capture.h"
#include "checkTime.h"
void checkAbnormal(void) void checkAbnormal(void)
{ {
// checkTimeInit();
/* 滤波 */ /* 滤波 */
adcCaptureFir(); adcCaptureFir();
@ -20,6 +21,6 @@ void checkAbnormal(void)
/* 判断异常状态 */ /* 判断异常状态 */
// checkAbnormalTime = getCheckTime();
} }

View File

@ -17,6 +17,15 @@ static void mppt_constantVoltage(float InVoltage);
static void mppt_constantVoltageNoBatteryO(float OutVoltage); static void mppt_constantVoltageNoBatteryO(float OutVoltage);
static void mppt_constantVoltageO(float OutVoltage); static void mppt_constantVoltageO(float OutVoltage);
static void judgeYNBattery(void);
static void chargControlMode(void);
static void BatteryChargControl(void);
static void noBatteryChargControl(void);
static BOOL chargControlFlag = FALSE;
static BOOL getChargControlFlag(void);
void setChargControlFlag(BOOL state);
/** /**
* @brief * @brief
* @param InVoltage * @param InVoltage
@ -86,7 +95,7 @@ void mppt_constantVoltageO(float OutVoltage)
/* 当有电池时,输出电压的曲线是先上升后下降 */ /* 当有电池时,输出电压的曲线是先上升后下降 */
if (lastDutyRatio >= getDutyRatio()) { if (lastDutyRatio >= getDutyRatio()) {
// if (lastVolt >= outVolt) { // if (lastVolt >= outVolt) {
setDutyRatio((getDutyRatio() - StepPwm)); setDutyRatio((getDutyRatio() - StepPwm));
// } else { // } else {
// g_controlParameter.dutyRatio -= StepPwm; // g_controlParameter.dutyRatio -= StepPwm;
@ -475,27 +484,16 @@ void chargControlMode(void)
if (floatChargConditions()) { if (floatChargConditions()) {
setMPPT_Mode(floatCharg); setMPPT_Mode(floatCharg);
} }
if (mpptChargConditions()) { if (mpptChargConditions()) {
setMPPT_Mode(MPPT); setMPPT_Mode(MPPT);
} }
if (constantVChargConditions()) { if (constantVChargConditions()) {
setMPPT_Mode(constantVoltage); setMPPT_Mode(constantVoltage);
} }
} }
/**
* @brief
* @param
* @retval
*
*/
void getCVData(void)
{
}
/** /**
* @brief * @brief
* @param * @param
@ -583,3 +581,44 @@ void BatteryChargControl(void)
} }
} }
BOOL getChargControlFlag(void)
{
return chargControlFlag;
}
void setChargControlFlag(BOOL state)
{
if (state == TRUE || state == FALSE) {
chargControlFlag = state;
}
}
/**
* @brief
* @param
* @retval
*
*/
void bl_chargControl(void)
{
if (getChargControlFlag() == FALSE) {
return;
}
// getCVData();
judgeYNBattery();
chargControlMode();
if (getMPPT_Mode() == noWork) {
return;
}
if (getBatteryState()) {
BatteryChargControl();
} else {
noBatteryChargControl();
}
}

View File

@ -5,8 +5,6 @@
#include "capture.h" #include "capture.h"
config_parameter g_cfgParameter = {0}; config_parameter g_cfgParameter = {0};
static otherParameter g_otherParameter = {0}; static otherParameter g_otherParameter = {0};
@ -14,7 +12,6 @@ static BOOL batteryState = FALSE; /* 有无电池(估计) */
static float dutyRatio; /* 占空比 */ static float dutyRatio; /* 占空比 */
/** /**
* @brief * @brief
* @param * @param

View File

@ -0,0 +1,212 @@
#include "task.h"
#include "inFlash.h"
#include "parameter.h"
#include "FM_GPIO.h"
#include "chargControlEnum.h"
#include "bl_chargControl.h"
/**
* @brief
* @param None
* @retval None
*
*/
void task_Init(void)
{
TimeSliceOffset_Register(&m_runled, Task_Runled, runled_reloadVal, runled_offset);
TimeSliceOffset_Register(&m_wdi, Task_wdi, wdi_reloadVal, wdi_offset);
}
/**
* @brief
* @param None
* @retval None
*
*/
STR_TimeSliceOffset m_runled;
void Task_Runled(void)
{
RUN_LED();
}
/**
* @brief
* @param None
* @retval None
*/
STR_TimeSliceOffset m_wdi;
void Task_wdi(void)
{
/* 每天复位一次复位前将电量信息写入flash中 */
static uint32_t temp = 60 * 60 * 24;
if (!(--temp)) {
temp = 0;
float tempF;
tempF = getTotalElectricityConsumption();
savetotalElectricityConsumption(&tempF);
tempF = getTotalChargCapacity();
savetotalChargCapacity(&tempF);
NVIC_SystemReset();
}
feedDog();
}
/**
* @brief
* @param None
* @retval None
*
*/
STR_TimeSliceOffset m_refreshJudgeData;
void Task_refreshJudgeData(void)
{
/* 获取数据 */
setInputVoltage();
setHighSideMosTemperature();
/* 判断有无电池 */
if (getBatteryState() == FALSE && (getChargBatteryCurrent() > 1 || getChargBatteryCurrent() < -1)
&& getOutputVoltage() < 14.2f) {
setBatteryState(TRUE);
}
/* 温度检测 */
if () {
}
}
/**
* @brief
*
*
*
* @param None
* @retval None
*
*/
STR_TimeSliceOffset g_startControl;
void Task_startControl(void)
{
if (getSolarInCircuitVoltage() > g_cfgParameter.startSolarOpenCircuitV) {
TimeSliceOffset_Unregister(&g_startControl);
g_startControl.runFlag = 0;
if (getOutputVoltage() > 10) {
setBatteryState(TRUE);
} else {
setBatteryState(FALSE);
}
TimeSliceOffset_Register(&m_softStart, Task_softStart, softStart_reloadVal, softStart_offset);
}
}
/**
* @brief
* @param
* @retval
*
*/
STR_TimeSliceOffset m_softStart;
void Task_softStart(void)
{
static uint16_t num = 0;
static float dutyRatio = 0;
num++;
if (num < 5) {
set_pwmPulse(100);
}
else if (num > 70 || dutyRatio > 0.75f) {
TimeSliceOffset_Unregister(&m_softStart);
m_softStart.runFlag = 0;
dutyRatio = 0;
num = 0;
setDutyRatio(0.75);
set_pwmDutyRatio(getDutyRatio());
if (getBatteryState() == TRUE) {
setMPPT_Mode(MPPT);
} else {
setMPPT_Mode(floatCharg);
}
setChargControlFlag(TRUE);
}
else {
setDutyRatio(getDutyRatio() + 0.05f);
set_pwmDutyRatio(getDutyRatio());
}
}
/**
* @brief
* @param
* @retval
*/
STR_TimeSliceOffset m_impedanceCalculation;
void Task_impedanceCalculation(void)
{
static uint8_t num = 0;
static float currOne = 0;
static float voltOne = 0;
static float currTwo = 0;
static float voltTwo = 0;
num++;
if (num == 1) {
setChargControlFlag(FALSE);
setDutyRatio(0.7);
set_pwmDutyRatio(getDutyRatio());
return;
}
if (num == 11) {
currOne = getChargCurrent() - getDischargCurrent();
voltOne = getOutputVoltage();
setDutyRatio(0.85);
set_pwmDutyRatio(getDutyRatio());
return;
}
if (num == 21) {
TimeSliceOffset_Unregister(&m_impedanceCalculation);
m_impedanceCalculation.runFlag = 0;
currTwo = getChargCurrent() - getDischargCurrent();
voltTwo = getOutputVoltage();
float tempLoopImpedance = 0;
tempLoopImpedance = (voltOne - voltTwo) / (currOne - currTwo);
/* 判断回路阻抗是否合理 */
if (tempLoopImpedance < 1.0f && tempLoopImpedance > 0.05f) {
g_cfgParameter.loopImpedance = tempLoopImpedance;
saveLoopImpedance(&g_cfgParameter.loopImpedance);
}
num = 0;
setMPPT_Mode(MPPT);
setChargControlFlag(TRUE);
return;
}
}

View File

@ -4,17 +4,22 @@
#include "uart_dev.h" #include "uart_dev.h"
#include "HD_TIM.h" #include "HD_TIM.h"
#include "pDebug.h" #include "pDebug.h"
#include "parameter.h"
#include "FM_TIM.h"
void test(void) void test(void)
{ {
tim_Init();
Init_debug_uart(); Init_debug_uart();
HD_time_Init();
HAL_TIM_Base_Start_IT(&htim15);
while (1) { while (1) {
checkTimeInit();
HAL_Delay(1000); HAL_Delay(1000);
debug("time:%f\r\n", getCheckTime()); debug_printf("time:%f\r\n", checkAbnormalTime);
debug_printf("chargCurrent:%f\r\n", getChargCurrent());
debug_printf("outputVoltage:%f\r\n", getOutputVoltage());
debug_printf("dischargCurrent:%f\r\n", getDischargCurrent());
debug_printf("solarInCircuitVoltage:%f\r\n", getSolarInCircuitVoltage());
} }
} }

View File

@ -13,6 +13,7 @@ void POW_OUT_PCON_Close(void);
void RUN_LEN_Open(void); void RUN_LEN_Open(void);
void RUN_LEN_Close(void); void RUN_LEN_Close(void);
void RUN_LED(void);
void FFMOS_CON_Open(void); void FFMOS_CON_Open(void);
void FFMOS_CON_Close(void); void FFMOS_CON_Close(void);
@ -20,6 +21,8 @@ void FFMOS_CON_Close(void);
void EN_PWMOUT_Eable(void); void EN_PWMOUT_Eable(void);
void EN_PWMOUT_Diseable(void); void EN_PWMOUT_Diseable(void);
void feedDog(void);
BOOL readOnlyPowerOutputState(void); BOOL readOnlyPowerOutputState(void);
BOOL readOutputState(void); BOOL readOutputState(void);

View File

@ -4,11 +4,14 @@
#include "arm_math.h" #include "arm_math.h"
#define indata16_size 10
#define IODataF_size 4
#pragma pack(push,4) #pragma pack(push,4)
typedef struct _adcCapture typedef struct _adcCapture
{ {
float32_t inDataF[6]; int16_t inData16[indata16_size];
uint32_t totalInData;
float32_t IODataF[IODataF_size];
int16_t outData; int16_t outData;
}adcCapture; }adcCapture;
#pragma pack(pop) #pragma pack(pop)

View File

@ -5,7 +5,7 @@
#include "HD_TIM.h" #include "HD_TIM.h"
#include "FM_TIM.h" #include "FM_TIM.h"
extern float checkAbnormalTime;
void hw_inc_tick(void); void hw_inc_tick(void);
void checkTimeInit(void); void checkTimeInit(void);

View File

@ -66,6 +66,16 @@ void RUN_LEN_Close(void)
HAL_GPIO_WritePin(RUN_LED_GPIO_Port, RUN_LED_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(RUN_LED_GPIO_Port, RUN_LED_Pin, GPIO_PIN_RESET);
} }
/**
* @brief LED状态
* @param None
* @retval None
*/
void RUN_LED(void)
{
HAL_GPIO_TogglePin(RUN_LED_GPIO_Port, RUN_LED_Pin);
}
/** /**
* @brief mppt电感后的输出mos管 * @brief mppt电感后的输出mos管
* @param None * @param None
@ -106,6 +116,17 @@ void EN_PWMOUT_Diseable(void)
HAL_GPIO_WritePin(EN_PWMOUT_GPIO_Port, EN_PWMOUT_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(EN_PWMOUT_GPIO_Port, EN_PWMOUT_Pin, GPIO_PIN_SET);
} }
/**
* @brief
* @param None
* @retval None
*/
void feedDog(void)
{
HAL_GPIO_WritePin(WDI_INPUT_GPIO_Port, WDI_INPUT_Pin, GPIO_PIN_SET);
HAL_GPIO_WritePin(WDI_INPUT_GPIO_Port, WDI_INPUT_Pin, GPIO_PIN_RESET);
}
/** /**
* @brief * @brief
* @param None * @param None

View File

@ -16,32 +16,27 @@ void tim_Init(void)
HD_PWM_Init(); HD_PWM_Init();
/* 得到pwm的分辨率 */ /* 得到pwm的分辨率 */
PWM_RESOLUTION = HAL_RCC_GetHCLKFreq() / 100000; PWM_RESOLUTION = HAL_RCC_GetHCLKFreq() / 100000;
HAL_TIM_Base_Start(&htim3);
HD_controlTim_Init(); HD_controlTim_Init();
HAL_TIM_Base_Start_IT(&htim7);
HD_taskBaseTim_Init(); HD_taskBaseTim_Init();
HAL_TIM_Base_Start_IT(&htim16);
HD_checkAbnormalTim_Init();
HD_time_Init(); HD_time_Init();
HAL_TIM_Base_Start_IT(&htim15);
} }
/** /**
* @brief PWM信号输出 * @brief PWM信号输出
*
* PWM脉冲宽度为0来停止PWM信号输出HAL库函数进行PWM相关的硬件资源初始化
* 使HALSTM32微控制器
*/ */
void pwm_Stop(void) void pwm_Stop(void)
{ {
// 设置PWM脉冲宽度为0 effectively停止PWM信号输出 // 设置PWM脉冲宽度为0 effectively停止PWM信号输出
set_pwmPulse(0); set_pwmPulse(0);
HAL_TIM_Base_Stop_IT(&htim15); HAL_TIM_Base_Stop(&htim3);
// HAL_TIM_OC_MspDeInit(&htim3);
// 调用HAL库函数进行PWM相关的硬件资源De初始化
// HAL_TIM_PWM_MspDeInit(&htim3);
} }
/** /**
@ -100,10 +95,6 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
TimeSliceOffset_Produce(); TimeSliceOffset_Produce();
} }
else if (htim->Instance == TIM17) {
checkAbnormal();
}
else if (htim->Instance == TIM15) { else if (htim->Instance == TIM15) {
hw_inc_tick(); hw_inc_tick();
} }

View File

@ -99,6 +99,8 @@ enum {
CHG_CURR_NUM = 3, CHG_CURR_NUM = 3,
}; };
int16_t adcBuff[4]; int16_t adcBuff[4];
/* 指向adcCapture中的inData16数组中的第一位也是最后一位 */
uint8_t pointer;
adcCapture WORK_VOLT_capture = {0}; adcCapture WORK_VOLT_capture = {0};
adcCapture DSG_CURR_capture = {0}; adcCapture DSG_CURR_capture = {0};
@ -117,12 +119,20 @@ static float P_PV_VOLT_IN1 = 0;
const float32_t Proportion = 3.0 / 4095.0; const float32_t Proportion = 3.0 / 4095.0;
/* matlab生成的5阶滤波器系数 */ /* matlab生成的5阶滤波器系数 */
const int firLen = 6; // const int firLen = 6;
const float firLP[6] = { // const float firLP[6] = {
0.01861755922, -0.1146286726, 0.5962908864, 0.5962908864, -0.1146286726, // 0.01861755922, -0.1146286726, 0.5962908864, 0.5962908864, -0.1146286726,
0.01861755922 // 0.01861755922
// };
/* matlab生成的3阶滤波器系数 */
const int firLen = 4;
const float firLP[4] = {
0.178709805, 0.3671073616, 0.3671073616, 0.178709805
}; };
void captureFirInit(void);
/** /**
* @brief adc * @brief adc
* @param * @param
@ -139,6 +149,9 @@ void ADC_Capture_Init(void)
HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED); HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);
HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED); HAL_ADCEx_Calibration_Start(&hadc2, ADC_SINGLE_ENDED);
/* 初始化滤波器 */
captureFirInit();
HAL_TIM_Base_Start(&htim6); HAL_TIM_Base_Start(&htim6);
HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adcBuff, 4); HAL_ADC_Start_DMA(&hadc1, (uint32_t *)adcBuff, 4);
@ -387,18 +400,54 @@ float get_MOSFET_Temper(void)
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hdma) void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hdma)
{ {
if (hdma->Instance == ADC1) { if (hdma->Instance == ADC1) {
arm_copy_f32(WORK_VOLT_capture.inDataF, WORK_VOLT_capture.inDataF + 1, 5); WORK_VOLT_capture.totalInData -= WORK_VOLT_capture.inData16[pointer];
arm_copy_f32(DSG_CURR_capture.inDataF, DSG_CURR_capture.inDataF + 1, 5); DSG_CURR_capture.totalInData -= DSG_CURR_capture.inData16[pointer];
arm_copy_f32(PV_VOLT_IN_capture.inDataF, PV_VOLT_IN_capture.inDataF + 1, 5); PV_VOLT_IN_capture.totalInData -= PV_VOLT_IN_capture.inData16[pointer];
arm_copy_f32(CHG_CURR_capture.inDataF, CHG_CURR_capture.inDataF + 1, 5); CHG_CURR_capture.totalInData -= CHG_CURR_capture.inData16[pointer];
WORK_VOLT_capture.inDataF[5] = (float32_t)adcBuff[WORK_VOLT_NUM]; WORK_VOLT_capture.inData16[pointer] = adcBuff[WORK_VOLT_NUM];
DSG_CURR_capture.inDataF[5] = (float32_t)adcBuff[DSG_CURR_NUM]; DSG_CURR_capture.inData16[pointer] = adcBuff[DSG_CURR_NUM];
PV_VOLT_IN_capture.inDataF[5] = (float32_t)adcBuff[PV_VOLT_IN_NUM]; PV_VOLT_IN_capture.inData16[pointer] = adcBuff[PV_VOLT_IN_NUM];
CHG_CURR_capture.inDataF[5] = (float32_t)adcBuff[CHG_CURR_NUM]; CHG_CURR_capture.inData16[pointer] = adcBuff[CHG_CURR_NUM];
WORK_VOLT_capture.totalInData += WORK_VOLT_capture.inData16[pointer];
DSG_CURR_capture.totalInData += DSG_CURR_capture.inData16[pointer];
PV_VOLT_IN_capture.totalInData += PV_VOLT_IN_capture.inData16[pointer];
CHG_CURR_capture.totalInData += CHG_CURR_capture.inData16[pointer];
pointer++;
if (pointer >= indata16_size) {
pointer = 0;
}
arm_copy_f32(WORK_VOLT_capture.IODataF + 1, WORK_VOLT_capture.IODataF, 3);
arm_copy_f32(DSG_CURR_capture.IODataF + 1, DSG_CURR_capture.IODataF, 3);
arm_copy_f32(PV_VOLT_IN_capture.IODataF + 1, PV_VOLT_IN_capture.IODataF, 3);
arm_copy_f32(CHG_CURR_capture.IODataF + 1, CHG_CURR_capture.IODataF, 3);
WORK_VOLT_capture.IODataF[3] = (float32_t)WORK_VOLT_capture.totalInData / indata16_size;
DSG_CURR_capture.IODataF[3] = (float32_t)DSG_CURR_capture.totalInData / indata16_size;
PV_VOLT_IN_capture.IODataF[3] = (float32_t)PV_VOLT_IN_capture.totalInData / indata16_size;
CHG_CURR_capture.IODataF[3] = (float32_t)CHG_CURR_capture.totalInData / indata16_size;
} }
} }
static arm_fir_instance_f32 armFirInstanceF32;
static float32_t *inputF32, *outputF32;
static uint32_t blockSize = 1;
static float32_t firStateF32[4]; /* 状态缓存 */
static float32_t outputf;
void captureFirInit(void)
{
/* 初始化结构体 */
arm_fir_init_f32(&armFirInstanceF32,
firLen,
(float_t *)&firLP[0],
&firStateF32[0],
blockSize);
}
/** /**
* @brief adc进行滤波 * @brief adc进行滤波
* @param None * @param None
@ -406,39 +455,26 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hdma)
*/ */
void adcCaptureFir(void) void adcCaptureFir(void)
{ {
static arm_fir_instance_f32 armFirInstanceF32;
static float32_t *inputF32, *outputF32;
static uint32_t blockSize = 1;
static float32_t firStateF32[6]; /* 状态缓存 */
static float32_t outputf;
/* 初始化结构体 */
arm_fir_init_f32(&armFirInstanceF32,
firLen,
(float_t *)&firLP[0],
&firStateF32[0],
blockSize);
/* 初始化输入输出缓存指针 */ /* 初始化输入输出缓存指针 */
inputF32 = &WORK_VOLT_capture.inDataF[0]; inputF32 = &WORK_VOLT_capture.IODataF[0];
outputF32 = &outputf; outputF32 = &outputf;
arm_fir_f32(&armFirInstanceF32, inputF32, outputF32, blockSize); arm_fir_f32(&armFirInstanceF32, inputF32, outputF32, blockSize);
WORK_VOLT_capture.outData = (int16_t)outputf; WORK_VOLT_capture.outData = (int16_t)outputf;
/* 初始化输入输出缓存指针 */ /* 初始化输入输出缓存指针 */
inputF32 = &DSG_CURR_capture.inDataF[0]; inputF32 = &DSG_CURR_capture.IODataF[0];
outputF32 = &outputf; outputF32 = &outputf;
arm_fir_f32(&armFirInstanceF32, inputF32, outputF32, blockSize); arm_fir_f32(&armFirInstanceF32, inputF32, outputF32, blockSize);
DSG_CURR_capture.outData = (int16_t)outputf; DSG_CURR_capture.outData = (int16_t)outputf;
/* 初始化输入输出缓存指针 */ /* 初始化输入输出缓存指针 */
inputF32 = &PV_VOLT_IN_capture.inDataF[0]; inputF32 = &PV_VOLT_IN_capture.IODataF[0];
outputF32 = &outputf; outputF32 = &outputf;
arm_fir_f32(&armFirInstanceF32, inputF32, outputF32, blockSize); arm_fir_f32(&armFirInstanceF32, inputF32, outputF32, blockSize);
PV_VOLT_IN_capture.outData = (int16_t)outputf; PV_VOLT_IN_capture.outData = (int16_t)outputf;
/* 初始化输入输出缓存指针 */ /* 初始化输入输出缓存指针 */
inputF32 = &CHG_CURR_capture.inDataF[0]; inputF32 = &CHG_CURR_capture.IODataF[0];
outputF32 = &outputf; outputF32 = &outputf;
arm_fir_f32(&armFirInstanceF32, inputF32, outputF32, blockSize); arm_fir_f32(&armFirInstanceF32, inputF32, outputF32, blockSize);
CHG_CURR_capture.outData = (int16_t)outputf; CHG_CURR_capture.outData = (int16_t)outputf;

View File

@ -21,6 +21,9 @@ static timeData checkTimeData;
volatile static uint32_t hw_sys_tick_ms = 0; //ms 自增计数变量 volatile static uint32_t hw_sys_tick_ms = 0; //ms 自增计数变量
float checkAbnormalTime;
#define tim TIM15 #define tim TIM15
#define timLard 36000.0 #define timLard 36000.0

View File

@ -30,16 +30,6 @@ void HD_taskBaseTim_Init(void)
MX_TIM16_Init(); MX_TIM16_Init();
} }
/**
* @brief
* @param None
* @retval None
*/
void HD_checkAbnormalTim_Init(void)
{
MX_TIM17_Init();
}
/** /**
* @brief * @brief
* @param None * @param None

View File

@ -58,7 +58,6 @@ void SysTick_Handler(void);
void DMA1_Channel1_IRQHandler(void); void DMA1_Channel1_IRQHandler(void);
void TIM1_BRK_TIM15_IRQHandler(void); void TIM1_BRK_TIM15_IRQHandler(void);
void TIM1_UP_TIM16_IRQHandler(void); void TIM1_UP_TIM16_IRQHandler(void);
void TIM1_TRG_COM_TIM17_IRQHandler(void);
void USART2_IRQHandler(void); void USART2_IRQHandler(void);
void USART3_IRQHandler(void); void USART3_IRQHandler(void);
void EXTI15_10_IRQHandler(void); void EXTI15_10_IRQHandler(void);

View File

@ -42,8 +42,6 @@ extern TIM_HandleTypeDef htim15;
extern TIM_HandleTypeDef htim16; extern TIM_HandleTypeDef htim16;
extern TIM_HandleTypeDef htim17;
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */ /* USER CODE END Private defines */
@ -53,7 +51,6 @@ void MX_TIM6_Init(void);
void MX_TIM7_Init(void); void MX_TIM7_Init(void);
void MX_TIM15_Init(void); void MX_TIM15_Init(void);
void MX_TIM16_Init(void); void MX_TIM16_Init(void);
void MX_TIM17_Init(void);
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);

View File

@ -93,20 +93,19 @@ int main(void)
/* USER CODE END SysInit */ /* USER CODE END SysInit */
/* Initialize all configured peripherals */ /* Initialize all configured peripherals */
// MX_GPIO_Init(); MX_GPIO_Init();
// MX_DMA_Init(); MX_DMA_Init();
// MX_ADC1_Init(); MX_ADC1_Init();
// MX_ADC2_Init(); MX_ADC2_Init();
// MX_SPI1_Init(); MX_SPI1_Init();
// MX_TIM3_Init(); MX_TIM3_Init();
// MX_TIM6_Init(); MX_TIM6_Init();
// MX_UART4_Init(); MX_UART4_Init();
// MX_USART2_UART_Init(); MX_USART2_UART_Init();
// MX_USART3_UART_Init(); MX_USART3_UART_Init();
// MX_TIM7_Init(); MX_TIM7_Init();
// MX_TIM16_Init(); MX_TIM16_Init();
// MX_TIM17_Init(); MX_TIM15_Init();
// MX_TIM15_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
test(); test();

View File

@ -60,7 +60,6 @@ extern TIM_HandleTypeDef htim6;
extern TIM_HandleTypeDef htim7; extern TIM_HandleTypeDef htim7;
extern TIM_HandleTypeDef htim15; extern TIM_HandleTypeDef htim15;
extern TIM_HandleTypeDef htim16; extern TIM_HandleTypeDef htim16;
extern TIM_HandleTypeDef htim17;
extern UART_HandleTypeDef huart2; extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart3; extern UART_HandleTypeDef huart3;
extern TIM_HandleTypeDef htim1; extern TIM_HandleTypeDef htim1;
@ -256,20 +255,6 @@ void TIM1_UP_TIM16_IRQHandler(void)
/* USER CODE END TIM1_UP_TIM16_IRQn 1 */ /* USER CODE END TIM1_UP_TIM16_IRQn 1 */
} }
/**
* @brief This function handles TIM1 trigger and commutation interrupts and TIM17 global interrupt.
*/
void TIM1_TRG_COM_TIM17_IRQHandler(void)
{
/* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 0 */
/* USER CODE END TIM1_TRG_COM_TIM17_IRQn 0 */
HAL_TIM_IRQHandler(&htim17);
/* USER CODE BEGIN TIM1_TRG_COM_TIM17_IRQn 1 */
/* USER CODE END TIM1_TRG_COM_TIM17_IRQn 1 */
}
/** /**
* @brief This function handles USART2 global interrupt / USART2 wake-up interrupt through EXTI line 26. * @brief This function handles USART2 global interrupt / USART2 wake-up interrupt through EXTI line 26.
*/ */

View File

@ -29,7 +29,6 @@ TIM_HandleTypeDef htim6;
TIM_HandleTypeDef htim7; TIM_HandleTypeDef htim7;
TIM_HandleTypeDef htim15; TIM_HandleTypeDef htim15;
TIM_HandleTypeDef htim16; TIM_HandleTypeDef htim16;
TIM_HandleTypeDef htim17;
/* TIM3 init function */ /* TIM3 init function */
void MX_TIM3_Init(void) void MX_TIM3_Init(void)
@ -156,9 +155,9 @@ void MX_TIM15_Init(void)
/* USER CODE END TIM15_Init 1 */ /* USER CODE END TIM15_Init 1 */
htim15.Instance = TIM15; htim15.Instance = TIM15;
htim15.Init.Prescaler = 1; htim15.Init.Prescaler = 10;
htim15.Init.CounterMode = TIM_COUNTERMODE_UP; htim15.Init.CounterMode = TIM_COUNTERMODE_UP;
htim15.Init.Period = 35999; htim15.Init.Period = 7199;
htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim15.Init.RepetitionCounter = 0; htim15.Init.RepetitionCounter = 0;
htim15.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; htim15.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@ -208,33 +207,6 @@ void MX_TIM16_Init(void)
/* USER CODE END TIM16_Init 2 */ /* USER CODE END TIM16_Init 2 */
}
/* TIM17 init function */
void MX_TIM17_Init(void)
{
/* USER CODE BEGIN TIM17_Init 0 */
/* USER CODE END TIM17_Init 0 */
/* USER CODE BEGIN TIM17_Init 1 */
/* USER CODE END TIM17_Init 1 */
htim17.Instance = TIM17;
htim17.Init.Prescaler = 71;
htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
htim17.Init.Period = 199;
htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim17.Init.RepetitionCounter = 0;
htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim17) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM17_Init 2 */
/* USER CODE END TIM17_Init 2 */
} }
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle) void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef* tim_pwmHandle)
@ -316,21 +288,6 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
/* USER CODE END TIM16_MspInit 1 */ /* USER CODE END TIM16_MspInit 1 */
} }
else if(tim_baseHandle->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspInit 0 */
/* USER CODE END TIM17_MspInit 0 */
/* TIM17 clock enable */
__HAL_RCC_TIM17_CLK_ENABLE();
/* TIM17 interrupt Init */
HAL_NVIC_SetPriority(TIM1_TRG_COM_TIM17_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM1_TRG_COM_TIM17_IRQn);
/* USER CODE BEGIN TIM17_MspInit 1 */
/* USER CODE END TIM17_MspInit 1 */
}
} }
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle) void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
{ {
@ -435,20 +392,6 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
/* USER CODE END TIM16_MspDeInit 1 */ /* USER CODE END TIM16_MspDeInit 1 */
} }
else if(tim_baseHandle->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspDeInit 0 */
/* USER CODE END TIM17_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM17_CLK_DISABLE();
/* TIM17 interrupt Deinit */
HAL_NVIC_DisableIRQ(TIM1_TRG_COM_TIM17_IRQn);
/* USER CODE BEGIN TIM17_MspDeInit 1 */
/* USER CODE END TIM17_MspDeInit 1 */
}
} }
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN 1 */

File diff suppressed because it is too large Load Diff

View File

@ -1439,9 +1439,6 @@
<file> <file>
<name>$PROJ_DIR$\..\APP\application\Src\start.c</name> <name>$PROJ_DIR$\..\APP\application\Src\start.c</name>
</file> </file>
<file>
<name>$PROJ_DIR$\..\APP\application\Src\task.c</name>
</file>
</group> </group>
<group> <group>
<name>businessLogic</name> <name>businessLogic</name>
@ -1463,6 +1460,9 @@
<file> <file>
<name>$PROJ_DIR$\..\APP\businessLogic\Src\parameter.c</name> <name>$PROJ_DIR$\..\APP\businessLogic\Src\parameter.c</name>
</file> </file>
<file>
<name>$PROJ_DIR$\..\APP\businessLogic\Src\task.c</name>
</file>
<file> <file>
<name>$PROJ_DIR$\..\APP\businessLogic\Src\test.c</name> <name>$PROJ_DIR$\..\APP\businessLogic\Src\test.c</name>
</file> </file>

View File

@ -69,10 +69,9 @@ Mcu.IP0=ADC1
Mcu.IP1=ADC2 Mcu.IP1=ADC2
Mcu.IP10=TIM15 Mcu.IP10=TIM15
Mcu.IP11=TIM16 Mcu.IP11=TIM16
Mcu.IP12=TIM17 Mcu.IP12=UART4
Mcu.IP13=UART4 Mcu.IP13=USART2
Mcu.IP14=USART2 Mcu.IP14=USART3
Mcu.IP15=USART3
Mcu.IP2=DMA Mcu.IP2=DMA
Mcu.IP3=NVIC Mcu.IP3=NVIC
Mcu.IP4=RCC Mcu.IP4=RCC
@ -81,7 +80,7 @@ Mcu.IP6=SYS
Mcu.IP7=TIM3 Mcu.IP7=TIM3
Mcu.IP8=TIM6 Mcu.IP8=TIM6
Mcu.IP9=TIM7 Mcu.IP9=TIM7
Mcu.IPNb=16 Mcu.IPNb=15
Mcu.Name=STM32G431R(6-8-B)Tx Mcu.Name=STM32G431R(6-8-B)Tx
Mcu.Package=LQFP64 Mcu.Package=LQFP64
Mcu.Pin0=PC13 Mcu.Pin0=PC13
@ -115,15 +114,14 @@ Mcu.Pin33=VP_TIM6_VS_ClockSourceINT
Mcu.Pin34=VP_TIM7_VS_ClockSourceINT Mcu.Pin34=VP_TIM7_VS_ClockSourceINT
Mcu.Pin35=VP_TIM15_VS_ClockSourceINT Mcu.Pin35=VP_TIM15_VS_ClockSourceINT
Mcu.Pin36=VP_TIM16_VS_ClockSourceINT Mcu.Pin36=VP_TIM16_VS_ClockSourceINT
Mcu.Pin37=VP_TIM17_VS_ClockSourceINT Mcu.Pin37=VP_STMicroelectronics.X-CUBE-ALGOBUILD_VS_DSPOoLibraryJjLibrary_1.4.0_1.4.0
Mcu.Pin38=VP_STMicroelectronics.X-CUBE-ALGOBUILD_VS_DSPOoLibraryJjLibrary_1.4.0_1.4.0
Mcu.Pin4=PC2 Mcu.Pin4=PC2
Mcu.Pin5=PA0 Mcu.Pin5=PA0
Mcu.Pin6=PA1 Mcu.Pin6=PA1
Mcu.Pin7=PA2 Mcu.Pin7=PA2
Mcu.Pin8=PA3 Mcu.Pin8=PA3
Mcu.Pin9=PA4 Mcu.Pin9=PA4
Mcu.PinsNb=39 Mcu.PinsNb=38
Mcu.ThirdParty0=STMicroelectronics.X-CUBE-ALGOBUILD.1.4.0 Mcu.ThirdParty0=STMicroelectronics.X-CUBE-ALGOBUILD.1.4.0
Mcu.ThirdPartyNb=1 Mcu.ThirdPartyNb=1
Mcu.UserConstants= Mcu.UserConstants=
@ -143,7 +141,6 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
NVIC.TIM1_BRK_TIM15_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.TIM1_BRK_TIM15_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM1_TRG_COM_TIM17_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM1_UP_TIM16_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:true NVIC.TIM1_UP_TIM16_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:true
NVIC.TIM6_DAC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.TIM6_DAC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.TIM7_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.TIM7_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
@ -377,9 +374,6 @@ TIM15.Prescaler=10
TIM16.IPParameters=Prescaler,PeriodNoDither TIM16.IPParameters=Prescaler,PeriodNoDither
TIM16.PeriodNoDither=999 TIM16.PeriodNoDither=999
TIM16.Prescaler=71 TIM16.Prescaler=71
TIM17.IPParameters=Prescaler,PeriodNoDither
TIM17.PeriodNoDither=199
TIM17.Prescaler=71
TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
TIM3.IPParameters=PeriodNoDither,Channel-PWM Generation4 CH4 TIM3.IPParameters=PeriodNoDither,Channel-PWM Generation4 CH4
TIM3.PeriodNoDither=720 TIM3.PeriodNoDither=720
@ -407,8 +401,6 @@ VP_TIM15_VS_ClockSourceINT.Mode=Internal
VP_TIM15_VS_ClockSourceINT.Signal=TIM15_VS_ClockSourceINT VP_TIM15_VS_ClockSourceINT.Signal=TIM15_VS_ClockSourceINT
VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM16_VS_ClockSourceINT.Signal=TIM16_VS_ClockSourceINT VP_TIM16_VS_ClockSourceINT.Signal=TIM16_VS_ClockSourceINT
VP_TIM17_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM17_VS_ClockSourceINT.Signal=TIM17_VS_ClockSourceINT
VP_TIM6_VS_ClockSourceINT.Mode=Enable_Timer VP_TIM6_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM6_VS_ClockSourceINT.Signal=TIM6_VS_ClockSourceINT VP_TIM6_VS_ClockSourceINT.Signal=TIM6_VS_ClockSourceINT
VP_TIM7_VS_ClockSourceINT.Mode=Enable_Timer VP_TIM7_VS_ClockSourceINT.Mode=Enable_Timer

View File

@ -0,0 +1,31 @@
/*
* Filter Coefficients (C Source) generated by the Filter Design and Analysis Tool
* Generated by MATLAB(R) 9.13 and Signal Processing Toolbox 9.1.
* Generated on: 09-Dec-2024 10:57:55
*/
/*
* FIR ()
* ----------------
* : FIR
* : 4
* :
* 线 : (Type 2)
*/
/* General type conversion for MATLAB generated C-code */
// #include "tmwtypes.h"
/*
* Expected path to tmwtypes.h
* C:\Program Files\MATLAB\R2022b\extern\include\tmwtypes.h
*/
/*
* Warning - Filter coefficients were truncated to fit specified data type.
* The resulting response may not match generated theoretical response.
* Use the Filter Design & Analysis Tool to design accurate
* single-precision filter coefficients.
*/
// const int BL = 4;
// const real32_T B[4] = {
// 0.178709805, 0.3671073616, 0.3671073616, 0.178709805
// };