网站公告列表

  没有公告

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

         .INCLUDE "240x.H"

;--------------------------------------以下定义变量----------------------------------------------------

         .DATA

         .BSS ADDRESS,1              ;换相处理程序地址

         .BSS GPR0,1                  ;当前通电相标志(1,2,3,4---A,B,C,D)

         .BSS GPR2,1                  ;转向标志,1(CW),0(CCW)

         .BSS GPR3,1                  ;换相标志,1(不允许),0(允许)

         .BSS CMD,1                   ;电流参考值

         .BSS CMDAC,1                ;A/C相电流参考值

         .BSS CMDBD,1                ;B/D相电流参考值

         .BSS MAX,1                   ;最小占空比(0%)比较值

         .BSS MIN,1                    ;最大占空比(100%)比较值

         .BSS COMAC,1                ;A/C相比较值

         .BSS COMBD,1                ;B/D相比较值

         .BSS CURRAC,1               ;A/C相电流检测值

         .BSS CURRBD,1               ;B/D相电流检测值

         .BSS NUM,1                   ;电流修正值

         .BSS TMP,1                   ;临时变量

         .BSS STACK,6                 ;软堆栈初始地址

;--------------------------------------定义主向量段------------------------------------------------------

         .SECT  ".VECTORS"           ;定义主向量段

         RESET  B  START            ;地址0000H,复位,优先级1

          INT1   B  PHANTOM        ;地址0002HINT1,优先级4

          INT2   B  T1PERIOD_ISR    ;地址0004HINT2,优先级5

          INT3   B  T2PERIOD_ISR    ;地址0006HINT3,优先级6

          INT4   B  PHANTOM        ;地址0008HINT4,优先级7

          INT5   B  PHANTOM        ;地址000AHINT5,优先级8

          INT6   B  PHANTOM        ;地址000CHINT6,优先级9

     RESERVED  B  PHANTOM          ;地址000EH,测试,优先级10

      SW_INT8   B  PHANTOM         ;地址0010H,自定义软中断

      SW_INT9   B  PHANTOM         ;地址0012H,自定义软中断

      SW_INT10  B  PHANTOM         ;地址0014H,自定义软中断

      SW_INT11  B  PHANTOM         ;地址0016H,自定义软中断

      SW_INT12  B  PHANTOM         ;地址0018H,自定义软中断

      SW_INT13  B  PHANTOM         ;地址001AH,自定义软中断

      SW_INT14  B  PHANTOM         ;地址001CH,自定义软中断

      SW_INT15  B  PHANTOM         ;地址001EH,自定义软中断

      SW_INT16  B  PHANTOM         ;地址0020H,自定义软中断

       TRAP        B  PHANTOM          ;地址0022HTRAP矢量

NMI       B  PHANTOM          ;地址0024HNMI,优先级3

      EMU_TRAP B  PHANTOM          ;地址0026H,仿真Trap,优先级2

      SW_INT20  B  PHANTOM         ;地址0028H,自定义软中断

      SW_INT21  B  PHANTOM         ;地址002AH,自定义软中断

      SW_INT22  B  PHANTOM         ;地址002CH,自定义软中断

      SW_INT23  B  PHANTOM         ;地址002EH,自定义软中断

      SW_INT24  B  PHANTOM         ;地址0030H,自定义软中断

      SW_INT25  B  PHANTOM         ;地址0032H,自定义软中断

      SW_INT26  B  PHANTOM         ;地址0034H,自定义软中断

      SW_INT27  B  PHANTOM         ;地址0036H,自定义软中断

      SW_INT28  B  PHANTOM         ;地址0038H,自定义软中断

      SW_INT29  B  PHANTOM         ;地址003AH,自定义软中断

      SW_INT30  B  PHANTOM         ;地址003CH,自定义软中断

      SW_INT31  B  PHANTOM         ;地址003EH,自定义软中断

;--------------------------------------以下是主程序------------------------------------------------------

        .TEXT

;--------------------------------------系统初始化程序--------------------------------------------------

START

         SETC      INTM              ; 屏蔽中断

         LDP       #0E0H

         SPLK      #0068H, WDCR      ;不用看门狗

         SPLK      #0284H, SCSR1      ;CLKIN=10MHz,CLKOUT=20MHz

;--------------------------------------中断初始化程序--------------------------------------------------

         LDP       #0  

         SPLK      #0FFH,IFR           ;清所有系统中断标志

         SPLK      #00000110B,IMR     ;INT2, INT3中断

         LDP       #0E8H       

         LACC      EVAIFRA           ;清事件管理器A所有中断标志

         SACL      EVAIFRA

         LACC      EVAIFRB

         SACL      EVAIFRB

         LACC      EVAIFRC

         SACL      EVAIFRC

         SPLK      #0,EVAIMRA         ;屏蔽所有中断

         SPLK      #0,EVAIMRB

         SPLK      #0,EVAIMRC

;--------------------------------------初始化转子位置为A-------------------------------------------

         CALL     START2              ;调用初始化转子位置子程序

;--------------------------------------ADC初始化-----------------------------------------------------

         LDP        #0E1H

         SPLK       #0900H,ADCTRL1     ;ADC预分频10,1MHZ

         SPLK       #0001H,MAXCONV    ;两个通道

         SPLK       #0010H,CHSELSEQ1   ;选择ADCIN0ADCIN1通道

         LACC      MCRA

         OR         #0FD8H              ;设置PWM1-6,QEP1-2

         SACL      MCRA

;--------------------------------------初始化事件管理器A程序--------------------------------------

         LDP       #0E8H

         SPLK      #0000H,ACTRA        ;引脚PWM1-6强制低

         SPLK      #0,CMPR1             ;占空比初值为100%

         SPLK      #0,CMPR2

         SPLK      #0,CMPR3

         SPLK      #8200H,COMCONA    ;定时器下溢比较器重载,允许比较

         SPLK      #0800,T1PR           ;周期寄存器值800(25kHzPWM)

         SPLK      #0,T1CNT

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

         SPLK      #9872H,T2CON        ;定向增减,允许编码接口

         SPLK      #0803BH, T2PR        ;T2周期寄存器(7FFFH+60)

         SPLK      #07FC3H, T2CMPR     ;T2比较寄存器(7FFFH-60)

         SPLK      #07FFFH, T2CNT      ;编码器计数器初值

;--------------------------------------开中断----------------------------------------------------------------

         LDP       #0E8H       

         LACC      EVAIFRA           ;清事件管理器A所有中断标志

         SACL      EVAIFRA

         LACC      EVAIFRB

         SACL      EVAIFRB

         LACC      EVAIFRC

         SACL      EVAIFRC

         SPLK      #0080H,EVAIMRA    ;T1周期中断

         SPLK      #0003H,EVAIMRB    ;T2周期中断和比较中断

         SPLK      #0,EVAIMRC

         LAR       AR1,#STACK        ;软堆栈指针

         CLRC     INTM               ;开中断

;--------------------------------------变量初始化----------------------------------------------------------

         LDP       #0H

         LACC      #0                

         SACL      CMD               ;电流参考初值(通过速度环求得)

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

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

         LACC      #10

         SACL      NUM               ;电流修正值

         LDP       #0E8H

         LACC      T1PR

         LDP       #0

         SACL      MAX               ;MAX =T1PR,占空比=0%

         LACC      #00

         SACL      MIN                ;MIN = 0,占空比=100%

         LACC      MIN

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

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

         LACC      #0

         SACL      CURRAC            ;A/C相电流=0

         SACL      CURRBD            ;B/D相电流=0

         LACC      GPR2               ;转向,由用户外部输入

         SUB        #1

         BCND      X3, EQ             ;正转(CW)则跳转

         LACC      #4                  ;反转(CCW)

         SACL      GPR0               ;当前换相是D

         B          XX

X3       LACC      #2                 ;正转(CW)

         SACL      GPR0               ;当前换相是B

XX      LACC      #1

         SACL      GPR3               ;禁止换相

;--------------------------------------初始化结束----------------------------------------------------------

 

;--------------------------------------用户可添加包括转速和转向输入的应用程序------------

WAIT     B         WAIT              ;

;--------------------------------------主模块结束----------------------------------------------------------

 

;--------------------------------------假中断处理子程序--------------------------------------------------

PHANTOM  

         CLRC     INTM

         RET

;--------------------------------------T1周期中断处理子程序-----------------------------------------

T1PERIOD_ISR

         MAR      *,AR1               ;保存现场

         MAR      *+   

         SST       #1, *+               ;保存ST1

         SST       #0, *                ;保存ST0

         LDP       #0E0H

         LACC     PIVR                 ;清中断标志

         LDP       #0E8H

         SPLK      #0FFFH,EVAIFRA

;--------------------------------------检测是否换相------------------------------------------------

         LDP       #0

         LACC     GPR3

         SUB       #1

         BCND     NOCOM, EQ          ;不换相则跳转

;--------------------------------------转向识别,调整当前换相标志-----------------------------------

         LACC     GPR2                ;换相

         SUB       #1

         BCND     FORWARD, EQ        ;正转则跳转

REVERSE                                ;反转(CCW)

         LACC     GPR0                ;调整当前换相标志

         SUB       #1

         SACL      GPR0

         BCND      X1, EQ              ;GPR0=0跳转

         B          GOOUT

X1       LACC      #4                  ;修改GPR0=4

         SACL      GPR0

         B          GOOUT

FORWARD                               ;(CW)

         LACC      GPR2               ;检查转向是否改变

         SUB        #0

         BCND      REVERSE, EQ       ;如果转向改变则跳转

         LACC      GPR0               ;调整当前换相标志

         ADD       #1

         SACL      GPR0

         SUB       #5

         BCND     X2, EQ              ;GPR0>5跳转

         B         GOOUT

X2       LACC      #1                  ;修改GPR0=1

         SACL      GPR0

GOOUT

         LACC       #1

         SACL       GPR3               ;修改换相标志为不换相

;--------------------------------------调用电流检测子程序---------------------------------------------

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

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