KCB−1
近藤科学から同社シリアルサーボ対応のマイコンボードが出たということで、これを使ってコントローラを作成した。ソフトはSHマイコンのものを移植、PCのモーションエディタもこのコントローラ用に手直しをした。
仕様
KCB-1はサイズは非常に小さく、30×35mmしかない。重さも8gと軽い。何よりも、同社シリアルサーボ用のSDKが付いているので、プログラミングの負担が少し減るし、シリアルサーボ制御のためのハードの追加もいらない。ただし、モーションエディタはオリジナルで作成が必要となる。HeratToHeart等は使えない。
メーカー発表値です
|
KCB-1 |
BTC068
(ベストテクノロジー) |
BTC080
(ベストテクノロジー) |
CPU |
M16C/Tiny |
ATmega128 |
SH7145F |
大きさ(mm) |
30×35 |
30×39 |
49×57 |
重さ |
8g |
? |
? |
動作電圧 |
9-12V |
4.5-5.5V |
3.3V |
シリアルサーボポート |
2 |
なし
(自作で拡張) |
なし
(自作で拡張) |
PWM |
4 |
たくさん |
たくさん |
PIO |
8 |
53 |
98+8(入力専用) |
AD |
7 |
8 |
8 |
シリアルポート |
1 |
2 |
4 |
FlashROM |
64kB |
128kB |
256kByte
+2MByte(外部) |
RAM |
2kB |
4kB
+32kB(外部) |
8kB
+1MB(外部) |
EEPROM |
128kB×2
(ユーザが使用できる
のは128kB?) |
(4kB) |
ー |
方針
主に以下のような方針でプログラミングした。
- サーボはシリアル接続。RCBなどは使わず、単独で動作。
- モーションデータなどは、EEPROMに保存。PCのモーションエディタから書き込める。
- サーボとの通信速度が遅いので、なるべく通信を省略。具体的には、サーボが接続されていないIDの信号は送らない。位置等に変化が無ければ信号は送らない。
|
|
|
こんな感じで入れました。 |
モーションエディタは自作 |
EEPROMに書き込んだデータで
屈伸させてみました
(ビデオWMV:1MB) |
ソフト製作で、はまった点
コントローラを作成する時に、いくつかはまった点がある。
- サーボにsio1_set_pos等で指令を送った場合は、他のサーボへも指令するためには、応答を待ってからさらに数百μsの時間を置く必要がる。このことは、既に調査済みであったが、sio1_set_posで処理してくれているものと思い込んでいた。最初はサーボが誤動作したりスムーズに動かなかったため原因はノイズ等と思っていたが、sio1_set_posの後にwait(500)を入れたら安定しスムーズな動きになった。ただ、waitではその時間がもったいないので、当初は、「20ms間隔でで割り込みをかけて、全サーボに指令を送っていた」が、「0.5ms間隔で割り込みをかけて1.5msごとにサーボ1個ずつ指令を出す」ように変更した。
|
連続で指令を送った場合ーーー3個目で返事が返ってきていない |
|
1.5ms間隔で指令を送った場合ーーーすべて返事が返ってきている |
- サーボをシリアル制御する場合、電源投入後数百ms時間を待ってから制御信号を送る必要がある。
このことは、SHマイコンやPowerPCでシリアル制御していた時から知っていたが、KCB-1 SDKの初期化関数sio1_init()でそのくらいやってくれていると思い込んでいた。sio1_init()は結局はシリアルの初期設定しかやってなかった。ボード起動後すぐに、wait(500000)とウェイトを入れて解決。
- EEPROMの書き込み関数eeprom_writeではページをまたがった書き込みができない。
128バイト以下であればeeprom_write関数でページのまたがりも処理してくれていると思い込んでいて、あまり考えずに使ってはまった。データ量を計算してページまたぎの処理を入れて解決。
- printf(%d",a)は使えるが、printf("%s",str)は使えない。
エラーが出ないので、気づかなかったが、%sは正常に出力されない。putsを使って解決。(設定で%sも使えるのかもしれないですけど))
- RAM容量が小さい。RAMが2kBしかないため大きな変数が使えない。変数をなるべく小さくするようにして対応。
- Windows Vista非対応?。付属ソフトHEWがWindows Vistaに完全に対応していない。一応、面倒な手続きを経てインストール・使用はできたが、アップデートでエラーが出るなど不具合が出たため面倒になり使用をやめてWindowsXPのPCにインストール・使用した。
その他、思ったこと
- EEPROM容量が小さい。モーションデータやセンサフィードバックパラメータの保存ですぐいっぱいになる。
それに、マニュアルやカタログでは128kByteが2つと成っているが、実際にSDKでユーザが使えるのはそのうち1つだけだと思うんだが。16bits×2ブロック=128kBなのでは。近藤科学に質問のメールを送ったが返事なし。EEPROMが128kBしか使えない不具合は、2008/5/9無償修理が発表されました。
- RAM容量が小さい。やはり入門機向けのボードか?RCBとの組み合わせで使用することを前提にしているのか?
- 低速シリアル端子が無い。PCと無線を同じポートに接続しなければいけないので、差し替えが必要。PCと無線で通信速度等が違うとさらに厄介。プログラムでどちらがつながっているか判断し、通信速度を決める必要がある。やっぱり自立ロボット用?
同社サーボに対応したSDKが付いていて、特別な回路を追加しなくてもシリアル制御できるのは便利。また、同社サーボを使うコントローラ製作の勉強用としては、簡単に使えて良いんじゃないかと思う。SDKなんか見ると勉強になると思います。オリジナルコントローラへのステップアップとしても良いのでは。
なかなかうまくいったので、モリゾーロボ2008年バージョンに採用することとした。
|