かみやんの技術者ブログ

主にプログラムの話です

ロータリーエンコーダのエラー

前回のエントリーに引き続き、まず、速度制御のための試験を色々した。
がっくんがっくん速度がゆれる問題だが、PD制御(フィードバック制御)をやめて、フィードフォワード制御(ま、つまり制御していない)にした。
がっくんがっくんしながら進むとき、モータードライバSabertoothの赤のエラーLEDが光るのが原因かもとも思っていたが、試験したら違っていた。

デューティー 試験結果
10% ぎりぎり発進できる。これ以下だとモータギアの抵抗でモータが回らない。5mmの段差が乗り越えられなかった。走っている感じとしては、非常にゆっくり、静か
20% まぁゆっくりという感じ。5mmの段差が超えられる
30% 室内で走るにはちょうどよい速度
40% 室内で走るのにちょっと速いぐらい
60% エラーLEDがちょっと光る、すべるフロアでは急ブレーキで滑り始める、割とうるさい、いっしょに歩くのにちょうどいい速度
80% エラーLEDがちょっと光る、すべるフロアでは急ブレーキで結構すべる、割とうるさい、やは早歩きぐらいの速度
100% エラーLEDがかなり光る、すべるフロアではかなりすべる、割とうるさい、小走りでないと追いつけない

結果分かったのは、エラーLEDは光っても急停止、ブレーキにはなっていないということ。単にPD制御のゲインが悪かったようだ。ついでに外でも少し走らせたが、割と快適。だけど車輪に貼ってある滑り止めがすぐにボロボロになった。以前のゴムの滑り止めは全然ボロボロにならなかったが、このエントリの「止まるんです」では、屋外には向いていないようだ。

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

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

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

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