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

📄 flux.lst

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

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

       1            ;=====================================================================
       2            ; File Name     :       FLUX.asm
       3            ; Module Name   :       FLUX
       4            ; Initialization Routine: FLUX_INIT     
       5            ; Description:  转子磁链观测器
       6            ;       
       7            ; KesaiR0 = ( Tr * KesaiR1 + Lmd * Tpwm * ISM0 ) / ( Tr + Tpwm )                
       8            ; delta_omiga = IST0 * Lmd / ( Tr * KesaiR0 )
       9            ; ThetaS0 = ThetaS1 + Tpwm * ( OmigaR0 + delta_omiga )
      10            ;
      11            ;               |~~~~~~~~~~~~~~~~~~~|
      12            ; ISM0  ->      |                   |----->  ThetaS0
      13            ; IST0  ->      |                   |
      14            ;               |       FLUX        |
      15            ; OmigaR0 ->    |                   |----->  KesaiR0
      16            ;               |___________________|
      17            ;
      18            ; Note: 0<ThetaS0<7FFFh   ( equivalent to 0<ThetaS0<360 deg  )
      19            ; Modify: 2004.8.24
      20            ;=====================================================================
      21                            .include "f2407.h"              
      22                            .global FLUX,FLUX_INIT          ; function call
      23                                            
      24                            .global ISM0,IST0,OmigaR0,OmigaS0,OmigaS1; Inputs  
      25                            .global ThetaS1,KesaiR1                 ; Inputs
      26                            .global ThetaS0,KesaiR0                 ; Outputs  
      27                            .global TEMP,TEMP1
      28                            .global delta_omiga
      29                            .global FLUX_C1,FLUX_C2,FLUX_C3,Tpwm    ;constant
      30            
      31            ;=====================================================================
      32 0000       FLUX_INIT:
      33            ;=====================================================================
      34 0000 bc04                  LDP     #DP_DATA
      35 0001 ae00!                 SPLK    #0,ThetaS1      
         0002 0000  
      36 0003 ae00!                 SPLK    #0,KesaiR1      ;装初值         
         0004 0000  
      37 0005 ae00!                 SPLK    #32735,FLUX_C1  ;要通过计算,这里先随便赋值,FLUX_C1=Tr/(Tr+Tpwm)=(Q15,数值大约在0.8-1),T
         0006 7fdf  
      38 0007 ae00!                 SPLK    #58,FLUX_C2     ;FLUX_C2=Lmd*Tpwm/(Tr+Tpwm)=0.675mH(Q8)=
         0008 003a  
      39 0009 ae00!                 SPLK    #23,FLUX_C3     ;FLUX_C3=Lmd/Tr*7FFFh/(2*pi)*(2**-8)=Lmd/Tr*20.3712=(delta_omiga为Q0,1/m
         000a 0017  
      40 000b ae00!                 SPLK    #16384,Tpwm     ;Tpwm=0.2mS,Q15                
         000c 4000  
      41 000d ef00                  RET
      42            ;=====================================================================
      43 000e       FLUX:
      44            ;=====================================================================
      45 000e be47                  SETC    SXM
      46 000f bf01                  SPM     1               ;符号数相乘,左移1位.
      47            ;------------------------------------------------------------
      48            ; calculate KesaiR0
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00  Wed Jun  8 17:23:50 2005
Copyright (c) 1987-1999  Texas Instruments Incorporated 
FLUX.asm                                                             PAGE    2

      49            ; KesaiR0 = ( Tr * KesaiR1 + Lmd * Tpwm * ISM0 ) / ( Tr + Tpwm )=KesaiR1*FLUX_C1+ISM0*FLUX_C2
      50 0010 bc04                  LDP     #DP_DATA 
      51            ;               SPLK    #4096,ISM0
      52            ;               SPLK    #2048,IST0
      53            ;               SPLK    #0,OmigaR0
      54            ;               SPLK    #1000H,KesaiR1
      55 0011 7300!                 LT      KesaiR1
      56 0012 5400!                 MPY     FLUX_C1
      57 0013 be03                  PAC             
      58 0014 7300!                 LT      ISM0
      59 0015 5400!                 MPY     FLUX_C2
      60 0016 be04                  APAC                            ;不会溢出
      61 0017 e304                  BCND    Kesai_GT,GT
         0018 001c' 
      62 0019 ae00!                 SPLK    #0001H,TEMP
         001a 0001  
      63 001b 6a00!                 LACC    TEMP,16         ;Kesai<=0时(理论上不可能出现为负的情况)赋给一个最小值1,下面的计算分母
      64 001c       Kesai_GT:
      65 001c 9800!                 SACH    KesaiR0         ;KesaiR0结果(Q4)
      66 001d 9800!                 SACH    KesaiR1         ;为下一次计算做准备。
      67            ;------------------------------------------------------------
      68            ; calculate delta_omiga
      69            ; delta_omiga = IST0 * Lmd / ( Tr * KesaiR0 )=IST0*FLUX_C3/KesaiR0,单位1/mS
      70 001e 8b88                  MAR     *,AR0
      71 001f b000                  LAR     AR0,#0
      72            ;               SPLK    #0BCF8H,IST0
      73 0020 1000!                 LACC    IST0
      74 0021 9000!                 SACL    TEMP            ;TEMP=IST0
      75 0022 e38c                  BCND    IST_GEQ,GEQ
         0023 0027' 
      76 0024 be02                  NEG
      77 0025 9000!                 SACL    TEMP            ;TEMP=-IST0,取绝对值
      78 0026 b001                  LAR     AR0,#1
      79 0027       IST_GEQ:
      80 0027 7300!                 LT      TEMP
      81 0028 5400!                 MPY     FLUX_C3
      82 0029 be03                  PAC
      83 002a ae00!                 SPLK    #7FFFH,TEMP1
         002b 7fff  
      84 002c bf00                  SPM     0
      85 002d 7300!                 LT      KesaiR0
      86 002e 5400!                 MPY     TEMP1
      87 002f be05                  SPAC
      88 0030 bf01                  SPM     1
      89 0031 e38c                  BCND    OMIGA_MAX,GEQ   ;;看是否delta_omiga超过7FFFH,超过不能32位除16位。
         0032 0042' 
      90 0033 7300!                 LT      TEMP
      91 0034 5400!                 MPY     FLUX_C3
      92 0035 be03                  PAC
      93 0036 bb0f                  RPT     #15
      94 0037 0a00!                 SUBC    KesaiR0         ; 32除16位。
      95 0038 9000!                 SACL    delta_omiga     ;delta_omiga结果
      96 0039 1000!                 LACC    delta_omiga
      97 003a 7b90                  BANZ    OMIGA_NEG
TMS320C1x/C2x/C2xx/C5x COFF Assembler Version 7.00  Wed Jun  8 17:23:50 2005
Copyright (c) 1987-1999  Texas Instruments Incorporated 
FLUX.asm                                                             PAGE    3

         003b 003e' 
      98 003c 7980                  B       CAL_ThetaS0
         003d 004c' 
      99 003e       OMIGA_NEG:
     100 003e be02                  NEG
     101 003f 9000!                 SACL    delta_omiga
     102 0040 7980                  B       CAL_ThetaS0
         0041 004c' 
     103 0042       OMIGA_MAX:      
     104 0042 7b90                  BANZ    MAX_NEG
         0043 0048' 
     105 0044 ae00!                 SPLK    #7FFFH,delta_omiga      ;正的最大值
         0045 7fff  
     106 0046 7980                  B       CAL_ThetaS0
         0047 004c' 
     107 0048       MAX_NEG:
     108 0048 ae00!                 SPLK    #8000H,delta_omiga      ;负的最大值
         0049 8000  
     109 004a 7980                  B       CAL_ThetaS0             
         004b 004c' 
     110            ;------------------------------------------------------------   
     111            ; calculate ThetaS0             
     112            ; ThetaS0 = ThetaS1 + Tpwm * ( OmigaR0 + delta_omiga )=ThetaS1 + Tpwm * OmigaS0
     113 004c       CAL_ThetaS0:
     114 004c 1000!                 LACC    delta_omiga
     115 004d 2000!                 ADD     OmigaR0
     116 004e 2000!                 ADD     OmigaR0         ;加两次,相当OmigaR0×2,因为机械转速和电转速相差p(极对数,此电机是4极2

⌨️ 快捷键说明

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