📄 lsvpwm.asm
字号:
;0000 0000 0010 1010
SPLK #002AH,SACTR ;
;SPLK #0000H, DBTCON ;no DEAD TIME
;SPLK 50EFH,DBTCON ;8us
;SPLK 46EFH,DBTCON ;7us
;SPLK 3CEFH,DBTCON ;6us
;SPLK 32EFH,DBTCON ;5us
;SPLK 28EFH,DBTCON ;4us
SPLK 1EEFH,DBTCON ;3us
;SPLK 1CEFH,DBTCON ;2.8us;
SPLK #0, CMPR1 ;
SPLK #0, CMPR2 ;
SPLK #0, CMPR3 ;
SPLK #0, SCMPR1 ;
SPLK #0, SCMPR2 ;
SPLK #0, SCMPR3 ;再一次清零
splk #0,T1CNT ;T1计数器初值
SPLK #0307H, COMCON ;COMCON NEED TO BE WRITTEN TWICE
;splk #0272fh,COMCON ;FIRST enable PWM operation(EN SCMP)
SPLK #8307H, COMCON ;FOR PROPER OPERATION
;splk #0a72fh,COMCON ;THEN enable Compare operation(EN SCMP)
SPLK #2802H,T1CON ;CONTINUOUS UP/DOWN COUNT MODE
;0010 1000 0000 0010
SPLK #2802H,T1CON ;CONTINUOUS UP COUNT MODE
splk #0010100011000011B,T2CON;使用T1,忽略本身
lacc T1CON
or #40h
sacl T1CON ;(T1CON)=02842H
sacl T1CON ;(T1CON)=02842H
splk #1110001011110000b,CAPCON ;用timer3定时
splk #0,T3CNT
splk #0ffffh,T3PR
splk 0001100001110000B,T3CON
SPLK #0201H, EVIMRA
LACC EVIVRA
SPLK #0H, EVIMRB
LACC EVIVRB
;=================================================================
;变量的初始化
variable_init
;=================================================================
;-----------------------------------------------------------------
;充电继电器操作
;-----------------------------------------------------------------
STOP
ms_delay 500,TEMP ;延时500毫秒
SHT SHORT ;短接软启动电阻
RUN ;允许PWM输出
;=================================================================
;---------------------------scope 初始化--------------------------
LDP #0
splk #0,FailFlag
SPLK #1,RunFlag
splk #1,RunEnable
LAR AR1,#60H ;栈底
setc OVM
setc sxm ;sign extension mode
;=================================================================
;示波器初始化
.if (scope_Enable==1)
call ScopeInitNoLoop
.endif
;---------------------------------
; ENABLE USED INTERRUPT
;-------------------------------------------------------------------
LDP #0E8H
splk #1H, EVIMRB
splk #0201H, EVIMRA ;ENABAL T1 UNDERFLAW 和PDPINT
LDP #00H
splk #13H, IMR ;ENABLE TIMER1 INTERRUPT(INT2)
;和XINT1(INT1),SCITX(INT5)
CLRC INTM ;开中断
LAR AR7,#8000H
;==================================================================
MENU NOP
;---------------------------------------------------------------------
.if (scope_Enable==1)
call ModifyOnline
call MultiSingle_online
.endif
;---------------------------------------------------------------------
B MENU
;**************************************************************************
;**********TIMER1中断服务程序,计算下一TIMER1周期发的矢量及其时间**************** *
;**************************************************************************
TIMER1:
LDP #0
SETC SXM
;***************************************************************************
;main strategy and AD input *
;***************************************************************************
;========================线电压采样模块=====================================
LDP #ADCTRL1/128
splk #1011100100110111B, ADCTRL1 ;启动VDC,VCAP的采样
ReadVdcVcap
;========================立即触发电流采样模块=============================
LDP #ADCTRL1/128
splk #1011100100100101B, ADCTRL1 ;启动电流采样
ReadCurrent
;========================VVVF及SVPWM模块====================================
wincdec w_opn,w_opn_l,w_opn_obj,5,tinc,tdec,TC,TC_sh,TEMP1
iwdt w_opn,5,agl_opn,agl_opn_l,TC,TC_sh,TEMP
sincos agl_opn,agl_opn_l,sin_opn,cos_opn,TEMP,TEMP1,TEMP2,TEMP3,TEMP4
vvvf w_opn,wn,vsd,vsq,vn,TEMP1
dq_ab vsd,vsq,sin_opn,cos_opn,VSAL_REF,VSBE_REF
SVPWM
.if (DEADCON==1)
indb IA,IB,IC
.endif
;===========================================================================
.if (scope_Enable==1)
call SaveToBuffer ;数据存入缓存
.endif
Clock_S01 S01,S01_K,Clock
;环境恢复返回主程序
LDP #232
LACC EVIFRA
SACL EVIFRA
Restore1
CLRC INTM
RET
;==================TIMER1 OVER===================================================
; I S R - PHANTOM
; DESCRIPTION: DUMMY ISR, USED TO TRAP SPURIOUS INTERRUPTS.
; MODIFIES: NOTHING
; LAST UPDATE: 16 JUNE 95
;=====================================================================
PHANTOM KICK_DOG ;RESETS WD COUNTER
B PHANTOM
;=====================================================================
;IPM故障中断服务程序
;=======================================================================
IPM_FAIL: MAR *,AR1
MAR *+
SST #1,*+
SST #0, *+
SACH *+
SACL *
STOP
ALARM
LDP #4
SPLK #5,FailFlag
;------------------------------------------------------------------
MAR *,AR1
LACL *-
ADDH *-
LST #0, *-
LST #1, *-
CLRC INTM
RET
;======================================================================
;INT2中断服务程序,包括TIMER1和过流(PDPINT)两个中断
;======================================================================
GISR2: Store1
;----------------------------------------------------------------------
LDP #EVIVRA/128 ;
LACC EVIVRA ;读中断向量寄存器
SUB #29H ;29H代表T1UFINT
BCND TIM,EQ ;EVIMRA=0201H:只有T1UFINT和PDPINT被允许,所以非彼即此
B IFPDP
TIM
B TIMER1 ;如果是TIMER1中断,转入TIMER1中断服务程序
IFPDP
ADD #29H
SUB #20H
BCND PDP,EQ
B GISR2_OUT
;如果是过流则封锁IPM驱动信号
PDP
STOP ;
ALARM
LDP #FailFlag/128
SPLK #1,FailFlag
GISR2_OUT
LDP #EVIFRA/128
LACC EVIFRA ;
SACL EVIFRA ;清中断标志位
Restore1
CLRC INTM
RET
;===============================================================================
SERIAL: Store3
ldp #IMR/128
SBIT0 IMR,B4_MSK ;在ScopeTX使SCI中断禁止
CLRC INTM ;开中断
LDP #SYSIVR/128
LACl SYSIVR
SUB #6
BCND RXINT,EQ
B TXINT
;---------------------------------------------------------------------
RXINT call ScopeRX
b SERIAL_end
;---------------------------------------------------------------------
TXINT call ScopeTX
;---------------------------------------------------------------------
SERIAL_end SETC INTM
ldp #IMR/128
SBIT1 IMR,B4_MSK ;SCI中断使能
Restore3
CLRC INTM ;开中断
RET
;---------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -