Добавлен True RMS фильтр и оптимизации
This commit is contained in:
parent
3750d579fa
commit
2775e0a9b6
@ -3,6 +3,8 @@
|
|||||||
#include "dsp/none.h"
|
#include "dsp/none.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define _sqrtf(...) sqrtf(__VA_ARGS__)
|
||||||
|
|
||||||
#define __disable_irq()
|
#define __disable_irq()
|
||||||
|
|
||||||
#ifndef __ASM
|
#ifndef __ASM
|
||||||
|
|||||||
@ -5,7 +5,7 @@ VadcMax = 1216;
|
|||||||
|
|
||||||
Ts = 5e-6;
|
Ts = 5e-6;
|
||||||
Vnom = 400;
|
Vnom = 400;
|
||||||
Inom = 30;
|
Inom = 15;
|
||||||
Fnom = 50;
|
Fnom = 50;
|
||||||
|
|
||||||
Temperature1 = 2.22; % 20 градусов
|
Temperature1 = 2.22; % 20 градусов
|
||||||
|
|||||||
Binary file not shown.
@ -1 +1 @@
|
|||||||
Subproject commit c5a01c56acd851843edc478bd65c7f276a9ac8e3
|
Subproject commit 1f7384c5edc30469217ca49c6489bdab13460320
|
||||||
@ -35,6 +35,7 @@
|
|||||||
//#define UPP_SIMULATE_I ///< Симулировт токи (Iref/2) а не брать с АЦП
|
//#define UPP_SIMULATE_I ///< Симулировт токи (Iref/2) а не брать с АЦП
|
||||||
#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 UPP_ANGLE_COSINE ///< Расчет угла через acos, а не линейно
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @addtogroup UPP_PARAMS_DEFAULT Default params for external flash
|
* @addtogroup UPP_PARAMS_DEFAULT Default params for external flash
|
||||||
@ -86,7 +87,8 @@
|
|||||||
#define ANGLE_PID_KD_COEF_DEFAULT 0
|
#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
|
#define ADC_U_MAX_V_DEFAULT 1216.0
|
||||||
|
|||||||
@ -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].vMax = valueMax;
|
||||||
adc->Coefs[ChNumb].lZero = levelZero;
|
adc->Coefs[ChNumb].lZero = levelZero;
|
||||||
|
|
||||||
ADC_ResetStatistics(adc, ChNumb);
|
|
||||||
return HAL_OK;
|
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 Обработка АЦП.
|
* @brief Обработка АЦП.
|
||||||
* @return HAL Status.
|
* @return HAL Status.
|
||||||
* @details По факту остановка таймера, который запускает АЦП. Сам АЦП продолжает работу.
|
* @note Вызывается в DMA2_Stream0_IRQHandler() для обработки напряжений/токов,
|
||||||
* @note Вызывается в DMA2_Stream0_IRQHandler() для обработки всего, что пришло по DMA.
|
которые пришли по DMA.
|
||||||
*/
|
*/
|
||||||
HAL_StatusTypeDef ADC_Handle(ADC_Periodic_t *adc)
|
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;
|
uint16_t *raw = adc->RawData;
|
||||||
float *data = adc->Data;
|
float *data = adc->Data;
|
||||||
|
|
||||||
// // Фильтрация от импульсных шумов для всех каналов
|
// Фильтрация от импульсных шумов для каналов напряжения/токов
|
||||||
for(int i = 0; i < ADC_NUMB_OF_CHANNELS; i++)
|
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);
|
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]))
|
if(Filter_isDataReady(&adc->filter[0]))
|
||||||
adc->f.DataReady = 1;
|
adc->f.DataReady = 1;
|
||||||
|
|
||||||
return HAL_OK;
|
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));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@ -53,7 +53,7 @@ static const float adc_temp_quants[] = ADC_TEMPERATURES_QUANTS;
|
|||||||
|
|
||||||
#define Filter_t FilterMedianInt_t
|
#define Filter_t FilterMedianInt_t
|
||||||
#define Filter_Init FilterMedianInt_Init
|
#define Filter_Init FilterMedianInt_Init
|
||||||
#define Filter_Initializator 10, 2048
|
#define Filter_Initializator 5, 2048
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Коэфициенты канала АЦП для пересчета в единицы измерения
|
* @brief Коэфициенты канала АЦП для пересчета в единицы измерения
|
||||||
@ -105,7 +105,6 @@ typedef struct
|
|||||||
FilterLUT_t temp_map[2]; ///< Коррекция нелинейности датчиков температуры
|
FilterLUT_t temp_map[2]; ///< Коррекция нелинейности датчиков температуры
|
||||||
|
|
||||||
float Data[ADC_NUMB_OF_CHANNELS]; ///< Пересчитанные значения АЦП (в Вольтах/Амперах)
|
float Data[ADC_NUMB_OF_CHANNELS]; ///< Пересчитанные значения АЦП (в Вольтах/Амперах)
|
||||||
ADC_Statistics Stat[ADC_NUMB_OF_REGULAR_CHANNELS]; ///< Статистика для регулярных каналов (не температуры)
|
|
||||||
|
|
||||||
struct
|
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_Start(ADC_Periodic_t *adc, float PeriodUs);
|
||||||
/* Остановка АЦП. */
|
/* Остановка АЦП. */
|
||||||
HAL_StatusTypeDef ADC_Stop(ADC_Periodic_t *adc);
|
HAL_StatusTypeDef ADC_Stop(ADC_Periodic_t *adc);
|
||||||
|
/* Обновление температур АЦП. */
|
||||||
|
HAL_StatusTypeDef ADC_UpdateTemperatures(ADC_Periodic_t *adc);
|
||||||
/* Обработка АЦП после получения данных. */
|
/* Обработка АЦП после получения данных. */
|
||||||
HAL_StatusTypeDef ADC_Handle(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_
|
#endif //_ADC_TOOLS_H_
|
||||||
|
|||||||
@ -69,12 +69,19 @@ HAL_StatusTypeDef PowerMonitor_Init(PowerMonitor_t *hpm)
|
|||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
|
|
||||||
/* Инициализация экпоненциального фильтра медленного алга */
|
/* Инициализация RMS фильтра медленного алга */
|
||||||
for(int i = 0; i < EXP_ALL; i++)
|
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;
|
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;
|
PowerMonitor_Measured_t *meas = &hpm->measured;
|
||||||
|
|
||||||
/* Обработка температур */
|
/* Обработка температур */
|
||||||
|
ADC_UpdateTemperatures(&hpm->adc);
|
||||||
float t1 = hpm->adc.Data[ADC_CHANNEL_TEMP1];
|
float t1 = hpm->adc.Data[ADC_CHANNEL_TEMP1];
|
||||||
float t2 = hpm->adc.Data[ADC_CHANNEL_TEMP2];
|
float t2 = hpm->adc.Data[ADC_CHANNEL_TEMP2];
|
||||||
meas->final.T[TEMP_1] = Filter_Process(&hpm->avg[AVG_TEMP1], t1);
|
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];
|
fmean += meas->final.F[i];
|
||||||
|
|
||||||
/* Средниее напряжение фазы */
|
/* Средниее напряжение фазы */
|
||||||
uphase_mean = fabsf(meas->slow.U[i]);
|
// uphase_mean = fabsf(meas->slow.U[i]);
|
||||||
uphase_mean = Filter_Process(&hpm->exp[EXP_UAB+i], uphase_mean);
|
// uphase_mean = Filter_Process(&hpm->rms[RMS_UAB+i], uphase_mean);
|
||||||
meas->final.U[i] = uphase_mean*PI/2/SQRT2; /*PI/2 - получить амплитудное, SQRT2 - получить действующее */
|
// 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 = fabsf(meas->slow.I[i]);
|
||||||
iphase_mean = Filter_Process(&hpm->exp[EXP_IC+i], iphase_mean)*PI/2;
|
// 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 - получить действующее */
|
// 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;
|
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 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 - получить действующее */
|
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.Uamp = Filter_Process(&hpm->rms_exp[RMS_EXP_U], uamp);;//Filter_Process(&hpm->rms[RMS_U], uamp);
|
||||||
meas->final.Iamp = Filter_Process(&hpm->exp[EXP_I], iamp);
|
meas->final.Iamp = Filter_Process(&hpm->rms_exp[RMS_EXP_I], iamp);;//Filter_Process(&hpm->rms[RMS_I], iamp);
|
||||||
|
|
||||||
|
|
||||||
hpm->slow_cnt++;
|
hpm->slow_cnt++;
|
||||||
|
|||||||
@ -12,17 +12,22 @@
|
|||||||
#include "adc_tools.h"
|
#include "adc_tools.h"
|
||||||
#include "zero_cross.h"
|
#include "zero_cross.h"
|
||||||
|
|
||||||
/* Индексы экспоненциальных фильтров */
|
/* Индексы RMS фильтров */
|
||||||
#define EXP_ALL 8
|
#define RMS_ALL 6
|
||||||
#define EXP_U 0
|
#define RMS_U 0
|
||||||
#define EXP_UAB 1
|
#define RMS_UAB 0
|
||||||
#define EXP_UCA 2
|
#define RMS_UCA 1
|
||||||
#define EXP_UBC 3
|
#define RMS_UBC 2
|
||||||
#define EXP_I 4
|
#define RMS_I 3
|
||||||
#define EXP_IC 5
|
#define RMS_IC 3
|
||||||
#define EXP_IA 6
|
#define RMS_IA 4
|
||||||
#define EXP_IB 7
|
#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_ALL 9
|
||||||
#define AVG_UAB 0
|
#define AVG_UAB 0
|
||||||
#define AVG_UCA 1
|
#define AVG_UCA 1
|
||||||
@ -30,6 +35,7 @@
|
|||||||
#define AVG_IA 3
|
#define AVG_IA 3
|
||||||
#define AVG_TEMP1 4
|
#define AVG_TEMP1 4
|
||||||
#define AVG_TEMP2 5
|
#define AVG_TEMP2 5
|
||||||
|
#define AVG_F 6
|
||||||
#define AVG_FAB 6
|
#define AVG_FAB 6
|
||||||
#define AVG_FCA 7
|
#define AVG_FCA 7
|
||||||
#define AVG_FBC 8
|
#define AVG_FBC 8
|
||||||
@ -99,8 +105,9 @@ typedef struct
|
|||||||
|
|
||||||
PowerMonitor_Measured_t measured; ///< Измеренные/рассчитанные величины
|
PowerMonitor_Measured_t measured; ///< Измеренные/рассчитанные величины
|
||||||
|
|
||||||
FilterExp_t exp[EXP_ALL]; ///< Фильтры для сглаживания мговенного значения Напряжения/Токов
|
FilterRMS_t rms[RMS_ALL]; ///< Фильтры для расчета действующего значения Напряжения/Токов
|
||||||
FilterAverage_t avg[AVG_ALL]; ///< Фильтры для сглаживания медленных величин АЦП
|
FilterExp_t rms_exp[RMS_EXP_ALL]; ///< Фильтры для сглаживания действующего значения Напряжения/Токов +2 для результируюзих U, I
|
||||||
|
FilterAverage_t avg[AVG_ALL]; ///< Фильтры для сглаживания медленных величин АЦП
|
||||||
|
|
||||||
PowerMonitor_Flags_t f; ///< Флаги мониторинга
|
PowerMonitor_Flags_t f; ///< Флаги мониторинга
|
||||||
uint32_t isr_cnt;
|
uint32_t isr_cnt;
|
||||||
|
|||||||
@ -139,10 +139,14 @@ HAL_StatusTypeDef Angle_SetAngle(Angle_Handle_t *hangle, float OpenLevel)
|
|||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
/* Приводим уровень открытия к косинусу [-1:1]*/
|
/* Приводим уровень открытия к косинусу [-1:1]*/
|
||||||
|
#ifdef UPP_ANGLE_COSINE
|
||||||
float OpenLevelForCos = (OpenLevel*2)-1;
|
float OpenLevelForCos = (OpenLevel*2)-1;
|
||||||
|
|
||||||
float alpha_rad = acosf(OpenLevelForCos); // угол в радианах
|
float alpha_rad = acosf(OpenLevelForCos); // угол в радианах
|
||||||
float alpha = alpha_rad/PI* hangle->Config.PeriodLimit; // время открытие в процентах от периода - когда открыть
|
float alpha = alpha_rad/PI* hangle->Config.PeriodLimit; // время открытие в процентах от периода - когда открыть
|
||||||
|
#else
|
||||||
|
float alpha = (1-OpenLevel) * hangle->Config.PeriodLimit; // время открытие в процентах от периода - когда открыть
|
||||||
|
#endif
|
||||||
|
|
||||||
if(alpha > hangle->Config.AngleMax)
|
if(alpha > hangle->Config.AngleMax)
|
||||||
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;
|
return HAL_ERROR;
|
||||||
|
|
||||||
hangle->Config.PeriodLimit = PeriodLimit;
|
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;
|
return HAL_OK;
|
||||||
}
|
}
|
||||||
@ -341,12 +340,7 @@ HAL_StatusTypeDef Angle_SetRange(Angle_Handle_t *hangle, float AngleMin, float A
|
|||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
if(AngleMin < 0 || AngleMin > 1)
|
if(AngleMin < 0 || AngleMin > 1)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
if(AngleMax > hangle->Config.PeriodLimit)
|
|
||||||
AngleMax = hangle->Config.PeriodLimit;
|
|
||||||
if(AngleMin > hangle->Config.PeriodLimit)
|
|
||||||
AngleMin = hangle->Config.PeriodLimit;
|
|
||||||
|
|
||||||
if(AngleMin >= AngleMax)
|
if(AngleMin >= AngleMax)
|
||||||
return HAL_ERROR;
|
return HAL_ERROR;
|
||||||
|
|
||||||
|
|||||||
@ -127,7 +127,8 @@ void UPP_Params_ControlInternal(void)
|
|||||||
float pwm_duty = upp.hpwm.Config.Duty;
|
float pwm_duty = upp.hpwm.Config.Duty;
|
||||||
uint8_t pwm_pulse_num = upp.hpwm.Config.PulseNumber;
|
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_ReInit(&upp.pm.rms[i], pm_rms_widnow_size);
|
||||||
Filter_Start(&upp.pm.exp[i]);
|
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.F_deviation_minus = NOM_F_DEVIATION_MINUS_PERCENT_DEFAULT*100;
|
||||||
PARAM_INTERNAL.nominal.I = NOM_I_A_DEFAULT*10;
|
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_UBA] = ADC_U_MAX_V_DEFAULT*10;
|
||||||
PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UAC] = ADC_U_MAX_V_DEFAULT*10;
|
PARAM_INTERNAL.adc.ADC_Max[ADC_CHANNEL_UAC] = ADC_U_MAX_V_DEFAULT*10;
|
||||||
|
|||||||
@ -49,7 +49,8 @@ typedef struct
|
|||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
uint16_t mean_alpha; ///< Коэф альфа для усредняющего эксп. фильтра [0..1 x 65535]
|
uint16_t rms_window_size; ///< Размер окна для RMS
|
||||||
|
uint16_t rms_exp_alpha; ///< Постоянная времени для сглаживания RMS
|
||||||
}pm;
|
}pm;
|
||||||
|
|
||||||
UPP_ParamsNominal_t nominal;
|
UPP_ParamsNominal_t nominal;
|
||||||
|
|||||||
@ -360,7 +360,7 @@
|
|||||||
<Ww>
|
<Ww>
|
||||||
<count>6</count>
|
<count>6</count>
|
||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>sysclockfreq,0x0A</ItemText>
|
<ItemText>hbt,0x0A</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
<Ww>
|
<Ww>
|
||||||
<count>7</count>
|
<count>7</count>
|
||||||
|
|||||||
@ -1506,6 +1506,57 @@
|
|||||||
<FileName>power_monitor.c</FileName>
|
<FileName>power_monitor.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\Core\PowerMonitor\power_monitor.c</FilePath>
|
<FilePath>..\Core\PowerMonitor\power_monitor.c</FilePath>
|
||||||
|
<FileOption>
|
||||||
|
<CommonProperty>
|
||||||
|
<UseCPPCompiler>2</UseCPPCompiler>
|
||||||
|
<RVCTCodeConst>0</RVCTCodeConst>
|
||||||
|
<RVCTZI>0</RVCTZI>
|
||||||
|
<RVCTOtherData>0</RVCTOtherData>
|
||||||
|
<ModuleSelection>0</ModuleSelection>
|
||||||
|
<IncludeInBuild>2</IncludeInBuild>
|
||||||
|
<AlwaysBuild>2</AlwaysBuild>
|
||||||
|
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||||
|
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||||
|
<PublicsOnly>2</PublicsOnly>
|
||||||
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
|
<CustomArgument></CustomArgument>
|
||||||
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
|
</CommonProperty>
|
||||||
|
<FileArmAds>
|
||||||
|
<Cads>
|
||||||
|
<interw>2</interw>
|
||||||
|
<Optim>5</Optim>
|
||||||
|
<oTime>2</oTime>
|
||||||
|
<SplitLS>2</SplitLS>
|
||||||
|
<OneElfS>2</OneElfS>
|
||||||
|
<Strict>2</Strict>
|
||||||
|
<EnumInt>2</EnumInt>
|
||||||
|
<PlainCh>2</PlainCh>
|
||||||
|
<Ropi>2</Ropi>
|
||||||
|
<Rwpi>2</Rwpi>
|
||||||
|
<wLevel>0</wLevel>
|
||||||
|
<uThumb>2</uThumb>
|
||||||
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<uC99>2</uC99>
|
||||||
|
<uGnu>2</uGnu>
|
||||||
|
<useXO>2</useXO>
|
||||||
|
<v6Lang>0</v6Lang>
|
||||||
|
<v6LangP>0</v6LangP>
|
||||||
|
<vShortEn>2</vShortEn>
|
||||||
|
<vShortWch>2</vShortWch>
|
||||||
|
<v6Lto>2</v6Lto>
|
||||||
|
<v6WtE>2</v6WtE>
|
||||||
|
<v6Rtti>2</v6Rtti>
|
||||||
|
<VariousControls>
|
||||||
|
<MiscControls></MiscControls>
|
||||||
|
<Define></Define>
|
||||||
|
<Undefine></Undefine>
|
||||||
|
<IncludePath></IncludePath>
|
||||||
|
</VariousControls>
|
||||||
|
</Cads>
|
||||||
|
</FileArmAds>
|
||||||
|
</FileOption>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>power_monitor.h</FileName>
|
<FileName>power_monitor.h</FileName>
|
||||||
@ -1516,6 +1567,57 @@
|
|||||||
<FileName>zero_cross.c</FileName>
|
<FileName>zero_cross.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\Core\PowerMonitor\zero_cross.c</FilePath>
|
<FilePath>..\Core\PowerMonitor\zero_cross.c</FilePath>
|
||||||
|
<FileOption>
|
||||||
|
<CommonProperty>
|
||||||
|
<UseCPPCompiler>2</UseCPPCompiler>
|
||||||
|
<RVCTCodeConst>0</RVCTCodeConst>
|
||||||
|
<RVCTZI>0</RVCTZI>
|
||||||
|
<RVCTOtherData>0</RVCTOtherData>
|
||||||
|
<ModuleSelection>0</ModuleSelection>
|
||||||
|
<IncludeInBuild>2</IncludeInBuild>
|
||||||
|
<AlwaysBuild>2</AlwaysBuild>
|
||||||
|
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||||
|
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||||
|
<PublicsOnly>2</PublicsOnly>
|
||||||
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
|
<CustomArgument></CustomArgument>
|
||||||
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
|
</CommonProperty>
|
||||||
|
<FileArmAds>
|
||||||
|
<Cads>
|
||||||
|
<interw>2</interw>
|
||||||
|
<Optim>5</Optim>
|
||||||
|
<oTime>2</oTime>
|
||||||
|
<SplitLS>2</SplitLS>
|
||||||
|
<OneElfS>2</OneElfS>
|
||||||
|
<Strict>2</Strict>
|
||||||
|
<EnumInt>2</EnumInt>
|
||||||
|
<PlainCh>2</PlainCh>
|
||||||
|
<Ropi>2</Ropi>
|
||||||
|
<Rwpi>2</Rwpi>
|
||||||
|
<wLevel>0</wLevel>
|
||||||
|
<uThumb>2</uThumb>
|
||||||
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<uC99>2</uC99>
|
||||||
|
<uGnu>2</uGnu>
|
||||||
|
<useXO>2</useXO>
|
||||||
|
<v6Lang>0</v6Lang>
|
||||||
|
<v6LangP>0</v6LangP>
|
||||||
|
<vShortEn>2</vShortEn>
|
||||||
|
<vShortWch>2</vShortWch>
|
||||||
|
<v6Lto>2</v6Lto>
|
||||||
|
<v6WtE>2</v6WtE>
|
||||||
|
<v6Rtti>2</v6Rtti>
|
||||||
|
<VariousControls>
|
||||||
|
<MiscControls></MiscControls>
|
||||||
|
<Define></Define>
|
||||||
|
<Undefine></Undefine>
|
||||||
|
<IncludePath></IncludePath>
|
||||||
|
</VariousControls>
|
||||||
|
</Cads>
|
||||||
|
</FileArmAds>
|
||||||
|
</FileOption>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>zero_cross.h</FileName>
|
<FileName>zero_cross.h</FileName>
|
||||||
@ -1526,6 +1628,57 @@
|
|||||||
<FileName>adc_tools.c</FileName>
|
<FileName>adc_tools.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\Core\PowerMonitor\adc_tools.c</FilePath>
|
<FilePath>..\Core\PowerMonitor\adc_tools.c</FilePath>
|
||||||
|
<FileOption>
|
||||||
|
<CommonProperty>
|
||||||
|
<UseCPPCompiler>2</UseCPPCompiler>
|
||||||
|
<RVCTCodeConst>0</RVCTCodeConst>
|
||||||
|
<RVCTZI>0</RVCTZI>
|
||||||
|
<RVCTOtherData>0</RVCTOtherData>
|
||||||
|
<ModuleSelection>0</ModuleSelection>
|
||||||
|
<IncludeInBuild>2</IncludeInBuild>
|
||||||
|
<AlwaysBuild>2</AlwaysBuild>
|
||||||
|
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||||
|
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||||
|
<PublicsOnly>2</PublicsOnly>
|
||||||
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
|
<CustomArgument></CustomArgument>
|
||||||
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
|
</CommonProperty>
|
||||||
|
<FileArmAds>
|
||||||
|
<Cads>
|
||||||
|
<interw>2</interw>
|
||||||
|
<Optim>5</Optim>
|
||||||
|
<oTime>2</oTime>
|
||||||
|
<SplitLS>2</SplitLS>
|
||||||
|
<OneElfS>2</OneElfS>
|
||||||
|
<Strict>2</Strict>
|
||||||
|
<EnumInt>2</EnumInt>
|
||||||
|
<PlainCh>2</PlainCh>
|
||||||
|
<Ropi>2</Ropi>
|
||||||
|
<Rwpi>2</Rwpi>
|
||||||
|
<wLevel>0</wLevel>
|
||||||
|
<uThumb>2</uThumb>
|
||||||
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<uC99>2</uC99>
|
||||||
|
<uGnu>2</uGnu>
|
||||||
|
<useXO>2</useXO>
|
||||||
|
<v6Lang>0</v6Lang>
|
||||||
|
<v6LangP>0</v6LangP>
|
||||||
|
<vShortEn>2</vShortEn>
|
||||||
|
<vShortWch>2</vShortWch>
|
||||||
|
<v6Lto>2</v6Lto>
|
||||||
|
<v6WtE>2</v6WtE>
|
||||||
|
<v6Rtti>2</v6Rtti>
|
||||||
|
<VariousControls>
|
||||||
|
<MiscControls></MiscControls>
|
||||||
|
<Define></Define>
|
||||||
|
<Undefine></Undefine>
|
||||||
|
<IncludePath></IncludePath>
|
||||||
|
</VariousControls>
|
||||||
|
</Cads>
|
||||||
|
</FileArmAds>
|
||||||
|
</FileOption>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>adc_tools.h</FileName>
|
<FileName>adc_tools.h</FileName>
|
||||||
@ -1536,6 +1689,57 @@
|
|||||||
<FileName>phases_transform.c</FileName>
|
<FileName>phases_transform.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\Core\PowerMonitor\phases_transform.c</FilePath>
|
<FilePath>..\Core\PowerMonitor\phases_transform.c</FilePath>
|
||||||
|
<FileOption>
|
||||||
|
<CommonProperty>
|
||||||
|
<UseCPPCompiler>2</UseCPPCompiler>
|
||||||
|
<RVCTCodeConst>0</RVCTCodeConst>
|
||||||
|
<RVCTZI>0</RVCTZI>
|
||||||
|
<RVCTOtherData>0</RVCTOtherData>
|
||||||
|
<ModuleSelection>0</ModuleSelection>
|
||||||
|
<IncludeInBuild>2</IncludeInBuild>
|
||||||
|
<AlwaysBuild>2</AlwaysBuild>
|
||||||
|
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||||
|
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||||
|
<PublicsOnly>2</PublicsOnly>
|
||||||
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
|
<CustomArgument></CustomArgument>
|
||||||
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
|
</CommonProperty>
|
||||||
|
<FileArmAds>
|
||||||
|
<Cads>
|
||||||
|
<interw>2</interw>
|
||||||
|
<Optim>5</Optim>
|
||||||
|
<oTime>2</oTime>
|
||||||
|
<SplitLS>2</SplitLS>
|
||||||
|
<OneElfS>2</OneElfS>
|
||||||
|
<Strict>2</Strict>
|
||||||
|
<EnumInt>2</EnumInt>
|
||||||
|
<PlainCh>2</PlainCh>
|
||||||
|
<Ropi>2</Ropi>
|
||||||
|
<Rwpi>2</Rwpi>
|
||||||
|
<wLevel>0</wLevel>
|
||||||
|
<uThumb>2</uThumb>
|
||||||
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<uC99>2</uC99>
|
||||||
|
<uGnu>2</uGnu>
|
||||||
|
<useXO>2</useXO>
|
||||||
|
<v6Lang>0</v6Lang>
|
||||||
|
<v6LangP>0</v6LangP>
|
||||||
|
<vShortEn>2</vShortEn>
|
||||||
|
<vShortWch>2</vShortWch>
|
||||||
|
<v6Lto>2</v6Lto>
|
||||||
|
<v6WtE>2</v6WtE>
|
||||||
|
<v6Rtti>2</v6Rtti>
|
||||||
|
<VariousControls>
|
||||||
|
<MiscControls></MiscControls>
|
||||||
|
<Define></Define>
|
||||||
|
<Undefine></Undefine>
|
||||||
|
<IncludePath></IncludePath>
|
||||||
|
</VariousControls>
|
||||||
|
</Cads>
|
||||||
|
</FileArmAds>
|
||||||
|
</FileOption>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>phases_transform.h</FileName>
|
<FileName>phases_transform.h</FileName>
|
||||||
@ -1666,6 +1870,57 @@
|
|||||||
<FileName>filters.c</FileName>
|
<FileName>filters.c</FileName>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<FilePath>..\AllLibs\MyLibs\MyLibs\Src\filters.c</FilePath>
|
<FilePath>..\AllLibs\MyLibs\MyLibs\Src\filters.c</FilePath>
|
||||||
|
<FileOption>
|
||||||
|
<CommonProperty>
|
||||||
|
<UseCPPCompiler>2</UseCPPCompiler>
|
||||||
|
<RVCTCodeConst>0</RVCTCodeConst>
|
||||||
|
<RVCTZI>0</RVCTZI>
|
||||||
|
<RVCTOtherData>0</RVCTOtherData>
|
||||||
|
<ModuleSelection>0</ModuleSelection>
|
||||||
|
<IncludeInBuild>2</IncludeInBuild>
|
||||||
|
<AlwaysBuild>2</AlwaysBuild>
|
||||||
|
<GenerateAssemblyFile>2</GenerateAssemblyFile>
|
||||||
|
<AssembleAssemblyFile>2</AssembleAssemblyFile>
|
||||||
|
<PublicsOnly>2</PublicsOnly>
|
||||||
|
<StopOnExitCode>11</StopOnExitCode>
|
||||||
|
<CustomArgument></CustomArgument>
|
||||||
|
<IncludeLibraryModules></IncludeLibraryModules>
|
||||||
|
<ComprImg>1</ComprImg>
|
||||||
|
</CommonProperty>
|
||||||
|
<FileArmAds>
|
||||||
|
<Cads>
|
||||||
|
<interw>2</interw>
|
||||||
|
<Optim>5</Optim>
|
||||||
|
<oTime>2</oTime>
|
||||||
|
<SplitLS>2</SplitLS>
|
||||||
|
<OneElfS>2</OneElfS>
|
||||||
|
<Strict>2</Strict>
|
||||||
|
<EnumInt>2</EnumInt>
|
||||||
|
<PlainCh>2</PlainCh>
|
||||||
|
<Ropi>2</Ropi>
|
||||||
|
<Rwpi>2</Rwpi>
|
||||||
|
<wLevel>0</wLevel>
|
||||||
|
<uThumb>2</uThumb>
|
||||||
|
<uSurpInc>2</uSurpInc>
|
||||||
|
<uC99>2</uC99>
|
||||||
|
<uGnu>2</uGnu>
|
||||||
|
<useXO>2</useXO>
|
||||||
|
<v6Lang>0</v6Lang>
|
||||||
|
<v6LangP>0</v6LangP>
|
||||||
|
<vShortEn>2</vShortEn>
|
||||||
|
<vShortWch>2</vShortWch>
|
||||||
|
<v6Lto>2</v6Lto>
|
||||||
|
<v6WtE>2</v6WtE>
|
||||||
|
<v6Rtti>2</v6Rtti>
|
||||||
|
<VariousControls>
|
||||||
|
<MiscControls></MiscControls>
|
||||||
|
<Define></Define>
|
||||||
|
<Undefine></Undefine>
|
||||||
|
<IncludePath></IncludePath>
|
||||||
|
</VariousControls>
|
||||||
|
</Cads>
|
||||||
|
</FileArmAds>
|
||||||
|
</FileOption>
|
||||||
</File>
|
</File>
|
||||||
<File>
|
<File>
|
||||||
<FileName>filters.h</FileName>
|
<FileName>filters.h</FileName>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user