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

📄 park.lst

📁 DSP关于F2407的实例程序
💻 LST
字号:
C:\tic2xx\c2000\cgtools\bin\dspa.exe PARK.asm PARK.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 
PARK.asm                                                             PAGE    1

       1            ;=====================================================================
       2            ; Filename      :       PARK.asm
       3            ; Module Name   :       PARK                          
       4            ; Description:  PARK变换
       5            ;       ISM0 = Ialfa0 * cos_PARK_Theta + Ibeta0 * sin_PARK_Theta
       6            ;       IST0 = Ibeta0 * cos_PARK_Theta - Ialfa0 * sin_PARK_Theta
       7            ;       PARK_Theta = ThetaS1 + OmigaS1 * Tpwm
       8            ;
       9            ;                               |~~~~~~~~~~~~~~~|
      10            ;       alfa0(Q11)      o---->  |               |----->o  ISM0(Q11)
      11            ;       Ibeta0(Q11)     o---->  |      PARK     |
      12            ;       PARK_Theta      o---->  |               |----->o  IST0(Q11)
      13            ;                               |______________ |
      14            ;
      15            ; Note: 0 < PARK_Theta < 7FFFh   (i.e. equivalent to 0 < PARK_Theta < 360 deg)
      16            ; Modify: 2004.6.16
      17            ;=====================================================================
      18                            .include "f2407.h"
      19                            .global SINTAB_360                              ;sin table              
      20                            .global PARK,PARK_INIT                          ;function call
      21                            .global PDPINTA_INIT
      22                            
      23                            .global Ialfa0,Ibeta0,PARK_Theta                ;Inputs
      24                            .global ISM0,IST0,IST1,IST2                     ;Outputs
      25                            .global TEMP
      26                            .global Tpwm,ThetaS1,OmigaS1
      27                            .global t_ptr,ip_val,cos_PARK_Theta,sin_PARK_Theta,nxt_entry,delta_angle ;计算sin,cos时所用到变
      28            ;=================================================================
      29 0000       PARK_INIT: 
      30            ;=================================================================      
      31 0000 bc04                  LDP     #DP_DATA
      32 0001 ae00!                 SPLK    #0,OmigaS1
         0002 0000  
      33 0003 ae00!                 SPLK    #16384,Tpwm     ;Tpwm=0.2mS(Q15)
         0004 4000  
      34 0005 ef00                  RET     
      35            ;=================================================================
      36 0006       PARK: 
      37            ;=================================================================
      38 0006 be47                  SETC    SXM                                     ; Sign extension mode
      39 0007 bf01                  SPM     1
      40            ;-----------------------------------------------------------------
      41            ;Calculate PARK_Theta
      42            ;PARK_Theta = ThetaS1 + OmigaS1 * Tpwm
      43 0008 bc04                  LDP     #DP_DATA
      44 0009 7300!                 LT      OmigaS1
      45 000a 5400!                 MPY     Tpwm
      46 000b 8d00!                 SPH     TEMP
      47 000c 1000!                 LACC    TEMP
      48 000d 2000!                 ADD     ThetaS1
      49 000e bfb0                  AND     #7FFFH
         000f 7fff  
      50 0010 9000!                 SACL    PARK_Theta              
      51            ;-----------------------------------------------------------------      
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00  Wed Jun  8 17:23:51 2005
Copyright (c) 1987-1999  Texas Instruments Incorporated 
PARK.asm                                                             PAGE    2

      52            ;Calculate Sin(PARK_Theta) using look-up + interpolation method
      53 0011 bc04                  LDP     #DP_DATA
      54                            
      55 0012 1900!                 LACC    PARK_Theta,9
      56 0013 9800!                 SACH    t_ptr                   ;Table pointer = PARK_Theta * 256 /0x7FFFH
      57                            
      58 0014 be0a                  SFR                             ;Convert Interpolation value(ip_val) to Q15
      59 0015 bfb0                  AND     #07FFFh                 ;Force ip_val to a positive number
         0016 7fff  
      60 0017 9000!                 SACL    ip_val                  ;ip_val存插值,Q15带符号数,这里是巧妙的地方,好好理解!
      61                            
      62 0018 bf80                  LACC    #SINTAB_360
         0019 0000! 
      63 001a 2000!                 ADD     t_ptr
      64 001b a600!                 TBLR    sin_PARK_Theta          ;sin_PARK_Theta = Sin(PARK_Theta) in Q15
      65 001c b801                  ADD     #1h                     ;Inc Table pointer
      66 001d a600!                 TBLR    nxt_entry               ;Get next entry i.e. (Entry + 1)
      67 001e 1000!                 LACC    nxt_entry
      68 001f 3000!                 SUB     sin_PARK_Theta          ;Find Delta of 2 points
      69 0020 9000!                 SACL    delta_angle
      70 0021 7300!                 LT      delta_angle
      71 0022 5400!                 MPY     ip_val                  ;ip_val = interpolation value
      72 0023 be03                  PAC
      73                            
      74 0024 9800!                 SACH    ip_val                  ;PM=1,去掉了一个符号位。ip_val和sin_PARK_Theta同Q格式。
      75 0025 1000!                 LACC    ip_val
      76 0026 2000!                 ADD     sin_PARK_Theta
      77 0027 9000!                 SACL    sin_PARK_Theta          ;最终结果,Q15  
      78            ;-----------------------------------------------------------------
      79            ;Calculate Cos(PARK_Theta) using look-up + interpolation method
      80 0028 1000!                 LACC    PARK_Theta
      81 0029 bf90                  ADD     #8192                   ;COS(A)=SIN(A+90)
         002a 2000  
      82 002b bfb0                  AND     #7FFFH                  ;A+90>360时取低15位,相当于减去360。
         002c 7fff  
      83 002d 9000!                 SACL    TEMP
      84                            
      85 002e 1900!                 LACC    TEMP,9
      86 002f 9800!                 SACH    t_ptr                   ;Table pointer = PARK_Theta * 256 /0x7FFFH
      87                            
      88 0030 be0a                  SFR
      89 0031 bfb0                  AND     #7FFFH                  ;求差值
         0032 7fff  
      90 0033 9000!                 SACL    ip_val
      91                            
      92 0034 bf80                  LACC    #SINTAB_360
         0035 0000! 
      93 0036 2000!                 ADD     t_ptr
      94 0037 a600!                 TBLR    cos_PARK_Theta          
      95 0038 b801                  ADD     #1
      96 0039 a600!                 TBLR    nxt_entry
      97 003a 1000!                 LACC    nxt_entry
      98 003b 3000!                 SUB     cos_PARK_Theta          ;差值,不一定正负。
      99 003c 9000!                 SACL    delta_angle
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00  Wed Jun  8 17:23:51 2005
Copyright (c) 1987-1999  Texas Instruments Incorporated 
PARK.asm                                                             PAGE    3

     100 003d 7300!                 LT      delta_angle             ;Q15
     101 003e 5400!                 MPY     ip_val
     102 003f be03                  PAC                             
     103 0040 9800!                 SACH    ip_val                  ;因为delta_angle是Q15格式,PM=1,ip_val和sin_PARK_Theta同Q格式。
     104                            
     105 0041 1000!                 LACC    ip_val
     106 0042 2000!                 ADD     cos_PARK_Theta          ;由cos的性质,相加不会溢出。
     107 0043 9000!                 SACL    cos_PARK_Theta          ;最终结果,Q15          
     108            ;-----------------------------------------------------------------
     109            ; Calculate the Park transform 
     110            ; 根据matlab计算,ISM0、IST0和Ialfa0、Ibeta0同量纲。
     111            ; ISM0 = Ialfa0 * cos_PARK_Theta + Ibeta0 * sin_PARK_Theta
     112 0044 7300!                 LT      cos_PARK_Theta
     113 0045 5400!                 MPY     Ialfa0
     114 0046 be03                  PAC
     115 0047 7300!                 LT      sin_PARK_Theta
     116 0048 5400!                 MPY     Ibeta0
     117 0049 be04                  APAC                    ;不会溢出
     118 004a 9800!                 SACH    ISM0            ;ISM0结果(Q11)
     119            ;               LACC    ISM0  
     120            ;               ADD     #200
     121            ;               BCND    IST_CAL,GEQ
     122            ;               B       PDPINTA_INIT    ;ISM0为负时不正常,保护。
     123            ; IST0 = Ibeta0 * cos_PARK_Theta - Ialfa0 * sin_PARK_Theta
     124 004b       IST_CAL:        
     125                            ;SETC   SXM
     126            ;               LDP     #DP_DATA
     127            ;               LACC    IST2
     128            ;               SACL    IST1                    ;IST0->IST1存上一次结果。
     129                            
     130 004b 7300!                 LT      cos_PARK_Theta
     131 004c 5400!                 MPY     Ibeta0
     132 004d be03                  PAC
     133 004e 7300!                 LT      sin_PARK_Theta
     134 004f 5400!                 MPY     Ialfa0
     135 0050 be05                  SPAC                    ;不会溢出
     136 0051 9800!                 SACH    IST0            ;IST0结果(Q11)
     137                            
     138 0052 9800!                 SACH    IST2
     139            ;               LACC    IST2
     140            ;               SUB     IST1
     141            ;               ABS
     142            ;               SUB     #8000                   ;还是不行,8000的话,闭环计算还是有问题。看来不能这样滤波。
     143            ;               BCND    IST_ENDCAL,LT           ;前后两个采样差值超过8000,则进行高频尖刺滤波。
     144            ;               LACC    IST1
     145            ;               SACL    IST2                    ;滤波,把前一次值当成当前值。
     146                            
     147            ;               LACC    IST0  
     148            ;               ADD     #200
     149            ;               BCND    IST_ENDCAL,GEQ
     150            ;               B       PDPINTA_INIT    ;IST0为负时不正常,保护。
     151            ;--------------------------------------------------------------------
     152 0053       IST_ENDCAL:
     153 0053 bf00                  SPM     0       ; SPM reset
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00  Wed Jun  8 17:23:51 2005
Copyright (c) 1987-1999  Texas Instruments Incorporated 
PARK.asm                                                             PAGE    4

     154 0054 ef00                  RET

 No Errors,  No Warnings

⌨️ 快捷键说明

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