Фиксы после рефакторинга

This commit is contained in:
2026-01-19 17:21:37 +03:00
parent 7286f33709
commit 8e75c38c90
6 changed files with 42 additions and 42 deletions

View File

@@ -27,7 +27,7 @@
#define UPP_DISABLE_PROTECT_BOARDPOWER ///< Отключить проверки питания плат (+24, +5 В) #define UPP_DISABLE_PROTECT_BOARDPOWER ///< Отключить проверки питания плат (+24, +5 В)
#define UPP_DISABLE_PROTECT_LOSS_PHASE ///< Отключить проверки на потерянные фазы #define UPP_DISABLE_PROTECT_LOSS_PHASE ///< Отключить проверки на потерянные фазы
#define ZC_DISABLE_HYSTERESIS_DEBOUNCE ///< Отключить гиситерезис и дребезг на определении перехода через ноль //#define ZC_DISABLE_HYSTERESIS_DEBOUNCE ///< Отключить гиситерезис и дребезг на определении перехода через ноль
/** //UPP_PARAMS_TEST /** //UPP_PARAMS_TEST
* @} * @}
@@ -172,7 +172,7 @@
#undef UPP_INIT_BEFORE_READY_MS #undef UPP_INIT_BEFORE_READY_MS
#define UPP_INIT_BEFORE_READY_MS 100 ///< Сколько сканировать сеть, перед выставлением состояния готовности #define UPP_INIT_BEFORE_READY_MS 300 ///< Сколько сканировать сеть, перед выставлением состояния готовности
#endif //defined(MATLAB) #endif //defined(MATLAB)

View File

@@ -79,19 +79,19 @@ typedef enum {
* @brief Структура данных от УПП передаваемых в ПУИ * @brief Структура данных от УПП передаваемых в ПУИ
*/ */
typedef struct { typedef struct {
uint16_t Error; /** @brief Текущая авария uint16_t Error; /** @brief Адрес 0: Текущая авария
@details В случае срабатывания защиты */ @details В случае срабатывания защиты */
uint16_t WorkMode; /** @brief Режим работы uint16_t WorkMode; /** @brief Адрес 1: Режим работы
@details «Готовность» или «Работа» */ @details «Готовность» или «Работа» */
uint16_t Voltage; /** @brief Напряжение на входе УПП, Вольты */ uint16_t Voltage; /** @brief Адрес 2: Напряжение на входе УПП, Вольты */
uint16_t Current; /** @brief Ток на входе УПП, Амперы */ uint16_t Current; /** @brief Адрес 3: Ток на входе УПП, Амперы */
uint16_t Frequency; /** @brief Частота напряжения на входе УПП */ uint16_t Frequency; /** @brief Адрес 4: Частота напряжения на входе УПП */
uint16_t Temperature; /** @brief Температура радиатора тиристоров, Градусы Цельсия */ uint16_t Temperature; /** @brief Адрес 5: Температура радиатора тиристоров, Градусы Цельсия */
} UPP_PUI_Values_t; } UPP_PUI_Values_t;
/** /**
@@ -100,39 +100,39 @@ typedef struct {
* @note Защиты №X приведены в @ref UPP_ErrorType_t * @note Защиты №X приведены в @ref UPP_ErrorType_t
*/ */
typedef struct { typedef struct {
uint16_t Iref; /** @brief Уставка ограничения тока УПП uint16_t Iref; /** @brief Адрес 0: Уставка ограничения тока УПП
@details В диапазоне от 100 % до 500 % от Iн = 5 А @details В диапазоне от 100 % до 500 % от Iн = 5 А
По умолчанию @ref PUI_Iref_PERCENT_DEFAULT */ По умолчанию @ref PUI_Iref_PERCENT_DEFAULT */
uint16_t Tnt; /** @brief Уставка времени нарастания заданного тока uint16_t Tnt; /** @brief Адрес 1: Уставка времени нарастания заданного тока
@details В диапазоне от 50 до 5000 мс. @details В диапазоне от 50 до 5000 мс.
По умолчанию @ref PUI_Tnt_MS_DEFAULT */ По умолчанию @ref PUI_Tnt_MS_DEFAULT */
uint16_t Umin; /** @brief Уставка защиты №15 от понижения напряжения входной сети uint16_t Umin; /** @brief Адрес 2: Уставка защиты №15 от понижения напряжения входной сети
@details В диапазоне от 5% до 99 % от Uн = 690 В. @details В диапазоне от 5% до 99 % от Uн = 690 В.
По умолчанию @ref PUI_Umin_PERCENT_DEFAULT */ По умолчанию @ref PUI_Umin_PERCENT_DEFAULT */
uint16_t Umax; /** @brief Уставка защиты №13 от повышения напряжения входной сети uint16_t Umax; /** @brief Адрес 3: Уставка защиты №13 от повышения напряжения входной сети
@details В диапазоне от 100% до 120 % от Uн = 690 В. @details В диапазоне от 100% до 120 % от Uн = 690 В.
По умолчанию @ref PUI_Umax_PERCENT_DEFAULT */ По умолчанию @ref PUI_Umax_PERCENT_DEFAULT */
uint16_t Imax; /** @brief Уставка защиты №12 по току uint16_t Imax; /** @brief Адрес 4: Уставка защиты №12 по току
@details В диапазоне от 5 % до 99 % от 50 А. @details В диапазоне от 5 % до 99 % от 50 А.
По умолчанию @ref PUI_Imax_PERCENT_DEFAULT */ По умолчанию @ref PUI_Imax_PERCENT_DEFAULT */
uint16_t Imin; /** @brief Уставка защит № 16 №19 от обрыва фаз(ы) uint16_t Imin; /** @brief Адрес 5: Уставка защит № 16 №19 от обрыва фаз(ы)
@details В диапазоне от 0 % до 40 % от Iн = 5 А. При задании нуля эти защиты отключаются. @details В диапазоне от 0 % до 40 % от Iн = 5 А. При задании нуля эти защиты отключаются.
По умолчанию @ref PUI_Imin_PERCENT_DEFAULT */ По умолчанию @ref PUI_Imin_PERCENT_DEFAULT */
uint16_t TiMax; /** @brief Выдержка времени на срабатывание защиты № 12 по току uint16_t TiMax; /** @brief Адрес 6: Выдержка времени на срабатывание защиты № 12 по току
@details В диапазоне от 500 до 10000 мкс. @details В диапазоне от 500 до 10000 мкс.
По умолчанию @ref PUI_TiMax_US_DEFAULT */ По умолчанию @ref PUI_TiMax_US_DEFAULT */
uint16_t Tdelay; /** @brief Выдержка времени защиты № 20 от затянутого пуска uint16_t Tdelay; /** @brief Адрес 7: Выдержка времени защиты № 20 от затянутого пуска
@details В диапазоне от 5 до 60 с. @details В диапазоне от 5 до 60 с.
По умолчанию @ref PUI_Tdelay_SECONDS_DEFAULT */ По умолчанию @ref PUI_Tdelay_SECONDS_DEFAULT */
uint16_t Interlace; /** @brief Разрешение защиты № 21 от обратного порядка чередования фаз; uint16_t Interlace; /** @brief Адрес 8: Разрешение защиты № 21 от обратного порядка чередования фаз;
@details 0 нет защиты, 1 есть защита. @details 0 нет защиты, 1 есть защита.
По умолчанию @ref PUI_Interlace_EN_DEFAULT */ По умолчанию @ref PUI_Interlace_EN_DEFAULT */
} UPP_PUI_Params_t; } UPP_PUI_Params_t;

View File

@@ -29,13 +29,13 @@ static void ADC_InitAllFilters(ADC_Periodic_t *adc)
for(int i = 0; i < 2; i++) for(int i = 0; i < 2; i++)
{ {
FilterBandPassDerivative_Init(&adc->u_fltr[i], (50.0f*PM_FAST_PERIOD_US/1000000), 0.1); FilterBandPassDerivative_Init(&adc->u_fltr[i], (50.0f*PM_FAST_PERIOD_US/1000000), 0.1);
FilterMedianInt_Init(&adc->i_fltr[I_C], 5, 2048); FilterMedianInt_Init(&adc->i_fltr[i], 5, 2048);
FilterLUT_Init(&adc->temp_map[i], FilterLUT_Init(&adc->temp_map[i],
(float *)adc_temp_quants, (float *)adc_temp_quants,
(float *)adc_temp_vals, (float *)adc_temp_vals,
numbof(adc_temp_quants), 1); numbof(adc_temp_quants), 1);
} }
// Запуск фильтров // Запуск фильтров
for(int i = 0; i < 2; i++) for(int i = 0; i < 2; i++)
{ {
@@ -167,8 +167,10 @@ HAL_StatusTypeDef ADC_UpdateRegular(ADC_Periodic_t *adc)
int u_ind = ADC_U_CHANNELS_START + i; int u_ind = ADC_U_CHANNELS_START + i;
int i_ind = ADC_I_CHANNELS_START + i; int i_ind = ADC_I_CHANNELS_START + i;
// заменяем сырые данные на отфильтрованные данные // заменяем сырые данные на отфильтрованные данные
raw[u_ind] = Filter_Process(&adc->u_fltr[i], raw[u_ind]); int raw_u = Filter_Process(&adc->u_fltr[i], (int)raw[u_ind]-2048);
raw[i_ind] = Filter_Process(&adc->i_fltr[i], raw[i_ind]); int raw_i = Filter_Process(&adc->i_fltr[i], raw[i_ind]);
raw[u_ind] = raw_u+2048;
raw[i_ind] = raw_i;
} }
// Перерасчеты Напряжений/Токов в единицы измерения // Перерасчеты Напряжений/Токов в единицы измерения

View File

@@ -71,10 +71,10 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm)
/* Инициализация фильтра для сглаживания синусоиды*/ /* Инициализация фильтра для сглаживания синусоиды*/
for(int i = 0; i < 2; i++) for(int i = 0; i < 2; i++)
{ {
if(FilterBandPassDerivative_Init(&hpm->ufltr[i], (50.0f*PM_FAST_PERIOD_US/1000000), 0.1)) // if(FilterBandPassDerivative_Init(&hpm->ufltr[i], (50.0f*PM_FAST_PERIOD_US/1000000), 0.1))
return HAL_ERROR; // return HAL_ERROR;
//
Filter_Start(&hpm->ufltr[i]); // Filter_Start(&hpm->ufltr[i]);
} }
@@ -142,6 +142,7 @@ void PowerMonitor_SlowCalc(PowerMonitor_t *hpm)
/* Средниее напряжение фазы */ /* Средниее напряжение фазы */
uphase_mean = Filter_Process(&hpm->rms[RMS_U+i], meas->slow.U[i]); 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); meas->final.U[i] = Filter_Process(&hpm->rms_exp[RMS_U+i], uphase_mean);
umean += meas->final.U[i];
/* Средний ток фазы */ /* Средний ток фазы */
iphase_mean = Filter_Process(&hpm->rms[RMS_I+i], meas->slow.I[i]); iphase_mean = Filter_Process(&hpm->rms[RMS_I+i], meas->slow.I[i]);
@@ -196,10 +197,10 @@ void PowerMonitor_FastCalc(PowerMonitor_t *hpm)
ADC_UpdateRegular(&hpm->adc); ADC_UpdateRegular(&hpm->adc);
/* Заполняем Напряжения/Токи в о.е. */ /* Заполняем Напряжения/Токи в о.е. */
float uba_fast = hpm->adc.Data[ADC_CHANNEL_UBA]/u_base; meas->fast.U[U_AB] = hpm->adc.Data[ADC_CHANNEL_UBA]/u_base;
float uac_fast = hpm->adc.Data[ADC_CHANNEL_UAC]/u_base; meas->fast.U[U_CA] = hpm->adc.Data[ADC_CHANNEL_UAC]/u_base;
meas->fast.U[U_AB] = Filter_Process(&hpm->ufltr[U_AB], uba_fast); // meas->fast.U[U_AB] = Filter_Process(&hpm->ufltr[U_AB], uba_fast);
meas->fast.U[U_CA] = Filter_Process(&hpm->ufltr[U_CA], uac_fast); // meas->fast.U[U_CA] = Filter_Process(&hpm->ufltr[U_CA], uac_fast);
meas->fast.U[U_BC] = U_BC_calc(meas->fast.U[U_AB], meas->fast.U[U_CA]); meas->fast.U[U_BC] = U_BC_calc(meas->fast.U[U_AB], meas->fast.U[U_CA]);
meas->fast.I[I_C] = hpm->adc.Data[ADC_CHANNEL_IC]/i_base; meas->fast.I[I_C] = hpm->adc.Data[ADC_CHANNEL_IC]/i_base;

View File

@@ -146,11 +146,10 @@ HAL_StatusTypeDef Angle_SetAlpha(Angle_Handle_t *hangle, float Alpha, float Corr
{ {
if(assert_upp(hangle)) if(assert_upp(hangle))
return HAL_ERROR; return HAL_ERROR;
if(Alpha > hangle->Config.AngleMax) if(Alpha > hangle->Config.AngleMax)
Alpha = hangle->Config.AngleMax; Alpha = hangle->Config.AngleMax;
if(Alpha < hangle->Config.AngleMin) if(Alpha < hangle->Config.AngleMin)
Alpha = hangle->Config.AngleMin; Alpha = hangle->Config.AngleMin;

View File

@@ -280,7 +280,7 @@
<bEvRecOn>1</bEvRecOn> <bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf> <bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf> <bTchkAxf>0</bTchkAxf>
<nTsel>6</nTsel> <nTsel>4</nTsel>
<sDll></sDll> <sDll></sDll>
<sDllPa></sDllPa> <sDllPa></sDllPa>
<sDlgDll></sDlgDll> <sDlgDll></sDlgDll>
@@ -291,9 +291,14 @@
<tDlgDll></tDlgDll> <tDlgDll></tDlgDll>
<tDlgPa></tDlgPa> <tDlgPa></tDlgPa>
<tIfile></tIfile> <tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon> <pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt> </DebugOpt>
<TargetDriverDllRegistry> <TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>JL2CM3</Key>
<Name>-U60145553 -O14 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight JTAG-DP") -D00(4BA00477) -L00(4) -N01("Unknown JTAG device") -D01(06413041) -L01(5) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32F417ZGTx$CMSIS\Flash\STM32F4xx_1024.FLM)</Name>
</SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key> <Key>ARMRTXEVENTFLAGS</Key>
@@ -312,7 +317,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>DLGUARM</Key> <Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name> <Name></Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@@ -552,13 +557,6 @@
<pszMrulep></pszMrulep> <pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp> <pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp> <pMultCmdsp></pMultCmdsp>
<LogicAnalyzers>
<Wi>
<IntNumber>0</IntNumber>
<FirstString>`upp.pm.measured.final.U[0]</FirstString>
<SecondString>008000000000000000000000000000000000F03F000000000000000000000000000000007570702E706D2E6D656173757265642E66696E616C2E555B305D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000700000001000000000000000000F03F140000000000000000000000000000000000000020B20008</SecondString>
</Wi>
</LogicAnalyzers>
<SystemViewers> <SystemViewers>
<Entry> <Entry>
<Name>System Viewer\ADC3</Name> <Name>System Viewer\ADC3</Name>