📄 mtc.ls
字号:
3218 02fb _MTC_ValidSpeedInfo:
3220 02fb b701 ld _MTC_ValidSpeedInfo$L+1,a
3221 02fd bf00 ld _MTC_ValidSpeedInfo$L,x
3223 ; 535 if ( MinRotorFreq == 0 ) /* Open loop or error */
3225 02ff 4d tnz a
3226 0300 2604 jrne L1551
3227 0302 5d tnz x
3228 0303 2601 jrne L1551
3229 ; 537 return( FALSE );
3233 0305 81 ret
3234 0306 L1551:
3235 ; 541 return ( (BOOL)((MTC_GetRotorFreq() > MinRotorFreq)
3235 ; 542 && (GetAvrgTachoPeriod() >= GetLastTachoPeriod())) );//acceleration
3237 0306 cd01a0 call _MTC_GetRotorFreq
3239 0309 b700 ld c_x,a
3240 030b b601 ld a,_MTC_ValidSpeedInfo$L+1
3241 030d b000 sub a,c_x
3242 030f bf00 ld c_x,x
3243 0311 b600 ld a,_MTC_ValidSpeedInfo$L
3244 0313 b200 sbc a,c_x
3245 0315 2415 jruge L46
3246 0317 cd01e0 call _GetLastTachoPeriod
3248 031a aefc ld x,#_MTC_ValidSpeedInfo$L-4
3249 031c cd0000 call c_rtol
3251 031f cd0233 call _GetAvrgTachoPeriod
3253 0322 aefc ld x,#_MTC_ValidSpeedInfo$L-4
3254 0324 cd0000 call c_lcmp
3256 0327 2503 jrult L46
3257 0329 a601 ld a,#1
3259 032b 81 ret
3260 032c L46:
3261 032c 4f clr a
3264 032d 81 ret
3288 ; 561 void MTC_Toggle_Direction( void )
3288 ; 562 {
3289 switch .text
3290 032e _MTC_Toggle_Direction:
3293 ; 563 if (PhaseShift == PHASE_SHIFT)
3295 032e b611 ld a,_PhaseShift
3296 0330 a155 cp a,#85
3297 0332 2604 jrne L5651
3298 ; 565 PhaseShift = -PHASE_SHIFT;
3300 0334 a6ab ld a,#171
3302 0336 2002 jra L7651
3303 0338 L5651:
3304 ; 567 PhaseShift = PHASE_SHIFT;
3306 0338 a655 ld a,#85
3307 033a L7651:
3308 033a b711 ld _PhaseShift,a
3309 ; 569 }
3312 033c 81 ret
3336 ; 571 void MTC_Set_ClockWise_Direction( void )
3336 ; 572 {
3337 switch .text
3338 033d _MTC_Set_ClockWise_Direction:
3341 ; 573 PhaseShift = PHASE_SHIFT;
3343 033d a655 ld a,#85
3344 033f b711 ld _PhaseShift,a
3345 ; 574 }
3348 0341 81 ret
3372 ; 576 void MTC_Set_CounterClockWise_Direction( void )
3372 ; 577 {
3373 switch .text
3374 0342 _MTC_Set_CounterClockWise_Direction:
3377 ; 578 PhaseShift = -PHASE_SHIFT;
3379 0342 a6ab ld a,#171
3380 0344 b711 ld _PhaseShift,a
3381 ; 579 }
3384 0346 81 ret
3429 ; 581 Direction_t MTC_GetRotationDirection( void )
3429 ; 582 {
3430 switch .text
3431 0347 _MTC_GetRotationDirection:
3434 ; 584 if ( PhaseShift == PHASE_SHIFT )
3436 0347 b611 ld a,_PhaseShift
3437 0349 a155 cp a,#85
3438 034b 2602 jrne L1361
3439 ; 586 return( CLOCKWISE );
3441 034d 4f clr a
3444 034e 81 ret
3445 034f L1361:
3446 ; 590 return( COUNTERCLOCKWISE );
3448 034f a601 ld a,#1
3451 0351 81 ret
3501 ; 606 void MTC_StartBraking( u16 DutyCycle)
3501 ; 607 {
3502 switch .text
3504 xref.b _MTC_StartBraking$L
3505 0352 _MTC_StartBraking:
3507 0352 b701 ld _MTC_StartBraking$L+1,a
3508 0354 bf00 ld _MTC_StartBraking$L,x
3510 ; 611 MTCStatus &= (u8)(~(BRAKE_WAIT_DEMAG + BRAKE_SET_UP + BRAKE));
3512 0356 b610 ld a,_MTCStatus
3513 0358 a4f1 and a,#241
3514 035a b710 ld _MTCStatus,a
3515 ; 614 MTC_UpdateSine(0, MTC_GetStatorFreq()); // Cancel voltage on stator
3517 035c cd016b call _MTC_GetStatorFreq
3519 035f b702 ld _MTC_UpdateSine$L+2,a
3520 0361 bf01 ld _MTC_UpdateSine$L+1,x
3521 0363 4f clr a
3522 0364 cd00c0 call _MTC_UpdateSine
3524 ; 615 MTCStatus |= FREQ_CHANGE; // Here this bit is used to verify that U interrupt occured
3526 0367 1010 bset _MTCStatus,#0
3527 ; 616 MISR = 0xFF; // Force generation of U interrupt
3529 0369 a6ff ld a,#255
3530 036b b759 ld _MISR,a
3531 ; 617 Counter = U8_MAX;
3533 036d b7ff ld _MTC_StartBraking$L-1,a
3535 036f 2002 jra L3661
3536 0371 L7561:
3537 ; 620 Counter--; // Wait for U interrupt
3539 0371 3aff dec _MTC_StartBraking$L-1
3540 0373 L3661:
3541 ; 618 while( (MTCStatus & FREQ_CHANGE) && (Counter > 0) )
3543 0373 011004 btjf _MTCStatus,#0,L7661
3545 0376 3dff tnz _MTC_StartBraking$L-1
3546 0378 26f7 jrne L7561
3547 037a L7661:
3548 ; 626 MIMR &= ((u8)~MIMR_PUM_OR);
3550 037a b658 ld a,_MIMR
3551 037c a47f and a,#127
3552 037e b758 ld _MIMR,a
3553 ; 628 MTC_DisableMCOutputs(); // All MCO outputs OFF (0 with positive polarity)
3555 0380 cd0014 call _MTC_DisableMCOutputs
3557 ; 630 MTCStatus |= BRAKE_WAIT_DEMAG;
3559 0383 1210 bset _MTCStatus,#1
3560 ; 631 ART_SetSequenceDuration (STATOR_DEMAG_TIME);
3562 0385 a62c ld a,#44
3563 0387 ae01 ld x,#1
3564 0389 cd0000 call _ART_SetSequenceDuration
3566 ; 633 BrakeDutyCycle = DutyCycle;
3568 038c be00 ld x,_MTC_StartBraking$L
3569 038e cf0001 ld L3701_BrakeDutyCycle,x
3570 0391 b601 ld a,_MTC_StartBraking$L+1
3571 0393 c70002 ld L3701_BrakeDutyCycle+1,a
3572 ; 634 }
3575 0396 81 ret
3629 ; 654 void MTC_Brake( void )
3629 ; 655 {
3630 switch .text
3632 xref.b _MTC_Brake$L
3633 0397 _MTC_Brake:
3636 ; 659 BrakeStatus = (u8)(MTCStatus & BRAKE_MASK);
3638 0397 b610 ld a,_MTCStatus
3639 0399 a40e and a,#14
3640 039b b7fd ld _MTC_Brake$L-3,a
3641 ; 661 switch (BrakeStatus)
3644 039d a002 sub a,#2
3645 039f 270b jreq L1761
3646 03a1 a002 sub a,#2
3647 03a3 2727 jreq L3761
3648 03a5 a004 sub a,#4
3649 03a7 2766 jreq L5271
3650 ; 695 default: MTC_DisableMCOutputs(); // All MCO outputs OFF (0 with positive polarity)
3653 ; 696 break;
3656 03a9 cc0014 jp _MTC_DisableMCOutputs
3657 03ac L1761:
3658 ; 663 case BRAKE_WAIT_DEMAG: if ( ART_IsSequenceCompleted() )
3660 03ac cd0000 call _ART_IsSequenceCompleted
3662 03af 4d tnz a
3663 03b0 275d jreq L5271
3664 ; 666 MTCStatus &= (u8)(~BRAKE_WAIT_DEMAG);
3666 03b2 1310 bres _MTCStatus,#1
3667 ; 667 MTCStatus |= BRAKE_SET_UP;
3669 03b4 1410 bset _MTCStatus,#2
3670 ; 668 ART_SetSequenceDuration (CURRENT_SETUP_TIME);
3672 03b6 5f clr x
3673 03b7 a605 ld a,#5
3674 03b9 cd0000 call _ART_SetSequenceDuration
3676 ; 669 MCPUL = 0;
3678 03bc 4f clr a
3679 03bd b768 ld _MCPUL,a
3680 ; 670 MCPUH = 0;
3682 03bf b767 ld _MCPUH,a
3683 ; 671 MCPVL = 0;
3685 03c1 b766 ld _MCPVL,a
3686 ; 672 MCPVH = 0;
3688 03c3 b765 ld _MCPVH,a
3689 ; 673 MCPWL = 0;
3691 03c5 b764 ld _MCPWL,a
3692 ; 674 MCPWH = 0;
3694 03c7 b763 ld _MCPWH,a
3695 ; 675 MTC_EnableMCOutputs();
3699 03c9 cc000d jp _MTC_EnableMCOutputs
3700 03cc L3761:
3701 ; 679 case BRAKE_SET_UP: CurrentDutyCycle = ((256*MCPUH + MCPUL)>>3);
3703 03cc be67 ld x,_MCPUH
3704 03ce bb68 add a,_MCPUL
3705 03d0 2401 jrnc L401
3706 03d2 5c inc x
3707 03d3 L401:
3708 03d3 57 sra x
3709 03d4 46 rrc a
3710 03d5 57 sra x
3711 03d6 46 rrc a
3712 03d7 57 sra x
3713 03d8 46 rrc a
3714 03d9 b7ff ld _MTC_Brake$L-1,a
3715 03db bffe ld _MTC_Brake$L-2,x
3716 ; 680 if (CurrentDutyCycle == BrakeDutyCycle) // Expected duty cycle reached
3718 03dd c10002 cp a,L3701_BrakeDutyCycle+1
3719 03e0 260a jrne L1371
3720 03e2 c30001 cp x,L3701_BrakeDutyCycle
3721 03e5 2605 jrne L1371
3722 ; 682 MTCStatus &= (u8)(~BRAKE_SET_UP);
3724 03e7 1510 bres _MTCStatus,#2
3725 ; 683 MTCStatus |= BRAKE;
3727 03e9 1610 bset _MTCStatus,#3
3730 03eb 81 ret
3731 03ec L1371:
3732 ; 685 else if (ART_IsSequenceCompleted())
3734 03ec cd0000 call _ART_IsSequenceCompleted
3736 03ef 4d tnz a
3737 03f0 271d jreq L5271
3738 ; 687 CurrentDutyCycle++;
3740 03f2 3cff inc _MTC_Brake$L-1
3741 03f4 2602 jrne L011
3742 03f6 3cfe inc _MTC_Brake$L-2
3743 03f8 L011:
3744 ; 688 ToCMPxL(MCPUL,CurrentDutyCycle);
3746 03f8 b6ff ld a,_MTC_Brake$L-1
3747 03fa 48 sll a
3748 03fb 48 sll a
3749 03fc 48 sll a
3750 03fd b768 ld _MCPUL,a
3751 ; 689 ToCMPxH(MCPUH,CurrentDutyCycle);
3753 03ff b6ff ld a,_MTC_Brake$L-1
3754 0401 befe ld x,_MTC_Brake$L-2
3755 0403 54 srl x
3756 0404 46 rrc a
3757 0405 54 srl x
3758 0406 46 rrc a
3759 0407 54 srl x
3760 0408 46 rrc a
3761 0409 54 srl x
3762 040a 46 rrc a
3763 040b 54 srl x
3764 040c 46 rrc a
3765 040d b767 ld _MCPUH,a
3766 040f L5271:
3767 ; 698 }
3770 040f 81 ret
3799 ; 708 void MTC_StopBraking( void )
3799 ; 709 {
3800 switch .text
3801 0410 _MTC_StopBraking:
3804 ; 711 MTCStatus &= (u8)(~(BRAKE_WAIT_DEMAG + BRAKE_SET_UP + BRAKE));
3806 0410 b610 ld a,_MTCStatus
3807 0412 a4f1 and a,#241
3808 0414 b710 ld _MTCStatus,a
3809 ; 713 MCPUH = 0;
3811 0416 4f clr a
3812 0417 b767 ld _MCPUH,a
3813 ; 714 MCPVH = 0;
3815 0419 b765 ld _MCPVH,a
3816 ; 715 MCPWH = 0;
3818 041b b763 ld _MCPWH,a
3819 ; 716 MISR = 0xFF; // Force PWM duty cycle updation
3821 041d 4a dec a
3822 041e b759 ld _MISR,a
3823 ; 718 MTC_DisableMCOutputs(); // All MCO outputs OFF (0 with positive polarity)
3825 0420 cd0014 call _MTC_DisableMCOutputs
3827 ; 720 MIMR |= MIMR_PUM_OR; // Re-enable the PWM U interrupts
3829 0423 b658 ld a,_MIMR
3830 0425 aa80 or a,#128
3831 0427 b758 ld _MIMR,a
3832 ; 722 }
3835 0429 81 ret
3859 ; 742 BOOL MTC_CheckEmergencyStop(void)
3859 ; 743 {
3860 switch .text
3861 042a _MTC_CheckEmergencyStop:
3864 ; 744 return(MCES_Status);
3866 042a c60000 ld a,L5701_MCES_Status
3869 042d 81 ret
3893 ; 747 void MTC_ClearEmergencyStop(void)
3893 ; 748 {
3894 switch .text
3895 042e _MTC_ClearEmergencyStop:
3898 ; 749 MCES_Status = FALSE;
3900 042e 4f clr a
3901 042f c70000 ld L5701_MCES_Status,a
3902 ; 750 }
3905 0432 81 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -