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

📄 aci_fe.asm

📁 TI公司24X系列DSP控制无刷直流电机
💻 ASM
📖 第 1 页 / 共 4 页
字号:
      					; ARP=AR2, AR0->FR2, AR2->flx_dr_e, ARP=AR0 	
;----------------------------------------------------------------------------------
		MPY		*-,AR2	; PREG = flx_dr_e*sin_fe  (Q30)
						; ARP=AR0, AR0->FR1, AR2->flx_dr_e, ARP=AR2 
;----------------------------------------------------------------------------------
		PAC				; ACC = flx_dr_e*sin_fe  (Q30)
						; ARP=AR2, AR0->FR1, AR2->flx_dr_e
;----------------------------------------------------------------------------------
		ADRK	#2		; ARP=AR2, AR0->FR1, AR2->flx_qr_s
;----------------------------------------------------------------------------------
		SACH	*+,1,AR0 ; flx_qr_s = flx_dr_e*sin_fe  (Q15)
						; ARP=AR2, AR0->FR1, AR2->flx_dr_s, ARP=AR0
;----------------------------------------------------------------------------------
		; ***** d-axis *****
		MPY		*,AR2	; PREG = flx_dr_e*cos_fe  (Q30)
						; ARP=AR0, AR0->FR1, AR2->flx_dr_s, ARP=AR2		
;----------------------------------------------------------------------------------
		SACH	*+,1	; flx_dr_s = flx_dr_e*cos_fe  (Q15)
						; ARP=AR2, AR0->FR1, AR2->K3_fe
;----------------------------------------------------------------------------------
; (4) Compute the stator flux based on the rotor flux from current model
;----------------------------------------------------------------------------------
      	; ***** stationary d-axis *****
      	LT		*-		; TREG = K3_fe  (Q15)
      					; ARP=AR2, AR0->FR1, AR2->flx_dr_s 		
;----------------------------------------------------------------------------------
		MPY		*		; PREG = K3_fe*flx_dr_s  (Q30)
						; ARP=AR2, AR0->FR1, AR2->flx_dr_s  		
;----------------------------------------------------------------------------------
		PAC				; ACC = K3_fe*flx_dr_s  (Q30)
						; ARP=AR2, AR0->FR1, AR2->flx_dr_s 
;----------------------------------------------------------------------------------
		ADRK	#2		; ARP=AR2, AR0->FR1, AR2->K4_fe	
;----------------------------------------------------------------------------------
		LT		*		; TREG = K4_fe  (Q15)
                        ; ARP=AR2, AR0->FR1, AR2->K4_fe
;----------------------------------------------------------------------------------
		SBRK	#7		; ARP=AR2, AR0->FR1, AR2->i_ds_fe 
;----------------------------------------------------------------------------------
		MPY		*		; PREG = K4_fe*i_ds_fe  (Q30)
						; ARP=AR2, AR0->FR1, AR2->i_ds_fe
;----------------------------------------------------------------------------------
		APAC			; ACC = K3_fe*flx_dr_s + K4_fe*i_ds_fe  (Q30)
						; ARP=AR2, AR0->FR1, AR2->i_ds_fe
;----------------------------------------------------------------------------------
		ADRK	#8		; ARP=AR2, AR0->FR1, AR2->flx_ds_s
;----------------------------------------------------------------------------------
		SACH	*,1		; flx_ds_s = K3_fe*flx_dr_s + K4_fe*i_ds_fe  (Q15)
						; ARP=AR2, AR0->FR1, AR2->flx_ds_s
;----------------------------------------------------------------------------------
       	; ***** stationary q-axis *****
     	SBRK	#2		; ARP=AR2, AR0->FR1, AR2->K3_fe   	
;----------------------------------------------------------------------------------
		LT		*		; TREG = K3_fe  (Q15)
						; ARP=AR2, AR0->FR1, AR2->K3_fe 
;----------------------------------------------------------------------------------
      	SBRK	#2		; ARP=AR2, AR0->FR1, AR2->flx_qr_s	
;----------------------------------------------------------------------------------
      	MPY		*		; PREG = K3_fe*flx_qr_s  (Q30)
      					; ARP=AR2, AR0->FR1, AR2->flx_qr_s
;----------------------------------------------------------------------------------
		PAC				; ACC = K3_fe*flx_qr_s  (Q30)
      					; ARP=AR2, AR0->FR1, AR2->flx_qr_s
;----------------------------------------------------------------------------------
     	ADRK	#3		; ARP=AR2, AR0->FR1, AR2->K4_fe
;----------------------------------------------------------------------------------
		LT		*		; TREG = K4_fe  (Q15)
						; ARP=AR2, AR0->FR1, AR2->K4_fe
;----------------------------------------------------------------------------------
   		SBRK	#8		; ARP=AR2, AR0->FR1, AR2->i_qs_fe
;----------------------------------------------------------------------------------
		MPY		*		; PREG = K4_fe*i_qs_fe   (Q30)
						; ARP=AR2, AR0->FR1, AR2->i_qs_fe
;----------------------------------------------------------------------------------
    	APAC			; ACC = K3_fe*flx_qr_s + K4_fe*i_qs_fe   (Q30)
						; ARP=AR2, AR0->FR1, AR2->i_qs_fe
;----------------------------------------------------------------------------------
		ADRK	#10		; ARP=AR2, AR0->FR1, AR2->flx_qs_s
;----------------------------------------------------------------------------------
     	SACH	*-,1	; flx_qs_s = K3_fe*flx_qr_s + K4_fe*i_qs_fe   (Q15)
						; ARP=AR2, AR0->FR1, AR2->flx_ds_s
;----------------------------------------------------------------------------------
; (5) Conventional PI controller section
;----------------------------------------------------------------------------------
     	; ***** stationary d-axis *****
     	SPM		1		; Set left shifted 1 bit
     					; ARP=AR2, AR0->FR1, AR2->flx_ds_s
;----------------------------------------------------------------------------------
		LACC	*,15	; ACC = flx_ds_s  (Q14)
						; ARP=AR2, AR0->FR1, AR2->flx_ds_s
;----------------------------------------------------------------------------------
      	ADRK	#2		; ARP=AR2, AR0->FR1, AR2->psi_ds_fe
;----------------------------------------------------------------------------------
		SUB		*+,15,AR0 ; ACC = flx_ds_s - psi_ds_fe  (Q14)
						; ARP=AR2, AR0->FR1, AR2->Kp_fe, ARP=AR0
;----------------------------------------------------------------------------------
    	NEG				; ACC = psi_ds_fe - flx_ds_s (Q14)
						; ARP=AR0, AR0->FR1, AR2->Kp_fe
;----------------------------------------------------------------------------------
       	SACH	*,AR2	; FR1 = error_ds = psi_ds_fe - flx_ds_s (Q14)
						; ARP=AR0, AR0->FR1, AR2->Kp_fe, ARP=AR2
;----------------------------------------------------------------------------------
   		LT		*+,AR0	; TREG = Kp_fe  (Q15)
   						; ARP=AR2, AR0->FR1, AR2->ui_lo_ds, ARP=AR0
;----------------------------------------------------------------------------------
       	MPY		*+		; PREG = Kp_fe*error_ds  (Q29)
       					; ARP=AR0, AR0->FR2, AR2->ui_lo_ds
;----------------------------------------------------------------------------------
     	PAC				; ACC = Kp_fe*error_ds  (Q30)
       					; ARP=AR0, AR0->FR2, AR2->ui_lo_ds
;----------------------------------------------------------------------------------
     	SACH	*,AR2	; FR2 = tmp1_fe = Kp_fe*error_ds  (Q14)
       					; ARP=AR0, AR0->FR2, AR2->ui_lo_ds, ARP=AR2 	
;----------------------------------------------------------------------------------
    	ADDS	*+		; ACC = Kp_fe*error_ds + ui_ds  (Q30)
       					; ARP=AR2, AR0->FR2, AR2->ui_hi_ds  	
;----------------------------------------------------------------------------------
		ADDH	*+		; ACC = Kp_fe*error_ds + ui_ds  (Q30)
       					; ARP=AR2, AR0->FR2, AR2->ucomp_ds
;----------------------------------------------------------------------------------
      	NORM	*		; ACC = Kp_fe*error_ds + ui_ds  (Q31)
       					; ARP=AR2, AR0->FR2, AR2->ucomp_ds
;----------------------------------------------------------------------------------
       	SACH	*+,AR0	; ucomp_ds = Kp_fe*error_ds + ui_ds  (Q15)
       					; ARP=AR2, AR0->FR2, AR2->Ki_fe, ARP=AR0
;----------------------------------------------------------------------------------
		SPM		3		; Set right shifted 6 bit
						; ARP=AR0, AR0->FR2, AR2->Ki_fe
;----------------------------------------------------------------------------------
      	LT		*-,AR2	; TREG = FR2 = tmp1_fe = Kp_fe*error_ds (Q14)
      					; ARP=AR0, AR0->FR1, AR2->Ki_fe, ARP=AR2
;----------------------------------------------------------------------------------
		MPY		*		; PREG = Kp_fe*Ki_fe*error_ds (Q38)
						; ARP=AR2, AR0->FR1, AR2->Ki_fe      	
;----------------------------------------------------------------------------------
      	PAC				; ACC = Kp_fe*Ki_fe*error_ds (Q32)
						; ARP=AR2, AR0->FR1, AR2->Ki_fe  
;----------------------------------------------------------------------------------
		SFR				; ACC = Kp_fe*Ki_fe*error_ds (Q31)
						; ARP=AR2, AR0->FR1, AR2->Ki_fe 
;----------------------------------------------------------------------------------
		SFR				; ACC = Kp_fe*Ki_fe*error_ds (Q30)
						; ARP=AR2, AR0->FR1, AR2->Ki_fe 
;----------------------------------------------------------------------------------
      	SBRK	#3		; ARP=AR2, AR0->FR1, AR2->ui_lo_ds
;----------------------------------------------------------------------------------
		ADDS	*+		; ACC = ui_ds + Kp_fe*Ki_fe*error_ds (Q30)
						; ARP=AR2, AR0->FR1, AR2->ui_hi_ds
;----------------------------------------------------------------------------------
		ADDH	*-		; ACC = ui_ds + Kp_fe*Ki_fe*error_ds (Q30)
						; ARP=AR2, AR0->FR1, AR2->ui_lo_ds
;----------------------------------------------------------------------------------
		SACL	*+		; ui_ds = ui_ds + Kp_fe*Ki_fe*error_ds (Q30)
						; ARP=AR2, AR0->FR1, AR2->ui_hi_ds
;----------------------------------------------------------------------------------
    	SACH	*		; ui_ds = ui_ds + Kp_fe*Ki_fe*error_ds (Q30)
						; ARP=AR2, AR0->FR1, AR2->ui_hi_ds
;----------------------------------------------------------------------------------
       	; ***** stationary q-axis *****
       	SPM		1		; Set left shifted 1 bit
       					; ARP=AR2, AR0->FR1, AR2->ui_hi_ds
;----------------------------------------------------------------------------------
		ADRK	#3		; ARP=AR2, AR0->FR1, AR2->psi_qs_fe	
;----------------------------------------------------------------------------------
     	LACC	*,15	; ACC = psi_qs_fe  (Q14)
     					; ARP=AR2, AR0->FR1, AR2->psi_qs_fe			
;----------------------------------------------------------------------------------
		SBRK	#7		; ARP=AR2, AR0->FR1, AR2->flx_qs_s	     	
;----------------------------------------------------------------------------------
		SUB		*,15,AR0 ; ACC = psi_qs_fe - flx_qs_s  (Q14)
						; ARP=AR2, AR0->FR1, AR2->flx_qs_s, ARP=AR0
;----------------------------------------------------------------------------------
     	SACH	*,AR2	; FR1 = error_qs = psi_qs_fe - flx_qs_s  (Q14)
						; ARP=AR0, AR0->FR1, AR2->flx_qs_s, ARP=AR2	
;----------------------------------------------------------------------------------
		ADRK	#2		; ARP=AR2, AR0->FR1, AR2->Kp_fe	
;----------------------------------------------------------------------------------
		LT		*,AR0	; TREG = Kp_fe  (Q15)
						; ARP=AR2, AR0->FR1, AR2->Kp_fe, ARP=AR0
;----------------------------------------------------------------------------------
		MPY		*+		; PREG = Kp_fe*error_qs  (Q29)
						; ARP=AR0, AR0->FR2, AR2->Kp_fe 		
;----------------------------------------------------------------------------------
		PAC				; ACC = Kp_fe*error_qs  (Q30)
						; ARP=AR0, AR0->FR2, AR2->Kp_fe
;----------------------------------------------------------------------------------
    	SACH	*,AR2	; FR2 = tmp1_fe = Kp_fe*error_qs  (Q14)
						; ARP=AR0, AR0->FR2, AR2->Kp_fe, ARP=AR2
;----------------------------------------------------------------------------------
		ADRK	#6		; ARP=AR2, AR0->FR2, AR2->ui_lo_qs
;----------------------------------------------------------------------------------
      	ADDS	*+		; ACC = Kp_fe*error_qs + ui_qs  (Q30)
      					; ARP=AR2, AR0->FR2, AR2->ui_hi_qs 
;----------------------------------------------------------------------------------
     	ADDH	*+		; ACC = Kp_fe*error_qs + ui_qs  (Q30)
      					; ARP=AR2, AR0->FR2, AR2->ucomp_qs  
;----------------------------------------------------------------------------------
      	NORM	*		; ACC = Kp_fe*error_qs + ui_qs  (Q31)
      					; ARP=AR2, AR0->FR2, AR2->ucomp_qs  
;----------------------------------------------------------------------------------
      	SACH	*,AR0	; ucomp_qs = Kp_fe*error_qs + ui_qs  (Q15)
      					; ARP=AR2, AR0->FR2, AR2->ucomp_qs, ARP=AR0
;----------------------------------------------------------------------------------
		SPM		3		; Set right shifted 6 bit
						; ARP=AR0, AR0->FR2, AR2->ucomp_qs
;----------------------------------------------------------------------------------
		LT		*+,AR2	; TREG = FR2 = tmp1_fe = Kp_fe*error_qs  (Q14)
						; ARP=AR0, AR0->FR3, AR2->ucomp_qs, ARP=AR2
;----------------------------------------------------------------------------------
		SBRK	#4		; ARP=AR2, AR0->FR3, AR2->Ki_fe       	
;----------------------------------------------------------------------------------
      	MPY		*		; PREG = Kp_fe*Ki_fe*error_qs  (Q38)
      					; ARP=AR2, AR0->FR3, AR2->Ki_fe  
;----------------------------------------------------------------------------------
     	PAC				; ACC = Kp_fe*Ki_fe*error_qs  (Q32)
      					; ARP=AR2, AR0->FR3, AR2->Ki_fe
;----------------------------------------------------------------------------------
		SFR				; ACC = Kp_fe*Ki_fe*error_qs  (Q31)
      					; ARP=AR2, AR0->FR3, AR2->Ki_fe
;----------------------------------------------------------------------------------
		SFR				; ACC = Kp_fe*Ki_fe*error_qs  (Q30)
      					; ARP=AR2, AR0->FR3, AR2->Ki_fe
;----------------------------------------------------------------------------------
      	ADRK	#2		; ARP=AR2, AR0->FR3, AR2->ui_lo_qs
;----------------------------------------------------------------------------------
    	ADDS	*+		; ACC = ui_qs + Kp_fe*Ki_fe*error_qs  (Q30)
    					; ARP=AR2, AR0->FR3, AR2->ui_hi_qs
;----------------------------------------------------------------------------------

⌨️ 快捷键说明

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