matlab_23550/Inu/app_wrapper/app_io.c
Razvalyaev 3b5b9b86f7 #5 Работает и векторное и скалярное
Видимо была проблема в измерениях с двигателя, они принимались непонятно в каком формате. Сейчас сделан модуль АЦП, который все правильно преобразует
2025-01-20 10:45:47 +03:00

122 lines
3.2 KiB
C

/**************************************************************************
Description: Ôóíêöèè äëÿ ïðè¸ìà è âûäà÷è ïàðàìåòðîâ.
Àâòîð: Óëèòîâñêèé Ä.È.
Äàòà ïîñëåäíåãî îáíîâëåíèÿ: 2021.11.08
**************************************************************************/
#include "app_io.h"
#include "pwm_sim.h"
#include "adc_sim.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) {
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);
int nn = 8;
WRotor.iqWRotorCalcBeforeRegul1 = _IQ(u[nn++] / (PI*2) / NORMA_FROTOR);
u[nn++];
edrk.Go = u[nn++];
u[nn++];
edrk.zadanie.iq_power_zad = _IQmpy(_IQ(u[nn]), (edrk.zadanie.rmp_powers_zad.RampHighLimit));
edrk.zadanie.iq_oborots_zad_hz = _IQmpy(_IQ(u[nn++]), (edrk.zadanie.rmp_oborots_zad_hz.RampHighLimit));
} //void input_param(unsigned short num, unsigned short val)
void writeOutputParameters(real_T* xD) {
int nn = 0;
//xD[nn++] = t2sim.ciA;
//xD[nn++] = t1sim.ciA;
//xD[nn++] = t2sim.ciB;
//xD[nn++] = t1sim.ciB;
//
//xD[nn++] = t4sim.ciA;
//xD[nn++] = t3sim.ciA;
//xD[nn++] = t4sim.ciB;
//xD[nn++] = t3sim.ciB;
//
//xD[nn++] = t6sim.ciA;
//xD[nn++] = t5sim.ciA;
//xD[nn++] = t6sim.ciB;
//xD[nn++] = t5sim.ciB;
//xD[nn++] = t1sim.ciB;
//xD[nn++] = t2sim.ciB;
//xD[nn++] = t1sim.ciA;
//xD[nn++] = t2sim.ciA;
//xD[nn++] = t3sim.ciB;
//xD[nn++] = t4sim.ciB;
//xD[nn++] = t3sim.ciA;
//xD[nn++] = t4sim.ciA;
//
//xD[nn++] = t5sim.ciB;
//xD[nn++] = t6sim.ciB;
//xD[nn++] = t5sim.ciA;
//xD[nn++] = t6sim.ciA;
xD[nn++] = PWMPhaseA1.pwmOut.ci1A;
xD[nn++] = PWMPhaseA1.pwmOut.ci2A;
xD[nn++] = PWMPhaseA1.pwmOut.ci1B;
xD[nn++] = PWMPhaseA1.pwmOut.ci2B;
xD[nn++] = PWMPhaseB1.pwmOut.ci1A;
xD[nn++] = PWMPhaseB1.pwmOut.ci2A;
xD[nn++] = PWMPhaseB1.pwmOut.ci1B;
xD[nn++] = PWMPhaseB1.pwmOut.ci2B;
xD[nn++] = PWMPhaseC1.pwmOut.ci1A;
xD[nn++] = PWMPhaseC1.pwmOut.ci2A;
xD[nn++] = PWMPhaseC1.pwmOut.ci1B;
xD[nn++] = PWMPhaseC1.pwmOut.ci2B;
xD[nn++] = PWMPhaseA2.pwmOut.ci1A;
xD[nn++] = PWMPhaseA2.pwmOut.ci2A;
xD[nn++] = PWMPhaseA2.pwmOut.ci1B;
xD[nn++] = PWMPhaseA2.pwmOut.ci2B;
xD[nn++] = PWMPhaseB2.pwmOut.ci1A;
xD[nn++] = PWMPhaseB2.pwmOut.ci2A;
xD[nn++] = PWMPhaseB2.pwmOut.ci1B;
xD[nn++] = PWMPhaseB2.pwmOut.ci2B;
xD[nn++] = PWMPhaseC2.pwmOut.ci1A;
xD[nn++] = PWMPhaseC2.pwmOut.ci2A;
xD[nn++] = PWMPhaseC2.pwmOut.ci1B;
xD[nn++] = PWMPhaseC2.pwmOut.ci2B;
// Òîëüêî äëÿ ïðîñìîòðà
xD[nn++] = xpwm_time.Ta0_0;
xD[nn++] = xpwm_time.Ta0_1;
xD[nn++] = xpwm_time.Ta1_0;
xD[nn++] = xpwm_time.Ta1_1;
xD[nn++] = xpwm_time.Tb0_0;
xD[nn++] = xpwm_time.Tb0_1;
xD[nn++] = xpwm_time.Tb1_0;
xD[nn++] = xpwm_time.Tb1_1;
xD[nn++] = xpwm_time.Tc0_0;
xD[nn++] = xpwm_time.Tc0_1;
xD[nn++] = xpwm_time.Tc1_0;
xD[nn++] = xpwm_time.Tc1_1;
}