diff --git a/MATLAB/MCU_STM32_Matlab/Drivers/CMSIS/arm_defines.h b/MATLAB/MCU_STM32_Matlab/Drivers/CMSIS/arm_defines.h index 435f76c..fae0001 100644 --- a/MATLAB/MCU_STM32_Matlab/Drivers/CMSIS/arm_defines.h +++ b/MATLAB/MCU_STM32_Matlab/Drivers/CMSIS/arm_defines.h @@ -3,6 +3,8 @@ #include "dsp/none.h" #endif +#define _sqrtf(...) sqrtf(__VA_ARGS__) + #define __disable_irq() #ifndef __ASM diff --git a/MATLAB/upp_init.m b/MATLAB/upp_init.m index a281ef9..ad6a586 100644 --- a/MATLAB/upp_init.m +++ b/MATLAB/upp_init.m @@ -5,7 +5,7 @@ VadcMax = 1216; Ts = 5e-6; Vnom = 400; -Inom = 30; +Inom = 15; Fnom = 50; Temperature1 = 2.22; % 20 градусов diff --git a/MATLAB/upp_r2023.slx b/MATLAB/upp_r2023.slx index 28f1a56..079c8d8 100644 Binary files a/MATLAB/upp_r2023.slx and b/MATLAB/upp_r2023.slx differ diff --git a/UPP/AllLibs/MyLibs b/UPP/AllLibs/MyLibs index c5a01c5..1f7384c 160000 --- a/UPP/AllLibs/MyLibs +++ b/UPP/AllLibs/MyLibs @@ -1 +1 @@ -Subproject commit c5a01c56acd851843edc478bd65c7f276a9ac8e3 +Subproject commit 1f7384c5edc30469217ca49c6489bdab13460320 diff --git a/UPP/Core/Configs/upp_config.h b/UPP/Core/Configs/upp_config.h index a66829e..17730c6 100644 --- a/UPP/Core/Configs/upp_config.h +++ b/UPP/Core/Configs/upp_config.h @@ -35,6 +35,7 @@ //#define UPP_SIMULATE_I ///< Симулировт токи (Iref/2) а не брать с АЦП #define UPP_DISABLE_PROTECT_BOARDPOWER ///< Отключить проверки питания плат (+24, +5 В) #define UPP_DISABLE_PROTECT_LOSS_PHASE ///< Отключить проверки на потерянные фазы +//#define UPP_ANGLE_COSINE ///< Расчет угла через acos, а не линейно /** * @addtogroup UPP_PARAMS_DEFAULT Default params for external flash @@ -86,7 +87,8 @@ #define ANGLE_PID_KD_COEF_DEFAULT 0 /* Параметри мониторинга сети */ -#define PM_EXP_TAU_COEF_DEFAULT 0.2 +#define PM_RMS_WINDOW_PERIOD_US_DEFAULT 20000 +#define PM_RMS_EXT_TAU_US_DEFAULT 0.2 /* Параметры АЦП */ #define ADC_U_MAX_V_DEFAULT 1216.0 diff --git a/UPP/Core/PowerMonitor/adc_tools.c b/UPP/Core/PowerMonitor/adc_tools.c index 1d48798..5d16446 100644 --- a/UPP/Core/PowerMonitor/adc_tools.c +++ b/UPP/Core/PowerMonitor/adc_tools.c @@ -81,7 +81,6 @@ HAL_StatusTypeDef ADC_ConfigChannel(ADC_Periodic_t *adc, int ChNumb, uint16_t le adc->Coefs[ChNumb].vMax = valueMax; adc->Coefs[ChNumb].lZero = levelZero; - ADC_ResetStatistics(adc, ChNumb); return HAL_OK; } @@ -140,11 +139,40 @@ HAL_StatusTypeDef ADC_Stop(ADC_Periodic_t *adc) } + +/** + * @brief Обновление температур АЦП. + * @return HAL Status. + */ +HAL_StatusTypeDef ADC_UpdateTemperatures(ADC_Periodic_t *adc) +{ + if(assert_upp(adc)) + return HAL_ERROR; + + float *data = adc->Data; + uint16_t *raw = adc->RawData; + + // Фильтрация от импульсных шумов для каналов напряжения/токов + for(int i = ADC_TEMP_CHANNELS_START; i < ADC_NUMB_OF_CHANNELS; i++) + { + // заменяем сырые данные на отфильтрованные данные + raw[i] = Filter_Process(&adc->filter[i], raw[i]); + } + + // Преобразования температуры по таблице + for (int i = ADC_TEMP_CHANNELS_START; i < ADC_NUMB_OF_CHANNELS; i++) + { + data[i] = Filter_Process(&adc->temp_map[i-ADC_TEMP_CHANNELS_START], raw[i]); + } + return HAL_OK; +} + + /** * @brief Обработка АЦП. * @return HAL Status. - * @details По факту остановка таймера, который запускает АЦП. Сам АЦП продолжает работу. - * @note Вызывается в DMA2_Stream0_IRQHandler() для обработки всего, что пришло по DMA. + * @note Вызывается в DMA2_Stream0_IRQHandler() для обработки напряжений/токов, + которые пришли по DMA. */ HAL_StatusTypeDef ADC_Handle(ADC_Periodic_t *adc) { @@ -155,14 +183,11 @@ HAL_StatusTypeDef ADC_Handle(ADC_Periodic_t *adc) uint16_t *raw = adc->RawData; float *data = adc->Data; -// // Фильтрация от импульсных шумов для всех каналов + // Фильтрация от импульсных шумов для каналов напряжения/токов for(int i = 0; i < ADC_NUMB_OF_CHANNELS; i++) { - if(Filter_isEnable(&adc->filter[i])) - { - // заменяем сырые данные на отфильтрованные данные - raw[i] = Filter_Process(&adc->filter[i], raw[i]); - } + // заменяем сырые данные на отфильтрованные данные + raw[i] = Filter_Process(&adc->filter[i], raw[i]); } // Перерасчеты Напряжений/Токов в единицы измерения @@ -172,75 +197,9 @@ HAL_StatusTypeDef ADC_Handle(ADC_Periodic_t *adc) data[i] = ((float)(raw[i])-coefs->lZero) * coefs->vMax / (coefs->lMax-coefs->lZero); } - // Преобразования температуры по таблице - for (int i = ADC_TEMP_CHANNELS_START; i < ADC_NUMB_OF_CHANNELS; i++) - { - data[i] = Filter_Process(&adc->temp_map[i-ADC_TEMP_CHANNELS_START], raw[i]); - } if(Filter_isDataReady(&adc->filter[0])) adc->f.DataReady = 1; return HAL_OK; } - - -/** - * @brief Сбор статистики. - */ -void ADC_UpdateStatistics(ADC_Periodic_t *adc, uint8_t channel, ADC_StatLevel_t level) -{ - if (level < ADC_LEVEL_BASE) - return; - if(assert_upp(adc)) - return; - if (channel >= ADC_NUMB_OF_REGULAR_CHANNELS) - return; - - - ADC_Statistics *stat = &adc->Stat[channel]; - float value = adc->Data[channel]; - - // Первая инициализация - if (stat->SampleCount == 0) { - stat->Max = value; - stat->Min = value; - stat->Sum = 0; - stat->SumSquares = 0; - } - - // Обновление min/max - if (value > stat->Max) stat->Max = value; - if (value < stat->Min) stat->Min = value; - - // если не выбраны характеристики переменного сигнала - уходим - if(level < ADC_LEVEL_AC) - { - return; - } - - // Накопление для Avg/RMS - stat->Sum += fabsf(value); - stat->SumSquares += value * value; - stat->SampleCount++; - - // Расчет Avg/RMS (периодически или по запросу) - if (stat->SampleCount >= 4000) { // Пример: пересчет каждые 1000 samples - stat->Avg = stat->Sum / stat->SampleCount; - stat->RMS = sqrtf(stat->SumSquares / stat->SampleCount); - // Сброс накопителей - stat->Sum = 0; - stat->SumSquares = 0; - stat->SampleCount = 0; - } -} - -/** - * @brief Сброс статистики. - */ -void ADC_ResetStatistics(ADC_Periodic_t *adc, uint8_t channel) -{ - if (channel < ADC_NUMB_OF_REGULAR_CHANNELS) { - memset(&adc->Stat[channel], 0, sizeof(ADC_Statistics)); - } -} diff --git a/UPP/Core/PowerMonitor/adc_tools.h b/UPP/Core/PowerMonitor/adc_tools.h index 2367f97..1f51105 100644 --- a/UPP/Core/PowerMonitor/adc_tools.h +++ b/UPP/Core/PowerMonitor/adc_tools.h @@ -53,7 +53,7 @@ static const float adc_temp_quants[] = ADC_TEMPERATURES_QUANTS; #define Filter_t FilterMedianInt_t #define Filter_Init FilterMedianInt_Init -#define Filter_Initializator 10, 2048 +#define Filter_Initializator 5, 2048 /** * @brief Коэфициенты канала АЦП для пересчета в единицы измерения @@ -105,7 +105,6 @@ typedef struct FilterLUT_t temp_map[2]; ///< Коррекция нелинейности датчиков температуры float Data[ADC_NUMB_OF_CHANNELS]; ///< Пересчитанные значения АЦП (в Вольтах/Амперах) - ADC_Statistics Stat[ADC_NUMB_OF_REGULAR_CHANNELS]; ///< Статистика для регулярных каналов (не температуры) struct { @@ -126,13 +125,9 @@ HAL_StatusTypeDef ADC_ConfigChannel(ADC_Periodic_t *adc, int ChNumb, uint16_t le HAL_StatusTypeDef ADC_Start(ADC_Periodic_t *adc, float PeriodUs); /* Остановка АЦП. */ HAL_StatusTypeDef ADC_Stop(ADC_Periodic_t *adc); - +/* Обновление температур АЦП. */ +HAL_StatusTypeDef ADC_UpdateTemperatures(ADC_Periodic_t *adc); /* Обработка АЦП после получения данных. */ HAL_StatusTypeDef ADC_Handle(ADC_Periodic_t *adc); -/* Сбор статистики. */ -void ADC_UpdateStatistics(ADC_Periodic_t *adc, uint8_t channel, ADC_StatLevel_t level); -/* Сброс статистики. */ -void ADC_ResetStatistics(ADC_Periodic_t *adc, uint8_t channel); - #endif //_ADC_TOOLS_H_ diff --git a/UPP/Core/PowerMonitor/power_monitor.c b/UPP/Core/PowerMonitor/power_monitor.c index 8cc64b3..c506607 100644 --- a/UPP/Core/PowerMonitor/power_monitor.c +++ b/UPP/Core/PowerMonitor/power_monitor.c @@ -69,12 +69,19 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm) return HAL_ERROR; - /* Инициализация экпоненциального фильтра медленного алга */ - for(int i = 0; i < EXP_ALL; i++) + /* Инициализация RMS фильтра медленного алга */ + for(int i = 0; i < RMS_ALL; i++) { - if(FilterExp_Init(&hpm->exp[i], u2f(PARAM_INTERNAL.pm.mean_alpha,65535))) + if(FilterRMS_Init(&hpm->rms[i], PARAM_INTERNAL.pm.rms_window_size)) return HAL_ERROR; - Filter_Start(&hpm->exp[i]); + Filter_Start(&hpm->rms[i]); + } + /* Инициализация экпоненциального фильтра медленного алга */ + for(int i = 0; i < RMS_EXP_ALL; i++) + { + if(FilterExp_Init(&hpm->rms_exp[i], u2f(PARAM_INTERNAL.pm.rms_exp_alpha, 65535))) + return HAL_ERROR; + Filter_Start(&hpm->rms_exp[i]); } /* Инициализация среднего фильтра медленного алга */ @@ -137,6 +144,7 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm) PowerMonitor_Measured_t *meas = &hpm->measured; /* Обработка температур */ + ADC_UpdateTemperatures(&hpm->adc); float t1 = hpm->adc.Data[ADC_CHANNEL_TEMP1]; float t2 = hpm->adc.Data[ADC_CHANNEL_TEMP2]; meas->final.T[TEMP_1] = Filter_Process(&hpm->avg[AVG_TEMP1], t1); @@ -161,14 +169,18 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm) fmean += meas->final.F[i]; /* Средниее напряжение фазы */ - uphase_mean = fabsf(meas->slow.U[i]); - uphase_mean = Filter_Process(&hpm->exp[EXP_UAB+i], uphase_mean); - meas->final.U[i] = uphase_mean*PI/2/SQRT2; /*PI/2 - получить амплитудное, SQRT2 - получить действующее */ +// uphase_mean = fabsf(meas->slow.U[i]); +// uphase_mean = Filter_Process(&hpm->rms[RMS_UAB+i], uphase_mean); +// meas->final.U[i] = uphase_mean*PI/2/SQRT2; /*PI/2 - получить амплитудное, SQRT2 - получить действующее */ + uphase_mean = Filter_Process(&hpm->rms[RMS_U+i], meas->slow.U[i]); + meas->final.U[i] = Filter_Process(&hpm->rms_exp[RMS_U+i], uphase_mean); /* Средний ток фазы */ - iphase_mean = fabsf(meas->slow.I[i]); - iphase_mean = Filter_Process(&hpm->exp[EXP_IC+i], iphase_mean)*PI/2; - meas->final.I[i] = iphase_mean*PI/2/SQRT2; /*PI/2 - получить амплитудное, SQRT2 - получить действующее */ +// iphase_mean = fabsf(meas->slow.I[i]); +// iphase_mean = Filter_Process(&hpm->rms[RMS_IC+i], iphase_mean)*PI/2; +// meas->final.I[i] = iphase_mean*PI/2/SQRT2; /*PI/2 - получить амплитудное, SQRT2 - получить действующее */ + iphase_mean = Filter_Process(&hpm->rms[RMS_I+i], meas->slow.I[i]); + meas->final.I[i] = Filter_Process(&hpm->rms_exp[RMS_I+i], iphase_mean); /* Реальные единицы измерения (Вольты/Амперы) */ meas->real.I[i] = meas->final.I[i]*i_base; @@ -190,8 +202,8 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm) /* Расчет амплитуд трехфазной сети */ float uamp = vector_abs_linear_calc(meas->slow.U[U_AB], meas->slow.U[U_CA])/SQRT2; /* SQRT2 - получить действующее */ float iamp = vector_abs_phase_calc(meas->slow.I[I_A], meas->slow.I[I_C])/SQRT2; /* SQRT2 - получить действующее */ - meas->final.Uamp = Filter_Process(&hpm->exp[EXP_U], uamp); - meas->final.Iamp = Filter_Process(&hpm->exp[EXP_I], iamp); + meas->final.Uamp = Filter_Process(&hpm->rms_exp[RMS_EXP_U], uamp);;//Filter_Process(&hpm->rms[RMS_U], uamp); + meas->final.Iamp = Filter_Process(&hpm->rms_exp[RMS_EXP_I], iamp);;//Filter_Process(&hpm->rms[RMS_I], iamp); hpm->slow_cnt++; diff --git a/UPP/Core/PowerMonitor/power_monitor.h b/UPP/Core/PowerMonitor/power_monitor.h index 09e90c4..d00907c 100644 --- a/UPP/Core/PowerMonitor/power_monitor.h +++ b/UPP/Core/PowerMonitor/power_monitor.h @@ -12,17 +12,22 @@ #include "adc_tools.h" #include "zero_cross.h" -/* Индексы экспоненциальных фильтров */ -#define EXP_ALL 8 -#define EXP_U 0 -#define EXP_UAB 1 -#define EXP_UCA 2 -#define EXP_UBC 3 -#define EXP_I 4 -#define EXP_IC 5 -#define EXP_IA 6 -#define EXP_IB 7 +/* Индексы RMS фильтров */ +#define RMS_ALL 6 +#define RMS_U 0 +#define RMS_UAB 0 +#define RMS_UCA 1 +#define RMS_UBC 2 +#define RMS_I 3 +#define RMS_IC 3 +#define RMS_IA 4 +#define RMS_IB 5 +/* Это только сглаживающий, RMS с таким индексом нет */ +#define RMS_EXP_ALL 8 +#define RMS_EXP_U 6 +#define RMS_EXP_I 7 +/* Индексы усредняющих фильтров */ #define AVG_ALL 9 #define AVG_UAB 0 #define AVG_UCA 1 @@ -30,6 +35,7 @@ #define AVG_IA 3 #define AVG_TEMP1 4 #define AVG_TEMP2 5 +#define AVG_F 6 #define AVG_FAB 6 #define AVG_FCA 7 #define AVG_FBC 8 @@ -99,8 +105,9 @@ typedef struct PowerMonitor_Measured_t measured; ///< Измеренные/рассчитанные величины - FilterExp_t exp[EXP_ALL]; ///< Фильтры для сглаживания мговенного значения Напряжения/Токов - FilterAverage_t avg[AVG_ALL]; ///< Фильтры для сглаживания медленных величин АЦП + FilterRMS_t rms[RMS_ALL]; ///< Фильтры для расчета действующего значения Напряжения/Токов + FilterExp_t rms_exp[RMS_EXP_ALL]; ///< Фильтры для сглаживания действующего значения Напряжения/Токов +2 для результируюзих U, I + FilterAverage_t avg[AVG_ALL]; ///< Фильтры для сглаживания медленных величин АЦП PowerMonitor_Flags_t f; ///< Флаги мониторинга uint32_t isr_cnt; diff --git a/UPP/Core/UPP/angle_control.c b/UPP/Core/UPP/angle_control.c index 2e4ccaf..6370775 100644 --- a/UPP/Core/UPP/angle_control.c +++ b/UPP/Core/UPP/angle_control.c @@ -139,10 +139,14 @@ HAL_StatusTypeDef Angle_SetAngle(Angle_Handle_t *hangle, float OpenLevel) return HAL_ERROR; /* Приводим уровень открытия к косинусу [-1:1]*/ +#ifdef UPP_ANGLE_COSINE float OpenLevelForCos = (OpenLevel*2)-1; float alpha_rad = acosf(OpenLevelForCos); // угол в радианах float alpha = alpha_rad/PI* hangle->Config.PeriodLimit; // время открытие в процентах от периода - когда открыть +#else + float alpha = (1-OpenLevel) * hangle->Config.PeriodLimit; // время открытие в процентах от периода - когда открыть +#endif if(alpha > hangle->Config.AngleMax) alpha = hangle->Config.AngleMax; @@ -313,11 +317,6 @@ HAL_StatusTypeDef Angle_SetLimit(Angle_Handle_t *hangle, float PeriodLimit) return HAL_ERROR; hangle->Config.PeriodLimit = PeriodLimit; - - if (hangle->Config.AngleMax > hangle->Config.PeriodLimit) - hangle->Config.AngleMax = hangle->Config.PeriodLimit; - if (hangle->Config.AngleMin > hangle->Config.PeriodLimit) - hangle->Config.AngleMin = hangle->Config.PeriodLimit; return HAL_OK; } @@ -341,12 +340,7 @@ HAL_StatusTypeDef Angle_SetRange(Angle_Handle_t *hangle, float AngleMin, float A return HAL_ERROR; if(AngleMin < 0 || AngleMin > 1) return HAL_ERROR; - - if(AngleMax > hangle->Config.PeriodLimit) - AngleMax = hangle->Config.PeriodLimit; - if(AngleMin > hangle->Config.PeriodLimit) - AngleMin = hangle->Config.PeriodLimit; - + if(AngleMin >= AngleMax) return HAL_ERROR; diff --git a/UPP/Core/UPP/upp_params.c b/UPP/Core/UPP/upp_params.c index 2960e55..e92eae6 100644 --- a/UPP/Core/UPP/upp_params.c +++ b/UPP/Core/UPP/upp_params.c @@ -127,7 +127,8 @@ void UPP_Params_ControlInternal(void) float pwm_duty = upp.hpwm.Config.Duty; uint8_t pwm_pulse_num = upp.hpwm.Config.PulseNumber; // временная переменная для параметров Мониторинга сети - float pm_alpha = upp.pm.exp[0].alpha; + uint16_t pm_rms_widnow_size = upp.pm.rms[0].window_size; + float pm_rms_exp_alpha = upp.pm.rms_exp[0].alpha; @@ -201,15 +202,22 @@ void UPP_Params_ControlInternal(void) } // Параметры мониторинга - if(__CheckParamF(&pm_alpha, PARAM_INTERNAL.pm.mean_alpha, 65535)) + if(__CheckParamU16(&pm_rms_widnow_size, PARAM_INTERNAL.pm.rms_window_size)) { - for(int i = 0; i < EXP_ALL; i++) + for(int i = 0; i < RMS_ALL; i++) { - Filter_ReInit(&upp.pm.exp[i], pm_alpha); - Filter_Start(&upp.pm.exp[i]); + Filter_ReInit(&upp.pm.rms[i], pm_rms_widnow_size); + Filter_Start(&upp.pm.rms[i]); + } + } + if(__CheckParamF(&pm_rms_exp_alpha, PARAM_INTERNAL.pm.rms_exp_alpha, 65535)) + { + for(int i = 0; i < RMS_EXP_ALL; i++) + { + Filter_ReInit(&upp.pm.rms_exp[i], pm_rms_exp_alpha); + Filter_Start(&upp.pm.rms_exp[i]); } } - // Обновление регулятора угла открытия @@ -345,7 +353,8 @@ void UPP_Params_SetDefault(int pui_default, int internal_default) PARAM_INTERNAL.nominal.F_deviation_minus = NOM_F_DEVIATION_MINUS_PERCENT_DEFAULT*100; PARAM_INTERNAL.nominal.I = NOM_I_A_DEFAULT*10; - PARAM_INTERNAL.pm.mean_alpha = FilterExp_CalcAlpha(PM_EXP_TAU_COEF_DEFAULT,PM_SLOW_PERIOD_US)*65535; + PARAM_INTERNAL.pm.rms_window_size = PM_RMS_WINDOW_PERIOD_US_DEFAULT/PM_SLOW_PERIOD_US; + PARAM_INTERNAL.pm.rms_exp_alpha = FilterExp_CalcAlpha98(PM_RMS_EXT_TAU_US_DEFAULT, PM_SLOW_PERIOD_US)*65535; PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UBA] = ADC_U_MAX_V_DEFAULT*10; PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UAC] = ADC_U_MAX_V_DEFAULT*10; diff --git a/UPP/Core/UPP/upp_params.h b/UPP/Core/UPP/upp_params.h index 746f673..402618e 100644 --- a/UPP/Core/UPP/upp_params.h +++ b/UPP/Core/UPP/upp_params.h @@ -49,7 +49,8 @@ typedef struct struct { - uint16_t mean_alpha; ///< Коэф альфа для усредняющего эксп. фильтра [0..1 x 65535] + uint16_t rms_window_size; ///< Размер окна для RMS + uint16_t rms_exp_alpha; ///< Постоянная времени для сглаживания RMS }pm; UPP_ParamsNominal_t nominal; diff --git a/UPP/MDK-ARM/UPP.uvoptx b/UPP/MDK-ARM/UPP.uvoptx index 29b71b0..c3a2b14 100644 --- a/UPP/MDK-ARM/UPP.uvoptx +++ b/UPP/MDK-ARM/UPP.uvoptx @@ -360,7 +360,7 @@ 6 1 - sysclockfreq,0x0A + hbt,0x0A 7 diff --git a/UPP/MDK-ARM/UPP.uvprojx b/UPP/MDK-ARM/UPP.uvprojx index 70d41f4..3def99e 100644 --- a/UPP/MDK-ARM/UPP.uvprojx +++ b/UPP/MDK-ARM/UPP.uvprojx @@ -1506,6 +1506,57 @@ power_monitor.c 1 ..\Core\PowerMonitor\power_monitor.c + + + 2 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 5 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + power_monitor.h @@ -1516,6 +1567,57 @@ zero_cross.c 1 ..\Core\PowerMonitor\zero_cross.c + + + 2 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 5 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + zero_cross.h @@ -1526,6 +1628,57 @@ adc_tools.c 1 ..\Core\PowerMonitor\adc_tools.c + + + 2 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 5 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + adc_tools.h @@ -1536,6 +1689,57 @@ phases_transform.c 1 ..\Core\PowerMonitor\phases_transform.c + + + 2 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 5 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + phases_transform.h @@ -1666,6 +1870,57 @@ filters.c 1 ..\AllLibs\MyLibs\MyLibs\Src\filters.c + + + 2 + 0 + 0 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 5 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + filters.h