网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C2000 >> 文章正文
  SVPWM,死区补偿,有电压电流AD输入,与scope通信         ★★★ 【字体:
SVPWM,死区补偿,有电压电流AD输入,与scope通信
作者:61IC    文章来源:本站原创    点击数:    更新时间:2007-1-23    

;================================================================
;编译开关
scope_Enable .set 1  ;如名
Tc_short .set 1  ;1-小采样周期(约120us),0-大采样周期(约700us)
SVPWM_load .set 0  ;SVPWM中是否load CMPRx
immediate .set 0  ;死区补偿是否立即载入,0-中末,1-立即
ENSCMP  .set 0  ;SCMP是否发同样的脉冲
DEADCON  .set 1  ;是否进行死区补偿
;*********************************************************************
;       文件名:  lsvpwm.ASM
;     目标系统:  F240主控板
;     功能描述:   SVPWM,死区补偿,有电压电流AD输入,与scope通信
;       版本号:  1.1
; 最新调整时间:  2003.6.15
;*************************头文件*************************************
  .INCLUDE F240.h
  .INCLUDE constdef.h
  .INCLUDE   Macro.h
  .INCLUDE  ScopeREF.h
  .INCLUDE varinit.h
  .INCLUDE vardef.h
  .INCLUDE mathtb.h

;**********************定标及公式声明********************************

;**********************常数声明**************************************

;***********************变量定义*************************************
 variable_def

;***********************向量地址声明***************************************

  .SECT ".VECTORS"
RSVECT  B    START
INT1  B    IPM_FAIL ;IPM的FO保护 
INT2   B    GISR2 ;GISR2包括TIMER1和PDPINT
INT3  B    PHANTOM ;INTERRUPT LEVEL 3
INT4    B    PHANTOM ;INTERRUPT LEVEL 4
INT5    B    SERIAL ;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-----------------------------
START:  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
;------------------------设置CLOCK与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           ;可靠的初始化,清非法故障标志      
;------------------------关看门狗和设置等待周期------------------------
  LDP #0E0H
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 (JP5 IN POS. 2-3)
                                  ;Overflow TIME=1s
  KICK_DOG   ;RESET WATCHDOG
                LDP     #4
                SPLK   #4H,TEMP                ;SET WAIT STATE GENERATOR FOR:
  OUT    TEMP,WSGR          ;PROGRAM SPACE, 0 WAIT STATES
      ;DATA SPACE, 0 WAIT STATES
                                                ;I/O SPACE, 1 WAIT STATES
;----------------------I/O引脚的初始化---------------------------------
;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)
  NOP
  NOP
  NOP
  NOP
  NOP
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            ;作为输入
;-----------------------EV中断初始化-------------------------------------------
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 
;------------------------A/D 初始化------------------------------------------
INIAD:  LDP #0E0H
INIADCTRL2      splk    #0004H, ADCTRL2  ;CONVERSION TIME 7.2US
ADCINIFIFO1 LACL ADCFIFO1
  LACL ADCFIFO1
INIADCFIFO2 LACL ADCFIFO2
  LACL ADCFIFO2
;-----------------------------------SCI的初始化-------------------------------
;注意:用户程序务必参照此段初始化程序

SCI_INIT: LDP #00E0h
  splk #0017h, SCICCR  ;1 stop bit,disable parity,8 char bits,
     ;async mode, idle–line protocol
  splk #0013h, SCICTL1 ;Enable TX, RX, internal SCICLK,
     ;Disable RX ERR, SLEEP, TXWAKE
  splk #0003, SCICTL2 ;disable RX INT,enable TX INT
  splk #0000h, SCIHBAUD
  splk #000ah, SCILBAUD ;Baud Rate=115200 b/s (10 MHz SYSCLK)
  ;splk #0040h, SCILBAUD ;Baud Rate=19200 b/s (10 MHz SYSCLK)
  splk #0022h, SCIPC2 ;Enable TXD & RXD pins
  splk #0033h, SCICTL1 ;Relinquish SCI from Reset.
  splk #0060H,SCIPRI ;RX,TX皆为LOW 优先级
                         
;=========================PWM中断初始化===============================================
;--------------------------清零-------------------------------------------------------
  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
  LACC #Sample_PRD
                SACL T1PR              ;微秒,采样周期
  SPLK #0, T1CNT
                SPLK    #0, T2CNT
  SPLK  #1, T1CMPR
                SPLK    #1, T2CMPR
                ;SPLK    #0666H, ACTR            ;禁止 SPACE VECTOR PWM,高有效
                 ;0000 0110 0110 0110
                ;SPLK    #0666H, ACTR            ;ACTR IS DOUBLE BUFFERED
                splk  #0999H,ACTR   ;PWM compare actionsn,no space vector
          ;0000 1001 1001 1001
                           ;6,4,2,high  5,3,1,low
                ;SPLK #002AH,SACTR            ;简单比较单元高有效
                 ;0000 0000 0010 1010  
                splk #002Ah,SACTR  ;X,Y,Z,active high
                 ;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 
;---------------------------------------------------------------------

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    TMS320LF2407上实现快速傅里…
    基于TMS320LF2407的馈线终端…
    TMS320LF2407控制GTG-128324…
    基于DSP的电动汽车CAN总线通…
    TMS320LF2407的将BCD码转换成…
    基于TMS320LF2407的LCD的驱动…
    TMS320LF2407与D/A转换器的接…
    TMS320LF2407与MCG12864A8-3…
    TMS320LF2407与CAN驱动接口电…
    TMS320LF2407与TCS232接口电…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号