📄 mc_bldc_drive.ls
字号:
1377 00f7 240f jruge L136
1379 00f9 b601 ld a,L32_bValidatedMeasuredSpeed
1380 00fb 4a dec a
1381 00fc 260a jrne L136
1382 ; 205 bHallError++;
1384 00fe 3c00 inc _bHallError
1385 ; 206 if (bHallError >= HALL_MAX_ERROR_NUMBER)
1387 0100 2706 jreq L136
1388 ; 208 DriveStatus = FUNCTION_ERROR;
1390 0102 35020001 mov L12_DriveStatus,#2
1391 ; 209 bValidatedMeasuredSpeed = 0;
1393 0106 b701 ld L32_bValidatedMeasuredSpeed,a
1394 0108 L136:
1395 ; 212 if (hSpeed_01HZ > HALL_MIN_SPEED_01HZ)
1397 0108 a300c9 cpw x,#201
1398 010b 2506 jrult L536
1399 ; 214 bValidatedMeasuredSpeed = 1;
1401 010d 35010001 mov L32_bValidatedMeasuredSpeed,#1
1402 ; 215 bHallError = 0;
1404 0111 3f00 clr _bHallError
1405 0113 L536:
1406 ; 230 hMeasuredSpeed = (u16)(((u32)bHztoRPM * hSpeed_01HZ)/100);
1408 0113 b60b ld a,_bHztoRPM
1409 0115 5f clrw x
1410 0116 97 ld xl,a
1411 0117 1603 ldw y,(OFST-1,sp)
1412 0119 cd0000 call c_umul
1414 011c ae0004 ldw x,#L06
1415 011f cd0000 call c_ludv
1417 0122 be02 ldw x,c_lreg+2
1418 0124 1f01 ldw (OFST-3,sp),x
1419 ; 231 hTargetSpeed = g_pMotorVar->hTarget_rotor_speed/2;
1421 0126 be0c ldw x,L3_g_pMotorVar
1422 0128 a602 ld a,#2
1423 012a ee04 ldw x,(4,x)
1424 012c cd0000 call c_sdivx
1426 012f 1f03 ldw (OFST-1,sp),x
1427 ; 233 if (hTargetSpeed < 0)
1429 0131 2a0e jrpl L736
1430 ; 235 hTargetSpeed = -hTargetSpeed; // hTargetSpeed is the absolute value
1432 0133 50 negw x
1433 0134 1f03 ldw (OFST-1,sp),x
1434 ; 236 g_pMotorVar->hMeasured_rotor_speed = -hMeasuredSpeed; // Visualize negative speed
1436 0136 1e01 ldw x,(OFST-3,sp)
1437 0138 90be0c ldw y,L3_g_pMotorVar
1438 013b 50 negw x
1439 013c 90ef02 ldw (2,y),x
1441 013f 2006 jra L146
1442 0141 L736:
1443 ; 240 g_pMotorVar->hMeasured_rotor_speed = hMeasuredSpeed; // Visualize positive speed
1445 0141 be0c ldw x,L3_g_pMotorVar
1446 0143 1601 ldw y,(OFST-3,sp)
1447 0145 ef02 ldw (2,x),y
1448 0147 L146:
1449 ; 243 if (bValidatedMeasuredSpeed == 1)
1451 0147 b601 ld a,L32_bValidatedMeasuredSpeed
1452 0149 4a dec a
1453 014a 2620 jrne L346
1454 ; 246 if (g_pMotorVar->bAutoDelay)
1456 014c be0c ldw x,L3_g_pMotorVar
1457 014e e616 ld a,(22,x)
1458 0150 2704 jreq L546
1459 ; 248 BLDCDelayCoefComputation(hMeasuredSpeed);
1461 0152 1e01 ldw x,(OFST-3,sp)
1462 0154 ad26 call _BLDCDelayCoefComputation
1464 0156 L546:
1465 ; 253 outPid = PID_REG(hTargetSpeed,hMeasuredSpeed,g_pPID_Speed);
1467 0156 be09 ldw x,_g_pPID_Speed
1468 0158 89 pushw x
1469 0159 1e03 ldw x,(OFST-1,sp)
1470 015b 89 pushw x
1471 015c 90be09 ldw y,_g_pPID_Speed
1472 015f 90ee02 ldw y,(2,y)
1473 0162 1e07 ldw x,(OFST+3,sp)
1474 0164 90fe ldw y,(y)
1475 0166 90fd call (y)
1477 0168 5b04 addw sp,#4
1479 016a 2002 jra L746
1480 016c L346:
1481 ; 269 outPid = hTargetSpeed;//g_pMotorVar->hDuty_cycle;
1483 016c 1e03 ldw x,(OFST-1,sp)
1484 016e L746:
1485 016e 1f01 ldw (OFST-3,sp),x
1486 ; 277 if (DriveState == DRIVE_RUN)
1488 0170 b600 ld a,L71_DriveState
1489 0172 a104 cp a,#4
1490 0174 2603 jrne L156
1491 ; 289 *pDutyCycleCounts_reg = outPid;
1493 0176 92cf02 ldw [L51_pDutyCycleCounts_reg.w],x
1494 0179 L156:
1495 ; 304 }
1498 0179 5b04 addw sp,#4
1499 017b 81 ret
1554 switch .const
1555 0008 L07:
1556 0008 ffffff23 dc.l -221
1557 000c L27:
1558 000c 00000400 dc.l 1024
1559 ; 306 void BLDCDelayCoefComputation(u16 Motor_Frequency)
1559 ; 307 {
1560 switch .text
1561 017c _BLDCDelayCoefComputation:
1563 017c 89 pushw x
1564 017d 89 pushw x
1565 00000002 OFST: set 2
1568 ; 309 if (Motor_Frequency <= Freq_Min)
1570 017e a30bb9 cpw x,#3001
1571 0181 2404 jruge L107
1572 ; 311 BEMF_Rising_Factor = Rising_Fmin;
1574 0183 a680 ld a,#128
1575 ; 312 BEMF_Falling_Factor = Falling_Fmin;
1577 0185 2041 jp L517
1578 0187 L107:
1579 ; 314 else if (Motor_Frequency <= F_1)
1581 0187 1e03 ldw x,(OFST+1,sp)
1582 0189 a30dad cpw x,#3501
1583 018c 2438 jruge L507
1584 ; 316 BEMF_Rising_Factor = (u8)(Rising_Fmin + (s32)(alpha_Rising_1*(Motor_Frequency-Freq_Min)/1024));
1586 018e 1d0bb8 subw x,#3000
1587 0191 cd0000 call c_uitolx
1589 0194 ae0008 ldw x,#L07
1590 0197 cd0000 call c_lmul
1592 019a ae000c ldw x,#L27
1593 019d cd0000 call c_ldiv
1595 01a0 a680 ld a,#128
1596 01a2 cd0000 call c_ladc
1598 01a5 b603 ld a,c_lreg+3
1599 01a7 6b01 ld (OFST-1,sp),a
1600 ; 317 BEMF_Falling_Factor = (u8)(Falling_Fmin + (s32)(alpha_Falling_1*(Motor_Frequency-Freq_Min)/1024));
1602 01a9 1e03 ldw x,(OFST+1,sp)
1603 01ab 1d0bb8 subw x,#3000
1604 01ae cd0000 call c_uitolx
1606 01b1 ae0008 ldw x,#L07
1607 01b4 cd0000 call c_lmul
1609 01b7 ae000c ldw x,#L27
1610 01ba cd0000 call c_ldiv
1612 01bd a680 ld a,#128
1613 01bf cd0000 call c_ladc
1615 01c2 b603 ld a,c_lreg+3
1617 01c4 2004 jra L307
1618 01c6 L507:
1619 ; 319 else if (Motor_Frequency <= F_2)
1621 ; 321 BEMF_Rising_Factor = (u8)(Rising_F_1 + (s16)(alpha_Rising_2*(Motor_Frequency-F_1)/1024));
1622 ; 322 BEMF_Falling_Factor = (u8)(Falling_F_1 + (s16)(alpha_Falling_2*(Motor_Frequency-F_1)/1024));
1624 ; 324 else if (Motor_Frequency <= Freq_Max)
1627 01c6 a614 ld a,#20
1628 ; 326 BEMF_Rising_Factor = (u8)(Rising_F_2 + (u16)(alpha_Rising_3*(Motor_Frequency-F_2)/1024));
1629 ; 327 BEMF_Falling_Factor = (u8)(Falling_F_2 + (u16)(alpha_Falling_3*(Motor_Frequency-F_2)/1024));
1631 01c8 L517:
1632 ; 331 BEMF_Rising_Factor = Rising_Fmax ;
1635 01c8 6b01 ld (OFST-1,sp),a
1636 ; 332 BEMF_Falling_Factor = Falling_Fmax;
1638 01ca L307:
1642 01ca 6b02 ld (OFST+0,sp),a
1643 ; 335 g_pMotorVar->bRising_Delay = BEMF_Rising_Factor;
1645 01cc be0c ldw x,L3_g_pMotorVar
1646 01ce 7b01 ld a,(OFST-1,sp)
1647 01d0 e70d ld (13,x),a
1648 ; 336 g_pMotorVar->bFalling_Delay = BEMF_Falling_Factor;
1650 01d2 7b02 ld a,(OFST+0,sp)
1651 01d4 e70c ld (12,x),a
1652 ; 337 }
1655 01d6 5b04 addw sp,#4
1656 01d8 81 ret
1866 xdef _BLDCDelayCoefComputation
1867 xdef _GetSpeed_01HZ
1868 xdef _BLDC_Drive
1869 switch .ubsct
1870 0000 _bHallError:
1871 0000 00 ds.b 1
1872 xdef _bHallError
1873 0001 L12_DriveStatus:
1874 0001 00 ds.b 1
1875 0002 L51_pDutyCycleCounts_reg:
1876 0002 0000 ds.b 2
1877 0004 L31_pcounter_reg:
1878 0004 0000 ds.b 2
1879 0006 L11_g_pdevice:
1880 0006 0000 ds.b 2
1881 0008 _bSpeed_PID_sampling_time:
1882 0008 00 ds.b 1
1883 xdef _bSpeed_PID_sampling_time
1884 0009 _g_pPID_Speed:
1885 0009 0000 ds.b 2
1886 xdef _g_pPID_Speed
1887 000b _bHztoRPM:
1888 000b 00 ds.b 1
1889 xdef _bHztoRPM
1890 000c L3_g_pMotorVar:
1891 000c 0000 ds.b 2
1892 xref _vtimer_SetTimer
1893 xref _Get_BLDC_Struct
1894 xref _dev_driveWait
1895 xref _dev_driveStop
1896 xref _dev_driveRun
1897 xref _dev_driveStartUp
1898 xref _dev_driveStartUpInit
1899 xref _dev_driveIdle
1900 xref _dev_driveInit
1901 xdef _driveFault
1902 xdef _driveWait
1903 xdef _driveStop
1904 xdef _driveRun
1905 xdef _driveStartUp
1906 xdef _driveStartUpInit
1907 xdef _driveIdle
1908 xdef _driveInit
1909 xref.b c_lreg
1910 xref.b c_x
1911 xref.b c_y
1931 xref c_ladc
1932 xref c_ldiv
1933 xref c_lmul
1934 xref c_sdivx
1935 xref c_umul
1936 xref c_idiv
1937 xref c_ludv
1938 xref c_rtol
1939 xref c_uitolx
1940 xref c_ltor
1941 end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -