⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spwm.asm

📁 dsp 2407的三相逆变器汇编源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 
         .include  "LF2407.h"
         .include  "vectors.h"
          .def _c_int0
 ;--------------------------------------以下定义变量-----------------------------------------------------------
              .bss    TEMP,1          ;中间变量                             0280h 
              .BSS    TEMP1,1         ;中间变量                             0281h
              .BSS    TEMP2,1         ;中间变量                             0282H
              .BSS    TEMP3,1         ;中间变量                             0283H
              .BSS    K_,1            ;第K个采样点                          0284H
              .BSS    T_HALF,1        ; T_carr/2的定时器计数脉冲个数,Q0格式 0285H
              .BSS    F_CARR,1        ;载波频率,Q1格式                      0286H
              .BSS    PMIN,1          ;最小正脉宽(脉冲个数),Q0格式          0287H
              .BSS    PMAX,1          ;最小负脉宽(脉冲个数),Q0格式          0288H
              .BSS    N_,1            ;每个调制波周期的载波脉冲数,Q0格式    0289H
              .bss    M_,1            ;调制系数                             028aH
              .bss    softtime_,1     ;软启动时间*0.5s                      028bH 
              .bss    delay,1    ;延时计数器                           028cH
          
                 
;--------------------------------------CONTEXT段,定义保护现场数据区----------------------------
ST0_SAVE  .USECT ".CONTEXT",1   ;状态寄存器ST0保存单元   .USECT 表示为未初始化变量在指定段名的断中保留空间
ST1_SAVE  .USECT ".CONTEXT",1   ;状态寄存器ST1保存单元   用法 变量符号 .usect'
ACCH      .USECT ".EXTCONT",1   ;ACC高字保存单元
ACCL      .USECT ".EXTCONT",1   ;ACC低字保存单元
P_HI      .USECT ".EXTCONT",1   ;P寄存器高字保存单元
P_LO      .USECT ".EXTCONT",1   ;P寄存器低字保存单元
T_SAVE    .USECT ".EXTCONT",1   ;T保存单元
;--------------------------------------以下是主程序-----------------------------------------------------
  .TEXT
;--------------------------------------系统初始化程序--------------------------------------------------
_c_int0       SETC   INTM              ;禁止中断
              CLRC   CNF               ;B0为数据存储区
              clrc   sxm               ;进行符号扩展
              LDP    #224
              SPLK   #0304h,SCSR1      ;2倍频,CLKOUT 40MHz clock in 20Mhz 0(保留位)0(clkout引脚源cpu)00 cpu低功耗 001(2倍频) 0保留位 0ad 0 sci 0 spi 0 can 0 evb 1 eva 0保留位 0 illadr
              SPLK   #68H,WDCR         ;不用看门狗
  
              LDP    #225
              SPLK   #0fc0h,MCRA       ;开放EVA中PWM1~6



;--------------------------------------中断初始化程序------------------------------------------------
  LDP    #0  
  SPLK   #0FFH,IFR          ;清所有系统中断标志  
  SPLK   #00000010B,IMR     ;开INT2中断
  LDP    #232         
  SPLK   #0FFFH,EVAIFRA    ;清事件管理器A所有中断标志
  SPLK   #0FH,EVAIFRB 
  SPLK   #0FH,EVAIFRC 
  SPLK   #0200H,EVAIMRA      ;开T1下溢中断 每个载波(50us)有一次下溢中断,在这个中断中要算出下一个周期中的采样的值
  SPLK   #0,EVAIMRB          ;屏蔽所有中断
  SPLK   #0,EVAIMRC          ;屏蔽所有中断
;--------------------------------------初始化事件管理器A程序-----------------------------------------
  SPLK   #1000,T1PR           ;T1周期值=1000 半个载波周期值
  SPLK   #0,CMPR1         ;占空比初值 0%
  SPLK   #0,CMPR2
  SPLK   #0,CMPR3
  SPLK   #0000100110011001B,ACTRA ;引脚PWM1,3,5高有效,2,4,6低有效11~10位为cmp6 00为强制低 01为低有效 10为高有效 11强制高
  SPLK   #05F4H,DBTCONA     ;死区时间4*32*25ns=3.2μs  0000 0101(m ) 111(全部使能) 101(p=32) 00  p=32 m=1 32*1*50ns=1.6us)
  SPLK   #1000001000000000B,COMCONA ;允许比较,比较寄存器CMPRX重载条件为T1CNT=0(下溢)时重载,动作控制寄存器也是当T1CNT=0时下溢重载
  SPLK   #0000100001000010B,T1CON ;连续增减计数方式,预分频=1
                        
;--------------------------------------变量初始化---------------------------------------------------------
              LDP     #5              ;这么说 K_在第五页
              SPLK    #0,K_           ;K=0     
              SPLK    #1000,T_HALF    ;T_carr/2的定时器计数脉冲个数,Q0格式 
              SPLK    #40000,F_CARR   ;载波频率,Q1格式 
              SPLK    #120,PMIN       ;最小正脉宽(脉冲个数),Q0格式  3us/25ns=120个
              SPLK    #1880,PMAX      ;最小负脉宽时的最大正脉宽,Q0格式  47us/25ns=1880
              SPLK    #400,N_         ;载波比Q0格式
              splk    #64,M_          ;调制比初值为0.125 额定值应为0.8  448 q9格式                                           
              splk    #6,softtime_    ;软启动步进次数7次  64 128 192 256  320 384  448 512   每次加0.125 Q9格式
              splk    #0,TEMP1;
              SPLK    #0,TEMP2;
              SPLK    #0,TEMP3;
              splk    #0ffffh,delay;延时计数器;
;;--------------------------------------开机信号检测-------------------------------------------------------------
              CLRC   INTM                   ;开总中断 随后进入软启动
   
;--------------------------------------软启动-------------------------------------------------------------
                 
softstart  LDP #5                 ;软启动       
            LACL   M_
            ADD    #64
            SACL   M_              ;保存所改变的调制比M_
        ;    LAR    AR1,#0f0H       ;延时2s
         ;   CALL delay_s           ; delay_s 
            nop        
           LDP #5
            lacl  softtime_        ;循环9次把频率加起来
            sub  #1
            sacl  softtime_                 
            bcnd softstart,gt
;--------------------------------------主循环-------------------------------------------------------------
CYCLE         
            B   CYCLE           ;循环等待中断
;--------------------------------------假中断子程序---------------------------------------------------------
PHANTOM    RET                       ;假中断
;--------------------------------------T1下溢中断处理子程序-----------------------------------------
_C_INT2      SST   #0,ST0_SAVE    ;#ST0,ST0_SAVE      ;保存现场ST0
             SST   #1,ST1_SAVE    ;#ST1,ST1_SAVE      ;保存ST1
             LDP   #5 
             SACH  ACCH 
             SACL  ACCL               ;保存ACC
             SPH    P_HI              ;保存p寄存器高位指令
             SPL    P_LO              ;保存 P寄存器低位指令
             MPY    #1                ;P<=T
             SPL    T_SAVE            ;保存 T 
             LDP    #224  
             LACC   PIVR,1            ;读偏移地址LACC   PIVR,1            ;
             ADD    #PVECTORS         ;子向量表首地址
             BACC
WXM         LDP   #232
              SPLK   #0200H,EVAIFRA     ;清中断标志
              LDP #5
              LACC   K_                 ;Q0格式
              SACL   TEMP1              ;保存第1个角度值
              
              LACC   TEMP1 
              ADD    #133               ;加2π/3,Q0格式
              SACL   TEMP2              ;保存第2个角度值
              SUB     #400              ;检测是否小于2π,Q12格式
              BCND   WXM1 ,LEQ          ;小于2π跳转
              SACL    TEMP2             ;否则保存

WXM1          LACC    TEMP1
              ADD     #267              ;加4π/3,Q12格式
              SACL    TEMP3             ;保存第3个角度值
              SUB     #400              ;检测是否小于2π,Q12格式
              BCND   WXM2 ,LEQ          ;小于2π跳转
              SACL    TEMP3             ; 否则保存

WXM2        LACC    #SIN_ENTRY          ;SIN表入口地址
              ADD     TEMP1             ;偏移量
              TBLR    TEMP1             ;保存第1个SIN值,Q14格式有符号数
              setc    sxm
              LT       TEMP1            ;q14格式有符号数
              MPY     M_                ;乘M,Q9格式!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
              PAC                       ;Q23格式
              SACH    TEMP1,7           ;相当于右移9位,Q14格式有符号数
              LACC    TEMP1
              ADD     #1,14             ;加+1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -