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のページをみてください.
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.