网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C2000 >> 文章正文
  直流电动机双极性可逆双闭环PWM控制程序         ★★★ 【字体:
直流电动机双极性可逆双闭环PWM控制程序
作者:61IC    文章来源:本站原创    点击数:    更新时间:2007-1-17    

.include "240x.h"

    .global _c_int0

;--------------------------------------以下定义变量和常数----------------------------------------------------

          .data

         .bss N_KP,1               ;速度调节比例系数

         .bss N_KI,1                ;速度调节积分系数

         .bss N_KC,1               ;速度调节积分饱和修正系数

         .bss I_KP,1                ;电流调节比例系数

         .bss I_KI,1                ;电流调节积分系数

         .bss I_KC,1                ;电流调节积分饱和修正系数

         .bss I_REF,1               ;电流参考值

         .bss N_REF,1               ;速度参考值

         .bss DIRECTION,1          ;速度方向标志

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

         .bss I_EK,1                ;电流偏差

         .bss I_RK,1                ;电流第K次积分调节累计

         .bss I_U,1                 ;电流调节输出

         .bss I_ELPI,1              ;电流极限偏差

         .bss TMP,1                ;临时变量

         .bss ENCODEROLD,1       ;前一次编码器读数

         .bss ENCINCR,1            ;编码增量

         .bss SPEEDTMP,1           ;编码脉冲累计

         .bss SPEEDSTEP,1          ;速度调节计数器

         .bss KSPEED,1              ;编码脉冲-速度转换系数

         .bss N,1                    ;速度反馈量

         .bss N_EK,1                 ;速度偏差

         .bss N_RK,1                 ;速度第K次积分调节累计

         .bss N_U,1                  ;速度调节输出

         .bss N_ELPI,1               ;速度极限偏差

         .bss I_MIN,1                ;电流最小值

         .bss I_MAX,1               ;电流最大值

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

         .sect "vectors"

RSVECT   B  _c_int0           ;复位

INT1      B  PHANTOM         ;INT1

INT2      B  PHANTOM         ;INT2

INT3      B  PHANTOM         ;INT3

INT4      B  PHANTOM         ;INT4

INT5      B  PHANTOM         ;INT5

INT6      B  ADCINT           ;ADC中断

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

;--------------------------------------初始化程序--------------------------------------------------------------

_c_int0

         SETC      CNF   

         CLRC      OVM                

         SETC      SXM                ;符号扩展

         SETC      INTM                ;关中断

         LAR       AR1,#STACK         ;软堆栈指针

         LDP       #0E0H

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

         SPLK      #0284H,SCSR1        ;10MCLKIN,20MCLKOUT

         LDP       #0E8H

         SPLK      #0FFFFH,T2PR        ;最大周期

         SPLK      #0000H,T2CNT

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

         SPLK      #500,T1PR           ;PWM设置,周期50微秒

         SPLK      #0000H,T1CNT

         SPLK      #0096H,ACTRA        ;PWM1,4高有效,2,3低有效

         SPLK      #01F4H,DBTCONA     ;死区1.6微秒

         SPLK      #250,CMPR1          ;占空比为50%

         SPLK      #250,CMPR2

         SPLK      #8200H,COMCONA   ;允许比较,T1下溢重载

         SPLK      #0840H,T1CON       ;连续增减计数,内部时钟,不分频

         SPLK      #0100H,GPTCONA    ;T1周期中断标志启动AD转换

         LDP       #0E1H

         SPLK      #03D8H, MCRA     ;引脚设置为PWM1-4,QEP1-2

         LDP       #0

         LACC     #020H

         SACL     IMR                  ;允许INT6中断

         LACC     IFR                   ;清标志

         SACL     IFR

         LDP       #0E8H

         LACC      EVAIFRA             ;清标志

         SACL      EVAIFRA

         LACC      EVAIFRB

         SACL      EVAIFRB

         LACC      EVAIFRC

         SACL      EVAIFRC

         SPLK      #0,EVAIMRA

         SPLK      #0,EVAIMRB

         SPLK      #0,EVAIMRC

         LDP       #0E0H                ;AD设置

         SPLK      #0500H,ADCTRL2     ;允许EVA启动AD转换

         SPLK      #0900H,ADCTRL1     ;10分频

         SPLK      #0000H,MAXCONV    ;一个转换通道

         SPLK      #0000H,CHSELSEQ1   ;ADCIN00通道

         CLRC      INTM                ;开总中断

         LDP       #0                    ;变量初始化

         SPLK      #0,I_REF

         SPLK      #0,N_REF

         SPLK      #I_KP,I_KP            ;给电流比例系数赋值,Q12格式

         SPLK      #I_KI,I_KI            ;给电流积分系数赋值,Q12格式

         SPLK      #I_KC,I_KC           ;给电流积分饱和修正系数赋值,Q12格式

         SPLK      #N_KP,N_KP          ;给速度比例系数赋值,Q12格式

         SPLK      #N_KI,N_KI          ;给速度积分系数赋值,Q12格式

         SPLK      #N_KC,N_KC          ;给速度积分饱和系数赋值,Q12格式

         SPLK      #1, DIRECTION       ;正转

         SPLK      #0, I_RK

         SPLK      #0, I_ELPI

         SPLK      #0, ENCODEROLD

         SPLK      #0, SPEEDTMP

         SPLK      #100, SPEEDSTEP     ; 100PWM周期

         SPLK      #1000H, KSPEED      ;编码脉冲-速度转换系数,Q22格式

         SPLK      #0, N_RK

         SPLK      #I_MIN,I_MIN        ;给电流最小值赋值

         SPLK      # I_MAX,I_MAX      ;给电流最大值赋值

;--------------------------------------以下可添加应用程序---------------------------------------------------

LOOP    LDP       #0

         NOP

         NOP

         B          LOOP              ;循环

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

PHANTOM  

         CLRC     INTM

         RET

;--------------------------------------A/D中断处理子程序----------------------------------------------------

ADCINT

         MAR      *,AR1               ;保存现场

         MAR      *+   

         SST       #1, *+               ;保存ST1

         SST       #0, *                ;保存ST0

         LDP      #0E0H

         LACC     PIVR                ;ADC中断标志

         LDP      #0E8H

         LACC     EVAIFRA            ;T1周期中断标志

         SACL     EVAIFRA

         LDP      #0E1H

         LACC     ADCTRL2

         OR       #0202H

         SACL     ADCTRL2

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

         LACC     RESULT0,10         ;ADC转换结果

         LDP       #0

         SUB       I_REF,16            ;减电流参考值,计算电流偏差

         NEG

         SACL      I_EK               ;保存偏差

         LACC      I_RK,12            ;左移12

         LT         I_EK

         MPY       I_KP               ;Q12格式

         APAC 

         SACH      I_U,4               ;相当于右移12

         BIT        I_U,0               ;检测调节器输出的正负

         BCND      UP,NTC            ;如果正,跳转

         LACC      #0                  ;否则是负

         B         LIMITERS

UP

         BIT       DIRECTION,15        ;检测转向

         BCND     CW,TC               ;正转,跳转

         LACC      #500                ;否则反转.检测是否超过上限

         SUB       I_U

         BCND     TOP,LT              ;超过上限进入饱和区则跳转

         LACC     #250                 ;否则检测下限

         SUB       I_U

         BCND     LOW,GT             ;超过下限跳转

         LACC     I_U                  ;否则正常调整

         B         LIMITERS

TOP  

         LACC     #500                 ;ACC =上限值

         B         LIMITERS

LOW

         LACC     #250

         B         LIMITERS

CW      LACC     #250                ;检测是否超过上限

         SUB      I_U

         BCND     CWTOP,LT          ;超过上限跳转

         LACC      I_U                ;否则正常调整

         B          LIMITERS

CWTOP

         LACC      #250                ;ACC=上限值

LIMITERS 

         LDP       #0E8H

         SACL     CMPR2               ;输出,更新占空比

         SACL     CMPR1               ;更新占空比

         LDP       #0

         SUB       I_U

         SACL     I_ELPI               ;求极限偏差

         LT        I_ELPI

         MPY       I_KC                ;Q12格式

         PAC

         LT        I_EK

         MPY       I_KI                ;Q12格式

         APAC 

         ADD       I_RK,12

     SACH       I_RK,4              ;更新

;-----------------------读编码器脉冲数,计算转角增量和转速-----------------------------------------

         LDP        #0E8H

         LACC       T2CNT                ;读编码脉冲

         LDP        #0

         SACL       TMP

         SUB       ENCODEROLD          ;减去前一个周期测的脉冲数

         SACL      ENCINCR              ;得到编码增量

         ADD        SPEEDTMP

         SACL       SPEEDTMP            ;编码脉冲累计

         LACC      TMP                    

         SACL      ENCODEROLD         ;更新ENCODEROLD

         LACC      SPEEDSTEP            ;检测是否该速度调节

         SUB       #1

         SACL      SPEEDSTEP

         BCND      GO,GT                 ;没到,退出

         LT        SPEEDTMP              ;否则计算转速

         MPY       KSPEED               ;Q22格式

         PAC

         SACH     N,6                    ;相当于右移10,Q12格式

         LT        N

         MPY      #3000

         PAC

         SACH     N,4                   ;速度反馈值,Q0格式

         LACC     #0

         SACL     SPEEDTMP             ;SPEEDTMP清零

         SPLK     #100, SPEEDSTEP       ; SPEEDSTEP重新赋初值

;--------------------------------------速度PI调节-----------------------------------------------------------

         LACC     N_REF                ;速度给定值,由外部输入

         SUB       N                    ;减反馈值

         SACL     N_EK                 ;保存偏差

         LACC     N_RK,12               ;左移12

         LT        N_EK

         MPY      N_KP                 ;比例系数,Q12格式

         APAC

         SACH     N_U,4                ;相当于右移12

         LACC     N_U                  ;检测调节器输出是否超限

         SUB       I_MIN               ;与下限比较

         BCND     POS1,GT              ;如果大于则跳转

         LACC      I_MIN               ;否则超过下限

         B         LIM                  ;ACC =下限值

POS1

         LACC     N_U

         SUB       I_MAX               ;与上限比较

         BCND      POS2,GT             ;超过上限则跳转

         LACC      N_U                 ;否则正常调整

         B         LIM

POS2

         LACC      I_MAX               ; ACC =上限值