/** ************************************************************************** * @file app_init.h * @brief Файл с функциями записи входов/выходов программы МК @ref app_init. **************************************************************************/ #include "mcu_wrapper_conf.h" #include "app_wrapper.h" float dbg[16]; extern float iref_dbg; #define PIN_READ(_verbname_) (_verbname_##_GPIO_Port->ODR & (_verbname_##_Pin)) ? 1 : 0 void Write_Thyristors(real_T* Buffer, int ind_port) { int pwm1_pin = PIN_READ(PWM1); int pwm2_pin = PIN_READ(PWM2); int pwm3_pin = PIN_READ(PWM3); int pwm4_pin = PIN_READ(PWM4); int pwm5_pin = PIN_READ(PWM5); int pwm6_pin = PIN_READ(PWM6); WriteOutputArray(pwm1_pin, ind_port, 0); WriteOutputArray(pwm2_pin, ind_port, 1); WriteOutputArray(pwm3_pin, ind_port, 2); WriteOutputArray(pwm4_pin, ind_port, 3); WriteOutputArray(pwm5_pin, ind_port, 4); WriteOutputArray(pwm6_pin, ind_port, 5); } void Write_PowerMonitor(real_T* Buffer, int ind_port) { int nn = 0; for (int i = 0; i < 3; i++) { //0-2 WriteOutputArray(upp.pm.measured.fast.U[i], ind_port, nn++); } for (int i = 0; i < 3; i++) { //3-5 WriteOutputArray(upp.pm.zc.Channel[i].HalfWave, ind_port, nn++); } for (int i = 0; i < 3; i++) { //6-8 WriteOutputArray(upp.pm.measured.final.F[i], ind_port, nn++); } for (int i = 0; i < 3; i++) { //9-11 WriteOutputArray(upp.pm.measured.fast.I[i], ind_port, nn++); } for (int i = 0; i < 2; i++) { //12-13 WriteOutputArray(upp.pm.measured.final.T[i], ind_port, nn++); } { //14-19 WriteOutputArray(upp.pm.measured.final.Uamp, ind_port, nn++); WriteOutputArray(upp.pm.measured.final.Iamp, ind_port, nn++); WriteOutputArray(upp.pm.measured.final.I[0], ind_port, nn++); WriteOutputArray(upp.pm.measured.final.I[1], ind_port, nn++); WriteOutputArray(upp.pm.measured.final.I[2], ind_port, nn++); WriteOutputArray(upp.pm.measured.final.Fmean, ind_port, nn++); } } /** * @brief Функция для записи входов в приложение МК * @param u - массив входных значений */ void app_readInputs(const real_T* Buffer) { // USER APP INPUT START ADC_Set_Channel_Value(ADC3, 4, ReadInputArray(0,0)); ADC_Set_Channel_Value(ADC3, 5, ReadInputArray(0,1)); ADC_Set_Channel_Value(ADC3, 6, ReadInputArray(0,2)); ADC_Set_Channel_Value(ADC3, 7, ReadInputArray(0,3)); ADC_Set_Channel_Value(ADC3, 8, ReadInputArray(0,4)); ADC_Set_Channel_Value(ADC3, 10, ReadInputArray(0,5)); iref_dbg = ReadInputArray(1, 0); upp.call->go = ReadInputArray(1, 1); MB_INTERNAL.param.angle.Angle_Max = ReadInputArray(1, 2)*65535; MB_INTERNAL.param.angle.Angle_Min = ReadInputArray(1, 3)*65535; MB_INTERNAL.param.angle.PID_Kp = ReadInputArray(1, 4) * 10000; MB_INTERNAL.param.angle.PID_Ki = ReadInputArray(1, 5) * 10000; MB_INTERNAL.param.angle.PID_Kd = ReadInputArray(1, 6) * 10000; // USER APP INPUT END } /** * @brief Функция для записи выходов приложения МК * @param xD - массив буффера выходов(дискретных выходов) * @details Используте WriteOutputArray(val, arr_ind, val_ind) для записи */ void app_writeOutputBuffer(real_T* Buffer) { // USER APP OUTPUT START Write_Thyristors(Buffer, 0); Write_PowerMonitor(Buffer, 1); int nn = 0; WriteOutputArray(iref_dbg, 2, nn++); WriteOutputArray(upp.pm.measured.final.Iamp, 2, nn++); WriteOutputArray(upp.hangle.alpha, 2, nn++); //WriteOutputArray(upp.hangle.htim->Instance->CNT, 2, nn++); //WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR1) - upp.hangle.htim->Instance->CNT, 2, nn++); //WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR2) - upp.hangle.htim->Instance->CNT, 2, nn++); //WriteOutputArray((long long)(upp.hangle.htim->Instance->CCR3) - upp.hangle.htim->Instance->CNT, 2, nn++); //WriteOutputArray(dbg[0], 2, nn++); //WriteOutputArray(dbg[1], 2, nn++); //WriteOutputArray(dbg[2], 2, nn++); //WriteOutputArray(upp.hpwm.AllPhases[PHASE_A_POS].State, 2, nn++); //WriteOutputArray(upp.hpwm.AllPhases[PHASE_A_NEG].State, 2, nn++); //WriteOutputArray(upp.hpwm.AllPhases[PHASE_B_POS].State, 2, nn++); //WriteOutputArray(upp.hpwm.AllPhases[PHASE_B_NEG].State, 2, nn++); //WriteOutputArray(upp.hpwm.AllPhases[PHASE_C_POS].State, 2, nn++); //WriteOutputArray(upp.hpwm.AllPhases[PHASE_C_NEG].State, 2, nn++); // USER APP OUTPUT END }