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

📄 qep.lst

📁 DSP关于F2407的实例程序
💻 LST
字号:
C:\tic2xx\c2000\cgtools\bin\dspa.exe QEP.asm QEP.obj -gls -v2xx 

TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00  Wed Jun  8 17:23:51 2005
Copyright (c) 1987-1999  Texas Instruments Incorporated 
QEP.asm                                                              PAGE    1

       1            ;=====================================================================
       2            ; File          :       QEP.asm
       3            ; Module Name   :       QEP
       4            ; Initialization Routine        : QEP_INIT
       5            ; Description   :       通过计算QEPA,QEPB,QEPZ得到转子实际转速OmigaR0,和转向QEP_dir。
       6            ;                       当通过原点的时候有正脉冲,通过捕捉功能来产生中断,
       7            ;                       给计数器重新赋初值。
       8            ; OmigaR0 = ( POS0 - POS1 ) / Tpwm,单位(1/mS)变换成可以被其它模块用的形式,OmigaR0=OmigaR0*7FFFH/2pi
       9            ;
      10            ;                        |~~~~~~~~~~~~~~~~~~|
      11            ;  POS0         o------> |                  |
      12            ;  POS1         o------> |      QEP         |----->o  OmigaR0
      13            ;  Tpwm         o------> |                  |----->o  QEP_dir
      14            ;                        |                  |
      15            ;                        |------------------|
      16            ;
      17            ; 编码器为1000线,每360度产生4000个脉冲。每个PWM开关周期进行一次计算。
      18            ; Modify: 2004.6.16
      19            ;=====================================================================
      20                            .include "f2407.h"
      21                            .global QEP,QEP_INIT                    ; function call
      22                            
      23                            .global POS0,POS1                       ; Inputs
      24                            .global OmigaR0,QEP_dir         ; Outputs
      25                            .global TEMP
      26                            .global QEP_C                           ; constant
      27            
      28            ;=====================================================================
      29 0000       QEP_INIT:
      30            ;=====================================================================
      31 0000 bce8                  LDP     #DP_EVA
      32 0001 ae20                  SPLK    #0000H,CAPCONA          ; 使能QEP
         0002 0000  
      33 0003 ae08                  SPLK    #1830H,T2CON            ; 还没有使能timer2。
         0004 1830  
      34 0005 ae05                  SPLK    #4000H,T2CNT            ; 计数器初值。考虑到要增减计数,取个中间值。(不用超过8000,为负
         0006 4000  
      35                            
      36 0007 bc04                  LDP     #DP_DATA
      37 0008 ae00!                 SPLK    #0,POS1                 ; 存第一个值。
         0009 0000  
      38 000a ae00!                 SPLK    #41,QEP_C               ; 计算OmigaR0用到的常量  
         000b 0029  
      39 000c bce8                  LDP     #DP_EVA
      40 000d ae08                  SPLK    #1870H,T2CON            ; 使能timer2。  
         000e 1870  
      41 000f ef00                  RET     
      42            ;=====================================================================
      43 0010       QEP:
      44            ;=====================================================================
      45 0010 bf00                  SPM     0                       ;相乘为无符号数相乘,不需要移位。
      46            ;----------------------------------------------------           
      47            ; calculate QEP_dir             
      48 0011 bce8                  LDP     #DP_EVA                 ;检测转向
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00  Wed Jun  8 17:23:51 2005
Copyright (c) 1987-1999  Texas Instruments Incorporated 
QEP.asm                                                              PAGE    2

      49 0012 4100                  BIT     GPTCONA,1               ;通用定时器2的状态,1为增计数。
      50 0013 e100                  BCND    CONVER,TC               ;增计数时转移
         0014 0018' 
      51 0015 b900                  LACL    #0                      ;减计数,反向旋转。
      52 0016 7980                  B       END_QEP_dir
         0017 0019' 
      53 0018       CONVER:
      54 0018 b901                  LACL    #1                      ;增计数,正向旋转。
      55 0019       END_QEP_dir:
      56 0019 bc04                  LDP     #DP_DATA
      57 001a 9000!                 SACL    QEP_dir                 
      58            ;----------------------------------------------------
      59            ; calculate OmigaR0
      60            ; OmigaR0 = ( POS0 - POS1 ) / Tpwm       增减计数算式一样
      61            ; 转换成CAL_FLUX可用=(POS0 - POS1)*5*(7FFFH/4000)=(POS0 - POS1)*41,(单位1/mS,7FFFh为360度)按Tpwm=0.2mS
      62            ; 令QEP_C=41,
      63            ; T2CNT>=4000+初值(增计数)或T2CNT<=-4000+初值(减计数)时重新装载计数值。
      64            ; 判断是否超过4000线。
      65 001b e388                  BCND    DOWNCOUNT,EQ            ; ACC=0时转移,减计数。
         001c 0035' 
      66            ; 增计数时      
      67 001d bce8                  LDP     #DP_EVA
      68 001e 1005                  LACC    T2CNT
      69 001f bc04                  LDP     #DP_DATA
      70 0020 9000!                 SACL    POS0                    ; 存当前位置
      71 0021 3000!                 SUB     POS1
      72 0022 9000!                 SACL    TEMP                    ; 存差值
      73 0023 7300!                 LT      TEMP
      74 0024 5400!                 MPY     QEP_C                   ; 按5K开关频率、电机1500r/min、则相乘不会超出16位。
      75 0025 be03                  PAC
      76 0026 bfb0                  AND     #7FFFH                  ;保证不会为负数
         0027 7fff  
      77 0028 9000!                 SACL    OmigaR0                 ;求得OmigaR0
      78            ; 判断是否超过4000线
      79 0029 1000!                 LACC    POS0
      80 002a bfa0                  SUB     #4FA0H                  ; 4FA0H-4000H=4000                      
         002b 4fa0  
      81 002c e344                  BCND    END_DIS,LT              ; 4000线以后就重新计数。
         002d 004e' 
      82 002e bf90                  ADD     #4000H
         002f 4000  
      83            ;               SACL    POS0
      84 0030 9000!                 SACL    POS1                    ; 下一次计算的POS1
      85 0031 bce8                  LDP     #DP_EVA
      86 0032 9005                  SACL    T2CNT                   ; COUNTER=POS1
      87 0033 7980                  B       END_QEP
         0034 0050' 
      88            ; 减计数时
      89 0035       DOWNCOUNT:      
      90 0035 bce8                  LDP     #DP_EVA
      91 0036 1005                  LACC    T2CNT
      92 0037 bc04                  LDP     #DP_DATA
      93 0038 9000!                 SACL    POS0                    ; 存当前位置
      94 0039 3000!                 SUB     POS1
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00  Wed Jun  8 17:23:51 2005
Copyright (c) 1987-1999  Texas Instruments Incorporated 
QEP.asm                                                              PAGE    3

      95 003a be00                  ABS                             ; 减计数,相减为负,取绝对值
      96 003b 9000!                 SACL    TEMP                    ; 存差值
      97 003c 7300!                 LT      TEMP
      98 003d 5400!                 MPY     QEP_C                   ; 按5K开关频率、电机1500r/min、则相乘不会超出16位。
      99 003e be03                  PAC     
     100 003f bfb0                  AND     #7FFFH                  ;保证不会为负数
         0040 7fff  
     101 0041 9000!                 SACL    OmigaR0         ;求得OmigaR0
     102            ; 判断是否超过4000线
     103 0042 1000!                 LACC    POS0
     104 0043 bfa0                  SUB     #3060H                  ; 4000h-3060h=4000
         0044 3060  
     105 0045 e304                  BCND    END_DIS,GT              ; 4000线以后就重新计数。
         0046 004e' 
     106 0047 bf90                  ADD     #4000H                  ; 加上初值4000H,重新一轮循环
         0048 4000  
     107            ;               SACL    POS0            
     108 0049 9000!                 SACL    POS1                    ; 下一次计算的POS1
     109 004a bce8                  LDP     #DP_EVA
     110 004b 9005                  SACL    T2CNT                   ; COUNTER=POS1
     111 004c 7980                  B       END_QEP
         004d 0050' 
     112 004e       END_DIS:
     113 004e 1000!                 LACC    POS0
     114 004f 9000!                 SACL    POS1                    ; 下一次计算的POS1
     115 0050       END_QEP:        
     116                            ;正反转的处理。 
     117            ;----------------------------------------------------
     118 0050 bf00                  SPM     0                       ; 复位
     119 0051 ef00                  RET             

 No Errors,  No Warnings

⌨️ 快捷键说明

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