AX-12まとめ

ぼちぼち追加していきます。参考程度に・・・

○雑感

いいとこ

         コストパフォーマンスがいい。

最大のメリットはこれですよね。やっぱり。

         今のところ燃えてません。

電流にリミッターがかかったり、ロックの検出もしてくれるので、FETが燃えるとかいった現象は(今のところ)ないです。

温度とかのエラーも検出してくれるので、普通に使ってれば、まず燃えないはず。

         シリアル接続できて配線がすっきりする。

         耳(でっぱり)があって、フレームも付属しているので、設計、加工が容易になる。

実際、こった設計をしなければ板材で事足ります。

 

悪いとこ

         うちでは、負荷の多いサーボ(膝とか)が頻繁に壊れました。

壊れたときは、サーボが指示を無視して回ります。が、リセットするとしばらく普通に使えて、また暴走します。

なので、一度この現象が出たら交換したほうがいいです。

         ブラケットを自作した場合、出力軸と反対軸の取り付けにゆがみがあると、サーボが壊れる(らしい)。

上の壊れる原因がこれみたいです。これは、加工精度を上げるか、最終段のギヤ、ホーンを金属化するしかないみたいです。

出てくれるとうれしいな・・・

         ホーンがプラ@中空なのですごくゆがむ。ここも金属がいいな・・・

         保持力が弱い。

あくまでK社サーボに比べてです。アナログよりは強いと思います。

これも、ホーン、ギヤがプラだからだと思います。すべて金属なら・・・

         コネクタの抜き差しを繰り返していると、徐々に抜けやすくなり、通信不良が発生しやすい。

何度これに泣いたことか・・・

 

 

 

 

 

○スペック

減速比

1/254

最大動作角度

300deg

電源電圧

DC7~12V (推奨電圧:9.6V)

最大電流

900mA

重量

55g

リンク方式

1ワイヤ双方向(5V TTLレベル)

ID数

254 ID (0~253)

通信速度

7343~1Mbps

 

 

カタログ値

推定値

電源電圧

7

9.6

12

15

トルク[kgf•cm]

12.0

16.5

20.6

25.7

速度[sec/60deg]

0.269

0.196

0.173

0.155

 

12、15Vのトルク、速度は勝手な推測ですので参考程度に。(一応、どちらも近似して出してます。)

・電源電圧は12V〜20V弱までは大丈夫だという噂です。(未確認)

 うちはリポ3S11.1V(実質12.6V)で動かしてます。

 

 

○通信

通信方式はRS485による単線双方向通信。

プロトコルは非同期通信(USART)でスタートビット1、データビット8、ストップビット1。

 

パケットはこんな感じ。

[0XFF] [0XFF] [ID] [LENGTH] [INSTRUCTION] [PARAMETER1] [PARAMETER2]…[PARAMETER N] [CHECK SUM]

 

0XFF、0XFF

パケットの始まりを表すもの。B11111111を2回送ります。

 

ID

送信先のIDを記入。

サーボ側に0〜253(0x00〜0XFD)まで指定が可能。

254(0XFE)を指定するとすべてのサーボに送信できます。(sync write参照)

 

LENGTH

INSTRUCTION〜CHECK SUMまでのバイト数を指定。

 

INSTRUCTION

命令セットを指定。

自分がよく使うのはREAD DATA(0x02)とSYNC WRITE(0x83)

 

PARAMETER

送信する命令セットに従ってサーボ内部メモリアドレス、データなどを記入。

 

CHECK SUM

ID〜PARAMETER Nの合計し反転したもの。

合計を出すときは8ビットの変数で加算していけばOK。

反転は以下のようにやるとXにAの1の補数が代入されます。

  X=~A

 

○メモリマップ

よく使うものだけ抜粋。

Address

Item

Access

Initial Value

 

3(0X03)

ID

RD,WR

 1(0x01)

 

4(0X04)

Baud Rate

RD,WR

34(0x22)

 

6(0X06)

CW Angle Limit(L)

RD,WR

0(0x00)

 

7(0X07)

CW Angle Limit(H)

RD,WR

0(0x00)

 

8(0X08)

CCW Angle Limit(L)

RD,WR

255(0xFF)

 

9(0X09)

CCW Angle Limit(H)

RD,WR

 3(0x03)

 

14(0X0E)

Max Torque(L)

RD,WR

 255(0XFF)

 

15(0X0F)

Max Torque(H)

RD,WR

3(0x03)

 

30(0X1E)

Goal Position(L)

RD,WR

[Addr36]value

目標値

31(0X1F)

Goal Position(H)

RD,WR

 [Addr37]value

32(0X20)

Moving Speed(L)

 RD,WR

0

動作速度

33(0X21)

Moving Speed(H)

 RD,WR

0

34(0X22)

Torque Limit(L)

 RD,WR

[Addr14] value

トルクを(トルクリミット/1023)にする

35(0X23)

Torque Limit(H)

 RD,WR

[Addr15] value

44(0X2C)

Registered Instruction

RD,WR

0(0x00)

 

46(0x2E)

Moving

RD 0(0x00)

 

自らのトルクで動作中かどうか

47(0x2F)

Lock

 RD,WR

0(0x00)

出力軸が外力によりロックしているか

 

 

○通信プログラム(参考までに)

http://www.geocities.jp/no_399/PG.txt

 

あくまで参考です。

説明等はほとんどありません。

気になるところがあれば質問してください。

 

main関数内でこう使ってます

byte関数でバッファに格納と同時にバイト数(sendnum)を加算しています。

Send関数の最後でsendnum=2としているのは、s[0]、s[1]に0XFFが入っているからです。

Seisei関数でパケット生成後、sendで送り、

Seisei関数の返り値の角度変位が最大のサーボ(maxid)を動作中かmoving関数で確認して、停止したか判断しています。