📄 park.asm
字号:
;===========================================================================
; File Name: park.asm
;
; Module Name: PARK
;
; Initialization Routine: PARK_INIT
;
;
; Description: This transformation converts vectors in balanced 2-phase
; orthogonal stationary system into orthogonal rotating
; reference frame.
;
; id = ialfa * cos_teta + ibeta * sin_teta
; iq = -ialfa *sin_teta + ibeta * cos_teta
;
; |~~~~~~~~~~~~~~~~~|
; park_d o------>| |----->o park_D
; park_q o------>| PARK |
; theta_p o------>| |----->o park_Q
; |_________________|
;
; Note: 0 < theta_p < 7FFFh (i.e. equivalent to 0 < theta_p < 360 deg )
;
;
;
; Target dependency: C2xx core only
;
;===========================================================================
;Module definitions for external reference.
.def PARK, PARK_INIT ;function call
.def park_d, park_q,sin_theta,cos_theta,theta_p ;Inputs
.def park_D, park_Q ;Outputs
.ref SINTAB_360
;===========================================================================
park_d .usect "park",1
park_q .usect "park",1
theta_p .usect "park",1
park_D .usect "park",1
park_Q .usect "park",1
t_ptr .usect "park",1
ip_val .usect "park",1
cos_theta .usect "park",1
sin_theta .usect "park",1
nxt_entry .usect "park",1
delta_angle .usect "park",1
GPR0_park .usect "park",1
;=====================================================================
PARK_INIT:
;=====================================================================
RET
;=====================================================================
PARK:
;=====================================================================
;Calculate Cos(theta_p)
;Normal precision with simple 1024 word look-up
ldp #park_d
LACC theta_p
ADD #255
SACL t_ptr
SUB #1023
BCND DYL2,LEQ
NOP
NOP
SACL t_ptr
DYL2 NOP
LACC #SINTAB_360
ADD t_ptr
TBLR cos_theta
LACC #SINTAB_360
ADD theta_p
TBLR sin_theta
SPM 1 ; SPM set for Q15 multiplication
lacc #0 ; Reset accumulator
LT park_d ; TREG = ibeta
MPY sin_theta ; PREG = ibeta * sin_teta
LTA park_q ; ACC = ibeta * sin_teta and TREG = ialfa
MPY cos_theta ; PREG = ialfa * cos_teta
MPYS sin_theta ; ACC = ibeta*sin_teta + ialfa*cos_teta and PREG=ialfa*sin_teta
SACH park_D ; id = ialfa * cos_teta + ibeta * sin_teta
LACC #0 ; Clear ACC
LT park_d ; TREG = ibeta
MPYS cos_theta ; ACC = -ialfa*sin_teta and PREG = ibeta*cos_teta
SPAC ; ACC = -ialfa *sin_teta + ibeta * cos_teta
SACH park_Q ; iq = -ialfa *sin_teta + ibeta * cos_teta
SPM 0 ; SPM reset
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -