📄 pmsm_control.asm
字号:
lacc _ic ;这里a/c
add _ib
neg
sacl _ia
LACC _ia ;foc_isalfa=foc_ia
sacl _is_alfa ;foc_isalfa,4.12f
LACC _ib,1 ;foc_isbeta=(2*foc_ib+foc_ia)/sqrt(3)
add _ia
sacl _is_temp
lt _is_temp
mpy #sqrt3inv ;foc_sqrt3inv=(1/sqrt(3))=093dh,4.12f
spm 0
pac
sach _is_beta,4 ;foc_isbeta,4.12f
; .endif ;CLARKE变换结束
;========================================================================
; .if current_park ;PARK变换
;========================================================================
; park transformation
; isd=foc_isalfa*cosTeta_cm+foc_isbeta*sinTeta_cm
; isq=-foc_isalfa*sinTeta_cm+foc_isbeta*cosTeta_cm
;========================================================================
spm 0
lacc #0
lt _is_beta
mpy _sin_value
lta _is_alfa
mpy _cos_value
mpya _sin_value
sach _isd,1
lacc #0
lt _is_beta
mpys _cos_value
apac
sach _isq,1
; .endif ;PARK变换结束
;===========================================================================
; .if speed_regulator ;速度环
;====================================================
; ldpk _t23
setc SXM
lacc _t23
sub _t22
neg
sacl _t2_add
lacc _t23
sacl _t22
;splk #1,_t2_add
lacc _speed_number
sub #1
sacl _speed_number
bnz speed_over_1
lt _t2_sum
mpy _speed_count
spm 3
pac
sfr
sfr
sacl _n_feed
splk #20,_speed_number
splk #0,_t2_sum
next_speed_loop:
lacc _n_ref
sub _n_feed
sacl _speed_err
lt _speed_err
mpy _speed_kp
spm 3
pac
sfr
sfr
sacl _current_given
speed_pi_i:
mpy _speed_ki
;b pip1
spm 0
pac
and #07ffh
add _speed_pi_error
sacl _speed_pi_error
sub #2048
blz pip1
sacl _speed_pi_error
spm 3
pac
sfr
sfr
sfr
sfr
sfr
add #1
add _speed_sum
sacl _speed_sum
b pip2
pip1:
spm 3
pac
sfr
sfr
sfr
sfr
sfr
add _speed_sum
sacl _speed_sum
pip2:
lacc _speed_sum
abs
sub #1600
blz yg2_speed
lacc _speed_sum
blz neg_limit_speed
lacc #1600
sacl _speed_sum
b yg2_speed
neg_limit_speed:
splk #-1600,_speed_sum
yg2_speed:
lacc _speed_sum
;b pip3
and #07h
add _speed_pi_error1
sacl _speed_pi_error1
sub #8
blz pip3
sacl _speed_pi_error1
lacc _speed_sum
rpt #2
sfr
add #1
add _current_given
sacl _current_given
b speed_pi_d
pip3:
lacc _speed_sum
rpt #2
sfr
add _current_given
sacl _current_given
speed_pi_d:
lacc _speed_err
sub _speed_err_old
sacl _pi_temp
lt _pi_temp
mpy _speed_kd
spm 3
pac
sfr
sfr
add _current_given
sacl _current_given
speed_pi_limit:
lacc _current_given
abs
sub #200
BLZ speed_over
lacc _current_given
blz neg_u_limit
lacc #200
sacl _current_given
B speed_over
neg_u_limit:
SPLK #-200,_current_given
speed_over:
lacc _speed_err
sacl _speed_err_old
speed_over_1:
lacc _t2_sum
add _t2_add
sacl _t2_sum
lacc _thet
add _t2_add
sacl _thet
lacc _thet
abs
sub #4096
blz init
lacc _thet
blz neg_limit_thet
lacc _thet
sub #4096
sacl _thet
b init
neg_limit_thet:
add #4096
sacl _thet
; .endif ;speed loop over
;================================================================
init:
;================================================================
; .if iq_requlator ;iq电流调节
;================================================================
;setc SXM
;b u_park
current_pi_p:
;ldpk _current_given
lacc _current_given
sub _isq
sacl _current_iq_err
lt _current_iq_err
mpy _current_kp
spm 3
pac
sfr
sfr
sacl _current_uqref
current_pi_i:
mpy _current_ki
;b Buck_aa
spm 0
pac
and #07ffh
add _current_pi_error
sacl _current_pi_error
sub #2048
blz Buck_aa
sacl _current_pi_error
spm 3
pac
sfr
sfr
sfr
sfr
sfr
add #1
add _current_iq_sum
sacl _current_iq_sum
b pi_onit1
Buck_aa:
spm 3
pac
sfr
sfr
sfr
sfr
sfr
add _current_iq_sum
sacl _current_iq_sum
pi_onit1:
lacc _current_iq_sum
abs
sub #3200
blz yg1
lacc _current_iq_sum
blz no_neg
splk #3200,_current_iq_sum
b yg1
no_neg:
splk #-3200,_current_iq_sum
yg1:
lacc _current_iq_sum
;b Buck_bb
and #07h
add _current_pi_error1
sacl _current_pi_error1
sub #8
blz Buck_bb
sacl _current_pi_error1
lacc _current_iq_sum
rpt #2
sfr
add #1
add _current_uqref
sacl _current_uqref
b current_pi_d
Buck_bb:
lacc _current_iq_sum
rpt #2
sfr
add _current_uqref
sacl _current_uqref
current_pi_d:
lacc _current_iq_err
sub _current_iq_err_old
sacl _pi_temp
lt _pi_temp
mpy _current_kd
spm 3
pac
sfr
sfr
add _current_uqref
sacl _current_uqref
Buck_pi_limit:
lacc _current_uqref
abs
sub #400
BLZ Buck_pwm_over ;限幅值
lacc _current_uqref
blz Buck_u_limit
SPLK #400,_current_uqref
B Buck_pwm_over
Buck_u_limit:
SPLK #-400,_current_uqref
Buck_pwm_over:
lacc _current_iq_err
sacl _current_iq_err_old
; .endif ;q轴电流调节结束
;---------------------------------------------------------------------
;=====================================================
; .if id_requlator ;d轴电流调节
;=====================================================
current_pi_id_p:
; b u_park
;ldpk _isd
lacc #0
sub _isd
sacl _current_id_err
lt _current_id_err
mpy _current_kp
spm 3
pac
sfr
sfr
sacl _current_udref
current_pi_id_i:
mpy _current_ki
;b Buck_cc
spm 0
pac
and #07ffh
add _current_pi_error2
sacl _current_pi_error2
sub #2048
blz Buck_cc
sacl _current_pi_error2
spm 3
pac
sfr
sfr
sfr
sfr
sfr
add #1
add _current_id_sum
sacl _current_id_sum
b pi_onit2
Buck_cc:
spm 3
pac
sfr
sfr
sfr
sfr
sfr
add _current_id_sum
sacl _current_id_sum
pi_onit2:
lacc _current_id_sum
abs
sub #3200
blz yg2
lacc _current_id_sum
blz no_neg_id
splk #3200,_current_id_sum
b yg2
no_neg_id:
splk #-3200,_current_id_sum
yg2:
lacc _current_id_sum
;b Buck_dd
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -