Razvalyaev
5169ba84d3
- Почему-то функция 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
100 lines
2.3 KiB
C
100 lines
2.3 KiB
C
/**************************************************************************
|
|
Description: Ôóíêöèè äëÿ ïðè¸ìà è âûäà÷è ïàðàìåòðîâ.
|
|
|
|
Àâòîð: Óëèòîâñêèé Ä.È.
|
|
Äàòà ïîñëåäíåãî îáíîâëåíèÿ: 2021.11.08
|
|
**************************************************************************/
|
|
|
|
#include "param.h"
|
|
|
|
int Unites[UNIT_QUA_UNITS][UNIT_LEN];
|
|
int CAN_timeout[UNIT_QUA];
|
|
RS_DATA_STRUCT rs_a = RS_DATA_STRUCT_DEFAULT, rs_b = RS_DATA_STRUCT_DEFAULT;
|
|
|
|
// Èçìåíÿåò çíà÷åíèå ïàðàìåòðà
|
|
void readInputParameters(const real_T *u) {
|
|
int nn = 0;
|
|
|
|
iq_norm_ADC[0][0] = _IQ(u[nn++]/NORMA_ACP);
|
|
iq_norm_ADC[0][1] = _IQ(u[nn++]/NORMA_ACP);
|
|
iq_norm_ADC[0][2] = _IQ(u[nn++]/NORMA_ACP);
|
|
iq_norm_ADC[0][3] = _IQ(u[nn++]/NORMA_ACP);
|
|
iq_norm_ADC[0][4] = _IQ(u[nn++]/NORMA_ACP);
|
|
iq_norm_ADC[0][5] = _IQ(u[nn++]/NORMA_ACP);
|
|
iq_norm_ADC[0][6] = _IQ(u[nn++]/NORMA_ACP);
|
|
iq_norm_ADC[0][7] = _IQ(u[nn++]/NORMA_ACP);
|
|
|
|
WRotor.iqWRotorSumFilter = _IQ(u[nn++] / PI2 / NORMA_FROTOR);
|
|
|
|
u[nn++];
|
|
|
|
edrk.Go = u[nn++];
|
|
|
|
u[nn++];
|
|
edrk.Mode_ScalarVectorUFConst = ALG_MODE_FOC_OBOROTS;
|
|
|
|
edrk.zadanie.iq_power_zad = _IQ(0.5);
|
|
edrk.zadanie.iq_oborots_zad_hz = _IQ(0.5);
|
|
|
|
edrk.MasterSlave = MODE_MASTER;
|
|
edrk.master_theta;
|
|
edrk.master_Iq;
|
|
edrk.iq_power_kw_another_bs;
|
|
edrk.tetta_to_slave;
|
|
edrk.Iq_to_slave;
|
|
edrk.P_to_master;
|
|
|
|
uf_alg.winding_displacement_bs1;
|
|
} //void input_param(unsigned short num, unsigned short val)
|
|
|
|
|
|
void writeOutputParameters(real_T* xD) {
|
|
int nn = 0;
|
|
|
|
xD[nn++] = t1sim.ciA;
|
|
xD[nn++] = t2sim.ciA;
|
|
xD[nn++] = t1sim.ciB;
|
|
xD[nn++] = t2sim.ciB;
|
|
|
|
xD[nn++] = t3sim.ciA;
|
|
xD[nn++] = t4sim.ciA;
|
|
xD[nn++] = t3sim.ciB;
|
|
xD[nn++] = t4sim.ciB;
|
|
|
|
xD[nn++] = t5sim.ciA;
|
|
xD[nn++] = t6sim.ciA;
|
|
xD[nn++] = t5sim.ciB;
|
|
xD[nn++] = t6sim.ciB;
|
|
|
|
|
|
xD[nn++] = t7sim.ciA;
|
|
xD[nn++] = t8sim.ciA;
|
|
xD[nn++] = t7sim.ciB;
|
|
xD[nn++] = t8sim.ciB;
|
|
|
|
xD[nn++] = t9sim.ciA;
|
|
xD[nn++] = t10sim.ciA;
|
|
xD[nn++] = t9sim.ciB;
|
|
xD[nn++] = t10sim.ciB;
|
|
|
|
xD[nn++] = t11sim.ciA;
|
|
xD[nn++] = t12sim.ciA;
|
|
xD[nn++] = t11sim.ciB;
|
|
xD[nn++] = t12sim.ciB;
|
|
|
|
// Òîëüêî äëÿ ïðîñìîòðà
|
|
xD[nn++] = xpwm_time.Ta0_0;
|
|
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);
|
|
|
|
} |