RPU-10講座/第一章 RPU-10でできること
すいません m(_ _)m、本記事はブログ引越時に書式が崩れました。順次修正中です。
今回、G-TuneF108MはFUTABAのRPU-10を使用しています。時間が無かったので、ザクザクっとプログラム作っちゃったのですが、まこ君に「プログラムのやり方、アップします」と約束もしたので、数回に渡ってプログラミングテクニックとか紹介していこうと思います。内容は、こんな感じで進めようと思います。
- RPU-10でできること
- RS232C通信で、データのやりとり
- Flash ROM領域を使ったデータでのRS232C通信
- 待たないRS232C通信とボタンでLED点灯
- 電源電圧と加速度センサーの読み取り
- ボタンとロータリースイッチでブザーオン
- とにかくサーボ動作
- コンプライアンスの変更
- モーションっぽくサーボ動作
- RPU-10からサーボIDの書き換え
- 4つのサーボ動作
- ジャイロセンサの接続
- ジャイロセンサを使ってサーボへフィードバック
- 目玉LEDの点灯
- サーボ角度の取得
- ロングパケットでサーボ動作
そのほか、無線コントローラパッドとかもやろうかな、とは思っていますが、それは進み具合で、おいおい考えることにします。まずは、第一回目として、RPU-10でできることを紹介したいと思います。
■RPU-10の構成
RPU-10は、ATmega128をCPUとして搭載しており、入出力I/Fとして、RS232CとRS485があります。外付けEEPROMはありませんが、ATmega128には4KバイトのEEPROMが内臓されています。また、Flash ROM(いわゆるプログラム領域)として128Kバイト、RAMは4Kバイト内臓しています。RISCチップで8ビットとは言いながら、かなりの能力を持っているCPUと思います。sin()とかを実行しても、H8TINYとかの10倍速ぐらいで演算してくれます。クロックは、14.7456MHzという、あまり聞きなれない周波数ですが、実は、115.2Kbpsや460.8kbpsに適した周波数となっています。
Flash ROMは、1万回の書き換えが保障されているため、実際には外付けEEPROMの必要性はあまり感じません。また、RPU-10にはSTK500互換のブートローダがあらかじめ書き込まれているため、RS232Cさえあればプログラム可能となっています。ただし、Flash ROM (constなデータ)上のデータの取り扱いは、H8などとだいぶ異なるため、プログラム作成時、ちょっと注意が必要です。
RPU-10は、かなり割り切ったCPUボードで、外部I/Fについては、後述のものしかありません。そこがネックといえばネックなのですが、小型化に貢献しているとも言えますので、どちらを取るか、悩ましいところです。
■RPU-10でできること
RPU-10に内蔵されている加速度センサ以外に、ジャイロセンサとしてKONDOのKRG-3を2つ使用しています。RPU-10に載せているソフトウェアは、新作のSIPHA SYSTEMなのですが、もともとRPU-10自体がGYROセンサ用として2つのアナログ入力を持っていますので、これKRG-3を接続しています。
RPU-10の入出力機器をまとめると、以下のようになります。
- オンボード
- プッシュボタン
- ロータリースイッチ
- LED(電源LED横に配置)
- 3軸加速度センサ
- 電源電圧センサ
- ブザー(というかスピーカー)
- 外部インターフェイス
- RS232Cインターフェイス(PC通信用)
- RS485インターフェイス(サーボ用)
- LEDドライブ(2個、PWM出力可能)
- コントローラパッド
- ジャイロセンサ(2個、アナログ入力)
ここまではコネクタさえなんとかすればそのまま接続できますので、今後、接続方法や回路に加え、Best TechnologyのGCC Developer Liteに同梱されているRPU-10用ライブラリを使ったプログラミングと、それをどうプログラムの中で使うか?ということについて紹介して行きます。
課題としては、これ以上の接続をするときにどうすればいいのか?が悩みどころです。RPU-10、非常に割り切っているのでサイズはとても魅力的なのですが、これ以上の拡張をするには、RPU-10から直接I/O線を引き出すか、あるいはRS485でぶら下がる機器を開発してしまうか?というあたりになるかと思います。
センサ等の拡張について
接続センサを増やそうと思うと、上記のように、RPU-10を改造してI/Oを引き出すか、RS485でぶら下げるか?というあたりですが、RS485でぶら下げた場合、仮に460KBPSで通信できたとしても、ちょっとしたデータを取り込むのに、0.5msec程度の時間がかかってしまうのが難点ですね。しかし、このあたりは、相手方がインテリジェントなものにすることで、逆に処理分散という考え方をすることで良い結果を得ることができるかもしれません。FUTABAさんかHPIさんで、I/Oボード、出してくれないかなー、なんて思ったりして。
自作する場合、RS485コンバータとマイコンを載せる必要がありますので、どのあたりのマイコンがいいかなーと、いちおう模索中です。G-TuneF108Mに搭載することが前提ですので、あまり大きなものは載せられません。また、自作ということで、あまりにもピッチが小さいLSIは使えませんので、マイコンは20P前後でSOPタイプが入手可能、USARTあり、14.7456MHz動作可能(もしくはその倍数)、A/Dコンバータ内臓、それにやっぱりSOPのRS485コンバータってところでしょうか。そのものずばりの超小型CPUボードがあればそれが一番いいんですけど。そうなるとPICか、PSoCあたりか。PSoC、センサ処理(特にアナログ系)では超魅力的なんですが、開発環境を持っている人が少ないのであまり参考になるものを出せないかな…とちょっと心配。
あと、以前、「RPU-10とRS301が460KBPSで通信できなかった」と書きましたが、その後の調査で、CPUクロック的には問題が無さそうなので、引き続き、460KBPSへはあれこれ挑戦してみようと思っています。
※注意:本BLOGにてRPU-10での再プログラミングについての情報を公開していますが、これらはSISOが個人的に再プログラミングを行った時の技術情報を整理して紹介しています。GDLへのRPU-10ライブラリ同梱については、Best Technologyさんのご好意で、趣味人への1つのチャンスとして同梱してくださっていると理解しています。そのため、RPU-10の再プログラミングについては、くれぐれもご自身の責任で、また、Best TechnologyさんやFUTABAさんに問い合わせたりすることの無いようにお願いいたします。
早速のアップありがとうございますm(_ _)m
SISOさんに教わることのみでなく、自分でも努力してみようと思います。
基礎は教えを仰ぐことになりそうですが…
よろしくお願いします。