Compare commits

...

2 Commits

Author SHA1 Message Date
5169ba84d3 #5 Заработало, но есть ньюансы
- Почему-то функция recalc_time_pwm_minimal_2_xilinx_pwm24 работает только если pwm24->XilinxFreq в формате int, а не unsigned

- Алг нормально стартует почему-то не сразу, а где-то после 4 секунды

- Тесты при разном порядке фаз (дефайн SIMULINK_SEQUENCE = V_PWM24_PHASE_SEQ_XXX)
	- V_PWM24_PHASE_SEQ_NORMAL_ABC: работает красиво, но не правильно.
	- V_PWM24_PHASE_SEQ_NORMAL_BCA: работает вроде кое-как правильно, но почти моментально выходит на скорость 34Гц. Плюс сильный выброс в начале. Мб параметры двигателя неправильные
	- остальные работают через жопу

- Задание (оборотов, мощности, Izad) почему-то никак не влияет

- ШИМ вроде шимиться нормально (учитывая высокую частоту огибающей) closed #4
2025-01-14 18:41:34 +03:00
c42e0fa1d3 Добавлены выводы текущей скважности ШИМ
Кое как работает только половина ШИМ
2025-01-14 16:39:15 +03:00
8 changed files with 34 additions and 45 deletions

View File

@ -54,7 +54,7 @@ typedef struct { // _iq Gain; // Input: reference gain voltage (pu)
// _iq delta_t; // _iq delta_t;
//int16 Periodmax; //int16 Periodmax;
//int16 PeriodMin; //int16 PeriodMin;
unsigned int XilinxFreq; // Xilinx freq in TIC int XilinxFreq; // Xilinx freq in TIC
unsigned int pwm_minimal_impuls_zero_plus; unsigned int pwm_minimal_impuls_zero_plus;
unsigned int pwm_minimal_impuls_zero; unsigned int pwm_minimal_impuls_zero;

View File

@ -13,6 +13,7 @@
#define FREQ_TIMER_3 (FREQ_PWM*2) #define FREQ_TIMER_3 (FREQ_PWM*2)
void init28335(void) { void init28335(void) {
init_simple_scalar();
edrk.flag_second_PCH = 0; edrk.flag_second_PCH = 0;
@ -21,9 +22,13 @@ void init28335(void) {
Init_Adc_Variables(); Init_Adc_Variables();
//svgen_pwm24_1.phase_sequence = SIMULINK_SEQUENCE; svgen_pwm24_1.phase_sequence = SIMULINK_SEQUENCE;
//svgen_pwm24_2.phase_sequence = SIMULINK_SEQUENCE; svgen_pwm24_2.phase_sequence = SIMULINK_SEQUENCE;
edrk.zadanie.iq_Izad = _IQ(0.5);
edrk.disable_alg_u_disbalance = 1;
//analog_zero.iqU_1 = 2048;
//analog_zero.iqU_2 = 2048;
} //void init28335(void) } //void init28335(void)
void edrk_init_variables_matlab(void) void edrk_init_variables_matlab(void)

View File

@ -50,6 +50,7 @@ void mcu_simulate_step(void)
} }
ramp_all_zadanie(0); // ňóň âńĺ ďî řňŕňíîěó
calc_norm_ADC_0(0); calc_norm_ADC_0(0);

View File

@ -31,11 +31,10 @@ void readInputParameters(const real_T *u) {
edrk.Go = u[nn++]; edrk.Go = u[nn++];
u[nn++]; u[nn++];
edrk.Mode_ScalarVectorUFConst = ALG_MODE_FOC_OBOROTS; edrk.Mode_ScalarVectorUFConst = ALG_MODE_FOC_OBOROTS;
edrk.zadanie.iq_power_zad_rmp = _IQ(u[nn++]); edrk.zadanie.iq_power_zad = _IQ(0.5);
edrk.zadanie.iq_oborots_zad_hz_rmp = _IQ(u[nn++]); edrk.zadanie.iq_oborots_zad_hz = _IQ(0.5);
edrk.MasterSlave = MODE_MASTER; edrk.MasterSlave = MODE_MASTER;
edrk.master_theta; edrk.master_theta;
@ -84,33 +83,18 @@ void writeOutputParameters(real_T* xD) {
xD[nn++] = t12sim.ciB; xD[nn++] = t12sim.ciB;
// Òîëüêî äëÿ ïðîñìîòðà // Òîëüêî äëÿ ïðîñìîòðà
xD[nn++] = _IQtoF(0);
xD[nn++] = _IQtoF(0);
xD[nn++] = 0;
xD[nn++] = 0;
xD[nn++] = 0;
xD[nn++] = 0;
xD[nn++] = 0;
xD[nn++] = 0;
xD[nn++] = _IQtoF(0);//rs.wmZ;
xD[nn++] = _IQtoF(0) * NORMA_FROTOR * 60.0 / N_BAZ;//csp.wmLimZi;
xD[nn++] = 0;///P_NOM;
xD[nn++] = 0;///P_NOM;
xD[nn++] = 0;///P_NOM;
xD[nn++] = _IQtoF(vect_control.iqId2);//_IQtoF(vect_control.iqPzad);
xD[nn++] = _IQtoF(vect_control.iqIq2);// * NORMA_ACP;
xD[nn++] = _IQtoF(vect_control.iqId1);//_IQtoF(vect_control.iqUqCompensation1);//
xD[nn++] = _IQtoF(vect_control.iqIq1);
xD[nn++] = _IQtoF(vect_control.Iq_zad1);
xD[nn++] = _IQtoF(vect_control.Id_zad1);//iqZ;
xD[nn++] = 0;
xD[nn++] = xpwm_time.Ta0_0; xD[nn++] = xpwm_time.Ta0_0;
xD[nn++] = xpwm_time.Ta0_1; xD[nn++] = xpwm_time.Ta0_1;
xD[nn++] = xpwm_time.Tb0_0;
xD[nn++] = xpwm_time.Tb0_1;
xD[nn++] = xpwm_time.Tc0_0;
xD[nn++] = xpwm_time.Tc0_1;
xD[nn++] = _IQtoF(edrk.Iq_to_slave);
xD[nn++] = _IQtoF(WRotor.iqWRotorSumFilter);
xD[nn++] = 0;
xD[nn++] = 0;
xD[nn++] = _IQtoF(WRotor.iqWRotorSumFilter);
} }

View File

@ -245,5 +245,4 @@ void controller(SimStruct *S, const real_T *u, real_T *xD, real_T *rW, int_T *iW
writeOutputParameters(xD); writeOutputParameters(xD);
mcu_simulate_step();
} //void controller(SimStruct ... } //void controller(SimStruct ...

View File

@ -11,13 +11,13 @@
// раскомментировать, если есть сдвиг между обмотками ГЭД (30 град.) // раскомментировать, если есть сдвиг между обмотками ГЭД (30 град.)
#define SHIFT #define SHIFT
#define SIMULINK_SEQUENCE V_PWM24_PHASE_SEQ_REVERS_BAC #define SIMULINK_SEQUENCE V_PWM24_PHASE_SEQ_NORMAL_BCA
/* V_PWM24_PHASE_SEQ_NORMAL_ABC, /* V_PWM24_PHASE_SEQ_NORMAL_ABC, - íĺ ňî
V_PWM24_PHASE_SEQ_NORMAL_BCA, V_PWM24_PHASE_SEQ_NORMAL_BCA, - ďîőîćĺ íŕ ďđŕâäó
V_PWM24_PHASE_SEQ_NORMAL_CAB, V_PWM24_PHASE_SEQ_NORMAL_CAB, - ćîďŕ
V_PWM24_PHASE_SEQ_REVERS_ACB, V_PWM24_PHASE_SEQ_REVERS_ACB, - ćîďŕ
V_PWM24_PHASE_SEQ_REVERS_CBA, V_PWM24_PHASE_SEQ_REVERS_CBA, - ćîďŕ
V_PWM24_PHASE_SEQ_REVERS_BAC V_PWM24_PHASE_SEQ_REVERS_BAC - ćîďŕ
*/ */
// режимы работы (для state) // режимы работы (для state)

View File

@ -74,10 +74,10 @@ void SimulatePWM(TimerSimHandle* tsim, int compare)
{ {
simulateTimAndGetCompare(tsim, compare); simulateTimAndGetCompare(tsim, compare);
simulateActionActionQualifierSubmodule(tsim); simulateActionActionQualifierSubmodule(tsim);
tsim->ciA = tsim->dtsim.ciA_DT; //tsim->ciA = tsim->dtsim.ciA_DT;
tsim->ciB = tsim->dtsim.ciB_DT; //tsim->ciB = tsim->dtsim.ciB_DT;
//simulateDeadBendSubmodule(tsim); simulateDeadBendSubmodule(tsim);
//simulateTripZoneSubmodule(tsim); simulateTripZoneSubmodule(tsim);
} }

Binary file not shown.