⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c2812pmsmsim1.c

📁 dsp控制电机时与位置传感器相关程序 以及位置传感器的说明
💻 C
📖 第 1 页 / 共 2 页
字号:
    }                                  //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 + -