📄 foc.lst
字号:
344 0132 733f- LT EPISPEED
345 0133 5405- MPY KIN ;积分系数,Q12
346 0134 be04 APAC
347 0135 2c40- ADD XISPEED,12
348 0136 9c40- SACH XISPEED,4 ;更新调节器积分累计量
349 ;-----------------------计算编码增量累计值------------------------------------------------------------------
350 0137 NOCALC
351 0137 104a- LACC SPEEDTMP
352 0138 2049- ADD ENCINCR
353 0139 904a- SACL SPEEDTMP
354 ;-----------------------将IA,IB,IC转换成IPUQ12格式---------------------------------------------------------
355 013a bc06 LDP #6
356 013b 100c- LACC IA
357 013c bfb0 AND #3FFH ;屏蔽高位
013d 03ff
358 013e bfa0 SUB #512 ;向下平移,产生正负电流值
013f 0200
359 0140 900b- SACL TMP
360 0141 730b- LT TMP
361 0142 5401- MPY KCURRENT ;转换系数,Q8格式
362 0143 be03 PAC
363 0144 be09 SFL
364 0145 9f0c- SACH IA,7 ;IA, Q12格式
365 0146 100d- LACC IB
366 0147 bfb0 AND #3FFH
0148 03ff
367 0149 bfa0 SUB #512
014a 0200
TMS320C24xx COFF Assembler Version 7.02 Mon Dec 18 17:13:42 2006
Copyright (c) 1987-2002 Texas Instruments Incorporated
foc.asm PAGE 10
368 014b 900b- SACL TMP
369 014c 730b- LT TMP
370 014d 5401- MPY KCURRENT
371 014e be03 PAC
372 014f be09 SFL
373 0150 9f0d- SACH IB,7 ;IB, Q12格式
374 0151 100d- LACC IB
375 0152 200c- ADD IA
376 0153 be02 NEG
377 0154 900e- SACL IC ;IC = -(IB+IA)
378 ;-----------------------CLARKE变换------------------------------------------------------------------------------
379 0155 bc06 LDP #6
380 0156 730c- LT IA
381 0157 d39a MPY #5018 ;乘 =5018,Q12格式
382 0158 be03 PAC
383 0159 9c2f- SACH IALFA,4 ;保存IALFA
384 015a 110d- LACC IB,1 ;ACC =2*IB
385 015b 200c- ADD IA ;ACC =IA+2*IB
386 015c 900b- SACL TMP ;暂存
387 015d 732f- LT IALFA
388 015e cb50 MPY #2896 ;乘 =2896,Q12格式
389 015f be03 PAC
390 0160 9c30- SACH IBETA ,4 ;保存IBETA
391 ;-----------------------根据TETA_E查SIN, COS表------------------------------------------------------------
392 0161 102e- LACC TETA_E ;TETA_E范围[0;1000H],[0;360]的Q12格式
393 0162 bb03 RPT #3 ;右移4位,范围变为[0;255],
394 0163 be0a SFR
395 0164 bfb0 AND #0FFH ;屏蔽高位
0165 00ff
396 0166 9045- SACL INDEX ;生成查表指针
397 0167 bf90 ADD #SINTAB ;加上表的首地址
0168 0006"
398 0169 a60f- TBLR SIN ;保存SIN值
399 016a 6945- LACL INDEX ;COS(TETA)=SIN(TETA+90°)
400 016b b840 ADD #040H ;90°= 40H
401 016c bfb0 AND #0FFH
016d 00ff
402 016e bf90 ADD #SINTAB
016f 0006"
403 0170 a610- TBLR COS ;保存COS值
404 ;-------------------------------------- PARK变换-------------------------------------------------------------
405 0171 bf80 LACC #0 ;累加器清零
0172 0000
406 0173 7330- LT IBETA
407 0174 540f- MPY SIN ;Q12格式
408 0175 702f- LTA IALFA ;ACC=IBETA *SIN(TETA),T=IALFA
409 0176 5410- MPY COS ;Q12格式
410 0177 500f- MPYA SIN ;ACC=IBETA*SIN(TETA)+IALFA*COS(TETA),
411 ;P=IALFA*SIN(TETA)
412 0178 9c35- SACH IM,4 ;保存IM
413 0179 bf80 LACC #0 ;累加器清零
017a 0000
414 017b 7330- LT IBETA
415 017c 5110- MPYS COS ;ACC = -IALFA*SIN(TETA) ,P=IBETA*COS(TETA)
TMS320C24xx COFF Assembler Version 7.02 Mon Dec 18 17:13:42 2006
Copyright (c) 1987-2002 Texas Instruments Incorporated
foc.asm PAGE 11
416 017d be04 APAC ;ACC = -IALFA*SIN(TETA) +IBETA*COS(TETA)
417 017e 9c36- SACH IT,4 ;保存IT
418 ;--------------------------------------转子磁链位置的计算-----------------------------------
419 017f 1035- LACC IM ;Q12
420 0180 304f- SUB IDK ;Q12
421 0181 900b- SACL TMP
422 0182 730b- LT TMP
423 0183 544c- MPY KR ;Q15
424 0184 be03 PAC
425 0185 990b- SACH TMP,1
426 0186 100b- LACC TMP
427 0187 204f- ADD IDK
428 0188 904f- SACL IDK ;IDK=IDK+KR*(IM-IDK), Q12格式
429 0189 e308 BCND IDKNOTZERO,NEQ ;如果IDK≠0跳转
018a 0190'
430 018b bf80 LACC #0
018c 0000
431 018d 900b- SACL TMP ;如果IDK=0,则TMP=IT/IDK=0
432 018e 7980 B ITPOS
018f 019e'
433 0190 IDKNOTZERO
434 0190 9052- SACL TMP1 ;暂存IDK,Q12
435 0191 1036- LACC IT
436 0192 be00 ABS ;取绝对值
437 0193 900b- SACL TMP ;暂存IT
438 0194 1c0b- LACC TMP,12 ;右移12位成Q24格式
439 0195 bb0f RPT #15
440 0196 0a52- SUBC TMP1 ;除法
441 0197 900b- SACL TMP ;TMP=IT/IDK,Q12格式
442 0198 1036- LACC IT ;根据IT的正负调整商的符号
443 0199 e304 BCND ITPOS,GT ;IT>0跳转
019a 019e'
444 019b 100b- LACC TMP ;否则求补
445 019c be02 NEG
446 019d 900b- SACL TMP
447 019e ITPOS
448 019e 730b- LT TMP
449 019f 544d- MPY KT ;Q12格式
450 01a0 be03 PAC
451 01a1 9c0b- SACH TMP,4 ;TMP=TMP*KT,Q12格式
452 01a2 100b- LACC TMP
453 01a3 203d- ADD N ;Q12
454 01a4 be0a SFR ;除2(2对磁极),变成机械转速比
455 01a5 9050- SACL FS ;FS=N+KT*(IT/IDK),Q12格式
456 01a6 1050- LACC FS
457 01a7 be00 ABS
458 01a8 900b- SACL TMP
459 01a9 730b- LT TMP
460 01aa 544e- MPY K ;Q0
461 01ab be03 PAC ;计算TETA_E=TETA_E+K*FS
462 ;=TETA_E+TETAINCR
463 ;(0-360)->(0-65535)
464 01ac 9c51- SACH TETAINCR,4 ;Q0格式
465 01ad 4050- BIT FS,0 ;根据FS的正负调整
TMS320C24xx COFF Assembler Version 7.02 Mon Dec 18 17:13:42 2006
Copyright (c) 1987-2002 Texas Instruments Incorporated
foc.asm PAGE 12
466 01ae e100 BCND FS_NEG,TC ;为负则跳转
01af 01b5'
467 01b0 6951- LACL TETAINCR ;否则为正
468 01b1 622e- ADDS TETA_E
469 01b2 902e- SACL TETA_E
470 01b3 7980 B FS_POS
01b4 01b8'
471 01b5 FS_NEG
472 01b5 692e- LACL TETA_E
473 01b6 6651- SUBS TETAINCR
474 01b7 902e- SACL TETA_E
475 01b8 FS_POS
476 01b8 1c2e- LACC TETA_E,12 ;除24,变成0-4096范围
477 01b9 982e- SACH TETA_E ;保存TETA_E
478 ;-----------------------T轴电流PI调节,输出VTREF-----------------------------
479 01ba 1034- LACC ITREF
480 01bb 3036- SUB IT
481 01bc 9039- SACL EPIT ;T轴电流偏差
482 01bd 1c3b- LACC XIT,12 ;电流调节器积分累计量
483 01be 7339- LT EPIT
484 01bf 5403- MPY KP ;比例系数,Q12
485 01c0 be04 APAC
486 01c1 9c46- SACH UPI,4
487 01c2 4046- BIT UPI,0 ;检测调节器输出的正负
488 01c3 e200 BCND UPIMAGZEROT,NTC ;如果正,跳转
01c4 01cf'
489 01c5 1008- LACC VMIN ;否则是负,检测是否超过电压下限
490 01c6 3046- SUB UPI
491 01c7 e304 BCND NEG_SATT,GT ;超过下限进入饱和区则跳转
01c8 01cc'
492 01c9 1046- LACC UPI ;否则正常调整
493 01ca 7980 B LIMITERT
01cb 01d7'
494 01cc NEG_SATT
495 01cc 1008- LACC VMIN ;ACC =下限值
496 01cd 7980 B LIMITERT
01ce 01d7'
497 01cf UPIMAGZEROT
498 01cf 1009- LACC VMAX ;检测是否超过电压上限
499 01d0 3046- SUB UPI
500 01d1 e344 BCND POS_SATT,LT ;超过上限进入饱和区则跳转
01d2 01d6'
501 01d3 1046- LACC UPI ;否则正常调整
502 01d4 7980 B LIMITERT
01d5 01d7'
503 01d6 POS_SATT
504 01d6 1009- LACC VMAX ;ACC =上限值
505 01d7 LIMITERT
506 01d7 9038- SACL VTREF ;输出VTREF
507 01d8 3046- SUB UPI
508 01d9 9047- SACL ELPI ;求极限偏差
509 01da 7347- LT ELPI
510 01db 5404- MPY KC ;积分修正系数,Q12
511 01dc be03 PAC
TMS320C24xx COFF Assembler Version 7.02 Mon Dec 18 17:13:42 2006
Copyright (c) 1987-2002 Texas Instruments Incorporated
foc.asm PAGE 13
512 01dd 7339- LT EPIT
513 01de 5402- MPY KI ;积分系数,Q12
514 01df be04 APAC
515 01e0 2c3b- ADD XIT,12
516 01e1 9c3b- SACH XIT,4 ;更新调节器积分累计量
517 ;-----------------------M轴电流PI调节,输出VMREF-------------------------------------------------------
518 01e2 1033- LACC IMREF
519 01e3 3035- SUB IM
520 01e4 903a- SACL EPIM ;M轴电流偏差
521 01e5 1c3c- LACC XIM,12 ;电流调节器积分累计量
522 01e6 733a- LT EPIM
523 01e7 5403- MPY KP ;比例系数,Q12
524 01e8 be04 APAC
525 01e9 9c46- SACH UPI,4
526 01ea 4046- BIT UPI,0 ;检测调节器输出的正负
527 01eb e200 BCND UPIMAGZEROM,NTC ;如果正,跳转
01ec 01f7'
528 01ed 1008- LACC VMIN ;否则是负,检测是否超过电压下限
529 01ee 3046- SUB UPI
530 01ef e304 BCND NEG_SATM,GT ;超过下限进入饱和区则跳转
01f0 01f4'
531 01f1 1046- LACC UPI ;否则正常调整
532 01f2 7980 B LIMITERM
01f3 01ff'
533 01f4 NEG_SATM
534 01f4 1008- LACC VMIN ;ACC =下限值
535 01f5 7980 B LIMITERM
01f6 01ff'
536 01f7 UPIMAGZEROM
537 01f7 1009- LACC VMAX ;检测是否超过电压上限
538 01f8 3046- SUB UPI
539 01f9 e344 BCND POS_SATM,LT ;超过上限进入饱和区则跳转
01fa 01fe'
540 01fb 1046- LACC UPI ;否则正常调整
541 01fc 7980 B LIMITERM
01fd 01ff'
542 01fe POS_SATM
543 01fe 1009- LACC VMAX ;ACC =上限值
544 01ff LIMITERM
545 01ff 9037- SACL VMREF ;输出VMREF
546 0200 3046- SUB UPI
547 0201 9047- SACL ELPI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -