matlab_23550/Inu/controller.c

249 lines
6.1 KiB
C
Raw Normal View History

2024-12-27 10:50:32 +03:00
/**************************************************************************
Description: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> init28335, detcoeff, isr.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TMS320F28335/TMS320F28379D (ADC, PWM, QEP <EFBFBD> <EFBFBD>.<EFBFBD>.).
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>.<EFBFBD>.
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 2021.11.08
**************************************************************************/
#include "simstruc.h"
#include "controller.h"
#include "init28335.h"
#include "param.h"
2024-12-27 10:50:32 +03:00
UMotorMeasure motor;
double dt;
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><>
int j;
unsigned short paramNo;
unsigned short paramNew[PAR_NUMBER];
2024-12-27 10:50:32 +03:00
void processSFunctionIfChanged(SimStruct *S, int_T *iW) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> S-Function <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ( iW[0] == 1 ) {
iW[0] = 0;
int kkk = 0;
for (int lll = 0; lll < NPARAMS; lll++ ) {
2024-12-27 10:50:32 +03:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int dimen = mxGetNumberOfElements(ssGetSFcnParam(S,lll));
2024-12-27 10:50:32 +03:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ( dimen > LEN_PARAM_MATR*2 ) {
ssSetErrorStatus(S,"<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return;
}
else if ( dimen > 1 ) {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>-<2D><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
paramMatrDimen = dimen;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (int mmm = 0; mmm < dimen; mmm++ )
2024-12-27 10:50:32 +03:00
paramMatr[mmm] = mxGetPr(ssGetSFcnParam(S,lll))[mmm];
}
else {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
paramScal[kkk++] = mxGetPr(ssGetSFcnParam(S,lll))[0];
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (begin)
int nn = 0;
dt = paramScal[nn++];//<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> S-function <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!)
2024-12-27 10:50:32 +03:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (end)
} //if ( iW[0] == 1 )
}
void initialisationOnStart(int_T *iW) {
// <20><><EFBFBD>-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if ( iW[1] == 1 ) {
iW[1] = 0;
Init_Timers();
init28335();
} //if ( iW[1] == 1 )
2024-12-27 10:50:32 +03:00
}
void update_norm_ADC_array()
{
//// Udc1
//if ( udc1_ml > UDC_SENS_MAX )
// udc1_ml = UDC_SENS_MAX;
//else if ( udc1_ml < -UDC_SENS_MAX )
// udc1_ml = -UDC_SENS_MAX;
//iq_norm_ADC[0] = _IQ(udc1_ml/NORMA_ACP);
//// Udc2
//if ( udc2_ml > UDC_SENS_MAX )
// udc2_ml = UDC_SENS_MAX;
//else if ( udc2_ml < -UDC_SENS_MAX )
// udc2_ml = -UDC_SENS_MAX;
//iq_norm_ADC[1] = _IQ(udc2_ml/NORMA_ACP);
//// Udc3
//if ( udc3_ml > UDC_SENS_MAX )
// udc3_ml = UDC_SENS_MAX;
//else if ( udc3_ml < -UDC_SENS_MAX )
// udc3_ml = -UDC_SENS_MAX;
//iq_norm_ADC[7] = _IQ(udc3_ml/NORMA_ACP);
//// Udc4
//if ( udc4_ml > UDC_SENS_MAX )
// udc4_ml = UDC_SENS_MAX;
//else if ( udc4_ml < -UDC_SENS_MAX )
// udc4_ml = -UDC_SENS_MAX;
//iq_norm_ADC[8] = _IQ(udc4_ml/NORMA_ACP);
//// Idc1
//if ( idc1_ml > IDC_SENS_MAX )
// idc1_ml = IDC_SENS_MAX;
//else if ( idc1_ml < -IDC_SENS_MAX )
// idc1_ml = -IDC_SENS_MAX;
//iq_norm_ADC[2] = _IQ(idc1_ml/NORMA_ACP);
//// Idc2
//if ( idc2_ml > IDC_SENS_MAX )
// idc2_ml = IDC_SENS_MAX;
//else if ( idc2_ml < -IDC_SENS_MAX )
// idc2_ml = -IDC_SENS_MAX;
//iq_norm_ADC[3] = _IQ(idc2_ml/NORMA_ACP);
//// Idc3
//if ( idc3_ml > IDC_SENS_MAX )
// idc3_ml = IDC_SENS_MAX;
//else if ( idc3_ml < -IDC_SENS_MAX )
// idc3_ml = -IDC_SENS_MAX;
//iq_norm_ADC[9] = _IQ(idc3_ml/NORMA_ACP);
//// Idc4
//if ( idc4_ml > IDC_SENS_MAX )
// idc4_ml = IDC_SENS_MAX;
//else if ( idc4_ml < -IDC_SENS_MAX )
// idc4_ml = -IDC_SENS_MAX;
//iq_norm_ADC[10] = _IQ(idc4_ml/NORMA_ACP);
//// Ia1
//if ( ia1_ml > IAC_SENS_MAX )
// ia1_ml = IAC_SENS_MAX;
//else if ( ia1_ml < -IAC_SENS_MAX )
// ia1_ml = -IAC_SENS_MAX;
//iq_norm_ADC[4] = _IQ(ia1_ml/NORMA_ACP);
//// Ib1
//if ( ib1_ml > IAC_SENS_MAX )
// ib1_ml = IAC_SENS_MAX;
//else if ( ib1_ml < -IAC_SENS_MAX )
// ib1_ml = -IAC_SENS_MAX;
//iq_norm_ADC[5] = _IQ(ib1_ml/NORMA_ACP);
//// Ic1
//if ( ic1_ml > IAC_SENS_MAX )
// ic1_ml = IAC_SENS_MAX;
//else if ( ic1_ml < -IAC_SENS_MAX )
// ic1_ml = -IAC_SENS_MAX;
//iq_norm_ADC[6] = _IQ(ic1_ml/NORMA_ACP);
//// Ia2
//if ( ia2_ml > IAC_SENS_MAX )
// ia2_ml = IAC_SENS_MAX;
//else if ( ia2_ml < -IAC_SENS_MAX )
// ia2_ml = -IAC_SENS_MAX;
//iq_norm_ADC[11] = _IQ(ia2_ml/NORMA_ACP);
//// Ib2
//if ( ib2_ml > IAC_SENS_MAX )
// ib2_ml = IAC_SENS_MAX;
//else if ( ib2_ml < -IAC_SENS_MAX )
// ib2_ml = -IAC_SENS_MAX;
//iq_norm_ADC[12] = _IQ(ib2_ml/NORMA_ACP);
//// Ic2
//if ( ic2_ml > IAC_SENS_MAX )
// ic2_ml = IAC_SENS_MAX;
//else if ( ic2_ml < -IAC_SENS_MAX )
// ic2_ml = -IAC_SENS_MAX;
//iq_norm_ADC[13] = _IQ(ic2_ml/NORMA_ACP);
//vect_control.off_curr_pi = mst.off_curr_pi;
//vect_control.only_one_km = mst.only_one_km;
//vect_control.enable_compens_iq1_iq2 = mst.enable_compens_iq1_iq2;
}
void simulateAdcAndCallIsr() {
///* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD> (<28> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> nAdc <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */
//if ( tAdc < Tadc ) {
// tAdc++;
//}
//else {
// tAdc = 1;
// timers_adc++;
// if (timers_adc>=FREQ_ADC_TIMER)
// timers_adc = 0;
// update_norm_ADC_array();
// // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> isr()
// acp_Handler();
// //isr();
// // nAdc++;
// // switch ( nAdc ) {
// // case 5:
//
// // break;
// // case 6:
// // break;
// // case 7:
// // // <20><><EFBFBD> <20><> <20> <20><>
// // for ( j = FIRST_WRITE_PAR_NUM; j < paramNo; j++ ) {
// // if ( paramNew[j] != param[j] ) {
// // input_param((short)j, paramNew[j]);
// // break;
// // }
// // }
// // // <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> isr()
// // isr();
// // break;
// // } //switch ( nAdc )
//} //tAdc
// if (calcAlgUpr) {
// // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// upr();
// calcAlgUpr = 0;
// timers_pwm++;
// if (timers_pwm>=FREQ_PWM_TIMER)
// timers_pwm = 0;
// }
}
void controller(SimStruct *S, const real_T *u, real_T *xD, real_T *rW, int_T *iW) {
2024-12-27 10:50:32 +03:00
readInputParameters(u);
processSFunctionIfChanged(S, iW);
initialisationOnStart(iW);
Simulate_Timers();
2024-12-27 10:50:32 +03:00
simulateAdcAndCallIsr();
writeOutputParameters(xD);
} //void controller(SimStruct ...