ТЕСТ
This commit is contained in:
parent
864a2dfcac
commit
9cb2d2c231
@ -11,7 +11,7 @@
|
||||
// ðàñêîììåíòèðîâàòü, åñëè åñòü ñäâèã ìåæäó îáìîòêàìè ÃÝÄ (30 ãðàä.)
|
||||
#define SHIFT
|
||||
|
||||
#define ALG_MODE_SIMULINK ALG_MODE_SCALAR_OBOROTS
|
||||
#define ALG_MODE_SIMULINK ALG_MODE_FOC_OBOROTS
|
||||
/*
|
||||
ALG_MODE_UF_CONST,
|
||||
ALG_MODE_SCALAR_OBOROTS,
|
||||
@ -26,6 +26,69 @@
|
||||
V_PWM24_PHASE_SEQ_REVERS_ACB,
|
||||
V_PWM24_PHASE_SEQ_REVERS_CBA,
|
||||
V_PWM24_PHASE_SEQ_REVERS_BAC
|
||||
*/
|
||||
*/
|
||||
|
||||
|
||||
|
||||
// константы для вычисления всякого
|
||||
#define PI2 6.283185307179586476925286766559 //pi*2
|
||||
#define SQRT2 1.4142135623730950488016887242097 //sqrt(2)
|
||||
#define SQRT3 1.7320508075688772935274463415059 //sqrt(3)
|
||||
#define ISQRT3 0.57735026918962576450914878050196 //1./sqrt(3)
|
||||
// Номинальные величины ГЭД
|
||||
// ... мощность на валу, Вт
|
||||
#define P_NOM (6300e3)
|
||||
// ... линейное напряжение, В (ampl)
|
||||
#define U_NOM (3300.*SQRT2)
|
||||
// ... механическая скорость, об/мин
|
||||
#define N_NOM 180.
|
||||
// ... число пар полюсов
|
||||
#define PP 6.
|
||||
// ... коэффициент мощности
|
||||
#define COS_FI_ 0.87
|
||||
// ... КПД
|
||||
#define EFF 0.968
|
||||
// ... приведенный к валу момент инерции, кг*м^2
|
||||
#define J (87e3*0.50)
|
||||
// ... полная мощность, ВА
|
||||
#define S_NOM (P_NOM/(COS_FI_*EFF))
|
||||
// ... механическая скорость, рад/с
|
||||
#define WM_NOM (N_NOM/60.*PI2)
|
||||
// ... момент на валу, Н*м
|
||||
#define M_NOM (P_NOM/WM_NOM)
|
||||
|
||||
|
||||
// Базовые величины ГЭД
|
||||
// ... полная мощность, BA
|
||||
#define S_BAZ S_NOM
|
||||
// ... линейное напряжение, В (ampl)
|
||||
#define U_BAZ U_NOM
|
||||
// ... фазный ток, А (ampl)
|
||||
#define I_BAZ (S_BAZ*2./(U_BAZ*SQRT3)*0.5) //0.5 - т.к. обмоток две
|
||||
// ... механическая скорость, об/мин
|
||||
#define N_BAZ N_NOM
|
||||
// ... механическая скорость, рад/с
|
||||
#define WM_BAZ (N_BAZ/60.*PI2)
|
||||
// ... электрическая скорость, рад/с
|
||||
#define WE_BAZ (WM_BAZ*PP)
|
||||
// ... момент на валу, Н*м
|
||||
#define M_BAZ (S_BAZ/WM_BAZ)
|
||||
// ... потокосцепление статора, Вб
|
||||
#define PSI_BAZ (U_BAZ/(WE_BAZ*SQRT3))
|
||||
// ... индуктивность, Гн
|
||||
#define L_BAZ (PSI_BAZ/I_BAZ)
|
||||
// ... сопротивление, Ом
|
||||
#define R_BAZ (U_BAZ/(I_BAZ*SQRT3))
|
||||
|
||||
|
||||
// для пересчёта из амплитуды фазного напряжения в единицы сигнала управления
|
||||
#define U_2_Y (T1_PRD*SQRT3/U_BAZ)
|
||||
|
||||
// напряжение в звене пост. тока, которое дало бы на выходе АЦП знач. 2048, В
|
||||
#define UDC_SENS_MAX (U_BAZ*1.15*1.3)
|
||||
// выходной ток, который дал бы на выходе АЦП знач. 2048, А (ampl)
|
||||
#define IAC_SENS_MAX (I_BAZ*1.5)
|
||||
#define IDC_SENS_MAX 5000.0
|
||||
|
||||
|
||||
#endif //_APP_CONFIG
|
||||
|
@ -29,6 +29,12 @@
|
||||
#include "global_time.h"
|
||||
#include "PWMTools.h"
|
||||
#include "alg_simple_scalar.h"
|
||||
#include "can_bs2bs.h"
|
||||
#include "log_to_mem.h"
|
||||
#include "optical_bus.h"
|
||||
#include "sync_tools.h"
|
||||
#include "oscil_can.h"
|
||||
#include "alarm_log_can.h"
|
||||
|
||||
#include <params.h>
|
||||
#include <params_alg.h>
|
||||
|
@ -166,232 +166,3 @@ void set_zadanie_u_charge_matlab(void)
|
||||
}
|
||||
|
||||
|
||||
void init_ramp_all_zadanie(void)
|
||||
{
|
||||
_iq rampafloat;
|
||||
|
||||
// rmp_fzad
|
||||
edrk.zadanie.rmp_fzad.RampLowLimit = _IQ(-MAX_ZADANIE_F / NORMA_FROTOR); //0
|
||||
edrk.zadanie.rmp_fzad.RampHighLimit = _IQ(MAX_ZADANIE_F / NORMA_FROTOR);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_F));
|
||||
edrk.zadanie.rmp_fzad.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_fzad.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_fzad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_fzad.Out = 0;
|
||||
|
||||
// rmp_oborots_hz
|
||||
edrk.zadanie.rmp_oborots_zad_hz.RampLowLimit = _IQ(MIN_ZADANIE_OBOROTS_ROTOR / 60.0 / NORMA_FROTOR); //0
|
||||
edrk.zadanie.rmp_oborots_zad_hz.RampHighLimit = _IQ(MAX_ZADANIE_OBOROTS_ROTOR / 60.0 / NORMA_FROTOR);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_OBOROTS_ROTOR));
|
||||
edrk.zadanie.rmp_oborots_zad_hz.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_oborots_zad_hz.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_oborots_zad_hz.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_oborots_zad_hz.Out = 0;
|
||||
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_Izad.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_Izad.RampHighLimit = _IQ(MAX_ZADANIE_I_M / NORMA_ACP);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_I_M));
|
||||
edrk.zadanie.rmp_Izad.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_Izad.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_Izad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_Izad.Out = 0;
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.RampHighLimit = _IQ(MAX_ZADANIE_U_CHARGE / NORMA_ACP);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_U_CHARGE));
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.Out = 0;
|
||||
|
||||
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_k_u_disbalance.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_k_u_disbalance.RampHighLimit = _IQ(MAX_ZADANIE_K_U_DISBALANCE);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_K_U_DISBALANCE));
|
||||
edrk.zadanie.rmp_k_u_disbalance.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_k_u_disbalance.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_k_u_disbalance.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_k_u_disbalance.Out = 0;
|
||||
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.RampHighLimit = _IQ(MAX_ZADANIE_KPLUS_U_DISBALANCE);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_KPLUS_U_DISBALANCE));
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.Out = 0;
|
||||
|
||||
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_kzad.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_kzad.RampHighLimit = _IQ(MAX_ZADANIE_K_M);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_K_M));
|
||||
edrk.zadanie.rmp_kzad.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_kzad.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_kzad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_kzad.Out = 0;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_powers_zad.RampLowLimit = _IQ(MIN_ZADANIE_POWER * 1000.0 / (NORMA_MZZ * NORMA_MZZ)); //0
|
||||
edrk.zadanie.rmp_powers_zad.RampHighLimit = _IQ(MAX_ZADANIE_POWER * 1000.0 / (NORMA_MZZ * NORMA_MZZ));
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_POWER));
|
||||
edrk.zadanie.rmp_powers_zad.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_powers_zad.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_powers_zad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_powers_zad.Out = 0;
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_limit_powers_zad.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_limit_powers_zad.RampHighLimit = _IQ(MAX_ZADANIE_POWER * 1000.0 / (NORMA_MZZ * NORMA_MZZ));
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_POWER));
|
||||
edrk.zadanie.rmp_limit_powers_zad.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_limit_powers_zad.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_limit_powers_zad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_limit_powers_zad.Out = 0;
|
||||
|
||||
//
|
||||
|
||||
|
||||
}
|
||||
|
||||
void ramp_all_zadanie(int flag_set_zero)
|
||||
{
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
edrk.zadanie.rmp_Izad.DesiredInput = edrk.zadanie.iq_Izad;
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_Izad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_Izad.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_Izad.DesiredInput = 0;
|
||||
|
||||
edrk.zadanie.rmp_Izad.calc(&edrk.zadanie.rmp_Izad);
|
||||
edrk.zadanie.iq_Izad_rmp = edrk.zadanie.rmp_Izad.Out;
|
||||
//////////////////////////////////////////////
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.DesiredInput = edrk.zadanie.iq_ZadanieU_Charge;
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.calc(&edrk.zadanie.rmp_ZadanieU_Charge);
|
||||
edrk.zadanie.iq_ZadanieU_Charge_rmp = edrk.zadanie.rmp_ZadanieU_Charge.Out;
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
edrk.zadanie.rmp_fzad.DesiredInput = edrk.zadanie.iq_fzad;
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_fzad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_fzad.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_fzad.DesiredInput = 0;
|
||||
|
||||
edrk.zadanie.rmp_fzad.calc(&edrk.zadanie.rmp_fzad);
|
||||
edrk.zadanie.iq_fzad_rmp = edrk.zadanie.rmp_fzad.Out;
|
||||
//////////////////////////////////////////////
|
||||
edrk.zadanie.rmp_k_u_disbalance.DesiredInput = edrk.zadanie.iq_k_u_disbalance;
|
||||
edrk.zadanie.rmp_k_u_disbalance.calc(&edrk.zadanie.rmp_k_u_disbalance);
|
||||
edrk.zadanie.iq_k_u_disbalance_rmp = edrk.zadanie.rmp_k_u_disbalance.Out;
|
||||
//////////////////////////////////////////////
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.DesiredInput = edrk.zadanie.iq_kplus_u_disbalance;
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.calc(&edrk.zadanie.rmp_kplus_u_disbalance);
|
||||
edrk.zadanie.iq_kplus_u_disbalance_rmp = edrk.zadanie.rmp_kplus_u_disbalance.Out;
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
edrk.zadanie.rmp_kzad.DesiredInput = edrk.zadanie.iq_kzad;
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_kzad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_kzad.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_kzad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_kzad.calc(&edrk.zadanie.rmp_kzad);
|
||||
edrk.zadanie.iq_kzad_rmp = edrk.zadanie.rmp_kzad.Out;
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
edrk.zadanie.rmp_oborots_zad_hz.DesiredInput = edrk.zadanie.iq_oborots_zad_hz;
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_oborots_zad_hz.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_oborots_zad_hz.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_oborots_zad_hz.DesiredInput = 0;
|
||||
|
||||
edrk.zadanie.rmp_oborots_zad_hz.calc(&edrk.zadanie.rmp_oborots_zad_hz);
|
||||
edrk.zadanie.iq_oborots_zad_hz_rmp = edrk.zadanie.rmp_oborots_zad_hz.Out;
|
||||
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
edrk.zadanie.rmp_limit_powers_zad.DesiredInput = edrk.zadanie.iq_limit_power_zad;
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_limit_powers_zad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_limit_powers_zad.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_limit_powers_zad.DesiredInput = 0;
|
||||
|
||||
edrk.zadanie.rmp_limit_powers_zad.calc(&edrk.zadanie.rmp_limit_powers_zad);
|
||||
edrk.zadanie.iq_limit_power_zad_rmp = edrk.zadanie.rmp_limit_powers_zad.Out;
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
{
|
||||
if (edrk.zadanie.iq_power_zad > edrk.zadanie.iq_limit_power_zad_rmp)
|
||||
edrk.zadanie.rmp_powers_zad.DesiredInput = edrk.zadanie.iq_limit_power_zad_rmp;
|
||||
else
|
||||
edrk.zadanie.rmp_powers_zad.DesiredInput = edrk.zadanie.iq_power_zad;
|
||||
}
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_powers_zad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_powers_zad.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_powers_zad.DesiredInput = 0;
|
||||
|
||||
edrk.zadanie.rmp_powers_zad.calc(&edrk.zadanie.rmp_powers_zad);
|
||||
edrk.zadanie.iq_power_zad_rmp = edrk.zadanie.rmp_powers_zad.Out;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -16,14 +16,14 @@ RS_DATA_STRUCT rs_a = RS_DATA_STRUCT_DEFAULT, rs_b = RS_DATA_STRUCT_DEFAULT;
|
||||
// Èçìåíÿåò çíà÷åíèå ïàðàìåòðà
|
||||
void readInputParameters(const real_T* u) {
|
||||
|
||||
iq_norm_ADC[0][0] = _IQ(AdcSim.udc1.adc_val);
|
||||
iq_norm_ADC[0][1] = _IQ(AdcSim.udc2.adc_val);
|
||||
iq_norm_ADC[0][2] = _IQ(AdcSim.ia1.adc_val);
|
||||
iq_norm_ADC[0][3] = _IQ(AdcSim.ib1.adc_val);
|
||||
iq_norm_ADC[0][4] = _IQ(AdcSim.ic1.adc_val);
|
||||
iq_norm_ADC[0][5] = _IQ(AdcSim.ia2.adc_val);
|
||||
iq_norm_ADC[0][6] = _IQ(AdcSim.ib2.adc_val);
|
||||
iq_norm_ADC[0][7] = _IQ(AdcSim.ic2.adc_val);
|
||||
iq_norm_ADC[0][0] = _IQ(AdcSim.udc1.adc_norm);
|
||||
iq_norm_ADC[0][1] = _IQ(AdcSim.udc2.adc_norm);
|
||||
iq_norm_ADC[0][2] = _IQ(AdcSim.ia1.adc_norm);
|
||||
iq_norm_ADC[0][3] = _IQ(AdcSim.ib1.adc_norm);
|
||||
iq_norm_ADC[0][4] = _IQ(AdcSim.ic1.adc_norm);
|
||||
iq_norm_ADC[0][5] = _IQ(AdcSim.ia2.adc_norm);
|
||||
iq_norm_ADC[0][6] = _IQ(AdcSim.ib2.adc_norm);
|
||||
iq_norm_ADC[0][7] = _IQ(AdcSim.ic2.adc_norm);
|
||||
|
||||
int nn = 8;
|
||||
WRotor.iqWRotorCalcBeforeRegul1 = _IQ(u[nn++] / (PI*2) / NORMA_FROTOR);
|
||||
@ -121,12 +121,12 @@ void writeOutputParameters(real_T* xD) {
|
||||
|
||||
|
||||
|
||||
xD[nn++] = (AdcSim.udc1.adc_val);
|
||||
xD[nn++] = (AdcSim.udc2.adc_val);
|
||||
xD[nn++] = (AdcSim.ia1.adc_val);
|
||||
xD[nn++] = (AdcSim.ib1.adc_val);
|
||||
xD[nn++] = (AdcSim.ic1.adc_val);
|
||||
xD[nn++] = (AdcSim.ia2.adc_val);
|
||||
xD[nn++] = (AdcSim.ib2.adc_val);
|
||||
xD[nn++] = (AdcSim.ic2.adc_val);
|
||||
xD[nn++] = _IQtoF(iq_norm_ADC[0][0]);
|
||||
xD[nn++] = _IQtoF(iq_norm_ADC[0][1]);
|
||||
xD[nn++] = _IQtoF(iq_norm_ADC[0][2]);
|
||||
xD[nn++] = _IQtoF(iq_norm_ADC[0][3]);
|
||||
xD[nn++] = _IQtoF(iq_norm_ADC[0][4]);
|
||||
xD[nn++] = _IQtoF(iq_norm_ADC[0][5]);
|
||||
xD[nn++] = _IQtoF(iq_norm_ADC[0][6]);
|
||||
xD[nn++] = _IQtoF(iq_norm_ADC[0][7]);
|
||||
}
|
@ -9,6 +9,21 @@ T_project project = {0};
|
||||
WINDING a;
|
||||
EDRK edrk = EDRK_DEFAULT;
|
||||
FLAG f = FLAG_DEFAULTS;
|
||||
//X_PARALLEL_BUS x_parallel_bus_project = X_PARALLEL_BUS_DEFAULTS;
|
||||
//int Unites2SecondBS[SIZE_ARR_CAN_UNITES_BS2BS] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
||||
// 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
||||
// 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
|
||||
// 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\
|
||||
//};
|
||||
//LOGSPARAMS logpar = LOGSPARAMS_DEFAULTS;
|
||||
//OPTICAL_BUS_DATA optical_write_data = OPTICAL_BUS_DATA_DEFAULT;
|
||||
//OPTICAL_BUS_DATA optical_read_data = OPTICAL_BUS_DATA_DEFAULT;
|
||||
//SYNC_TOOLS_DATA sync_data = SYNC_TOOLS_DATA_DEFAULT;
|
||||
//int flag_enable_can_from_mpu = 0;
|
||||
//UNITES_CAN_SETUP unites_can_setup = UNITES_CAN_SETUP_DEFAULT;
|
||||
//OSCIL_CAN oscil_can = OSCIL_CAN_DEFAULTS;
|
||||
//int flag_special_mode_rs = 0;
|
||||
//ALARM_LOG_CAN alarm_log_can = ALARM_LOG_CAN_CAN_DEFAULTS;
|
||||
|
||||
WRotorValues WRotor = WRotorValues_DEFAULTS;
|
||||
WRotorValuesAngle WRotorPBus = WRotorValuesAngle_DEFAULTS;
|
||||
@ -121,7 +136,235 @@ void mcu_simulate_step(void)
|
||||
|
||||
|
||||
|
||||
void init_ramp_all_zadanie(void)
|
||||
{
|
||||
_iq rampafloat;
|
||||
|
||||
// rmp_fzad
|
||||
edrk.zadanie.rmp_fzad.RampLowLimit = _IQ(-MAX_ZADANIE_F / NORMA_FROTOR); //0
|
||||
edrk.zadanie.rmp_fzad.RampHighLimit = _IQ(MAX_ZADANIE_F / NORMA_FROTOR);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_F));
|
||||
edrk.zadanie.rmp_fzad.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_fzad.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_fzad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_fzad.Out = 0;
|
||||
|
||||
// rmp_oborots_hz
|
||||
edrk.zadanie.rmp_oborots_zad_hz.RampLowLimit = _IQ(MIN_ZADANIE_OBOROTS_ROTOR / 60.0 / NORMA_FROTOR); //0
|
||||
edrk.zadanie.rmp_oborots_zad_hz.RampHighLimit = _IQ(MAX_ZADANIE_OBOROTS_ROTOR / 60.0 / NORMA_FROTOR);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_OBOROTS_ROTOR));
|
||||
edrk.zadanie.rmp_oborots_zad_hz.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_oborots_zad_hz.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_oborots_zad_hz.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_oborots_zad_hz.Out = 0;
|
||||
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_Izad.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_Izad.RampHighLimit = _IQ(MAX_ZADANIE_I_M / NORMA_ACP);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_I_M));
|
||||
edrk.zadanie.rmp_Izad.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_Izad.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_Izad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_Izad.Out = 0;
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.RampHighLimit = _IQ(MAX_ZADANIE_U_CHARGE / NORMA_ACP);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_U_CHARGE));
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.Out = 0;
|
||||
|
||||
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_k_u_disbalance.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_k_u_disbalance.RampHighLimit = _IQ(MAX_ZADANIE_K_U_DISBALANCE);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_K_U_DISBALANCE));
|
||||
edrk.zadanie.rmp_k_u_disbalance.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_k_u_disbalance.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_k_u_disbalance.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_k_u_disbalance.Out = 0;
|
||||
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.RampHighLimit = _IQ(MAX_ZADANIE_KPLUS_U_DISBALANCE);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_KPLUS_U_DISBALANCE));
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.Out = 0;
|
||||
|
||||
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_kzad.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_kzad.RampHighLimit = _IQ(MAX_ZADANIE_K_M);
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_K_M));
|
||||
edrk.zadanie.rmp_kzad.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_kzad.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_kzad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_kzad.Out = 0;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_powers_zad.RampLowLimit = _IQ(MIN_ZADANIE_POWER * 1000.0 / (NORMA_MZZ * NORMA_MZZ)); //0
|
||||
edrk.zadanie.rmp_powers_zad.RampHighLimit = _IQ(MAX_ZADANIE_POWER * 1000.0 / (NORMA_MZZ * NORMA_MZZ));
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_POWER));
|
||||
edrk.zadanie.rmp_powers_zad.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_powers_zad.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_powers_zad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_powers_zad.Out = 0;
|
||||
|
||||
//
|
||||
edrk.zadanie.rmp_limit_powers_zad.RampLowLimit = _IQ(0); //0
|
||||
edrk.zadanie.rmp_limit_powers_zad.RampHighLimit = _IQ(MAX_ZADANIE_POWER * 1000.0 / (NORMA_MZZ * NORMA_MZZ));
|
||||
|
||||
rampafloat = _IQ(1.0 / (2.0 * FREQ_PWM * T_NARAST_ZADANIE_POWER));
|
||||
edrk.zadanie.rmp_limit_powers_zad.RampPlus = rampafloat;
|
||||
edrk.zadanie.rmp_limit_powers_zad.RampMinus = -rampafloat;
|
||||
|
||||
edrk.zadanie.rmp_limit_powers_zad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_limit_powers_zad.Out = 0;
|
||||
|
||||
//
|
||||
|
||||
|
||||
}
|
||||
|
||||
void ramp_all_zadanie(int flag_set_zero)
|
||||
{
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
edrk.zadanie.rmp_Izad.DesiredInput = edrk.zadanie.iq_Izad;
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_Izad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_Izad.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_Izad.DesiredInput = 0;
|
||||
|
||||
edrk.zadanie.rmp_Izad.calc(&edrk.zadanie.rmp_Izad);
|
||||
edrk.zadanie.iq_Izad_rmp = edrk.zadanie.rmp_Izad.Out;
|
||||
//////////////////////////////////////////////
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.DesiredInput = edrk.zadanie.iq_ZadanieU_Charge;
|
||||
edrk.zadanie.rmp_ZadanieU_Charge.calc(&edrk.zadanie.rmp_ZadanieU_Charge);
|
||||
edrk.zadanie.iq_ZadanieU_Charge_rmp = edrk.zadanie.rmp_ZadanieU_Charge.Out;
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
edrk.zadanie.rmp_fzad.DesiredInput = edrk.zadanie.iq_fzad;
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_fzad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_fzad.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_fzad.DesiredInput = 0;
|
||||
|
||||
edrk.zadanie.rmp_fzad.calc(&edrk.zadanie.rmp_fzad);
|
||||
edrk.zadanie.iq_fzad_rmp = edrk.zadanie.rmp_fzad.Out;
|
||||
//////////////////////////////////////////////
|
||||
edrk.zadanie.rmp_k_u_disbalance.DesiredInput = edrk.zadanie.iq_k_u_disbalance;
|
||||
edrk.zadanie.rmp_k_u_disbalance.calc(&edrk.zadanie.rmp_k_u_disbalance);
|
||||
edrk.zadanie.iq_k_u_disbalance_rmp = edrk.zadanie.rmp_k_u_disbalance.Out;
|
||||
//////////////////////////////////////////////
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.DesiredInput = edrk.zadanie.iq_kplus_u_disbalance;
|
||||
edrk.zadanie.rmp_kplus_u_disbalance.calc(&edrk.zadanie.rmp_kplus_u_disbalance);
|
||||
edrk.zadanie.iq_kplus_u_disbalance_rmp = edrk.zadanie.rmp_kplus_u_disbalance.Out;
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
edrk.zadanie.rmp_kzad.DesiredInput = edrk.zadanie.iq_kzad;
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_kzad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_kzad.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_kzad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_kzad.calc(&edrk.zadanie.rmp_kzad);
|
||||
edrk.zadanie.iq_kzad_rmp = edrk.zadanie.rmp_kzad.Out;
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
edrk.zadanie.rmp_oborots_zad_hz.DesiredInput = edrk.zadanie.iq_oborots_zad_hz;
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_oborots_zad_hz.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_oborots_zad_hz.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_oborots_zad_hz.DesiredInput = 0;
|
||||
|
||||
edrk.zadanie.rmp_oborots_zad_hz.calc(&edrk.zadanie.rmp_oborots_zad_hz);
|
||||
edrk.zadanie.iq_oborots_zad_hz_rmp = edrk.zadanie.rmp_oborots_zad_hz.Out;
|
||||
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
edrk.zadanie.rmp_limit_powers_zad.DesiredInput = edrk.zadanie.iq_limit_power_zad;
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_limit_powers_zad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_limit_powers_zad.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_limit_powers_zad.DesiredInput = 0;
|
||||
|
||||
edrk.zadanie.rmp_limit_powers_zad.calc(&edrk.zadanie.rmp_limit_powers_zad);
|
||||
edrk.zadanie.iq_limit_power_zad_rmp = edrk.zadanie.rmp_limit_powers_zad.Out;
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////
|
||||
if (flag_set_zero == 0)
|
||||
{
|
||||
if (edrk.zadanie.iq_power_zad > edrk.zadanie.iq_limit_power_zad_rmp)
|
||||
edrk.zadanie.rmp_powers_zad.DesiredInput = edrk.zadanie.iq_limit_power_zad_rmp;
|
||||
else
|
||||
edrk.zadanie.rmp_powers_zad.DesiredInput = edrk.zadanie.iq_power_zad;
|
||||
}
|
||||
else
|
||||
if (flag_set_zero == 2)
|
||||
{
|
||||
edrk.zadanie.rmp_powers_zad.DesiredInput = 0;
|
||||
edrk.zadanie.rmp_powers_zad.Out = 0;
|
||||
}
|
||||
else
|
||||
edrk.zadanie.rmp_powers_zad.DesiredInput = 0;
|
||||
|
||||
edrk.zadanie.rmp_powers_zad.calc(&edrk.zadanie.rmp_powers_zad);
|
||||
edrk.zadanie.iq_power_zad_rmp = edrk.zadanie.rmp_powers_zad.Out;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
unsigned int ReadMemory(unsigned long addr)
|
||||
@ -215,145 +458,103 @@ _iq break_result_4 = 0;
|
||||
|
||||
// }
|
||||
|
||||
void update_uom(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void inc_RS_timeout_cicle(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void inc_CAN_timeout_cicle(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void pause_1000(void)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
int xerror(unsigned int er_ID, void* CallBackRef)
|
||||
{
|
||||
};
|
||||
|
||||
void start_pwm(void) {}
|
||||
void stop_pwm(void) {}
|
||||
int get_real_in_mbox(int a, int b) {}
|
||||
void update_uom(void) {}
|
||||
void inc_RS_timeout_cicle(void) {}
|
||||
void inc_CAN_timeout_cicle(void) {}
|
||||
void pause_1000(void) {}
|
||||
int xerror(unsigned int er_ID, void* CallBackRef) {}
|
||||
void func_unpack_answer_from_Ingeteam(unsigned int a) {}
|
||||
void unpack_answer_from_MPU_SVU_CAN(unsigned int a) {}
|
||||
int get_real_in_mbox(int a, int b) {}
|
||||
|
||||
void start_pwm(void)
|
||||
{
|
||||
// mPWM_a = 1;
|
||||
// mPWM_b = 1;
|
||||
}
|
||||
|
||||
void stop_pwm(void)
|
||||
{
|
||||
// mPWM_a = 0;
|
||||
// mPWM_b = 0;
|
||||
|
||||
// svgen_set_time_keys_closed(&svgen_pwm24_1);
|
||||
// svgen_set_time_keys_closed(&svgen_pwm24_2);
|
||||
// WriteMemory(ADR_TK_MASK_0, 0xFFFF);
|
||||
// WriteMemory(ADR_PWM_START_STOP, 0x8000);
|
||||
}
|
||||
void start_break_pwm() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
void stop_break_pwm() {
|
||||
|
||||
}
|
||||
|
||||
void stop_wdog() {
|
||||
|
||||
}
|
||||
|
||||
void start_pwm_b() {
|
||||
|
||||
}
|
||||
void start_pwm_a() {
|
||||
|
||||
}
|
||||
void stop_pwm_b() {
|
||||
|
||||
}
|
||||
void stop_pwm_a() {
|
||||
|
||||
}
|
||||
|
||||
void fillADClogs() {
|
||||
|
||||
}
|
||||
void break_resistor_managment_calc(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
void break_resistor_managment_init(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
void break_resistor_managment_update(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
void break_resistor_recup_calc(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
void break_resistor_set_closed(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
void DetectI_Out_BreakFase(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
void test_mem_limit(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
void set_start_mem(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
void getFastLogs(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
//void detect_I_M_overload{
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
void sync_inc_error(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
void optical_bus_read(){
|
||||
|
||||
}
|
||||
|
||||
|
||||
void optical_bus_write(void){
|
||||
|
||||
}
|
||||
void start_break_pwm() {}
|
||||
void stop_break_pwm() {}
|
||||
void stop_wdog() {}
|
||||
void start_pwm_b() {}
|
||||
void start_pwm_a() {}
|
||||
void stop_pwm_b() {}
|
||||
void stop_pwm_a() {}
|
||||
void fillADClogs() {}
|
||||
void break_resistor_managment_calc() {}
|
||||
void break_resistor_managment_init() {}
|
||||
void break_resistor_managment_update() {}
|
||||
void break_resistor_recup_calc() {}
|
||||
void break_resistor_set_closed() {}
|
||||
void DetectI_Out_BreakFase() {}
|
||||
void test_mem_limit() {}
|
||||
void set_start_mem() {}
|
||||
void getFastLogs() {}
|
||||
void detect_I_M_overload() {}
|
||||
void sync_inc_error() {}
|
||||
void optical_bus_read() {}
|
||||
void optical_bus_write(void){}
|
||||
void i_led1_on_off(int i) {}
|
||||
void modbus_table_can_in(void) {}
|
||||
|
||||
|
||||
|
||||
//void init_eva_timer2() {}
|
||||
//void init_evb_timer3() {}
|
||||
//void start_eva_timer2() {}
|
||||
//void start_evb_timer3() {}
|
||||
//int enable_er0_control() {}
|
||||
//void i_led2_on_off() {}
|
||||
//int InitXilinxSpartan2E(void (*int_handler)()) {}
|
||||
//void start_int13_interrupt() {}
|
||||
//void project_read_errors_controller() {}
|
||||
//void project_run_init_all_plates() {}
|
||||
//void calc_temper_acdrive() {}
|
||||
//void calc_temper_edrk() {}
|
||||
//void SendAll2SecondBS() {}
|
||||
//void clear_errors() {}
|
||||
//void clear_warnings() {}
|
||||
//void detect_error_all() {}
|
||||
//void read_plane_errors() {}
|
||||
//void init_detect_overloads() {}
|
||||
//void check_all_power_limits() {}
|
||||
//void clear_mem() {}
|
||||
//void modbusNetworkSharing() {}
|
||||
//void modbusNetworkSharingCAN() {}
|
||||
//void fillLogArea() {}
|
||||
//void clear_table_remoute() {}
|
||||
//void update_progress_load_hmi() {}
|
||||
//void get_command_HMI() {}
|
||||
//void update_svu_modbus_table() {}
|
||||
//void calc_limit_overheat() {}
|
||||
//void project_prepare_config() {}
|
||||
//void pump_control() {}
|
||||
//void start_wdog() {}
|
||||
//void global_time_interrupt() {}
|
||||
//void optical_bus_read_write_interrupt() {}
|
||||
//void setup_sync_line() {}
|
||||
//void setup_sync_int() {}
|
||||
//void start_sync_interrupt() {}
|
||||
//void rotorInit() {}
|
||||
//void get_adr_pcb_controller() {}
|
||||
//void InitCan() {}
|
||||
//void CAN_cycle_send() {}
|
||||
//int CAN_cycle_free(int box) {}
|
||||
//int CAN_cycle_full_free(int box, int statistics_flag) {}
|
||||
//int get_real_out_mbox(int type_box, int box) {}
|
||||
//int CAN_may_be_send_cycle_fifo(void) {}
|
||||
//void start_can_interrupt() {}
|
||||
//void clear_modbus_table_in() {}
|
||||
//void clear_modbus_table_out() {}
|
||||
//void initModbusTable() {}
|
||||
//void RS232_WorkingWith() {}
|
||||
//void sbor_shema() {}
|
||||
//void pwm_test_lines_start() {}
|
||||
//void pwm_test_lines_stop() {}
|
||||
//void KickDog() {}
|
||||
|
||||
|
||||
void init_flag_a(void)
|
||||
{
|
||||
|
||||
@ -363,10 +564,4 @@ void init_flag_a(void)
|
||||
*(pStr + i) = 0;
|
||||
}
|
||||
|
||||
*pStr = (int*)&a;
|
||||
for (i = 0; i < sizeof(a) / sizeof(int); i++) {
|
||||
*(pStr + i) = 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -22,14 +22,14 @@ void Simulate_ADC(SimStruct* S)
|
||||
void Init_ADC_Simulation()
|
||||
{
|
||||
adcInitConvertion(&AdcSim.convertion, NORMA_ACP, 2.5, 4096);
|
||||
adcInitMeasure(&AdcSim.udc1, K_LEM_ADC[0], R_ADC[0], DEFAULT_ZERO_ADC, 0);
|
||||
adcInitMeasure(&AdcSim.udc2, K_LEM_ADC[1], R_ADC[1], DEFAULT_ZERO_ADC, 0);
|
||||
adcInitMeasure(&AdcSim.ia1, K_LEM_ADC[2], R_ADC[2], DEFAULT_ZERO_ADC, 0);
|
||||
adcInitMeasure(&AdcSim.ib1, K_LEM_ADC[3], R_ADC[3], DEFAULT_ZERO_ADC, 0);
|
||||
adcInitMeasure(&AdcSim.ic1, K_LEM_ADC[4], R_ADC[4], DEFAULT_ZERO_ADC, 0);
|
||||
adcInitMeasure(&AdcSim.ia2, K_LEM_ADC[5], R_ADC[5], DEFAULT_ZERO_ADC, 0);
|
||||
adcInitMeasure(&AdcSim.ib2, K_LEM_ADC[6], R_ADC[6], DEFAULT_ZERO_ADC, 0);
|
||||
adcInitMeasure(&AdcSim.ic2, K_LEM_ADC[7], R_ADC[7], DEFAULT_ZERO_ADC, 0);
|
||||
adcInitMeasure(&AdcSim.udc1, K_LEM_ADC[0], R_ADC[0], DEFAULT_ZERO_ADC, UDC_SENS_MAX);
|
||||
adcInitMeasure(&AdcSim.udc2, K_LEM_ADC[1], R_ADC[1], DEFAULT_ZERO_ADC, UDC_SENS_MAX);
|
||||
adcInitMeasure(&AdcSim.ia1, K_LEM_ADC[2], R_ADC[2], DEFAULT_ZERO_ADC, IAC_SENS_MAX);
|
||||
adcInitMeasure(&AdcSim.ib1, K_LEM_ADC[3], R_ADC[3], DEFAULT_ZERO_ADC, IAC_SENS_MAX);
|
||||
adcInitMeasure(&AdcSim.ic1, K_LEM_ADC[4], R_ADC[4], DEFAULT_ZERO_ADC, IAC_SENS_MAX);
|
||||
adcInitMeasure(&AdcSim.ia2, K_LEM_ADC[5], R_ADC[5], DEFAULT_ZERO_ADC, IAC_SENS_MAX);
|
||||
adcInitMeasure(&AdcSim.ib2, K_LEM_ADC[6], R_ADC[6], DEFAULT_ZERO_ADC, IAC_SENS_MAX);
|
||||
adcInitMeasure(&AdcSim.ic2, K_LEM_ADC[7], R_ADC[7], DEFAULT_ZERO_ADC, IAC_SENS_MAX);
|
||||
|
||||
}
|
||||
|
||||
@ -69,6 +69,8 @@ void adcConvert(AdcConvertionHandle* hconv, AdcMeasureHandle* hmeasure, double r
|
||||
else if (realMeasure < -hmeasure->real_satur)
|
||||
realMeasure = -hmeasure->real_satur;
|
||||
}
|
||||
hmeasure->adc_val =
|
||||
(unsigned short)(realMeasure / hmeasure->k_lem_adc * hmeasure->r_adc / hconv->norma_adc / hconv->adc_amplitude * hconv->adc_bit_depth + (float)hmeasure->offset);
|
||||
|
||||
hmeasure->adc_norm = realMeasure / hconv->norma_adc;
|
||||
//hmeasure->adc_val =
|
||||
// (unsigned short)(realMeasure / hmeasure->k_lem_adc * hmeasure->r_adc / hconv->norma_adc / hconv->adc_amplitude * hconv->adc_bit_depth + (float)hmeasure->offset);
|
||||
}
|
@ -34,6 +34,7 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
int adc_val;
|
||||
double adc_norm;
|
||||
|
||||
double real_satur;
|
||||
int r_adc;
|
||||
|
15
README.md
15
README.md
@ -45,7 +45,7 @@ S-Function работает особым образом: на шаге `n` он
|
||||
|
||||
Конфигурации оболочки:
|
||||
- `RUN_APP_MAIN_FUNC_THREAD` - создание и запуск отдельного потока для main()
|
||||
- `DEKSTOP_CYCLES_FOR_MCU_APP` - количество циклов пустого for(;;), в течении которого будет работать поток main()
|
||||
- `DEKSTOP_CYCLES_FOR_MCU_APP` - количество циклов пустого `for(;;)`, в течении которого будет работать поток main()
|
||||
- `MCU_CORE_CLOCK` - частота симулируемого процессора (пока нигде не используется)
|
||||
- `IN_PORT_WIDTH` - размерность входного вектора S-Function
|
||||
- `IN_PORT_NUMB` - количество входных векторов S-Function
|
||||
@ -57,7 +57,7 @@ _Note: дефайн `RUN_APP_MAIN_FUNC_THREAD` пока выключен и по
|
||||
_Note for future: разные вектора можно использовать для разных плат_
|
||||
|
||||
### Оболочка программы
|
||||
Оболочка для программы позволяет имитировать реальный алгоритм программы. Она инициализирует её, запускает необходимые для её работы функции и связывает её с входами/выходами S-Function
|
||||
Оболочка программы позволяет имитировать ёё реальный алгоритм. Оболочка инициализирует программу, запускает необходимые для её работы функции и связывает её с входами/выходами S-Function
|
||||
|
||||
Ниже приведен перечень всех файлов и краткое описание зачем они нужны:
|
||||
- ***app_includes.h***     - включает все необходимые для симуляции заголовочные файлы программы
|
||||
@ -72,13 +72,14 @@ _Note for future: разные вектора можно использоват
|
||||
Данная папка содержит исходный код приложения МК. При этом стандартные библиотеки, которые общие для всех проектов следует помещать в [папку с оболочкой программы](#оболочка-программы). Чтобы не редактировать исходники общих библиотек в каждом проекте.
|
||||
|
||||
### Симуляция плат
|
||||
Модули в этой папке моделируют внешние платы. Пока более-менее сделан только ШИМ, но в будущем планируется расширение и вывод их в отельные S-Function. Чтобы сделать подобие корзины.
|
||||
Модули в этой папке моделируют внешние платы. Пока более-менее сделан ШИМ и АЦП, но в будущем планируется расширение и вывод их в отельные S-Function. Чтобы сделать подобие корзины.
|
||||
|
||||
###### adc_sim
|
||||
***adc_sim.c/.h*** - симуляция АЦП (пока просто заготовка)
|
||||
###### Cимуляция АЦП (adc_sim.c/.h)
|
||||
Пока не особо работает. Надо разобраться как конкретно преобразовывать физические величины в АЦПшные значения
|
||||
|
||||
###### Cимуляция ШИМ (pwm_sim.c/.h)
|
||||
Настраивает счетчик как в Xilinx и симулирует его работу. Есть главный таймер, каждое прерывание которого вызывается алгоритм управления.
|
||||
|
||||
###### pwm_sim
|
||||
***pwm_sim.c/.h*** - симуляция ШИМ
|
||||
Поддерживает два режимы формирования ШИМ:
|
||||
- `PWM_SIMULATION_MODE_REGULAR_PWM` - формирование ШИМ для каждого таймера отдельно
|
||||
- `PWM_SIMULATION_MODE_TK_LINES` - через линии ТК для всей фазы разом
|
||||
|
14
init.m
14
init.m
@ -2,7 +2,7 @@
|
||||
|
||||
clear;%очищаем рабочее пространство
|
||||
Ts = 10e-6;%шаг интегрирования
|
||||
Decim = 20;%интервал прореживания
|
||||
Decim = 1;%интервал прореживания
|
||||
Limit = 2000000;%кол-во запоминаемых точек
|
||||
% Scope-ы запоминают последнии tt секунд расчёта
|
||||
tt = Ts*Decim*Limit;
|
||||
@ -67,15 +67,15 @@ Inom = Snom/(Unom*SQRT3)*SQRT2*0.5;%0.5 -
|
||||
% Lls = Xls/(Fe*PI2);%Гн
|
||||
% Llr = Xlr/(Fe*PI2);%Гн
|
||||
% Lm = Xm/(Fe*PI2);%Гн
|
||||
Rs = 0.0362;%Ом
|
||||
Rs = 0.002%0.0362;%Ом
|
||||
Xls = 0.4016;%Ом
|
||||
Rr = 0.139;%Ом
|
||||
Rr = 0.0021%0.139;%Ом
|
||||
Xlr = 0.2006;%Ом
|
||||
Xm = 5.2796;%Ом
|
||||
Fe = 18.2;%Гц
|
||||
Lls = Xls/(Fe*PI2);%Гн
|
||||
Llr = Xlr/(Fe*PI2);%Гн
|
||||
Lm = Xm/(Fe*PI2);%Гн
|
||||
Fe = 50;%Гц
|
||||
Lls = 0.0001467%Xls/(Fe*PI2);%Гн
|
||||
Llr = 0.00000923%Xlr/(Fe*PI2);%Гн
|
||||
Lm = 0.00421%Xm/(Fe*PI2);%Гн
|
||||
|
||||
% ёмкость на входе INU, Ф
|
||||
Cdc = 50e-3;
|
||||
|
BIN
inu_23550.slx
BIN
inu_23550.slx
Binary file not shown.
Loading…
Reference in New Issue
Block a user