ROBOZAK/ROBONOVA-I(roboBASIC)でアナログ出力ジャイロを使ういくつかの方法
| このブログにも何度も書いている内容ですが、ROBOZAK(roboBASIC)で使えるジャイロについてきちんとまとめたことがなかったので書いておこうと思います。(これから書く内容は、外部情報からの推定で、きちんと調べたものではありませんのでご注意下さい。正直専門外で、ど素人なので案外ウソばっかしかも(笑)) そんな状況であえて書くのは、この辺について、もしよくご存知の方がいれば何か情報が得られるかもーという期待からです。 |
| ● 現在使用できるジャイロについて 現在roboBASICで使用できるジャイロは、元々ラジコン(ラジコンは商標なのでRCと書いた方がいいかも)のヘリ等の姿勢制御に使うジャイロで受信機とサーボの間に挟む形のジャイロです。そのことから推定されるMR-C3024の動作は、下図の上段のようにPWM(Pulse Width Modulation:パルス幅変調)を入力しジャイロの位置変化によるPWMの変化をMR-C3024で読み取っているものと思います。あとでロジックアナライザを使って調べてみようと思ってますが恐らく入力は一定で出力のみ変化しているものと思います。もしそうであれば必ずしも入力のPWMは必須ではない様に思います。(MR-C3024の場合、いろいろセンサー類を付けていくとポートの増設をroboBASICがサポートしていないため深刻なポート不足になりますね。) |
|
| GWS PG-03 ハイテック Hitec HG-R01 近藤科学 kondo KRG-1 双葉 futaba G190 Micro Piezo Gyro |
| ● アナログ出力のジャイロを使うには・・・ 上記の通りだとするとジャイロのアナログ出力をPWMに変換してあげるだけです。(事前に上記のPWM出力がどの様に変化するのか調べておく必要ありです。)PWMの発生はそもそもMR-C3024で使われているATmega128ではサーボのコントロール等で行ってますし、同じAVRファミリーやPIC等マイコンでは標準的な機能です。またADポートについても分解能(余談ですがroboBASICで扱えるのは8ビットですが、ATmega128の本来の分解能は10ビットです。Byte型にしたかったんでしょうね。)の違いこそあれ、大抵のマイコンには内蔵されているのでこれも難しいことではありません。あとは1つ前の記事に書いたような3.3Vくらいの出力のジャイロを使う場合、OPアンプなどで出力の調整を行わなければならないかも知れません。(もしかすると10ビットの分解能があるので理論上は675まで検知でき、サーボのコントロールは1バイトで足りるので、レベル変換はいらないかも知れませんが。) |
|
| アナログ出力:村田製作所製のジャイロ(ENC-03R)など |
| ● もっとチカラ技 上記方法の場合、アナログ/PWM変換の回路を作るのに恐らく数百円でできるのでコスト的な問題はありませんが、サイズの問題とポートの問題は残ります。IN側で使わなかったとしても、ジャイロ用の命令を使っている限り、ポートからはPWM信号が出力されてしまいます。 次に考えられる方法は、折角アナログポートがあるのだから直結してしまう方法です。この方法の問題点は、前にも書きましたがroboBASICでは、アナログ値のミキシングの様な機能がないことです。(MANOIにはあります) ミキシングというとちょっとわかりにくいですが、サーボ関係の命令に変数、あるいは定数+変数の様な記述ができれば問題ないのです。かなり省略して書きますが、例えば、MOVE G24, ・・・100+GYRO#1*100みたいな記述ができれば、ジャイロ関係の命令を使わなくても記述できます。 ではどうすればいいか? いくつか方法がありますが、まず1つ目の方法は、MOVEをコンパイル(Pコード変換)した結果を実行時にダイナミックに書き換える方法です。記述がわかりにくくなることと元の値をどこかに控えておかなければならないので、roboBASICを使う限りはあまりいい方法ではありません。しかし、コンパイル時、この機能を盛り込んでオブジェクトを生成すれば、コーディングのみの変更でできるものと思います。 次の方法は、ゼロポイントの設定(テーブル)を書き換える方法です。ダイナミックにゼロポイント設定の値が反映されるかどうかわかりませんが、これはコーディングを変えればできそうな気がします。PEEK/POKEを使うので関係ないところを書き換えるととんでもないことが起こりそうです(笑) もう1つの方法は、roboBASIC自体にパッチを当てて、ADポート値をジャイロの関係の命令に反映させることです。つまり拡張命令を作ってしまうということです。 手順としては、(1)roboBASICを吸い上げるか、アップデート用のモジュールを入手する。・・・後者の方が楽かも。 (2)roboBASIC自体を逆アセンブルする・・・AVRはオブジェクトがわかりやすいので逆アセンブラを作るのも案外簡単かも。逆アセンブラ自体は、昔いくつも作っているので時間さえあればできます。 (3)パッチ作成・・・逆アセンブルしたコードに組み込んでアセンブルするか、文字通りパッチで外だしにするかです。(この手のリバースエンジニアリングが利用規約に照らしてどうかは別にして、前者は著作権の関係で公表できないですが、後者なら該当部分の公表はできそうです。) |
|
| ※公開されている逆アセンブルソース(?)もないこともないですが・・・ |
| ・・・とまぁ やりたいことは沢山あるのですが、時間は有限、本業の会社経営はおろそかにできないし、なので簡単にできそうなことからやっていこうと思います。まだ詳しい案内がありませんが、来月後半には、MANOIアスリートカップもありそうなので、できれば出場し前回(12月に)ボロ負けした雪辱を果たしたいと思ってます。そうするとROBOZAKは少しお休みしなければならないので、少し先になってしまうかも知れません。 |
| PS 昨日、クラリネットを購入しました。(この記事は書きかけです。) ライブ関係の記事も途中まで書いてあるのですが、きちんとまとまってないのでアップできずにいます。 時間を見てこっそりとアップしていきます。(笑) |
| 固定リンク
★ お探しの情報が見つからなかったとき、サイト内検索をしてみて下さい。






























コメント