元高専生のロボット作り

元高専生のロボット作り

主にプログラミング, 電子系について書きます。たまに機械系もやります。メモ代わりの記事ばっか書きます

B3MサーボとAXサーボを並列で動かす

近藤のB3MサーボとDynamixelのAXサーボを並列で動かす必要があったのでやってみました。

使用したのは
・KONDO B3M-SC-1170-A
・Dynamixel AX-12A

です。

どちらも通信方式は半二重通信なのでLTC485を使用すれば使い分けることができます。B3Mは差動通信なのでD+とD-が必要ですが、AXシリーズはD+だけ接続すればよいです。


接続は以下のようにしてください。TX, RXはデバイスのTX、RXです。DEはHighなら送信モード、Lowなら受信モードになります。送信のみの使用なら+5Vに接続してもいいです。
f:id:sgrsn1711:20180817211702p:plain

実は、この接続に秋月のUSBシリアル変換モジュール(FT232)を接続すると、公式の設定用ソフトが使えてしまいます。
USBシリアル変換モジュールFT232

ソフト
B3M Managerソフトウェア | 近藤科学(B3Mサーボ用)
Besttechnology - Dynamixel Configurator [DXCONF] - ナレッジベース(AXサーボ用)

この場合は以下のように接続です。

f:id:sgrsn1711:20180817212655p:plain


とりあえず、mbedでプログラムを書いてみました。

ライブラリは以下です
B3MServo : B3MServo - Library for Kondo B3M Servo Motor | Mbed
AX12A : AX-12 | Mbed

多分、バージョンの関係でAX12のライブラリからエラーが出ると思うんですけど、その場合は、AX12.hの183行目の SerialHalfDuplex を消して、代わりに Serial としてください。

#include "mbed.h"
#include "AX12.h"
#include "B3MServo.h"

int main()
{
    B3MServo myServo(p13, p14, NC);
    AX12 myax12(p13, p14, 0xFE, 115200);
    myServo.onTorque(0);
    while(1)
    {
        myax12.SetGoal(0);
        myServo.controlAngle(0, 0);
        wait_ms(1000);
        
        myax12.SetGoal(90);
        myServo.controlAngle(0, 90);
        wait_ms(1000);
    }
}