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

📄 dtc_svm_416_acc.c

📁 关于永磁同步电机DTC系统的无速度传感器
💻 C
📖 第 1 页 / 共 5 页
字号:
          }

          /* Product: '<S41>/Product' */
          {
            int_T i1;

            const real_T *u0 = &dtc_svm_416_B->Look_Up_Table[0];
            const real_T *u1 = &dtc_svm_416_B->Switch_d[0];
            real_T *y0 = &dtc_svm_416_B->Product_e[0];

            for (i1=0; i1 < 6; i1++) {
              y0[i1] = u0[i1] * u1[i1];
            }
          }
        }
      } }
  }

  if (ssIsSampleHit(S, 4, tid)) {       /* Sample time: [0.00001, 0.0] */

    /* Constant: '<S14>/Constant2' */
    dtc_svm_416_B->Constant2_b = dtc_svm_416_P->Constant2_b_Value;

    /* UnitDelay: '<S42>/Unit Delay9' */
    {
      int_T i1;

      real_T *y0 = &dtc_svm_416_B->Unit_Delay9[0];
      real_T *dw_DSTATE = &dtc_svm_416_DWork->Unit_Delay9_DSTATE[0];

      for (i1=0; i1 < 6; i1++) {
        y0[i1] = dw_DSTATE[i1];
      }
    }

    /* UnitDelay: '<S38>/Unit Delay3' */
    {
      int_T i1;

      real_T *y0 = &dtc_svm_416_B->Unit_Delay3_a[0];
      real_T *dw_DSTATE = &dtc_svm_416_DWork->Unit_Delay3_a_DSTATE[0];

      for (i1=0; i1 < 6; i1++) {
        y0[i1] = dw_DSTATE[i1];
      }
    }

    /* Level2 S-Function Block: <S34>/State-Space (sfun_psbdiscc) */
    /* Call into Simulink for MEX-version of S-function */
    ssCallAccelRunBlock(S, 8, 99, SS_CALL_MDL_OUTPUTS);

    /* Scope: '<Root>/U I scope1' */
    /* Call into Simulink for Scope */
    ssCallAccelRunBlock(S, 8, 100, SS_CALL_MDL_OUTPUTS);
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Scope: '<Root>/U I scope2' */
    /* Call into Simulink for Scope */
    ssCallAccelRunBlock(S, 8, 101, SS_CALL_MDL_OUTPUTS);
  }

  if (ssIsSampleHit(S, 4, tid)) {       /* Sample time: [0.00001, 0.0] */

    /* Gain: '<Root>/Gain3' incorporates:
     *   Sum: '<Root>/Sum6'
     *
     * Regarding '<Root>/Gain3':
     *   Gain value: dtc_svm_416_P->Gain3_c_Gain
     */
    rtb_Gain3_c = (-dtc_svm_416_B->State_Space[6] +
      dtc_svm_416_B->State_Space[8]) * dtc_svm_416_P->Gain3_c_Gain;

    /* Sum: '<Root>/Sum7' */
    dtc_svm_416_B->Sum7 = dtc_svm_416_B->State_Space[6] + rtb_Gain3_c;

    /* Scope: '<Root>/U I scope3' */
    /* Call into Simulink for Scope */
    ssCallAccelRunBlock(S, 8, 105, SS_CALL_MDL_OUTPUTS);
  }

  /* SubSystem: '<Root>/XY Graph' */
  if (ssIsSampleHit(S, 6, tid)) {

    /* Outputs for atomic system: '<Root>/XY Graph' */

    /* Level1 S-Function Block: <S15>/sfunxy (sfunxy) */
    /* Call into Simulink for MEX-version of S-function */
    ssCallAccelRunBlock(S, 7, 0, SS_CALL_MDL_OUTPUTS);
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Integrator: '<S52>/Integrator1' */
    dtc_svm_416_B->Integrator1_b = dtc_svm_416_X->Integrator1_b_CSTATE;

    /* Integrator: '<S52>/Integrator3' */
    dtc_svm_416_B->Integrator3_b = dtc_svm_416_X->Integrator3_b_CSTATE;

    /* Scope: '<Root>/x_y' */
    /* Call into Simulink for Scope */
    ssCallAccelRunBlock(S, 8, 109, SS_CALL_MDL_OUTPUTS);
  }

  if (ssIsSampleHit(S, 4, tid)) {       /* Sample time: [0.00001, 0.0] */

    /* Sum: '<Root>/Sum8' */
    rtb_Sum8 = rtb_Gain3_c - dtc_svm_416_B->State_Space[8];

    /* Fcn: '<S48>/Fcn'
     *
     * Regarding '<S48>/Fcn':
     *   Expression: 2/3*(u(1)-1/2*u(2)-1/2*u(3))
     */
    dtc_svm_416_B->Fcn_c = 2.0 / 3.0 * ( dtc_svm_416_B->Sum7 - 1.0 / 2.0 *
      rtb_Gain3_c - 1.0 / 2.0 * rtb_Sum8 );

    /* Fcn: '<S48>/Fcn1'
     *
     * Regarding '<S48>/Fcn1':
     *   Expression: 2/3*(sqrt(3)/2*u(2)-sqrt(3)/2*u(3))
     */
    dtc_svm_416_B->Fcn1_d = 2.0 / 3.0 * ( sqrt( 3.0) / 2.0 *
      rtb_Gain3_c - sqrt( 3.0) / 2.0 * rtb_Sum8 );
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Fcn: '<S47>/Fcn7'
     *
     * Regarding '<S47>/Fcn7':
     *   Expression: u(1)*cos(u(3))+u(2)*sin(u(3))
     */
    rtb_temp191 = dtc_svm_416_B->Fcn_c * cos( rtb_Integrator3_a ) +
      dtc_svm_416_B->Fcn1_d * sin( rtb_Integrator3_a );

    /* Fcn: '<S47>/Fcn8'
     *
     * Regarding '<S47>/Fcn8':
     *   Expression: -u(1)*sin(u(3))+u(2)*cos(u(3))
     */
    rtb_temp187 = ( -dtc_svm_416_B->Fcn_c ) * sin( rtb_Integrator3_a ) +
      dtc_svm_416_B->Fcn1_d * cos( rtb_Integrator3_a );

    /* Step: '<Root>/Load_torque' */
    if (ssIsMajorTimeStep(S)) {
      if (ssGetTaskTime(S,tid) >= dtc_svm_416_P->Load_torque_Time) {
        dtc_svm_416_DWork->Load_torque_MODE = 1;
      } else {
        dtc_svm_416_DWork->Load_torque_MODE = 0;
      }
    }
    /* Output value */
    rtb_temp188 = (dtc_svm_416_DWork->Load_torque_MODE == 1) ?
      dtc_svm_416_P->Load_torque_YFinal : dtc_svm_416_P->Load_torque_Y0;
  }

  if (ssIsSampleHit(S, 1, tid)) {       /* Sample time: [0.0, 1.0] */

    /* Constant: '<S50>/Constant' */
    dtc_svm_416_B->Constant_b = dtc_svm_416_P->Constant_b_Value;
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Sum: '<S50>/Sum' incorporates:
     *   Gain: '<S50>/Gain4'
     *
     * Regarding '<S50>/Gain4':
     *   Gain value: dtc_svm_416_P->Gain4_b_Gain
     */
    rtb_Sum_g = (rtb_Integrator_a * dtc_svm_416_P->Gain4_b_Gain)
      + dtc_svm_416_B->Constant_b;

    /* Gain: '<S50>/Gain3'
     *
     * Regarding '<S50>/Gain3':
     *   Gain value: dtc_svm_416_P->Gain3_d_Gain
     */
    rtb_Gain3_d = rtb_Integrator1_a * dtc_svm_416_P->Gain3_d_Gain;

    /* Fcn: '<S50>/Fcn4'
     *
     * Regarding '<S50>/Fcn4':
     *   Expression: 3/2*Np*(u(6)*u(5)-u(7)*u(4))
     */
    dtc_svm_416_B->temp115 = 3.0 / 2.0 * 3.0 * ( rtb_Sum_g *
      rtb_Integrator1_a - rtb_Gain3_d * rtb_Integrator_a );

    /* Scope: '<Root>/x_y1' */
    /* Call into Simulink for Scope */
    ssCallAccelRunBlock(S, 8, 121, SS_CALL_MDL_OUTPUTS);
  }

  if (ssIsSampleHit(S, 1, tid)) {       /* Sample time: [0.0, 1.0] */

    /* Constant: '<Root>/X+' */
    dtc_svm_416_B->X = dtc_svm_416_P->X_Value;
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Sum: '<Root>/Sum1' */
    dtc_svm_416_B->Sum1_e = - dtc_svm_416_B->Integrator1_b + dtc_svm_416_B->X;

    /* TransferFcn Block: <S16>/Integral */
    rtb_temp195 = 0.0;

    /* Gain: '<S16>/D'
     *
     * Regarding '<S16>/D':
     *   Gain value: dtc_svm_416_P->D_a_Gain
     */
    dtc_svm_416_B->D_a = dtc_svm_416_B->Sum1_e * dtc_svm_416_P->D_a_Gain;

    /* Derivative Block: <S16>/Derivative */
    {
      real_T t = ssGetTaskTime(S,tid);
      real_T timeStampA = dtc_svm_416_DWork->Derivative_a_RWORK.TimeStampA;
      real_T timeStampB = dtc_svm_416_DWork->Derivative_a_RWORK.TimeStampB;

      if (timeStampA >= t && timeStampB >= t) {
        rtb_temp194 = 0.0;
      } else {
        real_T deltaT;
        real_T *lastBank = &dtc_svm_416_DWork->Derivative_a_RWORK.TimeStampA;
        if (timeStampA < timeStampB) {
          if (timeStampB < t) {
            lastBank += 2;
          }
        } else if (timeStampA >= t) {
          lastBank += 2;
        }
        deltaT = t - *lastBank++;
        rtb_temp194 = (dtc_svm_416_B->D_a - *lastBank++) / deltaT;
      }
    }

    /* Sum: '<S16>/Sum' incorporates:
     *   Gain: '<S16>/Proportional'
     *
     * Regarding '<S16>/Proportional':
     *   Gain value: dtc_svm_416_P->Proportional_a_Gain
     */
    rtb_temp195 = (dtc_svm_416_B->Sum1_e * dtc_svm_416_P->Proportional_a_Gain)
      + rtb_temp195 + rtb_temp194;
  }

  if (ssIsSampleHit(S, 1, tid)) {       /* Sample time: [0.0, 1.0] */

    /* Constant: '<Root>/Y+' */
    dtc_svm_416_B->Y = dtc_svm_416_P->Y_Value;
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Sum: '<Root>/Sum3' */
    dtc_svm_416_B->Sum3 = - dtc_svm_416_B->Integrator3_b + dtc_svm_416_B->Y;

    /* TransferFcn Block: <S17>/Integral */
    rtb_temp194 = dtc_svm_416_P->Integral_b_C*dtc_svm_416_X->Integral_b_CSTATE;

    /* Gain: '<S17>/D'
     *
     * Regarding '<S17>/D':
     *   Gain value: dtc_svm_416_P->D_b_Gain
     */
    dtc_svm_416_B->D_b = dtc_svm_416_B->Sum3 * dtc_svm_416_P->D_b_Gain;

    /* Derivative Block: <S17>/Derivative */
    {
      real_T t = ssGetTaskTime(S,tid);
      real_T timeStampA = dtc_svm_416_DWork->Derivative_b_RWORK.TimeStampA;
      real_T timeStampB = dtc_svm_416_DWork->Derivative_b_RWORK.TimeStampB;

      if (timeStampA >= t && timeStampB >= t) {
        rtb_temp196 = 0.0;
      } else {
        real_T deltaT;
        real_T *lastBank = &dtc_svm_416_DWork->Derivative_b_RWORK.TimeStampA;
        if (timeStampA < timeStampB) {
          if (timeStampB < t) {
            lastBank += 2;
          }
        } else if (timeStampA >= t) {
          lastBank += 2;
        }
        deltaT = t - *lastBank++;
        rtb_temp196 = (dtc_svm_416_B->D_b - *lastBank++) / deltaT;
      }
    }

    /* Sum: '<S17>/Sum' incorporates:
     *   Gain: '<S17>/Proportional'
     *
     * Regarding '<S17>/Proportional':
     *   Gain value: dtc_svm_416_P->Proportional_b_Gain
     */
    rtb_temp194 = (dtc_svm_416_B->Sum3 * dtc_svm_416_P->Proportional_b_Gain)
      + rtb_temp194 + rtb_temp196;

    /* Fcn: '<Root>/Fcn'
     *
     * Regarding '<Root>/Fcn':
     *   Expression: (u(1)*u(3)-u(2)*u(4))/(u(3)*u(3)+u(4)*u(4))
     */
    rtb_temp196 = ( rtb_temp195 * dtc_svm_416_B->Zero_Order_Hold1[0] -
      rtb_temp194 * dtc_svm_416_B->Zero_Order_Hold1[1] ) / (
      dtc_svm_416_B->Zero_Order_Hold1[0] *
      dtc_svm_416_B->Zero_Order_Hold1[0] +
      dtc_svm_416_B->Zero_Order_Hold1[1] *
      dtc_svm_416_B->Zero_Order_Hold1[1] );

    /* Gain: '<Root>/Gain1'
     *
     * Regarding '<Root>/Gain1':
     *   Gain value: dtc_svm_416_P->Gain1_e_Gain
     */
    rtb_temp196 *= dtc_svm_416_P->Gain1_e_Gain;

    /* Fcn: '<Root>/Fcn1'
     *
     * Regarding '<Root>/Fcn1':
     *   Expression: (u(1)*u(4)+u(2)*u(3))/(u(3)*u(3)+u(4)*u(4))
     */
    rtb_temp195 = ( rtb_temp195 * dtc_svm_416_B->Zero_Order_Hold1[1] +
      rtb_temp194 * dtc_svm_416_B->Zero_Order_Hold1[0] ) / (
      dtc_svm_416_B->Zero_Order_Hold1[0] *
      dtc_svm_416_B->Zero_Order_Hold1[0] +
      dtc_svm_416_B->Zero_Order_Hold1[1] *
      dtc_svm_416_B->Zero_Order_Hold1[1] );

    /* Gain: '<Root>/Gain2'
     *
     * Regarding '<Root>/Gain2':
     *   Gain value: dtc_svm_416_P->Gain2_e_Gain
     */
    rtb_temp195 *= dtc_svm_416_P->Gain2_e_Gain;

    /* Fcn: '<S1>/Fcn2'
     *
     * Regarding '<S1>/Fcn2':
     *   Expression: -1/2*u(1)+sqrt(3)/2*u(2)
     */
    rtb_temp194 = ( -1.0) / 2.0 * rtb_temp196 + sqrt( 3.0) / 2.0 *
      rtb_temp195;

    /* Fcn: '<S1>/Fcn3'
     *
     * Regarding '<S1>/Fcn3':
     *   Expression: u(1)
     */
    rtb_temp193 = rtb_temp196;

    /* Fcn: '<S1>/Fcn4'
     *
     * Regarding '<S1>/Fcn4':
     *   Expression: -1/2*u(1)-sqrt(3)/2*u(2)
     */
    rtb_temp196 = ( -1.0) / 2.0 * rtb_temp196 - sqrt( 3.0) / 2.0 *
      rtb_temp195;
  }

  if (ssIsSampleHit(S, 1, tid)) {       /* Sample time: [0.0, 1.0] */

    /* Constant: '<S2>/g1' */
    dtc_svm_416_B->g1 = dtc_svm_416_P->g1_Value;

    /* Constant: '<S2>/g2' */
    dtc_svm_416_B->g2 = dtc_svm_416_P->g2_Value;

    /* Constant: '<S4>/c1' */
    dtc_svm_416_B->c1 = dtc_svm_416_P->c1_Value;

    /* Constant: '<S4>/c2' */
    dtc_svm_416_B->c2 = dtc_svm_416_P->c2_Value;

    /* Constant: '<S4>/c3' */
    dtc_svm_416_B->c3 = dtc_svm_416_P->c3_Value;
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Gain: '<S5>/Kp5'
     *
     * Regarding '<S5>/Kp5':
     *   Gain value: dtc_svm_416_P->Kp5_a_Gain
     */
    dtc_svm_416_B->Kp5_a = rtb_Sum2_a * dtc_svm_416_P->Kp5_a_Gain;

    /* Fcn: '<S20>/Fcn1'
     *
     * Regarding '<S20>/Fcn1':
     *   Expression: u(1)*cos(u(3))-u(2)*sin(u(3))
     */
    rtb_temp195 = rtb_temp191 * cos( rtb_Integrator3_a ) - rtb_temp187 *
      sin( rtb_Integrator3_a );

    /* Fcn: '<S20>/Fcn2'
     *
     * Regarding '<S20>/Fcn2':
     *   Expression: u(2)*cos(u(3))+u(1)*sin(u(3))
     */
    rtb_temp192 = rtb_temp187 * cos( rtb_Integrator3_a ) + rtb_temp191 *
      sin( rtb_Integrator3_a );
  }

  if (ssIsSampleHit(S, 1, tid)) {       /* Sample time: [0.0, 1.0] */

    /* Constant: '<S20>/Resistance' */
    dtc_svm_416_B->Resistance_a = dtc_svm_416_P->Resistance_a_Value;
  }

  if (ssIsContinuousTask(S, tid)) {     /* Sample time: [0.0, 0.0] */

    /* Sum: '<S20>/Sum' incorporates:
     *   Product: '<S20>/Product'
     */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -