📄 clarke.asm
字号:
;=====================================================================
; Filename : clarke.asm
; Module Name : CLARKE
; Initialization Routine: CLARKE_INIT
; Description : Converts balanced three phase quantities into balanced
; two phase quadrature quantities.
; (a,b,c) -> (d,q) Transformation
; i_alfa = i_a
; i_beta = (2 * i_b + i_a) / sqrt(3)
;
; |~~~~~~~~~~~~~~~|
; i_a o----->| |----->o i_alfa
; i_b o----->| CLARKE |
; i_c* o----->| |----->o i_beta
; |_______________|
;
;=====================================================================
;=====================================================================
;Module definitions for external reference.
.def CLARKE, CLARKE_INIT ; function call
.def i_a, i_b ; Inputs
.def i_alfa, i_beta ; Outputs
;=====================================================================
.include "F2407REGS.H"
; Variables
i_a .usect "clarke",1
i_b .usect "clarke",1
i_alfa .usect "clarke",1
i_beta .usect "clarke",1
sqrt3inv .usect "clarke",1 ; 1/sqrt(3)
clk_temp .usect "clarke",1
;=========================
; CLARKE_INIT
; sqrt3inv = (1/sqrt(3))=0.57735026918962576450914878050196
;=========================
CLARKE_INIT:
NOP
LDP #sqrt3inv
SPLK #49E6H,sqrt3inv ; 1/sqrt(3) (Q15)
RET
;=========================
;CLARKE CONVERTOR
;=========================
CLARKE:
;SPM 1 ; Set SPM for Q15 math
;SETC SXM ; Sign extension mode on
;i_alfa = i_a
LDP #i_a
LACC i_a,16 ; ACC = i_a
SACH i_alfa ; i_alfa = i_a
;i_beta = (2 * i_b + i_a) / sqrt(3)
SFR ; ACC = i_a/2
ADD i_b,16 ; ACC = i_a/2 + i_b
SACH clk_temp ; clk_temp = i_a/2 + i_b
LT clk_temp ; TREG = i_a/2 + i_b
MPY sqrt3inv ; PREG = (i_a/2 + i_b)*(1/sqrt(3))
PAC ; ACC = (i_a/2 + i_b)*(1/sqrt(3))
;SFL ; ACC = (i_a + i_b*2)*(1/sqrt(3))
SACH i_beta,1 ; i_beta = (i_a + i_b*2)*(1/sqrt(3))
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -