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

📄 ac_tvc.asm

📁 用TI TMS320LF2407A DSP实现交流异步电动机的矢量控制包括CLARKE变换
💻 ASM
📖 第 1 页 / 共 3 页
字号:
/*三相交流异步电动机矢量控制程序*/
         .INCLUDE "240X.H"
;-----------------------以下定义变量和常数-------------------------------------------------------------
               .DATA
KSPEED       .SET  3415             ;将脉冲数转换成速度系数,13.34的Q8格式
                                      ;速度基值1500rpm,速度采样周期3ms
SPEEDSTEP    .SET  30               ;速度采样周期30个中断
               .BSS  T1_PERIODS,1    ;T1周期值的Q5格式
               .BSS  KCURRENT,1     ;电流ipuQ12的转换系数,Q8格式
               .BSS  KI,1              ;电流积分系数,Q12格式
               .BSS  KP,1              ;电流比例系数,Q12格式
               .BSS  KC,1              ;电流积分修正系数,Q12格式
               .BSS  KIN,1             ;速度积分系数,Q12格式
               .BSS  KPN,1            ;速度比例系数,Q12格式
               .BSS  KCN,1            ;速度积分修正系数,Q12
               .BSS  VMIN,1           ;电压最小极限-1.25 pu,Q12
               .BSS  VMAX,1          ;电压最大极限1.25 pu,Q12
               .BSS  IMAX,1           ;相电流最大极限,Q12
               .BSS  TMP,1            ;临时变量
               .BSS  IA,1             ;相电流IA
               .BSS  IB,1             ;相电流IB
               .BSS  IC,1             ;相电流IC
               .BSS  SIN,1            ;SIN值Q12
               .BSS  COS,1           ;COS值Q12
               .BSS  DEC_MS,24      ;6个逆阵,Q14格式
               .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  TETA_E,1         ;转子电角度[0;1000H],对应[0;360]Q12格式
               .BSS  IALFA,1          ;ALFA轴电流
               .BSS  IBETA,1          ;BETA轴电流
               .BSS  VALF_REF,1      ;ALFA轴参考电压
               .BSS  VBET_REF,1      ;BETA轴参考电压
               .BSS  IMREF,1         ;M轴参考电流
               .BSS  ITREF,1          ;T轴参考电流
               .BSS  IM,1             ;M轴电流
               .BSS  IT,1              ;T轴电流
               .BSS  VMREF,1         ;M轴参考电压
               .BSS  VTREF,1          ;T轴参考电压
               .BSS  EPIT,1            ;T轴电流调节偏差
               .BSS  EPIM,1            ;M轴电流调节偏差
               .BSS  XIT,1             ;T轴电流调节器积分累计量
               .BSS  XIM,1             ;M轴电流调节器积分累计量
               .BSS  N,1               ;速度
               .BSS  N_REF,1          ;速度参考值
               .BSS  EPISPEED,1       ;速度偏差
               .BSS  XISPEED,1        ;速度调节器积分累计量
               .BSS  P,1               ;SVPWM扇区索引 
               .BSS  ITREFMIN,1       ;T轴电流最小极限
               .BSS  ITREFMAX,1      ;T轴电流最大极限
               .BSS  SECTOR,1         ;SVPWM扇区数
               .BSS  INDEX,1           ;查SIN表索引
               .BSS  UPI,1             ;PI调节器输出
               .BSS  ELPI,1            ;PI调节器极限偏差
               .BSS  ENCODEROLD,1   ;前一个采样周期时编码脉冲数
               .BSS  ENCINCR,1        ;编码脉冲增量
               .BSS  SPEEDTMP,1       ;编码脉冲增量累计值
               .BSS  SPEEDSTEP,1      ;速度采样周期减计数器
               .BSS  KR,1              ;常数,见式(4-36)
               .BSS  KT,1              ;常数, 见式(4-37)
               .BSS  K,1               ;转换常数,见式(4-39)
               .BSS  IDK,1             ;转子励磁电流,Q12
		       .BSS  FS,1              ;转子磁链角频率与额定角频率之比
		       .BSS  TETAINCR,1       ;TETA转角增量
		       .BSS  TMP1,1            ;临时变量
;-----------------------以下是程序-----------------------------------------------------------------------------
         .TEXT
;-----------------------初始化程序-----------------------------------------------------------------------------
         CLRC      CNF               ; B0
         SETC       OVM
         SPM        0
         SETC       SXM               ;扩展符号
         LAR        AR0,#DEC_MS       ;传送逆阵数据
         LAR        AR1,#(24-1)          ; 24个
         LACC       #ANGLES_          ; 指向源
         LARP       AR0 
INIT_TBL  
         TBLR       *+,AR1              ;下一个
         ADD        #1                  ;下一个地址
         BANZ       INIT_TBL,AR0        ;AR1=0结束 
         LAR        AR4,#79H            ;用于堆栈保存现场,B2(60H-80H)
         LDP        #0E0H
         SPLK       #68H, WDCR         ;不用看门狗
         SPLK       #0284H,SCSR1        ;CLKIN 10MHZ,CLKOUT 20MHZ
         LDP        #0E1H
         SPLK       #0900H,ADCTRL1     ;ADC预分频10,1MHZ
         SPLK       #0001H,MAXCONV    ;两个通道
         SPLK       #0010H,CHSELSEQ1   ;选择ADCIN0和ADCIN1通道
         LACC      MCRA
         OR         #0FD8H              ;设置PWM1-6,QEP1-2
         SACL      MCRA
;-----------------------变量初始化-----------------------------------------------------
         LDP        #0
         SPLK       #32000,T1_PERIODS   ;T1周期值的Q5格式,1000*32
         SPLK       #KI,KI                ;给电流积分系数赋值,Q12
         SPLK       #KP,KP               ;给电流比例系数赋值,Q12
         SPLK       #KC,KC              ;给电流积分修正系数赋值,Q12
         SPLK       #KIN,KIN             ;给速度积分系数赋值,Q12
         SPLK       #KPN,KPN            ;给速度比例系数赋值,Q12
         SPLK       #KCN,KCN           ;给速度积分修正系数赋值,Q12
         SPLK       #VMIN,VMIN         ;给电压最小极限赋值-1.25 pu,Q12
         SPLK       #VMAX, VMAX       ;给电压最大极限赋值1.25 pu,Q12
         SPLK       #IMAX,IMAX          ;给相电流最大极限赋值,Q12
         SPLK       #1383H,KCURRENT    ;电流ipuQ12的转换系数19.5的Q8格式
         SPLK       #39,KR                ;(Lr=0.169,Rr=2.011,T=0.0001)Q15格式
         SPLK       #156,KT               ; (Lr=0.169,Rr=2.011)Q12格式
         SPLK       #328,K                ;转换系数,采样周期100微秒,Q0
         SPLK	    #0,IDK   
		 SPLK       #0,FS
		 SPLK       #0,TETAINCR
		 SPLK       #0,TMP
		 SPLK       #0,TMP1
         LACC      IMAX
         SACL      ITREFMAX
         NEG
         SACL      ITREFMIN
         LACC      #0
         SACL      ITREF
         SACL      IMREF
         SACL      N_REF
         SACL      INDEX
         SACL      XIM
         SACL      XIT
         SACL      XISPEED
         SACL      UPI
         SACL      ELPI
         SACL      ENCODEROLD 
         SACL      N 
         SACL      SPEEDTMP 
         LACC      #SPEEDSTEP           ;SPEEDSTEP=30
         SACL      SPEEDSTEP
      
;-----------------------事件管理器A初始化-------------------------------------------------------------------
         LDP       #0E8H
         SPLK      #0666H,ACTRA       ;引脚PWM1,3,5高有效,2,4,6低有效
         SPLK      #300,CMPR1          ;占空比初值为0
         SPLK      #300,CMPR2
         SPLK      #300,CMPR3
         SPLK      #01F4H,DBTCONA     ;死区时间1.6us
         SPLK      #8200H,COMCONA    ;定时器下溢比较器重载,允许比较
         SPLK      #1000,T1PR           ;周期寄存器值1000
         SPLK      #0,T1CNT
         SPLK      #0840H,T1CON        ;连续增减计数方式,预分频为1,允许T1
         SPLK      #0,T2CNT            ;编码脉冲计数器
         SPLK      #0FFFFH,T2PR 
         SPLK      #9870H,T2CON        ;定向增减,允许编码接口
;-----------------------中断初始化--------------------------------------------------------------------
         SPLK      #0FFFH,EVAIFRA     ;清事件管理器A所有中断标志
         SPLK      #000FH,EVAIFRB
         SPLK      #000FH,EVAIFRC
         SPLK      #0200H,EVAIMRA     ;开T1下溢中断
         SPLK      #0000H,EVAIMRB
         SPLK      #0000H,EVAIMRC
         LDP       #0H
         LACC      #0FFH
         SACL      IFR                  ;清所有系统中断标志
         LACC      #0000010B
         SACL      IMR                 ;开INT2中断
         CLRC      INTM                ;开总中断
;-----------------------初始化结束-------------------------------------------------------------------


;-----------------------T1下溢中断处理子程序-----------------------------------------------------
_C_INT2
;-----------------------保存现场------------------------------------------------------------------------
         MAR       *,AR4                ;AR4作为堆栈指针
         MAR       *-
         SST        #1,*-                 ;保存状态寄存器1
         SST        #0,*-                 ;保存状态寄存器0
         SACH      *-                    ;保存ACC高位
         SACL       *-                    ;保存ACC低位
         LDP        #0E0H 
         LACC       PIVR                 ;读中断向量
         LDP       #0E8H
         SPLK      #0200H,EVAIFRA        ;清中断标志位
;-----------------------电流采样和AD转换------------------------------------------------------
         LDP       #0E1H
         SPLK      #2000H,ADCTRL2      ;启动AD转换,IA-ADCIN0,IB-ADCIN1
CONVERSION
         BIT       ADCTRL2,3            ;将忙状态位复制到TC
         BCND     CONVERSION,TC       ;等待
         LACC      RESULT0,10
         LDP       #0
         SACH     IA
         LDP       #0E1H
         LACC      RESULT1,10
         LDP       #0
         SACH      IB
;-----------------------读编码器脉冲数,计算转角增量------------------------------------------------    
         LDP        #0E8H
         LACC       T2CNT                ;读编码脉冲
         ;NEG                              ;编码器反接线时
         LDP        #0
         SACL       TMP
         SUB       ENCODEROLD          ;减去前一个周期测的脉冲数
         SACL      ENCINCR             ;得到编码增量
         LACC      TMP                    
         SACL      ENCODEROLD         ;更新ENCODEROLD
;-----------------------计算转速---------------------------------------------------------------------------
         LACC      SPEEDSTEP            ;检测是否该采样速度
         SUB       #1 
         SACL     SPEEDSTEP
         BCND     NOCALC,GT            ;没到采样时刻,退出
         LT        SPEEDTMP              ;到采样时刻,计算编码器增量累计值
         MPY      #KSPEED               ;Q8格式
         PAC
         SFL
         SACH     N,7                    ;相当于右移8位,Q12格式的PU值
         LACC     #0 
         SACL     SPEEDTMP             ;SPEEDTMP清零
         LACC     #SPEEDSTEP           ;SPEEDSTEP=30
         SACL     SPEEDSTEP            ;SPEEDSTEP重新赋初值
;-----------------------转速PI调节,输出ITREF----------------------------------------------------------
         LACC     N_REF                 ;转速给定值,外部输入,已转化成Q12格式
         SUB       N
         SACL      EPISPEED             ;转速偏差
         LACC      XISPEED,12            ;转速调节器积分累计量
         LT         EPISPEED
         MPY       KPN                   ;乘比例系数,Q12格式
         APAC                             ;累加
         SACH      UPI,4                  ;相当于右移12位
         BIT        UPI,0                  ;检测调节器输出的正负
         BCND      UPIMAGZEROS,NTC    ;如果正,跳转
         LACC      ITREFMIN             ;否则是负,检测是否超过电流下限
         SUB       UPI
         BCND     NEG_SAT,GT            ;超过下限进入饱和区则跳转
         LACC     UPI                     ;否则正常调整

⌨️ 快捷键说明

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