📄 foc.lst
字号:
177 007a 9042- SACL ITREFMIN
178 007b bf80 LACC #0
007c 0000
179 007d 9034- SACL ITREF
180 007e 9033- SACL IMREF
181 007f 903e- SACL N_REF
182 0080 9045- SACL INDEX
183 0081 903c- SACL XIM
184 0082 903b- SACL XIT
185 0083 9040- SACL XISPEED
186 0084 9046- SACL UPI
187 0085 9047- SACL ELPI
188 0086 9048- SACL ENCODEROLD
189 0087 903d- SACL N
190 0088 904a- SACL SPEEDTMP
191 0089 bf80 LACC #SPEEDSTEP30 ;SPEEDSTEP=30
008a 001e
192 008b 904b- SACL SPEEDSTEP
193
194 008c ae53- SPLK #0H ,PWMCNT_LED
008d 0000
195 008e bf08 LAR AR0,#DEC_MS ;传送逆阵数据
008f 0011-
196 0090 b117 LAR AR1,#(24-1) ; 24个
197 0091 bf80 LACC #ANGLES_ ; 指向源
0092 0106"
198 0093 8b88 LARP AR0
199 0094 INIT_TBL
200 0094 a6a9 TBLR *+,AR1 ;下一个
201 0095 b801 ADD #1 ;下一个地址
202 0096 7b98 BANZ INIT_TBL,AR0 ;AR1=0结束
0097 0094'
203 0098 b479 LAR AR4,#79H ;用于堆栈保存现场,B2(60H-80H)
204
205 0099 bce8 LDP #232
206 009a ae04 SPLK #0000100001000010B,T1CON ;使能T1
009b 0842
207
208
209 009c be40 CLRC INTM ; 开总中断
210
211
212 ;-----------------------初始化结束-------------------------------------------------------------------
213
TMS320C24xx COFF Assembler Version 7.02 Mon Dec 18 17:13:42 2006
Copyright (c) 1987-2002 Texas Instruments Incorporated
foc.asm PAGE 6
214 ;----------------------主程序略----------------------------------------------------------------------
215 009d 7980 MAIN B MAIN
009e 009d'
216
217 ;--------------------------------------假中断处理----------------------------------------------------------
218 009f PHANTOM
219 009f be40 CLRC INTM
220 00a0 ef00 RET
221 ;------------------------PDPINTA Interrupt Service Routine------------------------------------------------
222 00a1 PDP_ISR
223 ;SETC INTM
224 00a1 STOP_PWM
1
1 00a1 bce8 LDP #0E8H
1 00a2 6911 LACL COMCONA
1 00a3 bfb0 AND #0111110111111111B
00a4 7dff
1 00a5 9011 SACL COMCONA ;禁止PWM输出
1
1 00a6 ae13 SPLK #0FFFH ,ACTRA
00a7 0fff
225 00a8 LED_D10_ON
1 00a8 bce1 LDP #0E1H
1 00a9 6912 LACL MCRB
1 00aa bfb0 AND #0FFDFH
00ab ffdf
1 00ac 9012 SACL MCRB
1 00ad 691c LACL PCDATDIR
1 00ae bfc0 OR #2020H
00af 2020
1 00b0 901c SACL PCDATDIR
226 00b1 ef00 RET
227 ;-----------------------T1下溢中断处理子程序-----------------------------------------------------
228 00b2 _C_INT2
229 ;-----------------------保存现场------------------------------------------------------------------------
230 00b2 8b8c MAR *,AR4 ;AR4作为堆栈指针
231 00b3 8b90 MAR *-
232 00b4 8f90 SST #1,*- ;保存状态寄存器1
233 00b5 8e90 SST #0,*- ;保存状态寄存器0
234 00b6 9890 SACH *- ;保存ACC高位
235 00b7 9090 SACL *- ;保存ACC低位
236 00b8 be46 CLRC SXM
237 00b9 bce0 LDP #224
238 00ba 101e LACC PIVR ;读偏移地址
239 00bb ba29 SUB #029H ; T1 下溢中断?
240 00bc e388 BCND T1UF_ISR,EQ ;是下溢中断跳T1UF_ISR
00bd 00c6'
241 00be REST
242 ;-----------------------恢复现场------------------------------------------------------------------------
243 00be 8b8c LARP AR4
244 00bf 8ba0 MAR *+
245 00c0 69a0 LACL *+
246 00c1 61a0 ADD *+,16
247 00c2 0ea0 LST #0,*+
TMS320C24xx COFF Assembler Version 7.02 Mon Dec 18 17:13:42 2006
Copyright (c) 1987-2002 Texas Instruments Incorporated
foc.asm PAGE 7
248 00c3 0fa0 LST #1,*+
249 00c4 be40 CLRC INTM
250 00c5 ef00 RET
251 00c6 T1UF_ISR
252
253 00c6 bce8 LDP #232
254 00c7 ae2f SPLK #0FFFH,EVAIFRA ; 清中断标
00c8 0fff
255 ; /*=============设置几个有用的计数器=============*/
256 00c9 bc06 LDP #6
257 00ca 1053- LACC PWMCNT_LED
258 00cb b801 ADD #1H
259 00cc 9053- SACL PWMCNT_LED
260
261 00cd 6953- LACL PWMCNT_LED
262
263 00ce ba01 SUB #1H
264
265 00cf e388 BCND ON ,EQ
00d0 00dd'
266 00d1 1053- LACC PWMCNT_LED
267 00d2 bfa0 SUB #800H
00d3 0800
268 00d4 e388 BZ OFF
00d5 00e8'
269 00d6 1053- LACC PWMCNT_LED
270 00d7 bfa0 SUB #PWMCNT_LED_
00d8 1000
271 00d9 e388 BZ NEWCNT
00da 00f3'
272 00db 7980 B IN
00dc 00f5'
273 00dd ON
274
275 00dd LED_D8_ON
1 00dd bce1 LDP #0E1H
1 00de 6910 LACL MCRA
1 00df bfb0 AND #7FFFH
00e0 7fff
1 00e1 9010 SACL MCRA
1 00e2 691a LACL PBDATDIR
1 00e3 bfc0 OR #8080H
00e4 8080
1 00e5 901a SACL PBDATDIR
276 00e6 7980 B IN
00e7 00f5'
277 00e8 OFF
278
279 00e8 LED_D8_OFF
1 00e8 bce1 LDP #0E1H
1 00e9 6910 LACL MCRA
1 00ea bfb0 AND #7FFFH
00eb 7fff
1 00ec 9010 SACL MCRA
TMS320C24xx COFF Assembler Version 7.02 Mon Dec 18 17:13:42 2006
Copyright (c) 1987-2002 Texas Instruments Incorporated
foc.asm PAGE 8
1 00ed 691a LACL PBDATDIR
1 00ee bfb0 AND #7F7FH
00ef 7f7f
1 00f0 901a SACL PBDATDIR
280 00f1 7980 B IN
00f2 00f5'
281 00f3 NEWCNT
282 00f3 ae53- SPLK #0H ,PWMCNT_LED
00f4 0000
283 00f5 IN
284 ;-----------------------电流采样和AD转换------------------------------------------------------
285 00f5 7a80 CALL ADC_measure
00f6 0288'
286 ;-----------------------读编码器脉冲数,计算转角增量------------------------------------------------
287 00f7 bce8 LDP #0E8H
288 00f8 1005 LACC T2CNT ;读编码脉冲
289 ;NEG ;编码器反接线时
290 00f9 bc06 LDP #6
291 00fa 900b- SACL TMP
292 00fb 3048- SUB ENCODEROLD ;减去前一个周期测的脉冲数
293 00fc 9049- SACL ENCINCR ;得到编码增量
294 00fd 100b- LACC TMP
295 00fe 9048- SACL ENCODEROLD ;更新ENCODEROLD
296 ;-----------------------计算转速---------------------------------------------------------------------------
297 00ff 104b- LACC SPEEDSTEP ;检测是否该采样速度
298 0100 ba01 SUB #1
299 0101 904b- SACL SPEEDSTEP
300 0102 e304 BCND NOCALC,GT ;没到采样时刻,退出
0103 0137'
301 0104 734a- LT SPEEDTMP ;到采样时刻,计算编码器增量累计值
302 0105 cd57 MPY #KSPEED ;Q8格式
303 0106 be03 PAC
304 0107 be09 SFL
305 0108 9f3d- SACH N,7 ;相当于右移8位,Q12格式的PU值
306 0109 bf80 LACC #0
010a 0000
307 010b 904a- SACL SPEEDTMP ;SPEEDTMP清零
308 010c bf80 LACC #SPEEDSTEP30 ;SPEEDSTEP=30
010d 001e
309 010e 904b- SACL SPEEDSTEP ;SPEEDSTEP重新赋初值
310 ;-----------------------转速PI调节,输出ITREF----------------------------------------------------------
311 010f 103e- LACC N_REF ;转速给定值,外部输入,已转化成Q12格式
312 0110 303d- SUB N
313 0111 903f- SACL EPISPEED ;转速偏差
314 0112 1c40- LACC XISPEED,12 ;转速调节器积分累计量
315 0113 733f- LT EPISPEED
316 0114 5406- MPY KPN ;乘比例系数,Q12格式
317 0115 be04 APAC ;累加
318 0116 9c46- SACH UPI,4 ;相当于右移12位
319 0117 4046- BIT UPI,0 ;检测调节器输出的正负
320 0118 e200 BCND UPIMAGZEROS,NTC ;如果正,跳转
0119 0124'
321 011a 1042- LACC ITREFMIN ;否则是负,检测是否超过电流下限
322 011b 3046- SUB UPI
TMS320C24xx COFF Assembler Version 7.02 Mon Dec 18 17:13:42 2006
Copyright (c) 1987-2002 Texas Instruments Incorporated
foc.asm PAGE 9
323 011c e304 BCND NEG_SAT,GT ;超过下限进入饱和区则跳转
011d 0121'
324 011e 1046- LACC UPI ;否则正常调整
325 011f 7980 B LIMITERS
0120 012c'
326 0121 NEG_SAT
327 0121 1042- LACC ITREFMIN ;ACC =下限值
328 0122 7980 B LIMITERS
0123 012c'
329 0124 UPIMAGZEROS
330 0124 1043- LACC ITREFMAX ;检测是否超过电流上限
331 0125 3046- SUB UPI
332 0126 e344 BCND POS_SAT,LT ;超过上限进入饱和区则跳转
0127 012b'
333 0128 1046- LACC UPI ;否则正常调整
334 0129 7980 B LIMITERS
012a 012c'
335 012b POS_SAT
336 012b 1043- LACC ITREFMAX ;ACC =上限值
337 012c LIMITERS
338 012c 9034- SACL ITREF ;输出ITREF
339 012d 3046- SUB UPI
340 012e 9047- SACL ELPI ;求极限偏差
341 012f 7347- LT ELPI
342 0130 5407- MPY KCN ;积分修正系数,Q12
343 0131 be03 PAC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -