磁気式エンコーダ
こんばんは
ここに追記しますが,自分はアブソリュートな角度を測定できるエンコーダを使っていません.
A相B相で角度を取得しています.(I相があればもっと良いのですが...)
今回は大会報告ではなく,皆さんお苦しみの磁気式エンコーダについて書きます.
自分も,9月下旬にハーフの機体を組みましたが,自作の磁気式エンコーダの値のブレが酷く制御どころではありませんでした.
そのときの速度ログがこちら↓

エンコーダで測定された1msec間のパルスのカウント数から速度を算出しています.
条件は,0.25Vくらい(?)の電圧をモータに入力し,空回ししました.
ギアのかみ合わせはそれなりに良かったので,周期的な摩擦の影響はないものと仮定します.
つまり,タイヤは一定の速度で回転しており,エンコーダで正しく測定できれば一定の速度が測定されるはずです.
100~350mm/sの範囲でぶれており,とても制御に使えるセンサー値ではありません.実際にこの状態で制御をすると,周期的にカッカッと音が聞こえ,急激な加減速が起こります.
上のグラフを見ると,多少のずれはありますが,50msecの周期性があります.これはタイヤ1回転とおおよそ一致しております.
このエンコーダのブレを直すために,ローパスフィルタをかける方や,加速度センサーと組み合わせて自作磁気式エンコーダを使用されている方がいらっしゃいますが,私はエンコーダのブレが周期的である点に着目し,ブレを無くすことを行いました.
1回転分のブレを詳しく見るために,モータに一定の電圧をかけ,タイヤが一回転する時間の角度ログをとりました.(下図)

青線が理想ですが,測定された赤線は大きくずれています.
ブレが1回転周期なので,1回転は正確に測定できます.
今回使用したエンコーダの1回転のパルス数は2048なので,ある時間にパルス数を0とし,その時間からパルス数が2048になるまでの角度を測定し,グラフにしたのが上の図になります.
角度を補正するために,下図のような青線に対して赤線が対象となるグラフを作成します.

↑11/14に横軸の単位を修正しました.
上図のグラフをルックアップテーブルとして用いて,エンコーダで測定された角度を補正します.
具体的には,
Sensor angle = 測定されたパルス数%一回転のパルス数
を求め,ルックアップテーブルを用いて補正します.
このルックアップテーブルを取得する作業を私は,エンコーダのキャリブレーションと呼んでいます(笑)
その結果がこちら(下図)

青線が理想で,赤線が測定し.なんと良い線形であろう!
ただ,少し問題があり,さきほど1回転が正確に取れると書きましたが,じゃっかんの誤差を含んでいるようです.(プログラムミスなのかわかりませんが...)
なので,キャリブレーション後に回転を重ねていくと,エンコーダの補正が甘くなります.
そこで,キャリブレーションしてから2048回転後と4096回転後の補正後角度ログをとりました.(空回し)
なんで4096回転にしたかというと,32*32*90/タイヤ直径/円周率が確か4000付近だからな気がします.(少し前の記憶)
↓2048回転後

↓4096回転後

まあ,ちょっとずつ補正後の値がぶれてしまいますが,まあ現状は問題ないです.ローパスフィルターや加速度センサーを使わなくても走ってます.
最後に,空回しではなく,実際に走行させた場合の速度ログの比較.
(このデータを取ったときは,機構的な
磁石の回転ブレを無くす処置を行ったので,補正前のブレが少し少なくなっている)
↓補正前

↓補正後

では,よき自作磁気式エンコーダーライフを!
ここに追記しますが,自分はアブソリュートな角度を測定できるエンコーダを使っていません.
A相B相で角度を取得しています.(I相があればもっと良いのですが...)
今回は大会報告ではなく,皆さんお苦しみの磁気式エンコーダについて書きます.
自分も,9月下旬にハーフの機体を組みましたが,自作の磁気式エンコーダの値のブレが酷く制御どころではありませんでした.
そのときの速度ログがこちら↓

エンコーダで測定された1msec間のパルスのカウント数から速度を算出しています.
条件は,0.25Vくらい(?)の電圧をモータに入力し,空回ししました.
ギアのかみ合わせはそれなりに良かったので,周期的な摩擦の影響はないものと仮定します.
つまり,タイヤは一定の速度で回転しており,エンコーダで正しく測定できれば一定の速度が測定されるはずです.
100~350mm/sの範囲でぶれており,とても制御に使えるセンサー値ではありません.実際にこの状態で制御をすると,周期的にカッカッと音が聞こえ,急激な加減速が起こります.
上のグラフを見ると,多少のずれはありますが,50msecの周期性があります.これはタイヤ1回転とおおよそ一致しております.
このエンコーダのブレを直すために,ローパスフィルタをかける方や,加速度センサーと組み合わせて自作磁気式エンコーダを使用されている方がいらっしゃいますが,私はエンコーダのブレが周期的である点に着目し,ブレを無くすことを行いました.
1回転分のブレを詳しく見るために,モータに一定の電圧をかけ,タイヤが一回転する時間の角度ログをとりました.(下図)

青線が理想ですが,測定された赤線は大きくずれています.
ブレが1回転周期なので,1回転は正確に測定できます.
今回使用したエンコーダの1回転のパルス数は2048なので,ある時間にパルス数を0とし,その時間からパルス数が2048になるまでの角度を測定し,グラフにしたのが上の図になります.
角度を補正するために,下図のような青線に対して赤線が対象となるグラフを作成します.

↑11/14に横軸の単位を修正しました.
上図のグラフをルックアップテーブルとして用いて,エンコーダで測定された角度を補正します.
具体的には,
Sensor angle = 測定されたパルス数%一回転のパルス数
を求め,ルックアップテーブルを用いて補正します.
このルックアップテーブルを取得する作業を私は,エンコーダのキャリブレーションと呼んでいます(笑)
その結果がこちら(下図)

青線が理想で,赤線が測定し.なんと良い線形であろう!
ただ,少し問題があり,さきほど1回転が正確に取れると書きましたが,じゃっかんの誤差を含んでいるようです.(プログラムミスなのかわかりませんが...)
なので,キャリブレーション後に回転を重ねていくと,エンコーダの補正が甘くなります.
そこで,キャリブレーションしてから2048回転後と4096回転後の補正後角度ログをとりました.(空回し)
なんで4096回転にしたかというと,32*32*90/タイヤ直径/円周率が確か4000付近だからな気がします.(少し前の記憶)
↓2048回転後

↓4096回転後

まあ,ちょっとずつ補正後の値がぶれてしまいますが,まあ現状は問題ないです.ローパスフィルターや加速度センサーを使わなくても走ってます.
最後に,空回しではなく,実際に走行させた場合の速度ログの比較.
(このデータを取ったときは,機構的な
磁石の回転ブレを無くす処置を行ったので,補正前のブレが少し少なくなっている)
↓補正前

↓補正後

では,よき自作磁気式エンコーダーライフを!
スポンサーサイト