📄 speed_pi.asm.txt
字号:
*************************************************************
* Speed PI Regulator
*************************************************************
; .ref pid_reg_spd,pid_reg_spd_init ; function call
; .ref spd_fdb,spd_ref ; Inputs
; .ref spd_out ; Outputs
;------------------------------------------------------------
; Global Definitions
;------------------------------------------------------------
.def pid_reg_spd,pid_reg_spd_init ; function call
.def spd_fdb,spd_ref ; Inputs
.def spd_out ; Outputs
;------------------------------------------------------------
; Variable Definitions
;------------------------------------------------------------
spd_ref
.usect "pid_spd",1
spd_fdb
.usect "pid_spd",1
spd_out
.usect "pid_spd",1
;other variables :
* PI regulators variable
upi
.usect "pid_spd",1 ;PI regulators (current and speed) ;output
elpi
.usect "pid_spd",1 ;PI regulators (current and speed)
;limitation error
Kcorn
.usect "pid_spd",1
Ki
.usect "pid_spd",1
Kcor
.usect "pid_spd",1
Kpin
.usect "pid_spd",1
Kin
.usect "pid_spd",1
Kpi
.usect "pid_spd",1
epin
.usect "pid_spd",1 ;speed error (used in speed ;regulator)
xin
.usect "pid_spd",1 ;speed regulator integral ;component
epiq
.usect "pid_spd",1 ;q-axis current regulator error
epid
.usect "pid_spd",1 ;d-axis current regulator error
xiq
.usect "pid_spd",1 ;q-axis current regulator integral ;component
xid
.usect "pid_spd",1 ;d-axis current regulator integral ;component
*** vSqref and VdSr limitations
Vmin .set 0ec00h ;4.12 format=-1.25 pu
Vmax .set 1400h ;4.12 format=1.25 pu
*** iSqref limitations
Isqrefmin
.set -1310 ;4.12 format=-0.8 pu, I_nom=10A
Isqrefmax
.set 1310 ;4.12 format=0.8 pu, I_nom=10A
vSqref
.usect "pid_spd",1
iSqref
.usect "pid_spd",1
iSd
.usect "pid_spd",1
iSq
.usect "pid_spd",1
n
.usect "pid_spd",1
n_ref
.usect "pid_spd",1
vSdref
.usect "pid_spd",1
iSdref
.usect "pid_spd",1
pid_reg_spd_init
zac
ldp #spd_ref
sacl xin
sacl upi
sacl elpi
sacl spd_out
sacl upi
sacl elpi
sacl epin
sacl epiq
sacl epid
sacl xiq
sacl xid
sacl vSqref
sacl iSqref
sacl iSd
sacl iSq
sacl n
sacl n_ref
sacl vSdref
sacl iSdref
*** PI speed regulators parameters
splk #35h,Kin
splk #482bh,Kpin
splk #0bh,Kcorn
ret
pid_reg_spd
;Interface avec les nouvelles variables
ldp #spd_fdb
lacc spd_fdb ;Q15, 6000rpm as pu
sfr
ldp #n
sacl n ;Q12, 1500rpm as pu
ldp #spd_ref ;Q15 ref with 1pu =1500rpm
lacc spd_ref
sfr
sacl n_ref ;Q12 with 1500rpm as pu
*****************************************************
* Speed regulator with integral component correction
*****************************************************
ldp #n_ref
lacc n_ref
sub n
sacl epin ;epin=n_ref-n, 4.12 format
lacc xin,12
lt epin
mpy Kpin
apac
sach upi,4 ;upi=xin+epin*Kpin, 4.12 format
;here we start to saturate
bit upi,0
bcnd upimagzeros,NTC ;If value >0 we branch
lacc #Isqrefmin ;negative saturation
sub upi
bcnd neg_sat,GT ;if upi<ISqrefmin then branch to
;saturate
lacc upi ;value of upi is valid
b limiters
neg_sat
lacc #Isqrefmin ;set acc to -ve saturated value
b limiters
upimagzeros ;Value is positive
lacc #Isqrefmax ;positive saturation
sub upi
bcnd pos_sat,LT ;if upi>ISqrefmax then branch to ;saturate
lacc upi ;value of upi valid
b limiters
pos_sat
lacc #Isqrefmax ;set acc to +ve saturated value
limiters
sacl iSqref ;Store the acc as reference value
;Interface avec la nouvelle variable de sortie
setc OVM
sfl
sfl
sfl
ldp #spd_out
sacl spd_out
sub #7fffh
clrc OVM
ldp #iSqref
lacc iSqref
sub upi
sacl elpi ;elpi=iSqref-upi, 4.12 format
lt elpi ;if there is no saturation elpi=0
mpy Kcorn
pac
lt epin
mpy Kin
apac
add xin,12
sach xin,4 ;xin=xin+epin*Kin+elpi*Kcorn, 4.12 ;format
***********************************************************
* END Speed regulator with integral component correction
***********************************************************
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -