网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C2000 >> 文章正文
  DSP2407A开发的开关磁阻电机控制程序的源代码(2)         ★★★ 【字体:
DSP2407A开发的开关磁阻电机控制程序的源代码(2)
作者:61IC    文章来源:本站原创    点击数:    更新时间:2007-1-16    

NOCOM

         CALL       DATAINT

;--------------------------------------电流调节-----------------------------------------------------------

         LACC       #SECTOR_TABLE    ;表头地址

         ADD        GPR0               ;加偏移量

         TBLR       ADDRESS           ;查表

         LACC       ADDRESS           ;取跳转地址

         BACC                           ;跳转

PHASE_00

         LACC       #0DEADH           ;干扰陷阱

         B           PPP                ;退出

;--------------------------------------A-----------------------------------------------------------------

PHASE_A                                ;A相电流调整

         LACC       CMDAC             ;A/C相电流参考值

         SUB        CURRAC             ;与测量值比较

         BCND       DEC_A, LT           ;测量值大于参考值则跳转

         LACC       COMAC             ;否则小于参考值

         SUB        NUM                ;减修正值,使占空比增加

         SACL       COMAC             ;保存新比较值

         LACC       MIN                ;检测是否超出上限

         SUB        COMAC

         BCND      SET_A, GEQ          ;超过则跳转

         B          GOON_A             ;没超过则退出

DEC_A                                    ;测量值大于参考值

         LACC      COMAC

         ADD       NUM                 ;加修正值,使占空比减小

         SACL      COMAC               ;保存新比较值

         LACC      MAX                 ;检测是否超出下限

         SUB       COMAC

         BCND      GOON_A, GEQ        ;没超过则退出

         LACC      MAX                 ;超出

         SACL      COMAC               ;比较值等于下限(占空比=0%)

         B         GOON_A

SET_A

         LACC      MIN

         SACL      COMAC              ;比较值等于上限(占空比=100%)

GOON_A

         LACC      COMAC

         LDP       #0E8H

         SACL      CMPR1              ;更新A相比较值

         SPLK      #000EH, ACTRA      ;PWM1高有效,PWM2强制高,其它强制低

         LDP       #0

         LACC      MIN

         SACL      COMBD               ;B/D相占空比初值=100%

         LACC      #0

         SACL      CURRBD              ;电流检测值清零

         B         PPP                 ;退出

;--------------------------------------B---------------------------------------------------------------------

PHASE_B                               ;B相电流调整

         LACC      CMDBD            ;B/D相电流参考值

         SUB       CURRBD            ;与测量值比较

         BCND      DEC_B, LT          ;测量值大于参考值则跳转

         LACC      COMBD            ;否则小于参考值

         SUB       NUM               ;减修正值,使占空比增加

         SACL      COMBD             ;保存新比较值

         LACC      MIN                ;检测是否超出上限

         SUB       COMBD

         BCND      SET_B, GEQ         ;超过则跳转

         B         GOON_B             ;没超过则退出

DEC_B                                  ;测量值大于参考值

         LACC      COMBD

         ADD       NUM               ;加修正值,使占空比减小

         SACL      COMBD             ;保存新比较值

         LACC      MAX                ;检测是否超出下限

         SUB       COMBD

         BCND      GOON_B, GEQ       ;没超过则退出

         LACC      MAX                ;超出

         SACL      COMBD              ;比较值等于下限(占空比=0%)

         B         GOON_B

SET_B

         LACC      MIN

         SACL      COMBD              ;比较值等于上限(占空比=100%)

GOON_B

         LACC      COMBD

         LDP       #0E8H

         SACL      CMPR2              ;更新B相比较值

         SPLK      #00E0H, ACTRA       ;PWM3高有效,PWM4强制高,其它强制低

         LDP       #0

         LACC      MIN

         SACL      COMAC              ;A/C相占空比初值=100%

         LACC      #0

         SACL      CURRAC             ;电流检测值清零

         B         PPP                 ;退出

;--------------------------------------C-------------------------------------------------------------------

PHASE_C                                ;C相电流调整

         LACC      CMDAC             ;A/C相电流参考值

         SUB       CURRAC             ;与测量值比较

         BCND      DEC_C, LT           ;测量值大于参考值则跳转

         LACC      COMAC             ;否则小于参考值

         SUB       NUM                ;减修正值,使占空比增加

         SACL      COMAC              ;保存新比较值

         LACC      MIN                 ;检测是否超出上限

         SUB       COMAC

         BCND      SET_C, GEQ          ;超过则跳转

         B         GOON_C              ;没超过则退出

DEC_C                                   ;测量值大于参考值

         LACC      COMAC

         ADD       NUM                 ;加修正值,使占空比减小

         SACL      COMAC              ;保存新比较值

         LACC      MAX                 ;检测是否超出下限

         SUB       COMAC

         BCND      GOON_C, GEQ        ;没超过则退出

         LACC      MAX                 ;超出

         SACL      COMAC               ;比较值等于下限(占空比=0%)

         B         GOON_C

SET_C

         LACC      MIN

         SACL      COMAC              ;比较值等于上限(占空比=100%)

GOON_C

         LACC      COMAC

         LDP       #0E8H

         SACL      CMPR3              ;更新C相比较值;

         SPLK      #020CH, ACTRA      ;PWM5高有效,PWM2强制高,其它强制低

         LDP       #0

         LACC      MIN

         SACL      COMBD             ;B/D相占空比初值=100%

         LACC      #0

         SACL      CURRBD            ;电流检测值清零

         B         PPP                 ;退出

;--------------------------------------D--------------------------------------------------------------

PHASE_D                                ;D相电流调整

         LACC      CMDBD             ;B/D相电流参考值

         SUB       CURRBD            ;与测量值比较

         BCND      DEC_D, LT          ;测量值大于参考值则跳转

         LACC      COMBD             ;否则小于参考值

         SUB       NUM                ;减修正值,使占空比增加

         SACL      COMBD              ;保存新比较值

         LACC      MIN                 ;检测是否超出上限

         SUB       COMBD

         BCND      SET_D, GEQ         ;超过则跳转

         B         GOON_D             ;没超过则退出

DEC_D                                   ;测量值大于参考值

         LACC      COMBD

         ADD       NUM                ;加修正值,使占空比减小

         SACL      COMBD              ;保存新比较值

         LACC      MAX                 ;检测是否超出下限

         SUB       COMBD

         BCND      GOON_D, GEQ       ;没超过则退出

         LACC      MAX                ;超出

         SACL      COMBD              ;比较值等于下限(占空比=0%)

         B         GOON_D

SET_D

         LACC      MIN

         SACL      COMBD              ;比较值等于上限(占空比=100%)

GOON_D 

         LACC      COMBD

         LDP       #0E8H

         SACL     CMPR3               ;更新D相比较值

         SPLK      #08C0H, ACTRA      ;PWM6高有效,PWM4强制高,其它强制低

         LDP       #0

         LACC      MIN

         SACL      COMAC             ;A/C相占空比初值=100%

         LACC      #0

         SACL      CURRAC            ;电流检测值清零

PPP

         MAR      *, AR1               ;恢复现场

         LST       #0, *-                ;恢复ST0

         LST       #1, *-                ;恢复ST1

         CLRC     INTM

         RET

;--------------------------------------电流采样和AD转换子程序--------------------------------------------

DATAINT

         LDP       #0E1H

         SPLK      #2000H,ADCTRL2      ;启动AD转换

CONVERSION

         BIT       ADCTRL2,3             ;将忙状态位复制到TC

         BCND     CONVERSION,TC       ;等待转换结束

         LACC      RESULT0,10           ;A/C相电流转换结果

         LDP       #0

         SACH     CURRAC               ;保存

         LDP       #0E1H

         LACC      RESULT1,10           ;B/D相电流转换结果

         LDP       #0

         SACH     CURRBD               ;保存

         RET

;--------------------------------------T2周期和比较中断处理子程序-------------------------------

T2PERIOD_ISR

         MAR       *,AR1               ;保存现场

         MAR       *+   

         SST       #1, *+               ;保存ST1

         SST       #0, *                ;保存ST0

         LDP       #0E0H

         LACC      PIVR                ;清中断标志

         LDP       #0E8H

         SPLK      #0FH,EVAIFRB

         SPLK      #07FFFh, T2CNT      ;T2编码器计数器赋初值

         LDP       #0

         LACC      #0

         SACL      GPR3               ;允许换相(GPR3=0)

         MAR       *, AR1               ;恢复现场

         LST       #0, *-                ;恢复ST0

         LST       #1, *-                ;恢复ST1

         CLRC      INTM

         RET

;--------------------------------------初始化转子位置子程序-------------------------------------------

START2

         NOP

         LDP       #0E8H

         SPLK      #000EH, ACTRA       ;A相通电

         SPLK      #0CA00H, COMCONA  ;立即比较

         SPLK      #0400, CMPR1         ;占空比=50%

         SPLK      #0,T1CNT

         SPLK      #800,T1PR            ;T1周期寄存器

         SPLK      #9040H,T1CON        ;连续增减计数方式,预分频为1,允许T1

         LDP       #0

         LACC      #0FFFFH            ;准备延时,等待转子到A相对极位置

         SACL      TMP

LOOP

         LACL      TMP

         SUB        #1

         SACL      TMP

         BCND      LOOP, NEQ

         LACC      #0FFFFH            ;再延时

         SACL      TMP

LOOP2

         LACL      TMP

         SUB       #1

         SACL      TMP

         BCND      LOOP2, NEQ

         LDP       #0E8H

         SPLK       #0, ACTRA          ;关闭PWM

         RET

;--------------------------------------换相处理程序地址表-----------------------------------------

SECTOR_TABLE

        .WORD PHASE_00               ;干扰陷阱程序地址

        .WORD PHASE_A                ;换相A相处理程序地址

        .WORD PHASE_B                ;换相B相处理程序地址

        .WORD PHASE_C                ;换相C相处理程序地址

        .WORD PHASE_D                ;换相D相处理程序地址

        .END

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

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    DSP2407A开发的开关磁阻电机…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号