📄 aci31_x1.asm
字号:
.if (phase1_commissioning)
LDP #target_value
BLDD #speed_setpt, target_value
CALL RAMP_CNTL
LDP #target_value
LT setpt_value
POINT_B0
MPY rpm_scaler
PAC
SACH freq_in,5
LDP #vhz_freq
BLDD #freq_in, vhz_freq
CALL V_Hz_PROFILE
LDP #sv_gain
BLDD #v_out, sv_gain
BLDD #vhz_freq, sv_freq
CALL SVGEN_MF
CALL Line2line
.endif
;---------------------------------------------------------
;---------------------------------------------------------
;Check PWM o/ps have Space vector shape with RC filter
;Check ACI spins open loop with Inverter connected
.if (phase2_commissioning)
LDP #target_value
BLDD #speed_setpt, target_value
CALL RAMP_CNTL
LDP #target_value
LT setpt_value
POINT_B0
MPY rpm_scaler
PAC
SACH freq_in,5
LDP #vhz_freq
BLDD #freq_in, vhz_freq
CALL V_Hz_PROFILE
LDP #sv_gain
BLDD #vhz_freq, sv_freq
BLDD #v_out, sv_gain
CALL SVGEN_MF
POINT_B0
LACC direction
SUB #1
BCND CW, EQ
CCW LDP #Mfunc_c1
BLDD #Ta, Mfunc_c1
BLDD #Tb, Mfunc_c2
BLDD #Tc, Mfunc_c3
B PWMDRV
CW LDP #Mfunc_c1
BLDD #Ta, Mfunc_c1
BLDD #Tb, Mfunc_c3
BLDD #Tc, Mfunc_c2
PWMDRV CALL FC_PWM_O_DRV
CALL Line2line
.endif
;---------------------------------------------------------
.if (phase3_commissioning)
;---------------------------------------------------------
;Start open loop & ramp to a pre-set speed
;Close loop by "switching" PI controller into feedback loop
;This phase need to be optimized
LDP #target_value
BLDD #speed_setpt, target_value
CALL RAMP_CNTL
POINT_B0
LACC closed_loop_flag ; get flag
BCND SKIP_PID,EQ
; if closed loop flag ==0 then do open loop.
DO_PID:
;---------------------------------------------------------
;---------------------------------------------------------
;Use RPM scaled speed command to run PID_controller
;---------------------------------------------------------
LDP #D_fb
BLDD #BC_OUT, D_fb
BLDD #setpt_value, D_ref
CALL D_PID_REG
B CLOSED_LOOP
SKIP_PID LDP #D_fb
BLDD #setpt_value, D_out
BLDD #speed_setpt, D_ref
BLDD #speed_rpm, D_fb
CLOSED_LOOP:
;---------------------------------------------------------
; convert to Q15 from rpm scaling.
LDP #D_out
lt D_out ;input speed command (in RPM)
POINT_B0
mpy rpm_scaler
pac
sach freq_in,5 ;Q15 x Q11 = Q26 --> Q15
LDP #vhz_freq
BLDD #freq_in, vhz_freq
CALL V_Hz_PROFILE
LDP #sv_gain
BLDD #v_out, sv_gain
BLDD #vhz_freq, sv_freq
CALL SVGEN_MF
POINT_B0
LACC direction
SUB #1
BCND CW, EQ
CCW LDP #Mfunc_c1
BLDD #Ta, Mfunc_c1
BLDD #Tb, Mfunc_c2
BLDD #Tc, Mfunc_c3
B PWMGEN
CW LDP #Mfunc_c1
BLDD #Ta, Mfunc_c1
BLDD #Tb, Mfunc_c3
BLDD #Tc, Mfunc_c2
PWMGEN CALL FC_PWM_O_DRV
;Check for Capture event from Hall sensor
POINT_EV
BIT IFRC, BIT0 ;Check CAP flag for edge transition on CAP3 pin
BCND SKIP_SPEED4, NTC ;If no edge present skip speed routine
LACC FIFO1 ;Else fetch "Time-stamp" & proceed with Speed meas.
;****************************************************************************************
LDP #time_stamp
SACL time_stamp
LACC speed_rpm
POINT_B0
SACL speed_rpm_old
CALL SPEED_PRD
POINT_EV
SPLK #0FFFFh, IFRC ;Clear all CAP flags
LDP #speed_rpm
lacc speed_rpm,16
LDP #BC_IN
SACH BC_IN
SPLK #0100H,GPR4
LDP #speed_rpm
LACC speed_rpm,16
LDP #speed_setpt
SUB speed_setpt,16
SETC SXM
ABS
SUB GPR4,16
BCND SKIP_SPEED4,GT
CALL BC_CALC
;****************************************************************************************
SKIP_SPEED4 NOP
POINT_B0
.endif
;---------------------------------------------------------
; Testing of Box Car subroutine erase after testing
CALL BC_CALC
;House keeping & debug prior to ISR exit.
;-----------------------------------------
CALL DATA_LOG
;=========================================================
;End main section of ISR
;=========================================================
;Context restore regs
END_ISR:
POINT_PG0
MAR *, AR1 ;make stack pointer active
LACL *- ;Restore Acc low
ADDH *- ;Restore Acc high
LST #0, *- ;load ST0
LST #1, *- ;load ST1
EINT
RET
;==============================================================================
; Subroutine - Line2Line
; Description: This subroutine calculates line to line voltages
; from line to neutral voltage
; Van - Phase A line to neutral voltage
; Vbn - Phase B line to neutral voltage
; Vcn - Phase C line to neutral voltage
; Vab = Van-Vbn Line to line voltage between phases A & B
; Vbc = Vbn-Vcn Line to line voltage between phases B & C
; Vca = Vcn-Van Line to line voltage between phases C & A
;===============================================================================
Line2line
POINT_B0
BLDD #Ta, Van
BLDD #Tb, Vbn
BLDD #Tc, Vcn
SPLK #3FFFh, HALF
SPLK #8001h, MINUS_ONE
LT HALF
MPY Van
PAC
SACH Van,1
MPY Vbn
PAC
SACH Vbn,1
MPY Vcn
PAC
SACH Vcn,1
LT MINUS_ONE
LACC Van
SUB Vbn
SACL Vab
LACC Vbn
SUB Vcn
SACL Vbc
LACC Vcn
SUB Van
SACL Vca
RET
;==============================================================================
; I S R - PHANTOM
;
; Description: Dummy ISR, used to trap spurious interrupts.
;
; Modifies:
;
; Last Update: 16-06-95
;==============================================================================
PHANTOM B PHANTOM
PHANTOM1 B PHANTOM1
PHANTOM2 B PHANTOM2
PHANTOM3 B PHANTOM3
PHANTOM4 B PHANTOM4
PHANTOM5 B PHANTOM5
PHANTOM6 B PHANTOM6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -