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

📄 svpwm.asm

📁 针对电机VVVF控制的汇编语言程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
   .include "F2407REGS.h"      ; 寄存器地址
   .include "vectors.h"
   .global  _c_int0          ;全局化标号
   .global  _C_INT2 
   .global   _PDP_ISR 
       
         
;--------------------------------------以下定义变量-------------------------------------------------------------
          		.sect "table"
          		
          		
SIN_ENTRY_         .include        sin.tab

PWM_T              .set   4000 ;6060   ; 3.3k             5k 4000
   
T_SAMPLE_          .set   0D1BH;13DCH  ; 3.3k             5k 采样周期=***us *2 24=3356秒=D1BH, Q24格式

T1_PERIODS_        .set    4000    ;6060    ;3.3k         4000         T1周期值的Q0格式

PWMCNT_LED_        .set   01000H 
Fr_set_STEP_       .set   1H
K_Fr_set           .set   05DDH  ;Q5
SIZE               .set  1000
BUF_START          .set   8000H
BUF_START1        .set   8900H 
BUF_START2         .set   8D00H
KCURRENT           .set   3072  ;q8
MAXCURRENT         .set  4096 ; 10A
I_CNT_             .set   65000

KSPEED_       .set  2558             ;将脉冲数转换成速度系数Q20格式1/410
                                      
                                      
SPEEDSTEP20  .set  20               ;速度采样周期20个中断  4ms
A1_  .set  5017
A2_  .set  2896


          .bss TEMP,1                  ;临时变量
          .bss Fr_set ,1                 ;频率调节比,Q15格式(值为0-1,对应0-50Hz)
          .bss F_OMEGA,1             ;频率调节比-角频率转换率,Q5格式
          .bss OMEGA,1               ;调制波角频率,Q6格式
          .bss SET_V,1                 ;参考电压,Q14格式
          .bss MAX_V,1               ;最大参考电压幅值1/  ,Q14格式
          .bss T_SAMPLE,1             ;采样周期,Q24格式
          .bss THETA_H,1              ;参考电压相位角高字,Q12格式
          .bss THETA_L,1              ;参考电压相位角低字,Q12格式
          .bss THETA_R,1              ;相位角的圆整值,Q12格式
          .bss THETA_M,1             ;相位查表值(0-90度),Q12格式
          .bss THETA_I,1              ;相角查表索引,Q9格式
          .bss SS,1                    ;SIN符号,Q0格式
          .bss SC,1                    ;COS符号,Q0格式
          .bss SIN_INDX,1             ;SIN表索引,Q0格式
          .bss SIN_ENTRY,1            ;SIN表入口地址
          .bss SIN_END,1              ;SIN表结束地址
          .bss SIN_THETA,1            ;SINθ值,Q14格式
          .bss COS_THETA,1            ;COSθ值,Q14格式
          .bss UA,1                    ;参考电压D轴分量UA,Q12格式
          .bss UB,1                    ;参考电压Q轴分量UB,Q12格式
          .bss THETA_S,1               ;θ-扇区数转换系数,Q15格式
          .bss SECTOR,1                ;参考电压所在的扇区数,Q0格式
          .bss THETA_90,1               ;90度,Q12格式
          .bss THETA_180,1              ;180度,Q12格式
          .bss THETA_270,1              ;270度,Q12格式
          .bss THETA_360,1              ;360度,Q12格式
          .bss DEC_MS,24               ;6个逆阵,Q14格式
          .bss T1_PERIODS,1            ;定时器1周期值,Q0格式
          .bss CMP_1,1                 ;第1基本矢量,Q0格式
          .bss CMP_2,1                 ;第2基本矢量,Q0格式
          .bss CMP_0,1                 ;0基本矢量/2,Q0格式
          .bss FIRST_TOG,1             ;存放第一次比较匹配的比较器地址
          .bss SEC_TOG,1               ;存放第二次比较匹配的比较器地址
          .bss ACCH,1                  ;ACC高字保存单元
          .bss ACCL,1                   ;ACC低字保存单元
          .bss AR0_SAVE,1              ;AR0保存单元
          .bss P_HI,1                   ;P寄存器高字保存单元
          .bss P_LO,1                   ;P寄存器低字保存单元  
          .bss T_SAVE,1 
          
          .bss PWMCNT_LED,1  
          .bss PWMCNT_Fr_set,1
          .bss IA,1              ;q13
          .bss IB,1
          .bss IC,1
          .bss CTRL,1
          .bss UDC,1
          .bss TEMPER,1   
          .bss Fr_set_former,1
          
          .bss Fr_set_STEP ,1  
          .bss Speed_set ,1
          .bss KEYDATA,1
          .bss  TMP ,1
          .bss  I_CNT ,1 
          .bss  ENCODEROLD,1   ;前一个采样周期时编码脉冲数
          .bss  ENCINCR,1        ;编码脉冲增量
          .bss  SPEEDTMP,1       ;编码脉冲增量累计值
           .bss  SPEEDSTEP,1      ;速度采样周期减计数器
          .bss N   ,1
          .bss  IALFA,1          ;ALFA轴电流
           .bss  IBETA,1          ;BETA轴电流
           .bss KSPEED,1
           .bss A1 ,1
           .bss  A2,1
           .bss IT ,1
           .bss IM ,1
           .bss M,1
           .bss D,1
           .bss KEYDATA1 ,1
           .bss  A11 ,1
           .bss A12 ,1
;-------------------------------------- CONTEXT段,定义保护现场数据区--------------------------
ST0_SAVE  .usect ".context",1   ;状态寄存器ST0保存单元
ST1_SAVE  .usect ".context",1   ;状态寄存器ST1保存单元           



;--------------------------------------以下是主程序--------------------------------------------------------
  .text
;--------------------------------------系统初始化程序----------------------------------------------------
_c_int0    
            SETC INTM        ; Disable interrupt 
            SETC SXM         ; Supress sign extension
            SETC OVM         ; Results overflow normally in Accumulator
            CLRC CNF         ; B0 is configured as data space
            CLRC C           ; clear carry bit
            LDP    #224
            SPLK   #0000001010000100B,SCSR1 ;CLKIN 20M,CLKOUT 40M
            ;SPLK   #0Eh,SCSR2
            SPLK   #68H,WDCR            ;不用看门狗
 
;--------------------------------------I/O 初始化程序----------------------------------------------------           
            LDP    #225
            LACC  MCRA
            OR     #0FC0H             ;设置PWM1-6引脚基本功能
            SACL   MCRA
            LACC   MCRC
            AND   #0FDFFH
            SACL   MCRC
            LACC PFDATDIR
            AND   #0FDFDH
            SACL   PFDATDIR
            

;--------------------------------------中断初始化程序----------------------------------------------------
            LDP    #0  
            SPLK   #0FFH,IFR            ; 清所有系统中断标志
            SPLK   #03H,IMR      ; 开INT2中断
            LDP    #232         
            SPLK   #0FFFH,EVAIFRA     ; 清事件管理器A所有中断标志
            SPLK   #0FH,EVAIFRB 
            SPLK   #0FH,EVAIFRC 
            SPLK   #0201H,EVAIMRA     ; 开T1下溢中断
            SPLK   #0,EVAIMRB          ; 屏蔽所有中断
            SPLK   #0,EVAIMRC          ; 屏蔽所有中断
;--------------------------------------初始化事件管理器A程序-----------------------------------------
            SPLK   #PWM_T ,T1PR           ; T1周期值=200 us/25ns/2=4000
            SPLK   #PWM_T ,CMPR1         ; 占空比初值 0%
            SPLK   #PWM_T ,CMPR2
            SPLK   #PWM_T ,CMPR3
            SPLK   #0000100110011001B,ACTRA  ; 引脚PWM1,3,5低有效,2,4,6高有效 
            ;SPLK   #0000011001100110B,ACTRA  ; 引脚PWM1,3,5高有效,2,4,6低有效
            SPLK   #06F4H,DBTCONA     ; 死区时间6*32*25ns=4.8us
            SPLK   #1000001000000000B,COMCONA  ;允许比较,不用硬件空间矢量
            SPLK   #1000100000000010B,T1CON ;连续增减计数方式,预分频=1
            
            ;测速初始化
            splk    #1110001011110000b,CAPCONA 
            SPLK      #0,T2CNT            ;编码脉冲计数器
            SPLK      #0FFFFH,T2PR 
            splk    #1001100101110000b,T2CON   ;timer2 for QEP
            splk    #1110001011110000b,CAPCONA 
            ;SPLK      #9870H,T2CON        ;定向增减,允许编码接口
;--------------------------------------初始化AD采样程序-----------------------------------------
            LDP   #225
            SPLK   #4000H,ADCTRL1
            NOP
            SPLK   #3000H,ADCTRL1
            SPLK   #4000H,ADCTRL2
            SPLK   #4,MAXCONV               ;/*For SEQ mode (i.e, cascaded mode), MAX CONV1_3-0 are used.*/
            SPLK   #05346H,CHSELSEQ1 
            SPLK   #0007H,CHSELSEQ2       ;Result0 - ADC模块的ADCIN1 - Udc
                                          ;Result1 - ADC模块的ADCIN3 - CT-U(Iw)
                                          ;Result2 - ADC模块的ADCIN4 - CT-V(Iu)
                                          ;Result3 - ADC模块的ADCIN5 - Regulator
      
          
;--------------------------------------变量初始化程序-----------------------------------------------------
            LDP    #6                       ; 指向B1
            SPLK   #T_SAMPLE_,T_SAMPLE     ;采样周期=200us *224=3356秒=D1CH, Q24格式
            SPLK   #T1_PERIODS_,T1_PERIODS       ;T1周期值的Q3格式,4000*8
            SPLK   #11585,MAX_V           ; 最大参考电压幅值1/ ,Q14格式
             
            SPLK   #20106,F_OMEGA        ;频率调节比-角频率转换率,Q6格式
                                         ;当SET_F=1时,对应最大角频率2π*50*32=10053
                                         ;频率调节比-角频率转换率,Q6格式                       
            SPLK    #0H, PWMCNT_LED   
            SPLK    #0H,PWMCNT_Fr_set
            SPLK    #Fr_set_STEP_ ,Fr_set_STEP
            SPLK     #0H   ,Fr_set_former
            SPLK     #0H   ,Fr_set
            SPLK     #I_CNT_ , I_CNT 
            SPLK   #0,THETA_L             ;θ低字,Q12格式
            SPLK   #0,THETA_H             ; θ高字,Q12格式
            LAR   AR0,#THETA_90           ; 传送常用角度和逆阵数据
            LAR   AR1,#(28-1)              ; 28个
            LACC  #ANGLES_               ; 指向源
            LARP   AR0 
INIT_TBL   
            TBLR  *+,AR1                     ; 下一个
            ADD  #1                       ; 下一个地址
            BANZ  INIT_TBL,AR0              ;AR1=0结束 
            SPLK   #20372, THETA_I           ; 相角查表索引,2000/PI,Q5格式
            SPLK   #31291,THETA_S          ; θ-扇区数转换系数,6/(2π),Q15格式
            SPLK  #SIN_ENTRY_,SIN_ENTRY    ;SIN表起始地址
            SPLK  #(SIN_ENTRY_+1000),SIN_END  ;SIN表结束地址
             
            LAR   AR1   ,#BUF_START
            LAR   AR2   ,#BUF_START1
            LAR   AR3   ,#BUF_START2 
            splk #KSPEED_ ,KSPEED
            splk  #A1_ ,A1
            splk #A2_ ,A2
            splk #0,M
            splk #1000,D
            SPLK #09DH,A11
            
            SPLK #0127AH,A12
            LDP   #232
            SPLK   #0000100001000010B,T1CON  ;使能T1
            
            
            CLRC  INTM                     ; 开总中断
      
CHECK       LDP #225
            LACL PFDATDIR
            LDP #6
            SACL  KEYDATA
            BIT   KEYDATA ,BIT1
            BCND  STOP ,TC
            B  RUN            
            
STOP        LED_D7_ON   
            STOP_PWM      
            B  CHECK
;--------------------------------------主循环程序(SET_F由外部输入)-----------------------------------
  
MAIN         

CHECK1      LDP #225
            LACL PFDATDIR
            LDP #6
            SACL  KEYDATA
            BIT   KEYDATA ,BIT1
            BCND  STOP1 ,TC
            B RUN
STOP1       LED_D7_ON  
            STOP_PWM      
           B  CHECK1            
RUN         LED_D7_OFF 
            START_PWM  
            
            
            LDP  #6
            ;SPLK  #07D70H , Fr_set 
            LT    Fr_set              ; 将频率调节比(Q15格式)转换成角频率
            MPYU  F_OMEGA               ; Q21
            PAC                          ; 积送ACC, Q5格式
            SACH  OMEGA               ; 保存角频率,Q5格式
         
            LT    Fr_set               ;将频率调节比(Q15格式)转换成参考电压
            MPYU  MAX_V                 ; Q15*Q14=Q29
            PAC 
            SACH  SET_V ,1               ; 保存参考电压幅值,Q14格式        
            B     MAIN                 ; 循环
;--------------------------------------假中断处理----------------------------------------------------------
PHANTOM   
          CLRC     INTM
            RET
;------------------------PDPINTA Interrupt Service Routine------------------------------------------------  
_PDP_ISR	
            STOP_PWM 
            LDP     #232
            SPLK #0001H,EVAIFRA; Clear PDPINTA IF
            SPLK   #0FFFH,ACTRA
            LED_D10_ON
            SETC INTM
            RET           
END_INT1      
           CLRC INTM ;Enable INT   
           RET       ;INT1 return            
            
;--------------------------------------T1下溢中断处理子程序----------------------------------------------
_C_INT2     
            
            SST   #0, ST0_SAVE          ; 保存现场ST0
            SST   #1, ST1_SAVE          ; 保存ST1
            LDP #6
            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
            CLRC  SXM
            LDP   #224  
            LACC  PIVR                  ;读偏移地址
            SUB   #029H                  ; T1 下溢中断?
            BCND    T1UF_ISR,EQ           ;是下溢中断跳T1UF_ISR
REST       
            LDP   #6                     ;否则恢复现场
            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
            LST   #1, ST1_SAVE           ; 恢复ST1
            LST   #0, ST0_SAVE           ; 恢复ST0
            CLRC  INTM                   ; 开中断
            RET                            ; 返回
T1UF_ISR 

            LDP   #232
            SPLK   #0FFFH,EVAIFRA         ; 清中断标志  
; /*=============设置几个有用的计数器=============*/   
        LDP  #6
        LACC PWMCNT_LED
        ADD #1H
        SACL PWMCNT_LED
        
        LACL PWMCNT_LED
 
        SUB #1H 

        BCND  ON   ,EQ
        LACC PWMCNT_LED
        SUB #800H
        BZ OFF 
        LACC PWMCNT_LED
        SUB #PWMCNT_LED_
        BZ   NEWCNT 
        B IN
ON
      
        LED_D8_ON  
        B   IN
OFF  
 
        LED_D8_OFF
        B IN
NEWCNT   
        SPLK #0H ,PWMCNT_LED 
   

⌨️ 快捷键说明

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