📄 c2812pmsmsim1.c
字号:
} //Wait for Sequencer Busy bit to clear
asm(" RPT #11 || NOP");
c2812pmsmsim1_B.C28xADC[0] = (AdcRegs.ADCRESULT0) >> 4;
c2812pmsmsim1_B.C28xADC[1] = (AdcRegs.ADCRESULT1) >> 4;
c2812pmsmsim1_B.C28xADC[2] = (AdcRegs.ADCRESULT2) >> 4;
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1;// Sequencer reset
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;// Clear INT SEQ1 bit
}
/* DataTypeConversion: '<S4>/Data Type Conversion' */
c2812pmsmsim1_B.DataTypeConversion[0] = (int32_T)c2812pmsmsim1_B.C28xADC[0];
c2812pmsmsim1_B.DataTypeConversion[1] = (int32_T)c2812pmsmsim1_B.C28xADC[1];
c2812pmsmsim1_B.DataTypeConversion[2] = (int32_T)c2812pmsmsim1_B.C28xADC[2];
/* ArithShift: '<S21>/shift' incorporates:
* Constant: '<S4>/Constant'
* Sum: '<S4>/Add'
*/
rtb_shift[0] = (c2812pmsmsim1_B.DataTypeConversion[0] - 2048L) << 6U;
rtb_shift[1] = (c2812pmsmsim1_B.DataTypeConversion[1] - 2048L) << 6U;
/* C28x IQmath Library (stiiqmath_iqmpyi32) - '<S23>/IQN x int1' */
{
c2812pmsmsim1_B.ParkTransformation_o2 = _IQ17mpyI32 (rtb_shift[0],
(((int32_T)-1L)));
}
/* C28x IQmath Library (stiiqmath_iqmpyi32) - '<S23>/IQN x int2' */
{
c2812pmsmsim1_B.ParkTransformation_o1 = _IQ17mpyI32 (rtb_shift[1],
(((int32_T)-1L)));
}
/* C28x DMC Library (tidmcclarke) - '<S10>/Clarke Transformation' */
{
c2812pmsmsim1_B.PIDController1 = c2812pmsmsim1_B.ParkTransformation_o2;
c2812pmsmsim1_B.desired_gain = _IQ17mpy
( c2812pmsmsim1_B.ParkTransformation_o2 + _IQ17mpy
(c2812pmsmsim1_B.ParkTransformation_o1,_IQ17(2)), _IQ17(0.57735026918963)
);
}
/* C28x DMC Library (tidmcpark) - '<S10>/Park Transformation' */
{
c2812pmsmsim1_B.ParkTransformation_o1 = _IQ17mpy
(c2812pmsmsim1_B.PIDController1, _IQ17cosPU(rtb_Switch1_l) ) + _IQ17mpy
(c2812pmsmsim1_B.desired_gain, _IQ17sinPU(rtb_Switch1_l) );
c2812pmsmsim1_B.ParkTransformation_o2 = _IQ17mpy
(c2812pmsmsim1_B.desired_gain, _IQ17cosPU(rtb_Switch1_l) ) - _IQ17mpy
(c2812pmsmsim1_B.PIDController1, _IQ17sinPU(rtb_Switch1_l) );
}
/* Sum: '<S16>/Add' incorporates:
* Constant: '<S16>/Constant'
*/
c2812pmsmsim1_B.desired_gain = rtb_MagnitudeIQN + 131072L;
/* ArithShift: '<S17>/shift' */
c2812pmsmsim1_B.PIDController1 = c2812pmsmsim1_B.desired_gain >> 3;
/* DataTypeConversion: '<S16>/Data Type Conversion1' */
c2812pmsmsim1_B.DataTypeConversion1 = (uint16_T)c2812pmsmsim1_B.PIDController1;
/* Sum: '<S16>/Add1' incorporates:
* Constant: '<S14>/Constant4'
* Constant: '<S16>/Constant1'
*/
c2812pmsmsim1_B.desired_gain = 2127953920L;
/* ArithShift: '<S18>/shift' */
c2812pmsmsim1_B.PIDController1 = c2812pmsmsim1_B.desired_gain >> 3;
/* DataTypeConversion: '<S16>/Data Type Conversion2' */
c2812pmsmsim1_B.DataTypeConversion2_o = (uint16_T)
c2812pmsmsim1_B.PIDController1;
/* S-Function Block: <S16>/C28x PWM1 (c28xpwm) */
{
EvbRegs.CMPR4 = (uint16_T) (c2812pmsmsim1_B.DataTypeConversion1 / 2);
EvbRegs.CMPR5 = (uint16_T) (c2812pmsmsim1_B.DataTypeConversion2_o / 2);
}
/* C28x DMC Library (tidmcpid) - '<S12>/PID Controller' */
{
int32_T error, up_reg3, saterr_reg3, uprsat_reg3;
int32_T* ptrUIReg3 = &c2812pmsmsim1_DWork.PIDController_UI_REG3;
int32_T* ptrUDReg3 = &c2812pmsmsim1_DWork.PIDController_UD_REG3;
int32_T *ptrPrevOut = &c2812pmsmsim1_DWork.PIDController_PREV_OUT;
error = ((int32_T)0L) -
c2812pmsmsim1_B.ParkTransformation_o1;
up_reg3 = _IQ17mpy (_IQ17(0.200000003F), error);
uprsat_reg3 = up_reg3 + *ptrUIReg3 + *ptrUDReg3;
if (uprsat_reg3 > _IQ17(1.0)) {
c2812pmsmsim1_B.desired_gain = _IQ17(1.0);
} else if (uprsat_reg3 < _IQ17(-1.0)) {
c2812pmsmsim1_B.desired_gain = _IQ17(-1.0);
} else {
c2812pmsmsim1_B.desired_gain = uprsat_reg3;
}
saterr_reg3 = c2812pmsmsim1_B.desired_gain - uprsat_reg3;
*ptrUIReg3++ = *ptrUIReg3 + _IQ17mpy (_IQ17(0.002000000095F), up_reg3)
+ _IQ17mpy (_IQ17(0.002000000095F), saterr_reg3);
*ptrUDReg3++ = _IQ17mpy (_IQ17(0.0F), up_reg3 - *ptrPrevOut);
*ptrPrevOut++ = up_reg3;
}
/* C28x IQmath Library (stiiqmath_iqmpyi32) - '<S12>/desired_gain' */
{
c2812pmsmsim1_B.desired_gain = _IQ17mpyI32 (c2812pmsmsim1_B.Torquedemand,
(((int32_T)-1L)));
}
/* C28x DMC Library (tidmcpid) - '<S12>/PID Controller1' */
{
int32_T error, up_reg3, saterr_reg3, uprsat_reg3;
int32_T* ptrUIReg3 = &c2812pmsmsim1_DWork.PIDController1_UI_REG3;
int32_T* ptrUDReg3 = &c2812pmsmsim1_DWork.PIDController1_UD_REG3;
int32_T *ptrPrevOut = &c2812pmsmsim1_DWork.PIDController1_PREV_OUT;
error = c2812pmsmsim1_B.desired_gain -
c2812pmsmsim1_B.ParkTransformation_o2;
up_reg3 = _IQ17mpy (_IQ17(0.200000003F), error);
uprsat_reg3 = up_reg3 + *ptrUIReg3 + *ptrUDReg3;
if (uprsat_reg3 > _IQ17(1.0)) {
c2812pmsmsim1_B.PIDController1 = _IQ17(1.0);
} else if (uprsat_reg3 < _IQ17(-1.0)) {
c2812pmsmsim1_B.PIDController1 = _IQ17(-1.0);
} else {
c2812pmsmsim1_B.PIDController1 = uprsat_reg3;
}
saterr_reg3 = c2812pmsmsim1_B.PIDController1 - uprsat_reg3;
*ptrUIReg3++ = *ptrUIReg3 + _IQ17mpy (_IQ17(0.002000000095F), up_reg3)
+ _IQ17mpy (_IQ17(0.002000000095F), saterr_reg3);
*ptrUDReg3++ = _IQ17mpy (_IQ17(0.0F), up_reg3 - *ptrPrevOut);
*ptrPrevOut++ = up_reg3;
}
/* S-Function Block: <S19>/C28xGPIO_DO (c28xgpio_do) */
{
GpioDataRegs.GPBDAT.bit.GPIOB9 = (boolean_T) (c2812pmsmsim1_B.shift);
}
/* Update for UnitDelay: '<S15>/Unit Delay' */
c2812pmsmsim1_DWork.UnitDelay_DSTATE[0] = rtb_Switch1[0];
c2812pmsmsim1_DWork.UnitDelay_DSTATE[1] = rtb_Switch1[1];
/* Update for UnitDelay: '<S19>/Unit Delay2' */
c2812pmsmsim1_DWork.UnitDelay2_DSTATE = rtb_Switch;
/* Update for UnitDelay: '<S19>/Unit Delay1' */
c2812pmsmsim1_DWork.UnitDelay1_DSTATE = c2812pmsmsim1_B.Saturation;
}
/* Model step function for TID1 */
void c2812pmsmsim1_step1(void) /* Sample time: [0.01s, 0.0s] */
{
/* ArithShift: '<S29>/shift' */
c2812pmsmsim1_B.IQN1toIQN2 = c2812pmsmsim1_B.DataTypeConversion[2] << 5U;
/* Sum: '<S20>/Add2' incorporates:
* Constant: '<S20>/Constant2'
*/
c2812pmsmsim1_B.IQNxint2 = c2812pmsmsim1_B.IQN1toIQN2 - 13107L;
/* Saturate: '<S20>/Saturation' */
if (c2812pmsmsim1_B.IQNxint2 > 131072L) {
c2812pmsmsim1_B.IQNxint2 = 131072L;
} else if (c2812pmsmsim1_B.IQNxint2 < 0L) {
c2812pmsmsim1_B.IQNxint2 = 0L;
}
/* C28x IQmath Library (stiiqmath_iqmpy) - '<S20>/IQN x IQN' */
{
c2812pmsmsim1_B.IQN1toIQN2 = _IQ17mpy (c2812pmsmsim1_B.IQNxint2, ((int32_T)
10486L));
}
/* UnitDelay: '<S20>/Unit Delay' */
c2812pmsmsim1_B.IQNxint2 = c2812pmsmsim1_DWork.UnitDelay_DSTATE_n;
/* C28x IQmath Library (stiiqmath_iqmpy) - '<S20>/IQN x IQN1' */
{
c2812pmsmsim1_B.Switch1 = _IQ17mpy (c2812pmsmsim1_ConstB.Add,
c2812pmsmsim1_B.IQNxint2);
}
/* Sum: '<S20>/Add1' */
c2812pmsmsim1_B.Add1 = c2812pmsmsim1_B.IQN1toIQN2 + c2812pmsmsim1_B.Switch1;
/* Switch: '<S20>/Switch1' incorporates:
* Constant: '<S20>/Constant3'
*/
if (c2812pmsmsim1_B.Saturation != 0U) {
c2812pmsmsim1_B.Switch1 = c2812pmsmsim1_B.Add1;
} else {
c2812pmsmsim1_B.Switch1 = 13107L;
}
/* UnitDelay: '<S32>/Unit Delay' */
c2812pmsmsim1_B.Add = c2812pmsmsim1_DWork.UnitDelay_DSTATE_o;
/* Sum: '<S32>/Add' */
c2812pmsmsim1_B.Add = (uint16_T)((int16_T)c2812pmsmsim1_B.C28xQEP - (int16_T)
c2812pmsmsim1_B.Add);
/* DataTypeConversion: '<S32>/Data Type Conversion2' */
c2812pmsmsim1_B.DataTypeConversion2 = (int16_T)c2812pmsmsim1_B.Add;
/* DataTypeConversion: '<S32>/Data Type Conversion1' */
c2812pmsmsim1_B.IQNxint2 = (int32_T)c2812pmsmsim1_B.DataTypeConversion2;
/* C28x IQmath Library (stiiqmath_iqntoiq) - '<S32>/IQN1 to IQN2' */
{
c2812pmsmsim1_B.IQN1toIQN2 = (long)(c2812pmsmsim1_B.IQNxint2 << 7);
}
/* C28x IQmath Library (stiiqmath_iqmpyi32) - '<S22>/IQN x int2' */
{
c2812pmsmsim1_B.IQNxint2 = _IQ17mpyI32 (c2812pmsmsim1_B.IQN1toIQN2,
(((int32_T)-1L)));
}
/* C28x DMC Library (tidmcpid) - '<S5>/PID Controller' */
{
int32_T error, up_reg3, saterr_reg3, uprsat_reg3;
int32_T* ptrUIReg3 = &c2812pmsmsim1_DWork.PIDController_UI_REG3_h;
int32_T* ptrUDReg3 = &c2812pmsmsim1_DWork.PIDController_UD_REG3_i;
int32_T *ptrPrevOut = &c2812pmsmsim1_DWork.PIDController_PREV_OUT_a;
error = c2812pmsmsim1_B.Switch1 -
c2812pmsmsim1_B.IQNxint2;
up_reg3 = _IQ17mpy (_IQ17(0.5F), error);
uprsat_reg3 = up_reg3 + *ptrUIReg3 + *ptrUDReg3;
if (uprsat_reg3 > _IQ17(1.0)) {
c2812pmsmsim1_B.Torquedemand = _IQ17(1.0);
} else if (uprsat_reg3 < _IQ17(-1.0)) {
c2812pmsmsim1_B.Torquedemand = _IQ17(-1.0);
} else {
c2812pmsmsim1_B.Torquedemand = uprsat_reg3;
}
saterr_reg3 = c2812pmsmsim1_B.Torquedemand - uprsat_reg3;
*ptrUIReg3++ = *ptrUIReg3 + _IQ17mpy (_IQ17(0.1000000015F), up_reg3)
+ _IQ17mpy (_IQ17(0.1000000015F), saterr_reg3);
*ptrUDReg3++ = _IQ17mpy (_IQ17(0.0F), up_reg3 - *ptrPrevOut);
*ptrPrevOut++ = up_reg3;
}
/* Update for UnitDelay: '<S20>/Unit Delay' */
c2812pmsmsim1_DWork.UnitDelay_DSTATE_n = c2812pmsmsim1_B.Add1;
/* Update for UnitDelay: '<S32>/Unit Delay' */
c2812pmsmsim1_DWork.UnitDelay_DSTATE_o = c2812pmsmsim1_B.C28xQEP;
}
void c2812pmsmsim1_step(int_T tid)
{
switch (tid) {
case 0 :
c2812pmsmsim1_step0();
break;
case 1 :
c2812pmsmsim1_step1();
break;
default :
break;
}
}
/* Model initialize function */
void c2812pmsmsim1_initialize(boolean_T firstTime)
{
(void)firstTime;
/* Registration code */
/* initialize real-time model */
(void) memset((char_T *)c2812pmsmsim1_M,0,
sizeof(RT_MODEL_c2812pmsmsim1));
/* block I/O */
(void) memset(((void *) &c2812pmsmsim1_B),0,
sizeof(BlockIO_c2812pmsmsim1));
/* states (dwork) */
(void) memset((char_T *) &c2812pmsmsim1_DWork,0,
sizeof(D_Work_c2812pmsmsim1));
config_QEP_A (0);
EALLOW;
GpioMuxRegs.GPAMUX.all = 0x00FF; // EVA PWM 1-6 pins
config_PWM_A (2048.5,1,1,"INPUT_PORT",0.0,
1,"INPUT_PORT",0.0,1,"INPUT_PORT",0.0,1638,
1, 1, 1, 3, 15, 0);
EDIS;
InitAdc();
config_ADC_A (2U, 1808U, 0U, 0U, 0U);
EALLOW;
GpioMuxRegs.GPBMUX.all = 0x00FF; // EVB PWM 7-12 pins
config_PWM_B (18750.0,1,1,"INPUT_PORT",0.0,
1,"INPUT_PORT",0.0,0,"INPUT_PORT",0.0,1638,
1, 1, 1, 3, 15, 0);
EDIS;
EALLOW;
GpioMuxRegs.GPBMUX.all &= 65023U;
GpioMuxRegs.GPBDIR.all |= 512U;
EDIS;
/* S-Function Block: <S19>/CAPCONA (smemsnk) */
{
/* Memory Mapped Output */
*(uint16_T *)(29728U) = (uint16_T) 4100.0;
}
/* S-Function Block: <S19>/CAPFIFOA (smemsnk) */
{
/* Memory Mapped Output */
*(uint16_T *)(29730U) = (uint16_T) 4096.0;
}
}
/* Model terminate function */
void c2812pmsmsim1_terminate(void)
{
/* (no terminate code required) */
}
/* File trailer for Real-Time Workshop generated code.
*
* [EOF]
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -