Cheetah開源電機驅動控制解析

著名的MIT Cheetah Mini四足機器人開源了所有軟硬件,包括機載電腦和關節驅動器的軟硬件全部開源。這一篇就根據開源的驅動控制軟件及相關論文,探索其核心控制算法框架。這篇文章需要結合源代碼來看。
主要參考了lab 成員 Benjamin Katz 的論文《A low cost modular actuator for dynamic robots.》,以及公開的源代碼https://os.mbed.com/users/benkatz/code/Hobbyking_Cheetah_Compact_DRV8323/。

1. 驅動器狀態機

1.1 五種狀態

總共有這五種狀態:

  • #define REST_MODE 0
    這個狀態下,調用一次enter_menu_state()函數,這個函數做的操作是:禁用驅動IC DRV832x、串口打印menu、led=0;

  • #define CALIBRATION_MODE 1
    這個狀態下運行一次calibrate()函數,這個函數做的操作是:使能驅動IC DRV832x、led=1、調用確定相序函數order_phase()、調用標定函數calibrate()、led=0、串口打印提示、禁用驅動IC DRV832x;
    其中確定相序函數order_phase()和標定函數calibrate()具體實現後面再講;

  • #define MOTOR_MODE 2
    運行enter_torque_mode()函數一次,然後不斷循環torque_control()和commutate()函數,控制頻率爲40khz;
    enter_torque_mode()函數主要是foc控制器的復位處理,具體操作是:使能驅動IC DRV832x、復位超壓標誌、調用reset_foc()函數復位foc控制器、led=1;
    其中torque_control()和commutate()兩個函數是具體的FOC控制過程後面再講;

  • #define SETUP_MODE 4
    調用enter_setup_state()函數,該函數中通過串口打印Configuration Options;

  • #define ENCODER_MODE 5
    串口不斷打印機械位置、電氣位置和原始位置;

1.2 通過串口操作

在串口中斷中接收上位機發送過來的指令,根據不同的指令進行不同的操作。有如下幾種情況:

  • 無論當前處於什麼狀態,如果串口接收到Esc鍵,則返回REST_MODE;

  • 如果當前狀態爲REST_MODE
    串口打印manu,可以通過如下指令進入相應的模式;
    m - Motor Mode
    c - Calibrate Encoder
    s - Setup
    e - Display Encoder
    z - Set Zero Position:重新設置機械零位,並寫入flash

  • 如果當前狀態爲SETUP_MODE
    串口打印Configuration Options,可以通過指令對參數進行設置,並寫入flash
    b - Current Bandwidth (Hz)
    i - CAN ID
    m - CAN Master ID
    l - Current Limit (A)
    f - FW Current Limit (A)
    t = CAN Timeout (cycles)(0 = none)

  • 如果當前狀態爲ENCODER_MODE
    串口會不斷打印機械位置、電氣位置和原始位置值,可以通過Esc鍵停止打印並返回REST_MODE

  • 如果當前狀態爲MOTOR_MODE
    通過鍵入‘d’可以讓foc的參考輸入電流爲0,或者Esc鍵返回REST_MODE

  • 如果當前狀態爲CALIBRATION_MODE
    串口打印Calibration complete,可以通過Esc鍵返回REST_MODE

1.3 通過CAN操作

1.3.1 CAN接收

CAN接收也有兩種情況:

  • 如果當前狀態是MOTOR_MODE
    就是正常的控制指令,期望位置、期望速度、期望力矩、kp、kd等,參見後面CAN通信協議;

  • 如果當前狀態不是MOTOR_MODE
    接收到的CAN指令分三種情況:
    data[0]~data[6]=0xFF, data[7]=0xFC時,進入MOTOR_MODE
    data[0]~data[6]=0xFF, data[7]=0xFD時,進入REST_MODE
    data[0]~data[6]=0xFF, data[7]=0xFE時,進入設置Zero_Position,與串口設置不一樣,這裏設置的zero position不會保存到flash;

1.3.2 CAN發送

每接收到一包數據後,會立刻返回數據,返回的數據是機械角度、機械轉速、輸出力矩;

1.4 狀態之間的轉換

狀態之間的轉換,可以通過CAN進行,也可以通過串口。
通過CAN操作時,各狀態之間的關係如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章