/* * FRAMConfigurationParameters.cpp * * Author: Aleksey Gerasimenko * gerasimenko.aleksey.n@gmail.com */ #include "FRAM/FRAMDATABASE.h" namespace FRAM { void FRAMDATABASE::register_configuration_parameters(SYSCTRL::SystemControlConfiguration *sys_config) { m_fram_object_index = 0; m_fram_object_address = 0; m_fram_object_last_address = 0; //add_register_float(uint8_t readonly, float* pParam, float default_value); //add_register_int(uint8_t readonly, int16_t* pParam, int16_t default_value); // // // References // add_float( 0, &sys_config->reference_current_limit_rms, CURRENT_LIMIT_RMS); add_float( 0, &sys_config->reference_current_pfc_rms, CURRENT_PFC_RMS); add_float( 0, &sys_config->reference_voltage_rms, GRID_VOLTAGE_REFERENCE); add_float( 0, &sys_config->reference_voltage_high_limit_rms, GRID_VOLTAGE_HIGH_LIMIT); add_float( 0, &sys_config->reference_voltage_dc, CELL_DC_VOLTAGE_REFERENCE); //<> // // Algorithm Control Register add_uint16(0, &sys_config->algorithm_control.all, ENABLE_CONTROL_BIT); //<> // // High Voltage Cell // add_uint16(0, &sys_config->hardware.cell_level, 4); add_uint16(0, &sys_config->hardware.version.pwm, 210); add_uint16(0, &sys_config->hardware.version.cell, 211); add_uint32(0, &sys_config->hardware.version.cpu_cpld, 202); //<> add_float( 0, &sys_config->minimal_input_voltage_level, 10.0); //<> // // Scale Analog Signals // add_float( 0, &sys_config->scale_voltage_input_a, 0.166324854);//0.0227386411//0.0233486816; add_float( 0, &sys_config->scale_voltage_input_b, 0.166955084);//0.0227597337//0.0234651081; add_float( 0, &sys_config->scale_voltage_input_c, 0.170290515);//0.02278281//0.0236082859; // add_float( 0, &sys_config->scale_current_input_a, 0.0057266783); add_float( 0, &sys_config->scale_current_input_b, 0.00571648451); add_float( 0, &sys_config->scale_current_input_c, 0.00571565609); // add_float( 0, &sys_config->scale_current_cell_a, 0.0095403092);//0.00665648002; add_float( 0, &sys_config->scale_current_cell_b, 0.00967073813);//0.00667640707; add_float( 0, &sys_config->scale_current_cell_c, 0.00962774921);//0.00666095456; // add_float( 0, &sys_config->scale_voltage_load_a, 0.168764219);//0.0227408651//0.0232194811; add_float( 0, &sys_config->scale_voltage_load_b, 0.167528242);//0.0227707103//0.0233941432; add_float( 0, &sys_config->scale_voltage_load_c, 0.171417475);//0.0229060184//0.0234934501; // add_float( 0, &sys_config->scale_current_load_a, 0.00949461199);//0.00668919506; add_float( 0, &sys_config->scale_current_load_b, 0.00953965727);//0.00669770781; add_float( 0, &sys_config->scale_current_load_c, 0.00959520414);//0.00670575583; // add_float( 0, &sys_config->scale_current_bypass_a, 0.00953388773); add_float( 0, &sys_config->scale_current_bypass_b, 0.00956917088); add_float( 0, &sys_config->scale_current_bypass_c, 0.00956158526); //<> // // Amplitude Filter Parameters // add_float( 0, &sys_config->ampl_filter_current.time, 20.0e-3); add_float( 0, &sys_config->ampl_filter_current.a3, 2.61313); add_float( 0, &sys_config->ampl_filter_current.a2, 3.41422); add_float( 0, &sys_config->ampl_filter_current.a1, 2.61313); //<> // // RMS Filter Parameters // add_float( 0, &sys_config->rms_filter_analog_signal.time, 10.0e-3); add_float( 0, &sys_config->rms_filter_analog_signal.a3, 2.61313); add_float( 0, &sys_config->rms_filter_analog_signal.a2, 3.41422); add_float( 0, &sys_config->rms_filter_analog_signal.a1, 2.61313); //<> // // Zero Drift Current Input // add_float( 0, &sys_config->zero_filter.time, 1.333); //<> // // Cell DC Voltage Filter // add_float( 0, &sys_config->cell_dc_voltage_filter.time, 3.0e-3); add_float( 0, &sys_config->cell_dc_voltage_filter.a3, 2.61313); add_float( 0, &sys_config->cell_dc_voltage_filter.a2, 3.41422); add_float( 0, &sys_config->cell_dc_voltage_filter.a1, 2.61313); //<> // // Signal Decompose // add_float( 0, &sys_config->signal_decompose.projection_filter.time, 10.0e-3); add_float( 0, &sys_config->signal_decompose.projection_filter.a3, 2.61313); add_float( 0, &sys_config->signal_decompose.projection_filter.a2, 3.41422); add_float( 0, &sys_config->signal_decompose.projection_filter.a1, 2.61313); //<> // // Relative // add_float( 0, &sys_config->relative_voltage_input.minimal_amplitude_level, 0.1); add_float( 0, &sys_config->relative_voltage_input.limit_relative_high, 1.1); add_float( 0, &sys_config->relative_voltage_input.limit_relative_low, -1.1); add_float( 0, &sys_config->relative_voltage_input.amplitude_filter.time, (float)(1.0/2.0/FP_PI/10.0)); add_float( 0, &sys_config->relative_voltage_input.amplitude_filter.a3, 2.61313); add_float( 0, &sys_config->relative_voltage_input.amplitude_filter.a2, 3.41422); add_float( 0, &sys_config->relative_voltage_input.amplitude_filter.a1, 2.61313); //<> // // Voltage PLL-ABC Parameters // add_float( 0, &sys_config->pll_abc_input_voltage.frequency_nominal, PLLABC_FREQUENCY_NOMINAL); add_float( 0, &sys_config->pll_abc_input_voltage.filter.time, 1.0/PLLABC_FREQUENCY_CUT); add_float( 0, &sys_config->pll_abc_input_voltage.controller.gain, PLLABC_FREQUENCY_CUT/2.0); add_float( 0, &sys_config->pll_abc_input_voltage.controller.time, 4.0/PLLABC_FREQUENCY_CUT); add_float( 0, &sys_config->pll_abc_input_voltage.controller.low_saturation, PLLABC_FREQUENCY_LIMIT_LOW); add_float( 0, &sys_config->pll_abc_input_voltage.controller.high_saturation, PLLABC_FREQUENCY_LIMIT_HI); add_float( 0, &sys_config->pll_abc_input_voltage.position.time, 1.0); add_float( 0, &sys_config->pll_abc_input_voltage.position.low_saturation, FP_ZERO); add_float( 0, &sys_config->pll_abc_input_voltage.position.high_saturation, 2.0 * FP_PI); //<> // // System Alarm // // exceed voltage level 1 add_float( 0, &sys_config->phase_alert_monitor.voltage_exceed_level_1.level, NOMINAL_GRID_VOLTAGE * ((float)1.0 + (PROTECTION_EXCEED_VOLTAGE_LEVEL_1_PERCENT / (float)100.0)));//253.0; add_float( 0, &sys_config->phase_alert_monitor.voltage_exceed_level_1.period, 10.0); // // exceed voltage level 2 add_float( 0, &sys_config->phase_alert_monitor.voltage_exceed_level_2.level, NOMINAL_GRID_VOLTAGE * ((float)1.0 + (PROTECTION_EXCEED_VOLTAGE_LEVEL_2_PERCENT / (float)100.0)));//264.5; add_float( 0, &sys_config->phase_alert_monitor.voltage_exceed_level_2.period, 5.0); // // exceed voltage level 3 add_float( 0, &sys_config->phase_alert_monitor.voltage_exceed_level_3.level, NOMINAL_GRID_VOLTAGE * ((float)1.0 + (PROTECTION_EXCEED_VOLTAGE_LEVEL_3_PERCENT / (float)100.0)));//276.0; add_float( 0, &sys_config->phase_alert_monitor.voltage_exceed_level_3.period, 2.0); // // exceed voltage level 4 add_float( 0, &sys_config->phase_alert_monitor.voltage_exceed_level_4.level, NOMINAL_GRID_VOLTAGE * ((float)1.0 + (PROTECTION_EXCEED_VOLTAGE_LEVEL_4_PERCENT / (float)100.0))); add_float( 0, &sys_config->phase_alert_monitor.voltage_exceed_level_4.period, 0.004);//1.0; // // decrease voltage level 1 add_float( 0, &sys_config->phase_alert_monitor.voltage_decrease_level_1.level, NOMINAL_GRID_VOLTAGE * ((float)1.0 - (PROTECTION_DECREASE_VOLTAGE_LEVEL_1_PERCENT / (float)100.0)));//218.5;//195.5; add_float( 0, &sys_config->phase_alert_monitor.voltage_decrease_level_1.period, 10.0); // // decrease voltage level 2 add_float( 0, &sys_config->phase_alert_monitor.voltage_decrease_level_2.level, NOMINAL_GRID_VOLTAGE * ((float)1.0 - (PROTECTION_DECREASE_VOLTAGE_LEVEL_2_PERCENT / (float)100.0)));//207.0;//172.5; add_float( 0, &sys_config->phase_alert_monitor.voltage_decrease_level_2.period, 5.0); // // decrease voltage level 3 add_float( 0, &sys_config->phase_alert_monitor.voltage_decrease_level_3.level, NOMINAL_GRID_VOLTAGE * ((float)1.0 - (PROTECTION_DECREASE_VOLTAGE_LEVEL_3_PERCENT / (float)100.0))); add_float( 0, &sys_config->phase_alert_monitor.voltage_decrease_level_3.period, 2.0); // // current overload level 1 120% 60s add_float( 0, &sys_config->phase_alert_monitor.current_overload_level_1.level, 30.0 * 14.4); add_float( 0, &sys_config->phase_alert_monitor.current_overload_level_1.period, 60.0); // // current overload level 2 130% 10s add_float( 0, &sys_config->phase_alert_monitor.current_overload_level_2.level, 30.0 * 15.6);//30.0*15.6 add_float( 0, &sys_config->phase_alert_monitor.current_overload_level_2.period, 10.0); // // current overload level 3 150% 1ms add_float( 0, &sys_config->phase_alert_monitor.current_overload_level_3.level, 30.0 * 18.0); add_float( 0, &sys_config->phase_alert_monitor.current_overload_level_3.period, 0.004); // // current invertor overload level 1 110% 60s add_float( 0, &sys_config->phase_alert_monitor.current_invertor_overload_level_1.level, 13.2); add_float( 0, &sys_config->phase_alert_monitor.current_invertor_overload_level_1.period, 60.0); // // current invertor overload level 2 130% 10s add_float( 0, &sys_config->phase_alert_monitor.current_invertor_overload_level_2.level, 15.6); add_float( 0, &sys_config->phase_alert_monitor.current_invertor_overload_level_2.period, 10.0); // // current invertor overload level 3 150% 1ms add_float( 0, &sys_config->phase_alert_monitor.current_invertor_overload_level_3.level, 18.0); add_float( 0, &sys_config->phase_alert_monitor.current_invertor_overload_level_3.period, 0.004); // // current input overload level 1 110% 60s add_float( 0, &sys_config->phase_alert_monitor.current_input_overload_level_1.level, 99.0); add_float( 0, &sys_config->phase_alert_monitor.current_input_overload_level_1.period, 60.0); // // current input overload level 2 130% 10s add_float( 0, &sys_config->phase_alert_monitor.current_input_overload_level_2.level, 117.0); add_float( 0, &sys_config->phase_alert_monitor.current_input_overload_level_2.period, 10.0); // // current input overload level 3 150% 1ms add_float( 0, &sys_config->phase_alert_monitor.current_input_overload_level_3.level, 135.0); add_float( 0, &sys_config->phase_alert_monitor.current_input_overload_level_3.period, 0.004); //<> // // DIGITAL INPUTS // add_float( 0, &sys_config->digital_input_config.period, 50.0e-3); //3001 - 3020 //<> // // FAN CONTROL // add_float( 0, &sys_config->fan_control.timer_period, 5.0*60.0); //<> // // Generator ABC // add_float( 0, &sys_config->generator_abc.amplitude, 1.0); add_float( 0, &sys_config->generator_abc.frequency, 2.0*FP_PI*50.0); add_float( 0, &sys_config->generator_abc.phase_shift, 0.0); //<> // // Reference PWM-Generator // //add_float( 0, &sys_config->generator_pwm.frequency, 2.0*FP_PI*1.0); //add_float( 0, &sys_config->generator_abc.phase_shift, 0.0); //add_float( 0, &sys_config->gen_inp_volt.amplitude.direct.d, 220.0); // //add_float( 0, &sys_config->gen_out_volt.amplitude.direct.d, 220.0); //add_float( 0, &sys_config->gen_out_volt.phase.direct.phase, 0.122756);//FP_PI/4.0); // //add_float( 0, &sys_config->gen_out_current.amplitude.direct.d, 50.0); //add_float( 0, &sys_config->gen_out_current.phase.direct.phase, 0.122756);//FP_PI/3.0; //<> // // AlgorithmGeneratorReferences // add_float( 0, &sys_config->algorithm_source_references.voltage, 0.0); add_float( 0, &sys_config->algorithm_source_references.phase_shift, 0.0); // // Harmonica Analyzer // add_float( 0, &sys_config->ph_harmonica_5.time, 50.0e-3); add_float( 0, &sys_config->ph_harmonica_5.a3, 2.61313); add_float( 0, &sys_config->ph_harmonica_5.a2, 3.41422); add_float( 0, &sys_config->ph_harmonica_5.a1, 2.61313); //<> // // Reference Intensity Idref Iqref in Start Mode // add_float( 0, &sys_config->intensity_id_iq_references.damp_factor, 0.7071); add_float( 0, &sys_config->intensity_id_iq_references.time, 20.0e-3); //<> // // Regulators // #if TYPECONTROL == VECTORCONTROL // #if TYPE_VOLTAGE_CONTROLLER == VOLTAGE_CONTROLLER_PII add_float( 0, &sys_config->regulator_voltage_load_dq.gain, 1.0); add_float( 0, &sys_config->regulator_voltage_load_dq.time, 1.6e-3); add_float( 0, &sys_config->regulator_voltage_load_dq.high_saturation, 4500.0); add_float( 0, &sys_config->regulator_voltage_load_dq.low_saturation, -4500.0); // add_float( 0, &sys_config->integrator_voltage_dq.time, 2.0e-3); add_float( 0, &sys_config->integrator_voltage_dq.high_saturation, 4500.0); add_float( 0, &sys_config->integrator_voltage_dq.low_saturation, -4500.0); // add_float( 0, &sys_config->reference_voltage_dq_intensity.time, 200.0e-3); // #endif #if TYPE_VOLTAGE_CONTROLLER == VOLTAGE_CONTROLLER_I add_float( 0, &sys_config->regulator_voltage_load_dq.gain, 0.4); add_float( 0, &sys_config->regulator_voltage_load_dq.time, 1600.0e-6); add_float( 0, &sys_config->regulator_voltage_load_dq.high_saturation, 4500.0); add_float( 0, &sys_config->regulator_voltage_load_dq.low_saturation, -4500.0); // add_float( 0, &sys_config->integrator_voltage_dq.time, 4.0e-3); // 4.0e-3 for single winding; 2.0e-3 for double winding add_float( 0, &sys_config->integrator_voltage_dq.high_saturation, 4500.0); add_float( 0, &sys_config->integrator_voltage_dq.low_saturation, -4500.0); // add_float( 0, &sys_config->reference_voltage_dq_intensity.time, 200.0e-3); // #endif // //add_float( 0, &sys_config->regulator_current_limit.gain, 1.0); add_float( 0, &sys_config->regulator_current_limit.time, 140.0e-3); add_float( 0, &sys_config->regulator_current_limit.high_saturation, REGULATOR_CURRENT_LIMIT_HIGH_SATURATION); add_float( 0, &sys_config->regulator_current_limit.low_saturation, REGULATOR_CURRENT_LIMIT_LOW_SATURATION); // add_float( 0, &sys_config->regulator_current_pfc.gain, 0.25); add_float( 0, &sys_config->regulator_current_pfc.time, 800.0e-3); add_float( 0, &sys_config->regulator_current_pfc.high_saturation, REGULATOR_CURRENT_PFC_HIGH_SATURATION); add_float( 0, &sys_config->regulator_current_pfc.low_saturation, REGULATOR_CURRENT_PFC_LOW_SATURATION); // #if TYPECURRENTCONTROLLER == CURRENTCONTROLLER_PI add_float( 0, &sys_config->regulator_current_load_dq.gain, 8.0); // 4.0 for single winding; 8.0 for double winding add_float( 0, &sys_config->regulator_current_load_dq.time, 6.4e-3); add_float( 0, &sys_config->regulator_current_load_dq.high_saturation, 500.0); add_float( 0, &sys_config->regulator_current_load_dq.low_saturation, -500.0); #endif #if TYPECURRENTCONTROLLER == CURRENTCONTROLLER_P add_float( 0, &sys_config->regulator_current_load_dq.gain, 8.0); add_float( 0, &sys_config->regulator_current_load_dq.high_saturation, 500.0); add_float( 0, &sys_config->regulator_current_load_dq.low_saturation, -500.0); #endif // add_float( 0, &sys_config->referencer_current_bypass_dq.time, 25.6e-3); add_float( 0, &sys_config->referencer_current_bypass_dq.high_saturation, 240.0); add_float( 0, &sys_config->referencer_current_bypass_dq.low_saturation, -240.0); // #endif #if TYPECONTROL == SCALARCONTROL add_float( 0, &sys_config->regulator_voltage_load_active_reactive.gain, 0.04); add_float( 0, &sys_config->regulator_voltage_load_active_reactive.time, 10.0e-3); add_float( 0, &sys_config->regulator_voltage_load_active_reactive.high_saturation, 4500.0); add_float( 0, &sys_config->regulator_voltage_load_active_reactive.low_saturation, -4500.0); // add_float( 0, &sys_config->regulator_current_limit.gain, 1.0); add_float( 0, &sys_config->regulator_current_limit.time, 5.0); add_float( 0, &sys_config->regulator_current_limit.high_saturation, GRID_VOLTAGE_REFERENCE * 0.57735); add_float( 0, &sys_config->regulator_current_limit.low_saturation, FP_ZERO); // add_float( 0, &sys_config->regulator_current_pfc.gain, 0.25); add_float( 0, &sys_config->regulator_current_pfc.time, 800.0e-3); add_float( 0, &sys_config->regulator_current_pfc.high_saturation, GRID_VOLTAGE_REFERENCE * 0.57735); add_float( 0, &sys_config->regulator_current_pfc.low_saturation, -GRID_VOLTAGE_REFERENCE * 0.57735); // add_float( 0, &sys_config->current_regulator_active.gain, 0.17); // 0.34 for single winding add_float( 0, &sys_config->current_regulator_active.time, 0.04); add_float( 0, &sys_config->current_regulator_active.high_saturation, 500.0); add_float( 0, &sys_config->current_regulator_active.low_saturation, -500.0); // add_float( 0, &sys_config->current_regulator_reactive.gain, 0.17); // 0.34 for single winding add_float( 0, &sys_config->current_regulator_reactive.time, 0.04); add_float( 0, &sys_config->current_regulator_reactive.high_saturation, 500.0); add_float( 0, &sys_config->current_regulator_reactive.low_saturation, -500.0); // add_float( 0, &sys_config->current_referencer.gain, 1.0); add_float( 0, &sys_config->current_referencer.time, 0.160); add_float( 0, &sys_config->current_referencer.high_saturation, 20.0); add_float( 0, &sys_config->current_referencer.low_saturation, -20.0); // add_float( 0, &sys_config->regulator_dc_voltage.gain, 0.05); add_float( 0, &sys_config->regulator_dc_voltage.time, 800.0e-3); add_float( 0, &sys_config->regulator_dc_voltage.high_saturation, FP_ZERO); add_float( 0, &sys_config->regulator_dc_voltage.low_saturation, -GRID_VOLTAGE_REFERENCE * 0.57735); #endif //<> #if TYPECONTROL == DIRECTREVERSECONTROL // add_float( 0, &sys_config->drc_voltage_decomposer.filter.time, 31.83e-3); //31.83e-3//6.366e-3//3.183e-3 // add_float( 0, &sys_config->drc_voltage_controller.gain, 0.4); //0.4 - for single winding; 0.7958 - for double winding. //7.958//1.592//0.7958 add_float( 0, &sys_config->drc_voltage_controller.time, 3.2e-3); //31.83e-3//6.366e-3//3.183e-3 add_float( 0, &sys_config->drc_voltage_controller.high_saturation, 4500.0); add_float( 0, &sys_config->drc_voltage_controller.low_saturation, -4500.0); // add_float( 0, &sys_config->drc_reference_voltage_direct_intensity.time, 333.0e-3); add_float( 0, &sys_config->drc_reference_voltage_direct_intensity.damp_factor, 0.9); // add_float( 0, &sys_config->drc_regulator_current_load.gain, 4.0);// 4.0 - for single winding; 8.0 - for double winding add_float( 0, &sys_config->drc_regulator_current_load.time, 6.4e-3); add_float( 0, &sys_config->drc_regulator_current_load.high_saturation, 500.0); add_float( 0, &sys_config->drc_regulator_current_load.low_saturation, -500.0); // add_float( 0, &sys_config->drc_referencer_current_bypass.time, 25.6e-3); add_float( 0, &sys_config->drc_referencer_current_bypass.high_saturation, 240.0); add_float( 0, &sys_config->drc_referencer_current_bypass.low_saturation, -240.0); // add_float( 0, &sys_config->drc_regulator_current_limit.time, 140.0e-3); add_float( 0, &sys_config->drc_regulator_current_limit.high_saturation, REGULATOR_CURRENT_LIMIT_HIGH_SATURATION); add_float( 0, &sys_config->drc_regulator_current_limit.low_saturation, REGULATOR_CURRENT_LIMIT_LOW_SATURATION); // add_float( 0, &sys_config->drc_regulator_current_pfc.gain, 0.25); add_float( 0, &sys_config->drc_regulator_current_pfc.time, 800.0e-3); add_float( 0, &sys_config->drc_regulator_current_pfc.high_saturation, REGULATOR_CURRENT_PFC_HIGH_SATURATION); add_float( 0, &sys_config->drc_regulator_current_pfc.low_saturation, REGULATOR_CURRENT_PFC_LOW_SATURATION); // #endif //<> // // Timers // add_float( 0, &sys_config->timer_start.period, 5.0); add_float( 0, &sys_config->timer_stop.period, 5.0); //<> // // Contactor Control Fault // add_float( 0, &sys_config->contactor.period, 0.4); }// } /* namespace FRAM */