AX12とMX64について

去年の製作中,AX12とMX64のサーボを使ったけど,当時はmbed上での制御はうまくできなかったのでArduinoを使って操作しました.だが,せっかくmbedのARM系マイコンを勉強したので,mbedでの制御も実現したい.

なので,Arduino用のライブラリ(フランス語)chrisさんのライブラリ(chrisさんはmbedのハード部分の開発者)を参照してこの二つのライブラリを作りました.

まず,Robotisの公式サイトでAX12 http://support.robotis.com/jp/product/dynamixel/ax_series/dxl_ax_actuator.htm

MX64http://support.robotis.com/jp/product/dynamixel/mx_series/mx-64.htmのデータシートを見てください.

寸法図 AX12 http://www.robotis.com/view/AX-12A_18A/AX-12A.pdf

MX64http://www.robotis.com/view/MX-64T/MX-64T.pdf

注意!

ここのMX64はMX64Tを指してます. 他にもMX64Rがある,性能が全く同じだが,通信方法では64TがTTLを使ってる64RではRS485を使ってます.

AX12とMX64の違いについてはこのページに参照してくださいhttps://mbed.org/users/ppr2013G2/code/MX64/wiki/Library

それでは,ライブラリは下のページでインポートできます.

Import libraryAX12

new ax12 lib

Import libraryMX64

Fork from Dynamixel AX12 Servo for MX64 use and not-finishi now

SerialHalfDuplex

Import librarySerialHalfDuplex

Serial Half Duplex implementation

また,このライブラリが必須です,昔この部分はmbedのheader fileに入っていたが,最近では削除したらしいので,手動でインポートする必要があると思う...

APIいわゆる使い方は各ライブラリのAPIDocumentationのページをみてください. https://mbed.org/media/uploads/chris/ax12pinout.png 回路図

Import program2014-mx64-test

sample test program with Mx64

Import program2014-ax12-test

sample test program with Ax12

Import library

Public Member Functions

MX64 (PinName tx, PinName rx, int ID, int baud=1000000)
Create an MX64 servo object connected to the specified serial port, with the specified ID.
int SetMode (int mode)
Set the mode of the servo.
int SetBaud (int baud)
Set baud rate of all attached servos.
int SetGoal (int degrees, int flags=0)
Set goal angle in integer degrees, in positional mode.
int SetGoalSpeed (int degrees, int speed, int flags=0)
Set goal angle in integer degrees, in positional mode.
int SetCRSpeed (float speed)
Set the speed of the servo in continuous rotation mode.
int SetCWLimit (int degrees)
Set the clockwise limit of the servo.
int SetCCWLimit (int degrees)
Set the counter-clockwise limit of the servo.
int SetID (int CurrentID, int NewID)
Change the ID of a servo.
int isMoving (void)
Poll to see if the servo is moving.
void trigger (void)
Send the broadcast "trigger" command, to activate any outstanding registered commands.
float GetPosition ()
Read the current angle of the servo.
float GetTemp (void)
Read the temperature of the servo.
float GetVolts (void)
Read the supply voltage of the servo.

又,今のライブラリはほとんどchrisさんのコードなので,このプログラムの構造だと,配線一本で複数のサーボを動かす場合には多少不安定と思う...実験していないですが,理論上は複数インスタンスを定義したらそれぞれ命令を出せば動けるのはずが,一つじゃなくて複数のpackageを送ったり受けたりのは不安定と思う.

5/30追加:インスタンス複数定義とBroadcastID(254)両方実験した,サーボの数を増えるとBroadcastの方は不安定となってます. また,AX12とMX64混在する場合は電圧要注意!!!


Please log in to post comments.