📄 aci_fe.asm
字号:
; 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 + -