元高専生のロボット作り

元高専生のロボット作り

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

近藤のB3Mサーボモータをmbedとarduinoで動かす

高トルクなサーボモータが必要になったので近藤のB3M-SC-1170-Aを買いました。
B3M-SC-1170-A | 近藤科学


このサーボモータはよくあるPWMで指示するわけではなくシリアル通信で情報を送受信してやる必要があります。


PCからサーボモータを操作するには別売りのRS485USB/シリアル変換アダプターを用いてB3M Managerで簡単に操作できます。
RS485USB/シリアル変換アダプター | 近藤科学
B3M Managerソフトウェア | 近藤科学


ただ、僕は秋月のUSBシリアル変換モジュールを持っていたので次の記事を参考にさせていただきPCから動かすことはできました。
近藤科学のB3Mサーボを秋月のUSBシリアルモジュールで制御する

B3M Managerでの簡単な操作法
使用OSはwindows10です。先ほどの記事の通りに回路を組んだらB3M Managerを起動します。
COMポートはFT232を接続している番号を選択、その右の枠はボーレートです。最初は1500000を選択したら動きました。
Options and StatusタブからRun Mode枠の中がFreeになっているのでNormalに変更し、Writeをクリック。
あとはServo Parametersタブの、真ん中にあるバーを操作するだけでサーボモータが動きます。



で、記事タイトルの通りmbedで動かしたいのですが、シリアルのボーレートが1500000のままでは動かすことができません。

なので、B3M Managerからボーレートを変更します。SystemタブのSystem Configulations枠のBaudrateで115200を選択し、Writeをクリック。
ウィンドウ上、ROMからSave to ROMをクリック。

これでサーボモータのボーレートが115200 bpsに変更されました。

これでmbedやArduinoからサーボモータを操作できるようになります。

回路は以下のようになります。
f:id:sgrsn1711:20180527213639p:plain

LTC485の#REとDEピンをmbedのpin12に接続していますが送信しかしないのなら常にHighにしとけばいいので、+5Vとかに繋げてもいいです。


mbed用テストコードあげときました。
https://os.mbed.com/users/sgrsn/code/B3M_test/

モータ動かすだけのライブラリ作りました
https://os.mbed.com/users/sgrsn/code/B3MServo/


Arduinoだったらこう(#REとDEを5Vに接続しといてください)

char com1[] = {0x09, 0x04, 0x03, 0x00, 0x00, 0x00, 0x28, 0x01, 0x39};
char com2[] = {0x09, 0x04, 0x03, 0x00, 0xD0, 0x07, 0x2A, 0x01, 0x12};
char com3[] = {0x09, 0x04, 0x03, 0x00, 0x5A, 0x00, 0x2A, 0x01, 0x95};

void setup()
{
  Serial.begin(115200);
  Serial.write(com1, com1[0]);
  delay(2);
}

void loop()
{
  Serial.write(com2, com2[0]);
  delay(500);
  Serial.write(com3, com3[0]);
  delay(500);
}