かみやんの技術者ブログ

主にプログラムの話です

で、本題のロータリーエンコーダのエラー

試験をしていると、時々止まっているときにカウンタがどんどん増えて行くことがあったので調査。以前は、モータのノイズで余分なカウントが増えるかなと思っていたが、色々試験しながら、オシロスコープで測ったところ、モータの電源が入っていなくてもカウンタがどんどん増えることが分かった。

結局のところ、上記のような感じだった。走っているときは、正しいカウントになるのだが、H8マイコンのカウンタ回路への入力の閾値ぴったりで、エンコーダ(計測輪)が止まってしまうと僅かな電圧の揺れで、どんどんカウントアップしてしまっている。最初、シュミットトリガICをはさめばいいか?と思ったが、フォトインタラプタ基板で計ってもマイコン入力直前で計っても波形は同じ。かつ、H8マイコンのカウンタ回路への入力は内部でシュミットトリガがついている。なので無駄。フォトインタラプタは、受光量を電圧に変えているわけで、受光量が半分(半分スリットの穴を通って、半分は板で遮られている)だと、中間の電圧で止まってしまう。そもそも機構的に駄目だということだ。次に考えたのが、カウントアップの周期をみて、この勝手にどんどんカウントアップされるときの周波数が高ければ、ソフトウェアで判別して捨てようかと思ったが、停止しているのに勝手にカウントアップされる周波数が400hz〜800hzで、時速4kmで走ったときが749hzで、思いっきり範囲がブッキングしているので、捨てられない。

かなり、困ったな〜。と思っていたら、よく考えたら、この閾値でのカウントアップ(振動)は、2相のロータリーエンコーダでは起こらないじゃん。と。1相が振動しているとき(受光量が半分のとき)は、2相目は必ず100%、穴か、板(遮断)で、振動することはない。A相が立ち上がりでカウントアップ、A相が立ち下がりのときB相に変化がないので、カウントダウン。となって、振動したら、カウンタが+1、-1、+1、-1を繰り返すだけで、カウンタの分解能以上には、誤差はでない。なるほど、だから市販のロータリーエンコーダは全部2相以上なのね。
結論。今のロボットは、1相だから後進できない&超信地旋回(その場旋回)という問題を抱えていたが、「そもそも機構的に1相のロータリーエンコーダは使い物にならない」ということだ。