Sensor – Me High-Power Encoder Motor Driver

概述:

Makeblock的編碼電機驅動模組是一個自帶控制器來進行PID運算的直流電機驅動模組。該模組使用ATmega328P作為控制的主晶片,相容Arduino模式,因此高級玩家也可以把這塊驅動板當作一個主控單元來使用。
我們的固件代碼存放在https://github.com/Makeblock-official/Me_EncodeDriver,由於老的固件協議過於複雜,所以我們後續只會對新的固件進行更新及維護,如果您希望獲得我們的最新服務支援,希望您參考第5章節的內容對您的固件進行更新。
使用Makeblock的編碼電機驅動模組,您可以通過發送I2C指令來控制雙路電機(帶編碼器)的正反轉速度,也可以直接設定電機的運動距離或者轉動角度。在最新的固件驅動中,兩路電機的PID參數,碼盤解析度,減速比還有模組的I2C位址都可以通過I2C匯流排來進行設置,設置的參數會自動保存在EEPROM中,即使重新上電,也不會丟失您的配置。因此該驅動模組可以相容市面上絕大多數種類的直流編碼電機。

 

如何使用老固件:

模組預設的I2C位址是0x09,如果想控制3個以上的編碼電機,就要使用到兩個編碼電機驅動模組,這時候就需要使用設置工具重新設置模組的I2C位址。否則兩個模組的I2C位址一致,是無法獨立進行控制的。由於設置工具是通過串口與驅動模組通信的,所以需要使用到USB轉串口的工具,在第5章節中會進一步說明這個工具的選購。

目前makeblock有磁編碼電機和光編碼電機兩種。不同的電機所需要設置的參數是不一樣的。磁編碼電機和光編碼電機的區別如下圖所示。

磁編碼電機露在碼盤外面的器件是一個4管腳的黑色霍爾感測器。而光編碼電機露在碼盤外面的是一個兩管腳的LED發射管。同時光編碼的碼盤有8個間隙,而磁編碼電機的碼盤是一個環形磁鐵。

1

如果您使用的是磁編碼電機,那麼你需要使用設置工具,將值設定為:

1

 

主要是減速比(reduction ratio)需要修改為46.67(預設值為 25.76852). 設置參數時,為了避免將不需要設置的參數給設置錯誤,請先使用<get>控制項讀取驅動模組原先的設置,然後重新設置減速比(reduction ratio)即可。關於電機各個參數的說明,在第6章節的常見問題中會進一步說明,有不清楚的可以參見第6章的內容。

如果使用的是光編碼電機,那麼有兩個參數需要修改,包括碼盤解析度(encoder resolution), 減速比(reduction ratio). 其設定的情況如下圖所示。

1

一般情況下,您所使用的兩個電機應該都是同一類型的,所以設置的時候,請注意兩個電機參數的同步修改。否則兩個電機的控制會出現不同步的情況。如果您需要使用三個以上的編碼電機,那麼I2C位址(I2C address)也是您必須進行設置的一個選項,這個I2C位址與程式的關係在後面的程式示例中會具體展示給大家。

 

設置好了固件的參數,您就可以開始使用arduino來對編碼電機進行控制使用了。

首先您需要在您本地的arduino安裝目錄下添加我們makeblock的驅動庫,最新固件庫的代碼位址: https://github.com/Makeblock-official/Makeblock-Libraries. 驅動庫的安裝說明在Git檔目錄的README.md中有詳細說明,請參考這個說明安裝即可。

如果已經按照說明安裝makeblock驅動庫完畢,那麼打開arduino之後,你應該能看到Example-> MakeBlockDrive這個目錄,在這個目錄的Me_EncoderDriver_Old這個目錄中就能看到4個簡單的示例程式,把任意程式燒錄進你的BaseBoard/Orion/UNO Shield主機板中即可進對電機以及驅動板進行測試。你也可以仿照示例程式,編輯自己的應用。

示例程式中,在創建物件時有這個語句:

這段代碼的 0x09即是驅動板的I2C位址,如果你沒有使用工具對I2C位址進行修改,那麼默認出廠的I2C位址一定是0x09。

1

如果你已經設置了I2C位址,然而又忘記了I2C設備的位址號,你可以採用以下方法去輪訓獲取你的I2C位址。

選擇示例程式 MakeBlockDrive->example->Me_I2CScan->Me_I2CScanTest

按照章節2的內容連接好主機板與編碼電機驅動板,將該示例程式燒錄進控制主機板,Arduino的串口監視介面的串列傳輸速率設置為9600,如果沒有異常的話,應該可以看到這樣的顯示。這裡顯示的 address就是I2C的從設備位址。

1

 

如何使用新固件

  • 新固件的使用與老固件類似,這裡僅列出有差異的地方
    1. 原始程式碼

    https://github.com/Makeblock-official/Me_EncodeDriver/tree/master/EncodeDriver-New/slave

    1. 示例程式

    如果已經按照說明安裝makeblock驅動庫完畢,那麼打開arduino之後,你應該能看到Example-> MakeBlockDrive這個目錄,在這個目錄的Me_EncoderDriver_New這個目錄中就能看到4個簡單的示例程式,把任意程式燒錄進你的BaseBoard/Orion/UNO Shield主機板中即可進對電機以及驅動板進行測試。你也可以仿照示例程式,編輯自己的應用。

    示例程式中,在創建物件時有這個語句:

     

    這段代碼的 0x09即是驅動板的I2C位址,如果你沒有使用工具對I2C位址進行修改,那麼默認出廠的I2C位址一定是0x09。

 

1

 

怎麼升級您的固件

升級固件需要使用到USB轉串口工具,由於升級過程需要對模組進行重定操作,所以選購串口模組時,請一定注意選用有RESET管腳的串口工具。

根據模組的絲印標識,以及您串口工具的標識把驅動模組與串口工具連接在一起。有5根線需要連接,TXD, RXD, 5V, GND, RESET. 其中TXD和RXD與串口工具的TXD和RXD可能需要交叉連接。

下圖是連線後的示意圖,

1

然後使用arduino IDE打開 EncodeDriver-New\slave\slave.ino 檔,選擇arduino UNO以及正確的COM口即可按照通用arduino UNO的燒錄方式更新固件。

1

 

常見問題

1) 什麼是減速比?
減速比,即減速裝置的傳動比,是傳動比的一種,是指減速機構中暫態輸入速度與輸出速度的比值。是減速電機中很重要的一個參數,都會標示在電機的標籤上。例如我們的編碼電機就有標示 Gear Ratio 1:46, 這裡是進行了取整處理。

2) 什麼是碼盤解析度
碼盤解析度是編碼電機中一個很重要的參數,用來表示碼盤在轉動一圈中所能檢測到的精度。我們的磁編碼電機的碼盤解析度是12,光編碼電機的碼盤解析度是8,因為老固件是針對磁編碼電機寫的,而霍爾感測器的一對磁極組合起來可以識別 4 個相位。所以設置碼盤解析度時,設置的值是真實碼盤解析度的4倍。

3) Makeblock編碼電機驅動的速度參數是什麼
我們的驅動使用的速度參數是RPM,rpm 是round per minute (revolution per minute) 的意思,即每分鐘電機轉動的圈數。

 

故障排查

  • 燒錄程式正常,連線正常,但是電機無法轉動

可能是主機板的電源撥碼開關沒有打開,或者直流電源沒有接入6-12V的直流插座。可以通過觀察編碼電機驅動板上的LED是否被點亮來進行排查。

 

  • 燒錄程式後,電機轉速或者位置移動異常

可能是驅動板的碼盤解析度或者減速比設置異常

 

  • 電機在轉動是有明顯抖動

需要重新設置PID參數,以達到較好的調整效果。