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

📄 motor velocity control dsp program.txt

📁 three-phase Permanent Magnet Synchronous Motor(PMSM) velocity control DSP program
💻 TXT
📖 第 1 页 / 共 3 页
字号:
         LACC      TMP                    
         SACL      ENCODEROLD         ;更新ENCODEROLD
;-----------------------计算绝对电角度-----------------------------------------------------------------------
         LT         TETA_M   
         MPYU      #KENCODER           ;乘磁极对数KENCODER 
         PAC                              ;Q12格式
         AND       #0FFFH                ;屏蔽高位
         SACL      TETA_E                ;存放
;-----------------------计算转速---------------------------------------------------------------------------
         LACC      SPEEDSTEP            ;检测是否该采样速度
         SUB       #1 
         SACL     SPEEDSTEP
         BCND     NOCALC,GT            ;没到采样时刻,退出
         LT        SPEEDTMP              ;到采样时刻,计算编码器增量累计值
         MPY      #KSPEED               ;Q8格式
         PAC
         SFL
         SACH     N,7                    ;相当于右移8位
         LACC     #0 
         SACL     SPEEDTMP             ;SPEEDTMP清零
         LACC     #SPEEDSTEP           ;SPEEDSTEP=28
         SACL     SPEEDSTEP            ;SPEEDSTEP重新赋初值
;-----------------------转速PI调节,输出IQREF----------------------------------------------------------
         LACC     N_REF                 ;转速给定值,外部输入
         SUB       N
         SACL      EPISPEED             ;转速偏差
         LACC      XISPEED,12            ;转速调节器积分累计量
         LT         EPISPEED
         MPY       KPISPEED             ;乘比例系数6800H(6.5的Q12格式)
         APAC                             ;累加
         SACH      UPI,4                  ;相当于右移12位
         BIT        UPI,0                  ;检测调节器输出的正负
         BCND      UPIMAGZEROS,NTC    ;如果正,跳转
         LACC      ISQREFMIN            ;否则是负,检测是否超过电流下限
         SUB       UPI
         BCND     NEG_SAT,GT            ;超过下限进入饱和区则跳转
         LACC     UPI                     ;否则正常调整
         B         LIMITERS
NEG_SAT   
         LACC  ISQREFMIN              ; ACC =下限值
         B         LIMITERS
UPIMAGZEROS 
         LACC      ISQREFMAX            ;检测是否超过电流上限
         SUB       UPI 
         BCND     POS_SAT,LT             ;超过上限进入饱和区则跳转
         LACC      UPI                     ;否则正常调整
         B          LIMITERS
POS_SAT   
         LACC    ISQREFMAX            ; ACC =上限值
LIMITERS  
         SACL     ISQREF                ;输出IQREF
         SUB       UPI
         SACL      ELPI                    ;求极限偏差
         LT         ELPI
         MPY       KCORSPEED            ;KCORSPEED= KISPEED/ KPISPEED
         PAC
         LT        EPISPEED
         MPY       KISPEED                ;积分系数
         APAC
         ADD       XISPEED,12
         SACH      XISPEED,4               ;更新调节器积分累计量
;-----------------------计算编码增量累计值------------------------------------------------------------------
NOCALC  
         LACC     SPEEDTMP               
         ADD        ENCINCR 
         SACL       SPEEDTMP 
;-----------------------将IA,IB,IC转换成IPUQ12格式---------------------------------------------------------
WAIT    
         LDP       #0
         LACC      IA
         AND       #3FFH                   ;屏蔽高位
         SUB       #512                     ;向下平移,产生正负电流值
         SACL      TMP
         LT         TMP
         MPY       #KCURRENT             ;转换系数,Q8格式
         PAC
         SFL
         SACH       IA,7                    ;IA, Q12格式
         LACC       IB
         AND        #3FFH
         SUB        #512
         SACL       TMP
         LT         TMP
         MPY       #KCURRENT
         PAC
         SFL
         SACH      IB,7
         LACC      IB
         ADD       IA
         NEG
         SACL      IC                     ;IC = -(IB+IA)
;-----------------------CLARKE变换--------------------------------------------------------------------------------
         LDP       #0   
		 LT	       IA	
     MPY      #5018                  ;乘 =5018,Q12格式
     PAC
		 SACH	   ISALFA,4	  	          ;保存ISALFA
		 LACC     IB,1                    ;ACC =2*IB
		 ADD	   IA                     ;ACC =IA+2*IB
		 SACL	   TMP                    ;暂存
		 LT	       ISALFA
		 MPY	   #2896		              ;乘 =2896,Q12格式
		 PAC           
     SACH	   ISBETA ,4  		      ;保存ISBETA 
;-----------------------根据TETA_E查SIN, COS表------------------------------------------------------------
         LACC      TETA_E             ;TETA_E范围[0;1000H],[0;360]的Q12格式
         RPT        #3                    ;右移4位,范围变为[0;255],
         SFR
         AND        #0FFH                 ;屏蔽高位
         SACL       INDEX                ;生成查表指针
         ADD        #SINTAB              ;加上表的首地址
         TBLR       SIN                   ;保存SIN值
         LACL       INDEX                ;COS(TETA)=SIN(TETA+90°)
         ADD       #040H                  ;90°= 40H 
         AND       #0FFH
         ADD       #SINTAB
         TBLR       COS                   ;保存COS值
;----------------------- PARK变换------------------------------------------------------------------------------------
		 LACC	   #0		               ;累加器清零
		 LT	       ISBETA 
		 MPY	       SIN          	           ;Q12格式
		 LTA	       ISALFA      	           ;ACC=ISBETA *SIN(TETA),T=ISALFA
		 MPY	   COS      	               ;Q12格式
		MPYA     SIN              ;ACC=ISBETA*SIN(TETA)+ISALFA*COS(TETA),
                                           ;P=ISALFA*SIN(TETA)
		 SACH      ISD,4  	               ;保存ISD        
		 LACC      #0          	           ;累加器清零
		 LT	       ISBETA  
		 MPYS      COS  	    ;ACC = -ISALFA*SIN(TETA) ,P=ISBETA*COS(TETA)
		 APAC              	    ;ACC = -ISALFA*SIN(TETA) +ISBETA*COS(TETA)
		 SACH      ISQ,4                   ;保存ISQ 
;----------------------- Q轴电流PI调节,输出VSQREF ------------------------------------------------------------
         LACC      ISQREF
         SUB       ISQ
         SACL      EPIQ                     ;Q轴电流偏差
         LACC      XIQ,12                   ;电流调节器积分累计量
         LT         EPIQ
         MPY       KPI                     ;比例系数
         APAC
         SACH      UPI,4
          BIT       UPI,0                    ;检测调节器输出的正负
         BCND      UPIMAGZEROQ,NTC      ;如果正,跳转
         LACC      #VMIN                   ;否则是负,检测是否超过电压下限
         SUB       UPI
         BCND      NEG_SATQ,GT            ;超过下限进入饱和区则跳转
         LACC UPI                            ;否则正常调整
         B         LIMITERQ
NEG_SATQ  
         LACC    #VMIN                  ;ACC =下限值
         B         LIMITERQ
UPIMAGZEROQ 
         LACC      #VMAX                  ;检测是否超过电压上限
         SUB       UPI 
         BCND     POS_SATQ,LT             ;超过上限进入饱和区则跳转
         LACC      UPI                      ;否则正常调整
         B         LIMITERQ
POS_SATQ  
         LACC      #VMAX               ; ACC =上限值
LIMITERQ  
         SACL      VSQREF               ;输出VSQREF
         SUB       UPI
         SACL      ELPI                      ;求极限偏差
         LT        ELPI
         MPY      KCOR                     ; KCOR= KI/ KPI
         PAC
         LT        EPIQ
         MPY       KI                       ;积分系数
         APAC
         ADD      XIQ,12
         SACH     XIQ,4                     ;更新调节器积分累计量
;-----------------------D轴电流PI调节,输出VSDREF-------------------------------------------------------
         LACC      ISDREF
         SUB       ISD
         SACL      EPID                     ;D轴电流偏差
         LACC      XID,12                   ;电流调节器积分累计量
         LT        EPID
         MPY       KPI                     ;比例系数
         APAC
         SACH      UPI,4
         BIT       UPI,0                     ;检测调节器输出的正负
         BCND     UPIMAGZEROD,NTC       ;如果正,跳转
         LACC      #VMIN                   ;否则是负,检测是否超过电压下限
         SUB       UPI
         BCND     NEG_SATD,GT             ;超过下限进入饱和区则跳转
         LACC      UPI                      ;否则正常调整
         B         LIMITERD
NEG_SATD  
         LACC    #VMIN                  ;ACC =下限值
         B         LIMITERD
UPIMAGZEROD 
         LACC      #VMAX                  ;检测是否超过电压上限
         SUB       UPI 
         BCND      POS_SATD,LT            ;超过上限进入饱和区则跳转
         LACC      UPI                     ;否则正常调整
         B         LIMITERD
POS_SATD  
         LACC      #VMAX               ; ACC =上限值
LIMITERD  
         SACL      VSDREF               ; 输出VSDREF
         SUB       UPI
         SACL      ELPI
         LT        ELPI
         MPY      KCOR   
         PAC
         LT        EPID
         MPY       KI
         APAC
         ADD       XID,12
         SACH      XID,4                  ;更新调节器积分累计量
;-----------------------PARK反变换--------------------------------------------------------------------------------
         LACC      #0
         LT        VSDREF                 ;T=VSDREF
         MPY      SIN                     ;P=VSDREF*SIN(TETA_E)
         LTA        VSQREF                ;ACC=P; T=VSQREF
         MPY      COS                    ;P=VSQREF*COS(TETA_E)
         MPYA     SIN                     ;ACC=P; P=VSQREF*SIN(TETA_E)

⌨️ 快捷键说明

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