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