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

📄 mc1.c

📁 基于56F8346的异步电机VVVF控制程序。
💻 C
📖 第 1 页 / 共 5 页
字号:
    add     C,B                     /* B   = alpha*sqrt(3)/2-beta/2     */
    add     B,A                     /* A   = A+alpha*sqrt(3)/2-beta/2   */
    move.w  A,X:(R3)                /* PhaseA = A                       */
    move.w  #1,Y0                   /* Y0  = 1                          */
    bra     LABEL_END               /* goto end of module               */

LABEL_5:
    /* Find sector -----------------------------------------------------*/
    /*                                                                  */
    /* if (B <= 0 && A > 0 && MR0 <= 0) then sector 6                   */
    /*                                                                  */
    /* Sector 6 calculation(s) -----------------------------------------*/
    /* PhaseB = (1-alpha*sqrt(3)/2+beta/2)/2                            */
    /* PhaseC = PhaseB-beta                                             */
    /* PhaseA = PhaseC+alpha*sqrt(3)/2+beta/2                           */
    /* Y0     = 6                                                       */
    /*------------------------------------------------------------------*/
    move.w  #0x7FFF,B               /* B   = 1                          */
    sub     A,B                     /* B   = 1-alpha*sqrt(3)/2+beta/2   */
    asr     B                       /* B   =(1-alpha*sqrt(3)/2+beta/2)/2*/
    move.w  B,X:(R3+1)              /* PhaseB = B                       */
    sub     D,B                     /* B   = B-beta                     */
    move.w  B,X:(R3+2)              /* PhaseC = B                       */
    sub     C,A                     /* A   = -beta/2                    */
    sub     C,A                     /* A   = -alpha*sqrt(3)/2-beta/2    */
    sub     A,B                     /* B   = B+alpha*sqrt(3)/2+beta/2   */
    move.w  B,X:(R3)                /* PhaseA = B                       */
    move.w  #6,Y0                   /* Y0  = 6                          */
    bra     LABEL_END               /* goto end of module               */

LABEL_4:
    /* Find sector -----------------------------------------------------*/
    /*                                                                  */
    /* if (B <= 0 && A <= 0) then sector 2                              */
    /*                                                                  */
    /* Sector 2 calculation(s) -----------------------------------------*/
    /* PhaseC = (1-beta)/2                                              */
    /* PhaseA = PhaseC+alpha*sqrt(3)/2+beta/2                           */
    /* PhaseB = PhaseA-alpha*sqrt(3)/2+beta/2                           */
    /* Y0 = 2                                                           */
    /*------------------------------------------------------------------*/
    move.w  #0x7FFF,A               /* A   = 1                          */
    sub     D,A                     /* A   = 1-beta                     */
    asr     A                       /* A   = (1-beta)/2                 */
    move.w  A,X:(R3+2)              /* PhaseC = A                       */
    sub     B,A                     /* A   = A+alpha*sqrt(3)/2+beta/2   */
    move.w  A,X:(R3)                /* PhaseA = A                       */
    add     C,B                     /* B   = -beta/2                    */
    add     C,B                     /* B   = alpha*sqrt(3)/2-beta/2     */
    sub     B,A                     /* A   = A-alpha*sqrt(3)/2-beta/2   */
    move.w  A,X:(R3+1)              /* PhaseB = A                       */
    move.w  #2,Y0                   /* Y0  = 2                          */

LABEL_END:
    /* Limit outputs ---------------------------------------------------*/
    /*                                                                  */
    /* if (phaseA < 0 ) phaseA = 0;                                     */
    /* if (phaseB < 0 ) phaseB = 0;                                     */
    /* if (phaseC < 0 ) phaseC = 0;                                     */
    /*------------------------------------------------------------------*/
    clr.w   X0                      /* X0  = 0                          */
    move.w  X:(R3),B                /* B   = phaseA                     */
    tst     B                       /* test: B                          */
    bge     LABEL_6                 /* if (B >= 0)  then goto LABEL_6   */
    move.w  X0,X:(R3)               /* else         then phaseA = 0     */

LABEL_6:
    move.w  X:(R3+1),B              /* B   = phaseB                     */
    tst     B                       /* test: B                          */
    bge     LABEL_7                 /* if (B >= 0)  then goto LABEL_7   */
    move.w  X0,X:(R3+1)             /* else         then phaseB = 0     */

LABEL_7:
    move.w  X:(R3+2),B              /* B   = phaseC                     */
    tst     B                       /* test: B                          */
    bge     LABEL_8                 /* if (B >= 0)  then goto LABEL_8   */
    move.w  X0,X:(R3+2)             /* else         then phaseC = 0     */

LABEL_8:
    moveu.w X:(SP),OMR
    nop
    suba #0x2,SP
    rts                             /* return from function             */
}

/*
** ===================================================================
**     Method      :  MC1_svmU0n (bean MC_SpaceVectorMod)
**
**     Description :
**         This function calculates the appropriate duty-cycle
**         ratios, needed for generating the given stator reference
**         voltage vector. It uses the special Space Vector
**         Modulation technique, termed Space Vector Modulation with
**         O000 Nulls.
**     Parameters  :
**         NAME            - DESCRIPTION
**       * p_AlphaBeta     - Pointer to the
**                           structure containing direct (alpha/a)
**                           and quadrature (beta/b) components of
**                           the stator voltage vector.
**       * p_abc           - Pointer to the structure containing
**                           calculated duty-cycle ratios of the
**                           3-Phase system.
**     Returns     :
**         ---             - The function returns an integer value
**                           representing the Sector number in which
**                           the instantaneous stator reference
**                           voltage vector is located.
** ===================================================================
*/
int asm MC1_svmU0n(mc_sPhase *p_AlphaBeta,mc_s3PhaseSystem *p_abc)
{
    adda    #0x2,SP
    move.w  OMR,X:(SP)
    bfclr   #0x10,OMR   /* set saturation OFF (SA = 0)                  */

        /* Calculation(s) --------------------------------------------------*/
    /* MR0  = beta                                                      */
    /* MR1  = alpha*sqrt(3)/2                                           */
    /* A    = alpha*sqrt(3)/2-beta/2                                    */
    /* B    = -alpha*sqrt(3)/2-beta/2                                   */
    /*------------------------------------------------------------------*/
    move.w  x:(R2+1),D              /* beta                             */
    move.w  X:(R2)+,Y0              /* Y0  = alpha                      */
    move.w  #0x6EDA,X0              /* X0  = sqrt(3)/2                  */
    mpyr    Y0,X0,A     X:(R2)+,B   /* A   = alpha*sqrt(3)/2            */
    asr     B                       /* B   = beta/2                     */
    move.w  A,C                     /* MR1 = alpha*sqrt(3)/2            */
    sub     B,A                     /* A   = alpha*sqrt(3)/2-beta/2     */
    move.w  A,B                     /* B   = alpha*sqrt(3)/2-beta/2     */
    sub     C,B                     /* B   = -beta/2                    */
    sub     C,B                     /* B   = -alpha*sqrt(3)/2-beta/2    */

    /* Find sector -----------------------------------------------------*/
    /*                                                                  */
    /* if (B > 0 && A > 0) then sector 5                                */
    /*                                                                  */
    /* Sector 5 calculation(s) -----------------------------------------*/
    /* PhaseB = 0                                                       */
    /* PhaseA = PhaseB+alpha*sqrt(3)/2-beta/2                           */
    /* PhaseC = PhaseA-alpha*sqrt(3)/2-beta/2                           */
    /* Y0     = 5                                                       */
    /*------------------------------------------------------------------*/
    tst     B                       /* test: -alpha*sqrt(3)/2-beta/2    */
    ble     LABEL_1                 /* if (B  <= 0) then goto LABEL_1   */
    tst     A                       /* test: alpha*sqrt(3)/2-beta/2     */
    ble     LABEL_2                 /* if (A  <= 0) then goto LABEL_2   */
    move.w  #0,B                    /* B   = 0                          */
    move.w  B,X:(R3+1)              /* PhaseB = B                       */
    add     A,B                     /* B   = B+alpha*sqrt(3)/2-beta/2   */
    move.w  B,X:(R3)                /* PhaseA = B                       */
    sub     C,A                     /* A   = -beta/2                    */
    sub     C,A                     /* A   = -alpha*sqrt(3)/2-beta/2    */
    add     A,B                     /* B   = B-alpha*sqrt(3)/2-beta/2   */
    move.w  B,X:(R3+2)              /* PhaseC = B                       */
    move.w  #5,Y0                   /* Y0  = 5;                         */
    jmp     LABEL_END               /* goto end of module               */

LABEL_2:
    /* Find sector -----------------------------------------------------*/
    /*                                                                  */
    /* if (B > 0 && A <= 0 && MR0 > 0) then sector 3                    */
    /*                                                                  */
    /* Sector 3 calculation(s) -----------------------------------------*/
    /* PhaseA = 0                                                       */
    /* PhaseC = PhaseA-alpha*sqrt(3)/2-beta/2                           */
    /* PhaseB = PhaseC+beta                                             */
    /* Y0     = 3                                                       */
    /*------------------------------------------------------------------*/
    tst     D                       /* test: beta                       */
    ble     LABEL_3                 /* if (MR0 <= 0) then goto LABEL_3  */
    move.w  #0,B                    /* B   = 0                          */
    move.w  B,X:(R3)                /* PhaseA = B                       */
    sub     C,A                     /* A   = -beta/2                    */
    sub     C,A                     /* A   = -alpha*sqrt(3)/2-beta/2    */
    add     A,B                     /* B   = B-alpha*sqrt(3)/2-beta/2   */
    move.w  X:(R2+1),A
    move.w  B,X:(R3+2)              /* PhaseC = B                       */
    add     D,B                     /* B   = B+beta                     */
    move.w  B,X:(R3+1)              /* PhaseB = B                       */
    move.w  #3,Y0                   /* Y0  = 3                          */
    bra     LABEL_END               /* goto end of module               */

LABEL_3:
        /* Find sector -----------------------------------------------------*/
    /*                                                                  */
    /* if (B > 0 && A <= 0 && MR0 <= 0) then sector 4                   */
    /*                                                                  */
    /* Sector 4 calculation(s) -----------------------------------------*/
    /* PhaseA = 0                                                       */
    /* PhaseB = PhaseA-alpha*sqrt(3)/2+beta/2                           */
    /* PhaseC = PhaseB-beta                                             */
    /* Y0     = 4                                                       */
    /*------------------------------------------------------------------*/
    move.w  #0,A                    /* A   = 0                          */
    move.w  A,X:(R3)                /* PhaseA = A                       */
    add     C,B                     /* B   = -beta/2                    */
    add     C,B                     /* B   = alpha*sqrt(3)/2-beta/2     */
    sub     B,A                     /* A   = A-alpha*sqrt(3)/2+beta/2   */
    move.w  A,X:(R3+1)              /* PhaseB = A                       */
    sub     D,A                     /* A   = A-beta                     */
    move.w  A,X:(R3+2)              /* PhaseC = A                       */
    move.w  #4,Y0                   /* Y0  = 4                          */
    bra     LABEL_END               /* goto end of module               */

LABEL_1:
        /* Find sector -----------------------------------------------------*/
    /*                                                                  */
    /* if (B <= 0 && A > 0 && MR0 > 0)then sector 1                     */
    /*                                                                  */
    /* Sector 1 calculation(s) -----------------------------------------*/

⌨️ 快捷键说明

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