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

📄 svpwmy.asm

📁 基于TMS320LF2407A变频器源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
      LDP   #5 
      SACH  ACCH 
      SACL  ACCL                    ; 保存ACC
      SPH   P_HI 
      SPL   P_LO                    ; 保存 P
      MPY   #1                      ; P<=T
      SPL   T_SAVE                  ; 保存 T 
      SAR   AR0,AR0_SAVE            ; 保存AR0
      LDP   #224  
      LACC  PIVR                    ;读偏移地址
      SUB   #029H                   ; T1 下溢中断?
      CC    T1UF_ISR,EQ             ;是下溢中断跳T1UF_ISR
REST:       
      LDP   #5                      ;否则恢复现场
      LAR   AR0, AR0_SAVE           ; 恢复AR0
      LT    P_LO                    ;恢复P
      MPY   #1  
      LPH   P_HI  
      LT    T_SAVE                  ;恢复T
      LACC  ACCH,16 
      ADDS  ACCL                    ;恢复ACC
      LDP   #0                      ;指向B2
      LST   #ST1,ST1_SAVE           ; 恢复ST1
      LST   #ST0,ST0_SAVE           ; 恢复ST0
      CLRC  INTM                    ; 开中断
      RET                           ; 返回
T1UF_ISR:   
      LDP   #232
      SPLK  #0200H,EVIFRA           ; 清中断标志
      LDP   #6                      ; 计算转角增量
      LT    OMEGA                   ; Q5
      MPY   T_SAMPLE                ;Q5*Q24
      PAC                           ;积存ACC, Q13
      SFR                           ; 右移一位成Q12格式
      ADD   THETA_H,16              ; Q12 
      ADDS  THETA_L                 ;计算绝对位置
      SACH  THETA_H               
      SACL  THETA_L 
      BCND  CHK_UPLIM,GEQ        ;如果大于0检查上限
      ADD   THETA_360,16         ;否则与2π比较,Q12 
      SACH  THETA_H              ; 保存
      B     RND_THETA     
CHK_UPLIM:  
      SUB   THETA_360,16         ;与2π比较,Q12 
      BCND  REST_THETA,LEQ       ; 如果在范围内恢复THETA_H
      SACH  THETA_H     
      B     RND_THETA 
REST_THETA:  
      ADD   THETA_360,16         ; 恢复THETA_H
RND_THETA:  
      ADD   #1,15                ; 圆整并保留高字
      SACH  THETA_R              ;保存
      LACC  #1                   ;假设THETA_H在第一象限
      SACL  SS                   ; SIN符号=1
      SACL  SC                   ; COS符号=1
      LACC  THETA_R 
      SACL  THETA_M              ; 存入THETA_M
      SUB   THETA_90             ;
      BCND  E_Q,LEQ              ;在第一象限则跳转
      SPLK  #-1,SC               ; COS符号=-1
      LACC  THETA_180 
      SUB   THETA_R              ; 180-θ
      SACL  THETA_M              ;存入THETA_M
      BCND  E_Q,GEQ              ;在第二象限则跳转
      SPLK  #-1,SS               ;SIN符号=-1
      LACC  THETA_R 
      SUB   THETA_180            ;THETA-180
      SACL  THETA_M              ;存入THETA_M
      LACC  THETA_270 
      SUB   THETA_R 
      BCND  E_Q,GEQ              ;在第三象限则跳转
      SPLK  #1,SC                ; COS符号=1
      LACC  THETA_360
      SUB   THETA_R 
      SACL  THETA_M              ; 在第四象限
E_Q:        
      LT      THETA_M            ; Q12.计算查表索引
      MPY     THETA_I            ; Q12*Q9
      PAC                        ; Q5
      SACH    SIN_INDX           ; Q5
      LACC    SIN_INDX,11        ;左移11位
      SACH    SIN_INDX           ;相当于右移5位变成Q0格式,即整数
      LACC    SIN_ENTRY          ;查SIN表
      ADD     SIN_INDX
      TBLR    SIN_THETA 
      LACC    SIN_END 
      SUB     SIN_INDX           ;
      TBLR    COS_THETA          ;
      LT      SS                 ;查COS表
      MPY     SIN_THETA          ;修改符号,Q14
      PAC 
      SACL    SIN_THETA          ; 左移16位保存,Q14
      LT      SC 
      MPY     COS_THETA          ; 修改符号, Q14
      PAC 
      SACL    COS_THETA          ;左移16位保存,Q14
      LT      SET_V              ;开始计算UA , UB 
      MPY     COS_THETA          ; Q14*Q14
      PAC                        ;存入ACC, Q12
      SACH    UA,1               ; UA ,Q13格式
      MPY     SIN_THETA          ; Q14*Q14
      PAC                        ; 存入ACC, Q12
      SACH    UB,1               ; UB, Q13格式
      LT      THETA_R            ; Q12格式.确定扇区
      MPY     THETA_S            ; Q12*Q15
      PAC
      SACH    SECTOR 
      LACC    SECTOR,5 
      SACH    SECTOR             ; 相当于右移11位变成Q0格式(整数)
      LACC    #DEC_MS            ;逆阵数据首地址
      ADD     SECTOR,2 
      SACL    TEMP               ;产生地址指针
      LAR     AR0,TEMP           ; 指向逆阵表
      LT      UA                 ; Q13格式.计算UA*M(1,1)+UB*M(1,2)
      MPY     *+                 ; M(1,1) UA, Q13*Q14
      PAC                        ; Q11格式
      LT      UB                 ; Q11
      MPY     *+                 ; M(1,2) UB, Q13*Q14
      APAC                       ; 0.5*C1, Q11
      BCND     CMP1BIG0,GEQ      ; 如果大于0继续
      LACC     #0                ; 否则0
CMP1BIG0:  
      SACH     TEMP              ; 0.5*C1,Q11格式
      LT       TEMP              ; Q11格式
      MPY      T1_PERIODS        ; Q11*Q5
      PAC                        ; Q0格式
      ADD      #1,16             ; 防止C1=0
      SACH     CMP_1             ; 0.5*C1*TP,Q0格式
      LT       UA                ;计算UA*M(2,1)+UB*M(2,2)
      MPY      *+                ; M(2,1) UA,Q13*Q14
      PAC                        ; Q11格式
      LT       UB                ; Q13格式
      MPY      *+                ; M(2,2) UB: Q13*Q14
      APAC                       ; 0.5*C2,Q11
      BCND     CMP2BIG0,GEQ      ; 如果大于0继续
      LACC     #0                ;否则0
CMP2BIG0:  
      SACH     TEMP              ; 0.5*C2,Q11格式
      LT       TEMP              ; Q11格式
      MPY      T1_PERIODS        ; Q11*Q5 
      PAC                        ; Q0格式
      ADD      #1,16             ; 防止C2 = 0
      SACH     CMP_2             ; 0.5*C2*TP,Q0格式
      LACC     #CCKWISE_         ; ACTRA寄存器值表首地址
      ADD      SECTOR            ; 查表地址
      TBLR     SVPAT     
      LAR      AR0,#ACTRA        ;指向ACTRA
      LACC     *                 ; 读ACTRA
      AND      #0FFFH            ; 清高四位
      OR       SVPAT             ; 高四位赋新值
      SACL     *                 ; 更新ACTRA
      LAR      AR0,#CMPR1        ; 指向CMPR1
      LACC     CMP_1
      SACL     *+                ; 更新CMPR1, 指向CMPR2
      ADD      CMP_2 
      SACL     *                 ; 更新CMPR2
      SUB      #500              ;减T1周期值,CMPR2是否超限
      BCND     IN_LMT,LEQ        ;没超跳转
      SPLK     #500,*            ;否则赋T1周期值
IN_LMT:     
      B        REST              ; 返回
      .data                      
;--------------------------------------数据段------------------------------------------------------------------
ANGLES_:   
             .WORD 01922H        ; π/2, 	Q12格式
             .WORD 03244H        ; π, Q12格式
             .WORD 04B66H        ; 3π/2, Q12格式
             .WORD 06488H        ; 2π, Q12格式
             .WORD 20066         ; 矩阵A的逆阵数据,每一个逆阵有4个数据,Q14格式
             .WORD -11585        ; 按参考电压所在的扇区索引
             .WORD 0
             .WORD 23170
             .WORD 20066
             .WORD 11585
             .WORD -20066
             .WORD 11585
             .WORD 0
             .WORD 23170
             .WORD -20066
             .WORD -11585
             .WORD -20066
             .WORD 11585
             .WORD 0
             .WORD -23170
             .WORD -20066
             .WORD -11585
             .WORD 20066
             .WORD -11585
             .WORD 0
             .WORD -23170
             .WORD 20066
             .WORD 11585
CCKWISE_:   
             .WORD 0001000000000000B      ;逆时针旋转时ACTR高4位值,按扇区索引
             .WORD 0011000000000000B
             .WORD 0010000000000000B
             .WORD 0110000000000000B
             .WORD 0100000000000000B
             .WORD 0101000000000000B
SIN_ENTRY_: 
             .WORD 0                       ; 0-90度SIN值表,Q14格式
             .WORD 286,572,857,1143,1428
             .WORD 1713,1997,2280,2563,2845
             .WORD 3126,3406,3686,3964,4240
             .WORD 4516,4790,5063,5334,5604
             .WORD 5872,6138,6402,6664,6924
             .WORD 7182,7438,7692,7943,8192
             .WORD 8438,8682,8923,9162,9397
             .WORD 9630,9860,10087,10311,10531
             .WORD 10749,10963,11174,11381,11585
             .WORD 11786,11982,12176,12365,12551
             .WORD 12733,12911,13085,13255,13421
             .WORD 13583,13741,13894,14044,14189
             .WORD 14330,14466,14598,14726,14849
             .WORD 14968,15082,15191,15296,15396
             .WORD 15491,15582,15668,15749,15826
             .WORD 15897,15964,16026,16083,16135
             .WORD 16182,16225,16262,16294,16322
             .WORD 16344,16362,16374,16382,16384
             .end

⌨️ 快捷键说明

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