かみやんの技術者ブログ

主にプログラムの話です

ロータリエンコーダ反省点

ロータリーエンコーダを製作中によくなかったかな〜と思う点が多々。

  1. このエントリで透過型フォトインタラプタとしてSG214とすると書いて、SG214のギャップは3.6mmあるので、3mmのABS板でパターン板を作れば通ると書いたが、実装してみるとパターン板が揺れるせいで、センサに多少接触する。2つ作ったうち片方は接触せずかなりスムーズに回るが、もう片方が手で回すと多少抵抗がある。ギャップ3.6mmとパターン板3mmの差は0.6mmで左右に均等に隙間があっても隙間は0.3mm。パターン板の軸の角度が微妙にずれているようで0.3mmぐらいはガンガン揺れる感じ。2mmの板か1mmの板等でパターン板を作りなおすべきか。
  2. このエントリで、パターン板にもすべり止めテープを貼った。とあるが、滑り止めテープが走っていると一部横にずれてくる。横に0.1mmでもパターン板からずれると、即透過型フォトインタラプタに接触して回らなくなる。すべり止めテープが横にずれないようにするいい方法が思いつかない。3mm厚のパターン板に張るテープの幅を3mmにしているのがよくないか。2mmのテープとかにするか。いっそテープをなしにするか。
  3. このエントリで、正転逆転が判別できなくてよいか?と心配しているが、当初、私がイメージしていたのは、「モータを正転させているときにロータリエンコーダがカウントアップされていれば、正転と判断、モータを逆転させているときにロータリエンコーダがカウントアップされていれば、逆転と判断。モータを正転しているのにロータリエンコーダが逆転することは、急坂とかで車輪がスリップするときのみ。オフィスロボットを作っているので、そんな坂はないものとする」と考えていた。が、よく考えると車輪は減速機(タミヤ ギアードモータ540K75)と直結されていてバックラッシュがある。ロボットが発進、停止、後退のときにバックラッシュによってぶれる(振動することもあるかもしれない)。ぶれた時にロータリエンコーダが進んでもいないのにガンガン、カウントアップしてしまうかもしれない。ちなみに正転逆転を判別するならセンサーをもう一つ増やして90度位相をずらしたところに取り付けて、「A相立ち上がり、B相立ち上がりならカウントアップ、逆にB相立ち上がり、A相立ち上がりならカウントダウン」でアップダウンカウンタになる。H8-3069にはこれ専用のタイマ回路が1個だけついている(1個なのでこのロボットには使えないけど)。

はてさて、作りなおすか迷い中。

あと前回のエントリで旋回したわけだが、フルパワー正転、フルパワー逆転のため急発進、急ブレーキ過ぎて正確に1メートル前進とか180度旋回になっていない。試しに30%のパワーに変更してみたが、1mすすまず10cmぐらい進んで旋回、旋回も180度回らず、30度ぐらい旋回になってしまった。がーん。

まだちゃんと調査できていないが、モータのノイズで余分なカウントアップが大量に走っていたらどうしよう。ノイズ除去が必要だと面倒だな。ソフトウェアの単なるバグだといいのだが。

プログラムを書いているときのデバッグ方法だが、普段はシリアル出力でTeraTermに文字列を表示してデバッグしている。だが、ロボットを走らせるときは、「マイコンをON、PCからプログラムを転送、ロボットとPCをつないでいるシリアルケーブルをはずす、ロボットを広い場所に置く、ロボット動く」という感じで動かしている。そうすると、ロボットが動いているときは、デバッグ用のシリアル出力ができない。現状では、ロボットが走っているときに何が起こっているのかさっぱりわからない。
対策は、下記か。

  1. メモリ上にログ:ロボット移動中はRAMにデバッグ情報を出力。ロボットを停止させてPCとシリアルケーブルでつないで、TeraTermから何かキーを押したらRAM上に貯めたログを出力。ソフトウェアの改良必要。
  2. ロボットにノートPCを搭載:いっそロボットにノートPCを搭載して、ロボット移動中もシリアルケーブルでつないだまま、TeraTerm起動したままにしてTeraTermでログをとる。ソフトウェアの改良不要。

このエントリに書いたように元々PC搭載型ロボットをつくるつもりなので2.でいくか。1.だとキーボード入力をとるコードを書かないといけないがシリアル通信系のドライバをまだ全く書いたことがないのでちと面倒というのもある。