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)
 


 方針
   主に以下のような方針でプログラミングした。
  1. サーボはシリアル接続。RCBなどは使わず、単独で動作。
     
  2. モーションデータなどは、EEPROMに保存。PCのモーションエディタから書き込める。
     
  3. サーボとの通信速度が遅いので、なるべく通信を省略。具体的には、サーボが接続されていないIDの信号は送らない。位置等に変化が無ければ信号は送らない。
 
 
こんな感じで入れました。 モーションエディタは自作 EEPROMに書き込んだデータで
屈伸させてみました
(ビデオWMV:1MB)
 
 
 ソフト製作で、はまった点
   コントローラを作成する時に、いくつかはまった点がある。
  1. サーボにsio1_set_pos等で指令を送った場合は、他のサーボへも指令するためには、応答を待ってからさらに数百μsの時間を置く必要がる。このことは、既に調査済みであったが、sio1_set_posで処理してくれているものと思い込んでいた。最初はサーボが誤動作したりスムーズに動かなかったため原因はノイズ等と思っていたが、sio1_set_posの後にwait(500)を入れたら安定しスムーズな動きになった。ただ、waitではその時間がもったいないので、当初は、「20ms間隔でで割り込みをかけて、全サーボに指令を送っていた」が、「0.5ms間隔で割り込みをかけて1.5msごとにサーボ1個ずつ指令を出す」ように変更した。
     
     
    連続で指令を送った場合ーーー3個目で返事が返ってきていない
    1.5ms間隔で指令を送った場合ーーーすべて返事が返ってきている

     
  2. サーボをシリアル制御する場合、電源投入後数百ms時間を待ってから制御信号を送る必要がある。
    このことは、SHマイコンやPowerPCでシリアル制御していた時から知っていたが、KCB-1 SDKの初期化関数sio1_init()でそのくらいやってくれていると思い込んでいた。sio1_init()は結局はシリアルの初期設定しかやってなかった。ボード起動後すぐに、wait(500000)とウェイトを入れて解決。
     
  3. EEPROMの書き込み関数eeprom_writeではページをまたがった書き込みができない。
    128バイト以下であればeeprom_write関数でページのまたがりも処理してくれていると思い込んでいて、あまり考えずに使ってはまった。データ量を計算してページまたぎの処理を入れて解決。
     
  4. printf(%d",a)は使えるが、printf("%s",str)は使えない。
    エラーが出ないので、気づかなかったが、%sは正常に出力されない。putsを使って解決。(設定で%sも使えるのかもしれないですけど))
     
  5. RAM容量が小さい。RAMが2kBしかないため大きな変数が使えない。変数をなるべく小さくするようにして対応。
     
  6. Windows Vista非対応?。付属ソフトHEWがWindows Vistaに完全に対応していない。一応、面倒な手続きを経てインストール・使用はできたが、アップデートでエラーが出るなど不具合が出たため面倒になり使用をやめてWindowsXPのPCにインストール・使用した。
 
 
 その他、思ったこと
  1. EEPROM容量が小さい。モーションデータやセンサフィードバックパラメータの保存ですぐいっぱいになる。それに、マニュアルやカタログでは128kByteが2つと成っているが、実際にSDKでユーザが使えるのはそのうち1つだけだと思うんだが。16bits×2ブロック=128kBなのでは。近藤科学に質問のメールを送ったが返事なし。EEPROMが128kBしか使えない不具合は、2008/5/9無償修理が発表されました。
      
  2. RAM容量が小さい。やはり入門機向けのボードか?RCBとの組み合わせで使用することを前提にしているのか?
     
  3. 低速シリアル端子が無い。PCと無線を同じポートに接続しなければいけないので、差し替えが必要。PCと無線で通信速度等が違うとさらに厄介。プログラムでどちらがつながっているか判断し、通信速度を決める必要がある。やっぱり自立ロボット用?
     
     
 同社サーボに対応したSDKが付いていて、特別な回路を追加しなくてもシリアル制御できるのは便利。また、同社サーボを使うコントローラ製作の勉強用としては、簡単に使えて良いんじゃないかと思う。SDKなんか見ると勉強になると思います。オリジナルコントローラへのステップアップとしても良いのでは。
 
 なかなかうまくいったので、モリゾーロボ2008年バージョンに採用することとした。