📄 newscope.asm
字号:
;===========================================================================
; ******* 感应电机V/F控制例程 *******
; 清华大学电机工程与应用电子技术系
; 2000年8月
;===========================================================================
;定标:
;电流定标=实际值*2^10
;电压定标=实际值*2^5
;===========================================================================
;包含头文件
.include f240.h
.include NewMacro.h
.include table.h
.include NewISR.h
;===========================================================================
;常量定义
;---------------------------------------------------------------------------
;F240初始化所用常量
PWMPRD .set 1000 ;PWM Period=2*1000 ->
;Tsample=2*1000*50ns=100us (50ns resolution)
DEADTIME .set 0dFFH ;0DFFh=DEAD TIME 5US
;---------------------------------------------------------------------------
;V/F控制所用常量
ia_OFFSET_K .set 9343-78 ;U相电流零漂对应的转换结果(已包含2.5伏偏移)
ib_OFFSET_K .set 9343-65 ;W相电流零漂对应的转换结果(已包含2.5伏偏移)
;---------------------------------------------------------------------------
;坐标变换常数
SQRT3by2 .set 0ddbh ;SQRT(3)/2 4.12 format
SQRT3inv .set 093dh ;1/sqrt(3) 4.12 format
;---------------------------------------------------------------------------
;保护的阈值
VDCMAX_K .set 700*32 ;直流母线电压保护的门限=700*2^5
;---------------------------------------------------------------------------
;码盘速度检测所用常量
QEP_num .set 100 ;多少个PWM周期读一次码盘计数器
;---------------------------------------------------------------------------
;其它常量
RPT_NUM .equ 022bH ;用于延时子程序
MSEC .equ 022cH ;用于延时子程序
;===========================================================================
;变量定义 DP=4,(200H-27FH)128个单元
; DP=5,(280H-2FFH)128个单元
;中断环境保护堆栈全用B2的32个单元,DP=0,(60H-7FH)
;---------------------------------------------------------------------------
TEMP .equ 0200H ;temporary variable (to use in ISR only)
TEMP1 .equ 0201h ;temporary variable
WSGR_tmp .equ 0202H ;仅用于WSGR的设置
RunFlag .equ 0203H ;运行标志,1为运行,0为停机
FailFlag .equ 0204H ;故障标志
;1-过流故障标志
;2-直流母线过压标志
;3-IPM的FO标志
RunEnable .equ 0205H ;允许允许的标志
ia .equ 0207H ;U相电流的A/D转换结果
ib .equ 0208H ;V相电流的A/D转换结果
ic .equ 0209H ;W相电流的A/D转换结果
vcap .equ 020AH ;三电平电容电压A/D转换结果
f .equ 020BH ;频率,18对应50Hz
t1 .equ 020ch ;SVPWM T1 (see SV PWM references for details)
t2 .equ 020dh ;SVPWM T2 (see SV PWM references for details)
Vref1 .equ 020eh ;扇区计算变量
Vref2 .equ 020fh ;扇区计算变量
Vref3 .equ 0210h ;扇区计算变量
vdc .equ 0211h ;直流母线电压减去2个管压降
taon .equ 0212h ;PWM commutation instant phase 1
tbon .equ 0213h ;PWM commutation instant phase 2
tcon .equ 0214h ;PWM commutation instant phase 3
fobj .equ 0215H ;目标频率
TDEC .equ 0216H
TINC .equ 0217H
Vsalfa_ref .equ 0218h ;alfa-axis 参考电压
Vsbeta_ref .equ 0219h ;beta-axis 参考电压
Vsd_ref .equ 021ah ;d-axis 参考电压
Vsq_ref .equ 021bh ;q-axis 参考电压
X .equ 021ch ;SVPWM 变量
Y .equ 021dh ;SVPWM 变量
Z .equ 021eh ;SVPWM 变量
sector .equ 021fh ;SVPWM 扇区
Angle .equ 0220h ;改进型电压模型中转子磁通位置
SinAngle .equ 0221h ;改进型电压模型中正弦转子磁通位置,4。12
CosAngle .equ 0222h ;改进型电压模型中正弦转子磁通位置,4。12
TEMP2 .equ 0225h ;临时变量
VDCinvT .equ 0227h ;VDCinv*(T/2) (used in SVPWM)
IncDecCounter .equ 022eH ;加减速处理计数器
temp3 .equ 0239H ;用于CLARK变换中的临时变量
isalfa .equ 023aH
isbeta .equ 023bH
kia .equ 0248h
kib .equ 0249h
kvdc .equ 024ah
n .equ 024fh
;直极变换所用的变量
;码盘程序所用的变量
QEPCNT .equ 0258h
spdQEP .equ 0259h
lia .equ 025ah
lib .equ 025bh
lvdc .equ 025ch
;===========================================================================
.def _c_int0
.SECT ".VECTORS"
RSVECT B _c_int0
INT1 B XINT1FO ;IPM的FO保护
INT2 B GISR2 ;GISR2包括TIMER1和PDPINT
INT3 B PHANTOM ;INTERRUPT LEVEL 3
INT4 B PHANTOM ;INTERRUPT LEVEL 4
INT5 B PHANTOM ;INTERRUPT LEVEL 5
INT6 B PHANTOM ;INTERRUPT LEVEL 6
RESERVED B PHANTOM ;RESERVED
SW_INT8 B PHANTOM ;USER S/W INTERRUPT
SW_INT9 B PHANTOM ;USER S/W INTERRUPT
SW_INT10 B PHANTOM ;USER S/W INTERRUPT
SW_INT11 B PHANTOM ;USER S/W INTERRUPT
SW_INT12 B PHANTOM ;USER S/W INTERRUPT
SW_INT13 B PHANTOM ;USER S/W INTERRUPT
SW_INT14 B PHANTOM ;USER S/W INTERRUPT
SW_INT15 B PHANTOM ;USER S/W INTERRUPT
SW_INT16 B PHANTOM ;USER S/W INTERRUPT
TRAP B PHANTOM ;TRAP VECTOR
NMINT B PHANTOM ;NON-MASKABLE INTERRUPT
EMU_TRAP B PHANTOM ;EMULATOR TRAP
SW_INT20 B PHANTOM ;USER S/W INTERRUPT
SW_INT21 B PHANTOM ;USER S/W INTERRUPT
SW_INT22 B PHANTOM ;USER S/W INTERRUPT
SW_INT23 B PHANTOM ;USER S/W INTERRUPT
;===========================================================================
.text
;======================================================================
;F240初始化模块开始
;--------------------------------------------------------------------
;初始化ST0,ST1,IMR,IFR
;--------------------------------------------------------------------
_c_int0:
LDP #00H ;0000H-007FH
SETC INTM ;DISABLE INTERRUPTS
splk #0000H,IMR ;MASK ALL CORE INTERRUPTS
LACC IFR ;READ INTERRUPT FLAGS
SACL IFR ;CLEAR ALL INTERRUPT FLAGS
CLRC SXM ;SUPPRESSES SIGN EXTENSION
CLRC OVM ;RESET OVERFLOW MODE
CLRC CNF ;CONFIG BLOCK B0 TO DATA MEM
SPM 0 ;SUPPRESSES SHIFT ACTION
;---------------------------------------------------------------------
; SET UP CLOCK AND PLL
;---------------------------------------------------------------------
INICLOCKPLL: LDP #0E0H ;7000H-707FH
splk #00BBh,CKCR1 ;CLKIN(OSC)=10MHz,CPUCLK=20MHz
splk #00C3h,CKCR0 ;CLKMD=PLL Enable,SYSCLK=CPUCLK/2
splk #4000H,SYSCR ;0100 0000 0000 0000
;CLKOUT PIN =Digital I/O mode
LDP #00E0h ;DP for addresses 7000h-707Fh
lacc SYSSR
and #69FFh ;and 0110100111111111, clear 15,12,10,9
sacl SYSSR ;可靠的初始化,清非法故障标志
;---------------------------------------------------------------------
; DISABLE WATCHDOG AND SET WAIT STATE GENERATOR
;---------------------------------------------------------------------
LDP #00E0h ;DP for addresses 7000h-707Fh
INIRTICR splk #0007H, RTICR ;DISABLE RTI
INIWDCR splk #006FH,WDCNTR
splk #05555H,WDKEY
splk #0AAAAH,WDKEY
splk #006FH,WDCNTR
splk #006Fh, WDCR ;Disable WD if VCCP=5V
;Overflow TIME=1s
KICK_DOG ;Reset Watchdog
LDP #4 ;200H-027FH
splk #4H,WSGR_tmp ;地址信号不可见状态
;SET WAIT STATE GENERATOR FOR:
INIWSGR OUT WSGR_tmp,WSGR ;PROGRAM SPACE, 0 WAIT STATES
;DATA SPACE, 0 WAIT STATES
;I/O SPACE, 1 WAIT STATES
;---------------------------------------------------------------------------
;定时器的初始化
;---------------------------------------------------------------------------
zac
ldp #0E8H
sacl GPTCON ;gptcon=0
sacl T1CNT
sacl T1CMPR
sacl T1PR
sacl T1CON
sacl T2CNT
sacl T2CMPR
sacl T2PR
sacl T2CON
sacl T3CNT
sacl T3CMPR
sacl T3PR
sacl T3CON
sacl COMCON
sacl ACTR
sacl SACTR
sacl DBTCON
sacl CMPR1
sacl CMPR2
sacl CMPR3
sacl SCMPR1
sacl SCMPR2
sacl SCMPR3
sacl CAPCON
sacl CAPFIFO
sacl CAP1FIFO
sacl CAP2FIFO
sacl CAP3FIFO
sacl CAP4FIFO
splk #1010101B,GPTCON;允许三个定时器比较输出,ACTIVE LOW
INIDBTCON splk #DEADTIME, DBTCON
splk #999H,ACTR ;PWM compare actionsn,no space vector
splk #0,CMPR1
splk #0,CMPR2
splk #0,CMPR3
splk #0207h,COMCON ;FIRST enable PWM operation
splk #8207h,COMCON ;THEN enable Compare operation
splk #PWMPRD,T1PR ;Set T1 period(#pwmprd)
splk #0,T1CNT
splk #02802h,T1CON
splk #02802h,T1CON ;Enable Timer 1
splk #1010100011000011B,T2CON
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
;---------------------------------------------------------------------------
;I/O引脚的初始化
;注意:用户程序务必参照此段初始化程序
;DP=0E1H
;PADATDIR.0(IOPA0)=CS(93C46)
;PADATDIR.1(IOPA1)=CLK(93C46)
;PADATDIR.2(IOPA2)=UNCLOCK
;PADATDIR.3(IOPA3)=/DISDRIVE
;PBDATDIR.5(IOPB5)=BRAKE
;PBDATDIR.6(IOPB6)=FAN
;PBDATDIR.7(IOPB7)=SHORT
;PCDATDIR.0(IOPC0)=FAI(Y2)
;PCDATDIR.1(IOPC1)=RUN(Y1)
;PCDATDIR.2(IOPC2)=DO(93C46)
;PCDATDIR.3(IOPC3)=DI(93C46)
;PCDATDIR.6(IOPC6)=ALARM
;PCDATDIR.7(IOPC7)=FDT(Y3)
INIIOPIN: LDP #0E1H ;7080H-70FFH
INIOCRA splk #0001111100000000B,OCRA
INIOCRB splk #00111100B,OCRB
INIPADATDIR splk #0000111100000000B,PADATDIR
INIPBDATDIR splk #1110000000000000B,PBDATDIR
INIPCDATDIR splk #1100101100000000B,PCDATDIR
LDP #0E0H ;7000H-707FH
ININMI splk #0014H,NMI ;0000 0001 0000 0100B
;NMI,上升沿触发
INIXINT1 splk #0005H,XINT1 ;0000 0000 0000 0101B
;XINT1上升沿触发,HIGH优先级
INIXINT2 splk #0000H,XINT2 ;作为输入
INIXINT3 splk #0000H,XINT3 ;作为输入
;--------------------------------------------------------------------------
;SCI的初始化
;--------------------------------------------------------------------------
;充电继电器操作
;---------------------------------------------------------------------------
STOP
LDP #4 ;延时500毫秒
LACC #5000
SACL MSEC
CALL MS_DELAY
SHT SHORT ;短接软启动电阻
RUN ;允许PWM输出
;-------------------------------------------------------------------------------
; A/D INITIALIZATION
;-------------------------------------------------------------------------------
INIAD: LDP #0E0H
INIADCTRL2 splk #0004H, ADCTRL2 ;CONVERSION TIME 7.2US
ADCINIFIFO1 LACL ADCFIFO1
LACL ADCFIFO1
INIADCFIFO2 LACL ADCFIFO2
LACL ADCFIFO2
;---------------------------------------------------------------------
; EV INITIALIZATION STARTS HERE.
;---------------------------------------------------------------------
INIEV: LDP #0E8H ;DP =>EV REGISTERS,7400H-747FH
INIEVIMRA splk #00000H,EVIMRA ;MASK ALL GROUP A INTERRUPT FLAGS
INIEVIMRB splk #00000H,EVIMRB ;MASK ALL GROUP B INTERRUPT FLAGS
INIEVIMRC splk #00000H,EVIMRC ;MASK ALL GROUP C INTERRUPT FLAGS
INIEVIFRA splk #0FFFFH,EVIFRA ;CLEAR ALL GROUP A INTERRUPT FLAGS
INIEVIFRB splk #0FFFFH,EVIFRB ;CLEAR ALL GROUP B INTERRUPT FLAGS
INIEVIFRC splk #0FFFFH,EVIFRC ;CLEAR ALL GROUP C INTERRUPT FLAGS
INIEVIVRA LACC EVIVRA
INIEVIVRB LACC EVIVRB
INIEVIVRC LACC EVIVRC
;================================================================================
;控制变量的初始化
;--------------------------------------------------------------------------------
;V/F控制所用变量初始化
LDP #4
ZAC
SACL Angle
splk #1,f ;起动频率=50/18Hz
splk #10,fobj
splk #0,IncDecCounter ;加减速处理计数器
splk #10000,TDEC ;加速时间,意义:1对应从0到50赫兹的时间是0.32秒
splk #10000,TINC ;减速时间,意义:1对应从0到50赫兹的时间是0.32秒
splk #0,FailFlag
SPLK #1,RunFlag
splk #1,RunEnable
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -