アブソリュートエンコーダを使用すると絶対角度を取得することができます。
ここで、アブソリュートエンコーダを使用して位置制御を行うことを考えると、以下のような問題が思いつきます。
ケース1
- 1.例えば、現在の角度が10degのとき、目標角度を350degに設定します。
- 2.目標値に向かって制御しますが、ここでオーバーシュートして350degを超え、現在の角度は370degになりました。
- 3.アブソリュートエンコーダによって絶対角度を取得すると10degなので、また1に戻り、ずっとぐるぐる回り続けてしまいます。
また、そもそも10degから20deg戻れば絶対角度では350degになるので、戻るように制御したいところです。
ケース2
現在の角度が350deg、目標角度を0degに設定しても、ケース1と同様に逆向きにぐるぐる回り続けてしまいます。
解決策
微分または差分を使う方法
エンコーダから取得した角度を常に微分しておき、その値が急激に大きくなった時が0degと360degの境界です
なので、これを利用して、360degを超えて10degになったとしても、370degなんだと判断がつきそうです。
まあ、この方法はわりとすぐに思いつきますね。
現在の値を2通り用意する方法
現在値に±360deg加減算したものを用意し、目標値との偏差がもっとも小さい値を利用します。
例えば、目標値350deg、エンコーダから取得した角度10degだとします。
A: 10deg
B: 10+360=370 deg
C: 10-360=-350 deg
A, B, Cのうち、目標値350degとの偏差が最も小さい値はBの370degなので、これを使用して制御を行うようにすればよいです。