网站公告列表

  没有公告

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

;--------------------------------------准备磁定位-------------------------------------------------------------

         LDP       #0

         LACC      COMP                ;装载比较初值

         LDP       #0E8H               ;反相驱动

         SPLK      #03FDH,ACTRA        ;PWM1低有效,PWM6低电平,其它高电平

         SACL      CMPR1               ;A相入,C相出,B相不通电

         SPLK      #0000H,CMPR2

         SPLK      #0000H,CMPR3

;--------------------------------------等待磁定位结束------------------------------------------------------

MAGSTALL

         LDP       #0

         LACC      STALL               ;检测磁定位是否结束

         BCND      MAGSTALL,EQ         ;没结束继续等待

;--------------------------------------磁定位结束换相----------------------------------------------------

         LACC      COMP

         LDP       #0E8H .

         SPLK      #03DFH,ACTRA         ;PWM3低有效,PWM6低电平,其它高电平

         SACL      CMPR2               ;B相入,C相出,A不通电

         SPLK      #0000H,CMPR3

         SPLK      #0000H,CMPR1

         LDP       #0

         SPLK      #4,CAPT             ;CAPT初值

;--------------------------------------主循环-----------------------------------------------------------------

LOOP

         LDP       #0

         LACC      FLAGCUR             ;检测是否更新比较值

         BCND      LOOP,EQ             ;不更新跳转

         SPLK      #0,FLAGCUR          ;更新,清标志

         CALL      SEQUENCE            ;调用更新子程序

         B         LOOP                ;等待下次更新

;--------------------------------------假中断处理-------------------------------------------------------------

PHANTOM  

         CLRC     INTM

         RET

;--------------------------------------更新比较值或换相子程序-----------------------------------------

SEQUENCE

         LDP       #0

         LACC      TIME               ;每转时间计数器

         ADD       #1

         SACL      TIME

         LACC      CAPT                ;换相控制字

         ADD       #CAPT_DETER         ;加起始地址

         BACC

CAPT_DETER

         B         RISING1             ;相当于H1上升沿

         B         FALLING3            ;相当于H3下降沿

         B         RISING2             ;相当于H2上升沿

         B         FALLING1            ;相当于H1下降沿

         B         RISING3             ;相当于H3上升沿

FALLING2                               ;相当于H2下降沿

         LACC      COMP

         LDP       #0E8H

         SPLK      #0D3FH,ACTRA         ;PWM5低有效,PWM4低电平,其它高电平

         SACL      CMPR3               ;C相入,B相出,A相不通电

         SPLK      #0000H,CMPR2

         SPLK      #0000H,CMPR1

         LDP       #0                  ;延时过滤干扰

         LACC     ASYM                 ;延时计数器

         ADD       #1                  ;1

         SACL     ASYM

         SUB       #10                 ;检测是否到计数值

         BCND      END,LEQ             ;没到,退出

         SPLK      #10,ASYM            ;计数值已到,测量感应电动势过零点

         LACC      FLAG                ;感应电动势符号变化?

         BCND      END,NEQ             ;变了,退出

         LACC      V1,1                ;没变,检测.V12

         ADD       V1                  ;ACC=3*(BEMFA + NEUTRAL)

         SUB       NEUTRAL             ;ACC=3*BEMFA

         BCND      END,LT              ;<0符号没变,退出

         SPLK      #1,FLAG             ;否则符号改变,置过零标志

         LACC      BCOUNT

         SACL      B2COUNT             ;更新延迟时间

         B         END                 ;退出

RISING3

         LACC      COMP

         LDP       #0E8H

         SPLK      #0DF3H,ACTRA         ;PWM5低有效,PWM2低电平,其它高电平

         SACL      CMPR3               ;C相入, A相出, B相不通电

         SPLK      #0000H,CMPR2

         SPLK      #0000H,CMPR1

         LDP       #0                  ;延时过滤干扰

         LACC      ASYM                ;延时计数器

         ADD       #1                  ;1

         SACL      ASYM

         SUB       #10                 ;检测是否到计数值

         BCND      END,LEQ             ;没到,退出

         SPLK       #10,ASYM           ;计数值已到,测量感应电动势过零点

         LDP        #0

         LACC      FLAG                ;感应电动势符号变化?

         BCND      END,NEQ             ;变了,退出

         LACC      V2,1                ;没变,检测.V22

         ADD       V2                  ;ACC=3*(BEMFB + NEUTRAL)

         SUB       NEUTRAL             ;ACC=3*BEMFB

         BCND      END,GEQ             ;0符号没变,退出

         SPLK      #1,FLAG             ;否则符号改变,置过零标志

         LACC      BCOUNT

         SACL      B2COUNT             ;更新延迟时间

         B         END                 ;退出

FALLING3

         LACC      COMP

         LDP       #0E8H

         SPLK      #03FDH,ACTRA         ;PWM1低有效,PWM6低电平,其它高电平

         SACL      CMPR1               ; A相入, C相出, B相不通电

         SPLK      #0000H,CMPR2

         SPLK      #0000H,CMPR3

         LDP       #0                  ;延时过滤干扰

         LACC      ASYM                ;延时计数器

         ADD       #1                  ;1

         SACL      ASYM

         SUB       #10                 ;检测是否到计数值

         BCND      END,LEQ             ;没到,退出

         SPLK      #10,ASYM            ;计数值已到,测量感应电动势过零点

         LDP       #0

         LACC      FLAG                ;感应电动势符号变化?

         BCND      END,NEQ             ;变了,退出

         LACC      V2,1                ;没变,检测.V22

         ADD       V2                  ;ACC=3*(BEMFB + NEUTRAL)

         SUB       NEUTRAL             ;ACC=3*BEMFB

         BCND      END,LT              ;<0符号没变,退出

         SPLK      #1,FLAG             ;否则符号改变,置过零标志

         LACC      BCOUNT

         SACL      B2COUNT             ;更新延迟时间

         B         END                 ;退出

RISING2

         LACC      COMP

         LDP       #0E8H

         SPLK      #03DFH,ACTRA         ;PWM3低有效,PWM6低电平,其它高电平

         SACL      CMPR2               ;B相入, C相出, A相不通电

         SPLK      #0000H,CMPR3

         SPLK      #0000H,CMPR1

         LDP       #0                  ;延时过滤干扰

         LACC      ASYM                ;延时计数器

         ADD       #1                  ;1

         SACL      ASYM

         SUB       #10                 ;检测是否到计数值

         BCND      END,LEQ             ;没到,退出

         SPLK      #10,ASYM            ;计数值已到,测量感应电动势过零点

         LDP       #0

         LACC      FLAG                ;感应电动势符号变化?

         BCND      END,NEQ             ;变了,退出

         LACC      V1,1                ;没变,检测.V12

         ADD       V1                  ;ACC=3*(BEMFA + NEUTRAL)

         SUB       NEUTRAL             ;ACC=3*BEMFA

         BCND      END,GEQ             ;0符号没变,退出

         SPLK      #1,FLAG             ;否则符号改变,置过零标志

         LACC      BCOUNT

         SACL      B2COUNT             ;更新延迟时间

         B         END                 ;退出

RISING1

         LACC      COMP

         LDP       #0E8H

         SPLK      #0F3DH,ACTRA         ;PWM1低有效,PWM4低电平,其它高电平

         SACL      CMPR1               ;A相入, B相出, C相不通电

         SPLK      #0000H,CMPR2

         SPLK      #0000H,CMPR3

         LDP       #0                   ;延时过滤干扰

         LACC      ASYM               ;延时计数器

         ADD       #1                  ;1

         SACL      ASYM

         SUB       #10                 ;检测是否到计数值

         BCND      END,LEQ             ;没到,退出

         SPLK      #10,ASYM            ;计数值已到,测量感应电动势过零点

         LDP       #0

         LACC      FLAG                ;感应电动势符号变化?

         BCND      END,NEQ             ;变了,退出

         LACC      V3,1                ;没变,检测.V32

         ADD       V3                  ;ACC=3*(BEMFC + NEUTRAL)

         SUB       NEUTRAL             ;ACC=3*BEMFC

         BCND      END,GEQ             ;0符号没变,退出

         SPLK      #1,FLAG             ;否则符号改变,置过零标志

         LACC      BCOUNT

         SACL      B2COUNT             ;更新延迟时间

         B         END                 ;退出

FALLING1

         LACC      COMP

         LDP       #0E8H

         SPLK      #0FD3H,ACTRA         ;PWM3低有效,PWM2低电平,其它高电平

         SACL      CMPR2               ; B相入, A相出, C相不通电

         SPLK      #0000H,CMPR3

         SPLK      #0000H,CMPR1

         LDP       #0                  ;延时过滤干扰

         LACC      ASYM                ;延时计数器

         ADD       #1                  ;1

         SACL      ASYM

         SUB       #10                 ;检测是否到计数值

         BCND      END,LEQ             ;没到,退出

         SPLK      #10,ASYM            ;计数值已到,测量感应电动势过零点

         LDP       #0

         SPLK      #0,FLAGUP           ;转过一机械转,置标志

         LACC      FLAG                ;感应电动势符号变化?

         BCND      END,NEQ             ;变了,退出

         LACC      V3,1                ;没变,检测.V32

         ADD       V3                  ;ACC=3*(BEMFC + NEUTRAL)

         SUB       NEUTRAL             ;ACC=3*BEMFC

         BCND      END,LT              ;<0符号没变,退出

         SPLK      #1,FLAG             ;否则符号改变,置过零标志

         LACC      BCOUNT

         SACL      B2COUNT             ;更新延迟时间