📄 flux.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 + -