📄 newmacro.h
字号:
;==========================================================
;所用宏
;----------------------------------------------------------
STOP: .MACRO ;停机模块
LDP #0E1H ;7080H-70FFH
LACL PADATDIR
AND #1111111111110111B
SACL PADATDIR ;PADATDIR.3(IOPA3)=/DISDRIVE(DP=0E1H)
LDP #0E8H
LACL COMCON
AND #1111110111111111B
SACL COMCON ;禁止PWM输出
LDP #0E8H
SPLK #0,CMPR1
SPLK #0,CMPR2
LDP #4 ;200H-027FH
SPLK #0,RunFlag
.ENDM
;--------------------------------------------------------------------
RUN: .MACRO ;运行宏
LDP #4 ;200H-027FH
SPLK #1,RunFlag
;IOPA3 output 0
LDP #0E1H ;7080H-70FFH
LACL PADATDIR ;;PADATDIR.3(IOPA3)=/DISDRIVE(DP=0E1H)
OR #1000B
SACL PADATDIR ;;PADATDIR.3(IOPA3)=/DISDRIVE(DP=0E1H)
LDP #0E1H ;7080H-70FFH
LACC #1111111111111011B
AND PADATDIR
SACL PADATDIR ;PADATDIR.2(IOPA2)=UNCLOCK
LACC #100B
OR PADATDIR
SACL PADATDIR ;将UNLOCK置低再置高
LDP #0E8H
LACL COMCON
OR #1000000000B
SACL COMCON ;允许PWM输出
.ENDM
;----------------------------------------------------------
ALARM: .MACRO ;ALARM模块
LDP #0E1H ;7080H-70FFH
LACL PCDATDIR ;PCDATDIR.6(IOPC6)=ALARM
OR #1000000B
SACL PCDATDIR ;PCDATDIR.6(IOPC6)=ALARM
.ENDM
;-----------------------------------------------------------------------
DISALARM: .MACRO ;DISALARM模块
LDP #0E1H ;7080H-70FFH
LACL PCDATDIR ;PCDATDIR.6(IOPC6)=ALARM
AND #1111111110111111B
SACL PCDATDIR ;PCDATDIR.6(IOPC6)=ALARM
.ENDM
;------------------------------------------------------------------------
SHORT: .MACRO ;short the start resistance,IOPB7 OUTPUT 1
LDP #0E1H
LACC PBDATDIR
OR #80H ;PBDATDIR.7(IOPB7)
SACL PBDATDIR
.ENDM
;-----------------------------------------------------------------------
DISSHORT: .MACRO
LDP #0E1H
LACC PBDATDIR
AND #0FF7FH ;;PBDATDIR.7(IOPB7)
SACL PBDATDIR
.ENDM
;========================================================================
Y1ON .MACRO
LDP #0E1H
LACC PCDATDIR
OR #10B ;PCDATDIR.1(IOPC1)=RUN(Y1)
SACL PCDATDIR
.ENDM
Y1OFF .MACRO
LDP #0E1H
LACC PCDATDIR
AND #1111111111111101B ;PCDATDIR.1(IOPC1)=RUN(Y1)
SACL PCDATDIR
.ENDM
Y2ON .MACRO
LDP #0E1H
LACC PCDATDIR
OR #1B ;PCDATDIR.0(IOPC0)=FAI(Y2)
SACL PCDATDIR
.ENDM
Y2OFF .MACRO
LDP #0E1H
LACC PCDATDIR
AND #1111111111111110B ;PCDATDIR.0(IOPC0)=FAI(Y2)
SACL PCDATDIR
.ENDM
Y3ON .MACRO
LDP #0E1H
LACC PCDATDIR
OR #10000000B ;PCDATDIR.7(IOPC7)=FDT(Y3)
SACL PCDATDIR
.ENDM
Y3OFF .MACRO
LDP #0E1H
LACC PCDATDIR
AND #1111111101111111B ;PCDATDIR.7(IOPC7)=FDT(Y3)
SACL PCDATDIR
.ENDM
;========================================================================
SVPWM .MACRO
;------------------------------------------------------------------
;空间矢量模块(七段式)
;(Vsalfa_ref,Vsbeta_ref,vdc)--->(SVPWM发出)
;------------------------------------------------------------------
;专用变量: Vref1,Vref2,Vref3,vdcinvt,X,Y,Z,sector,
; t1,t2,taon,tbon,tcon(都不需要赋初值)
;临时变量:TEMP,
;引用常量:SQRT3by2,PWMPRD
;------------------------------------------------------------------
; 3/2变换
; Vref1 = vSbe_ref
; Vref2 = (-vSbe_ref + sqrt(3) * vSal_ref) / 2
; Vref3 = (-vSbe_ref - sqrt(3) * vSal_ref) / 2
;------------------------------------------------------------------
ldp #4
lt Vsalfa_ref
mpy #SQRT3by2
pac
sub Vsbeta_ref,11
sach Vref2,4 ;4.12 format
pac
neg ;取负
sub Vsbeta_ref,11
sach Vref3,4 ;4.12 format
lacl Vsbeta_ref
sacl Vref1
;------------------------------------------------------------------
;计算vdcinvt(scale=2^4)
;vdc(scale=2^5)
;vdcinvt=1000*(537.4*2^5)*2^4/vdc=10667000H/vdc
;------------------------------------------------------------------
CHANGE1 lacc #1066H,15
sfl ;1000*(537.4*2^5)*2^4*2^6=10667000H
or #7000H ;当Vdc=537.4时输出380V线电压
RPT #15
SUBC vdc
sacl VDCinvT
;------------------------------------------------------------------
;计算X,Y,Z(包含vdc反馈)
;------------------------------------------------------------------
LT VDCinvT ;(scale=2^4)
mpy Vref1 ;(scale=2^12)
pac
sach X
mpy Vref3
pac
neg
sach Y
mpy Vref2
pac
neg
sach Z
;------------------------------------------------------------------
;60 degrees sector determination
;------------------------------------------------------------------
setc sxm
zac
bit Vref1,BIT15
bcnd Vref1_neg,TC ;If Vref1<0 do not set bit 1 of sector
or #1
Vref1_neg
bit Vref2,BIT15
bcnd Vref2_neg,TC ;If Vref2<0 do not set bit 2 of sector
or #2
Vref2_neg
bit Vref3,BIT15
bcnd Vref3_neg,TC ;If Vref3<0 do not set bit 3 of sector
or #4
Vref3_neg sacl sector
;------------------------------------------------------------------
;t1 and t2 calculation depending on the sector number
;------------------------------------------------------------------
lacc sector,1
add #(bsector-2)
bacc
bsector b sector1
b sector2
b sector3
b sector4
b sector5
b sector6
sector1 lacc Z
sacl t1
lacc Y
sacl t2
b t1t2out
sector2 Lacc Y
sacl t1
lacc X
neg
sacl t2
b t1t2out
sector3 lacc Z
neg
sacl t1
lacc X
sacl t2
b t1t2out
sector4 lacc X
neg
sacl t1
lacc Z
sacl t2
b t1t2out
sector5 lacc X
sacl t1
lacc Y
neg
sacl t2
b t1t2out
sector6 lacc Y
neg
sacl t1
lacc Z
neg
sacl t2
t1t2out nop
;------------------------------------------------------------------
;END t1 and t2 calculation
;------------------------------------------------------------------
lacc t1 ;if t1+t2>PWMPRD we have to saturate
add t2
sacl TEMP
sub #PWMPRD
bcnd nosaturation,LEQ
saturation lacc #PWMPRD,15 ;divide PWMPRD by (t1+t2)
rpt #15
subc TEMP
sacl TEMP
lt TEMP
mpy t1 ;t1 (saturated)=t1*(PWMPRD/(t1+t2))
pac
sach t1,1
mpy t2 ;t2 (saturated)=t2*(PWMPRD/(t1+t2))
pac
sach t2,1
nosaturation nop
;------------------------------------------------------------------
;taon,tbon and tcon calculation
ldp #4
lacc #PWMPRD ;calculate the commutation
;instants taon, tbon and tcon
sub t1 ;of the 3 PWM channels
sub t2 ;taon=(PWMPRD-t1-t2)/2
sfr
sacl taon
add t1 ;tbon=taon+t1
sacl tbon
add t2 ;tcon=tbon+t2
sacl tcon
;------------------------------------------------------------------
;sector switching
lacc sector,1
add #(bpush-2)
bacc
bpush b push1
b push2
b push3
b push4
b push5
b push6
push1 lacc tbon
ldp #0E8H
sacl CMPR1
ldp #4
lacc taon
ldp #0e8h
sacl CMPR2
ldp #4
lacc tcon
ldp #0e8h
sacl CMPR3
B ChangeAngle
push2 lacc taon
ldp #0E8H
sacl CMPR1
ldp #4
lacc tcon
ldp #0e8h
sacl CMPR2
ldp #4
lacc tbon
ldp #0e8h
sacl CMPR3
b ChangeAngle
push3 lacc taon
ldp #0E8H
sacl CMPR1
ldp #4
lacc tbon
ldp #0e8h
sacl CMPR2
ldp #4
lacc tcon
ldp #0e8h
sacl CMPR3
b ChangeAngle
push4 lacc tcon
ldp #0E8H
sacl CMPR1
ldp #4
lacc tbon
ldp #0e8h
sacl CMPR2
ldp #4
lacc taon
ldp #0e8h
sacl CMPR3
b ChangeAngle
push5 lacc tcon
ldp #0E8H
sacl CMPR1
ldp #4
lacc taon
ldp #0e8h
sacl CMPR2
ldp #4
lacc tbon
ldp #0e8h
sacl CMPR3
b ChangeAngle
push6 lacc tbon
ldp #0E8H
sacl CMPR1
ldp #4
lacc tcon
ldp #0e8h
sacl CMPR2
ldp #4
lacc taon
ldp #0e8h
sacl CMPR3
b ChangeAngle
.ENDM
;=================================================================
SinCosAngle .MACRO
;------------------------------------------------------------------
;(Angle)--->(CosAngle,SinAngle)
;------------------------------------------------------------------
ldp #4
LACL Angle ;磁通角度扇区
sub #900
BCND QUADRANT1,LT
sub #900
BCND QUADRANT2,LT
sub #900
BCND QUADRANT3,LT
sub #900
BCND QUADRANT4,LT
QUADRANT1 LACL Angle
ADD #SINCOSTAB
TBLR SinAngle
LACC #900
SUB Angle
ADD #SINCOSTAB
TBLR CosAngle
B SinCosCalEnd
QUADRANT2 LACC #1800
sub Angle
ADD #SINCOSTAB
TBLR SinAngle
LACC Angle
SUB #900
ADD #SINCOSTAB
TBLR CosAngle
lacc CosAngle
neg
sacl CosAngle
B SinCosCalEnd
QUADRANT3 LACC Angle
sub #1800
ADD #SINCOSTAB
TBLR SinAngle
lacc SinAngle
neg
sacl SinAngle
LACC #2700
SUB Angle
ADD #SINCOSTAB
TBLR CosAngle
lacc CosAngle
neg
sacl CosAngle
B SinCosCalEnd
QUADRANT4 LACC #3600
sub Angle
ADD #SINCOSTAB
TBLR SinAngle
lacc SinAngle
neg
sacl SinAngle
LACC Angle
SUB #2700
ADD #SINCOSTAB
TBLR CosAngle
B SinCosCalEnd
SinCosCalEnd nop
.ENDM
;=============================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -