エヌがのロボット製作日記

どうも「エヌがの」です。主にマイクロマウスのことばかり書いているぶろぐです。とあるuniqueでexcitingな大学に在学中です。

磁気式エンコーダ その1

こんにちは。エヌがのです。

 今回は、今年さんざん苦労させられた磁気式エンコーダについて書きたいと思います

 エンコーダは、角度を計測するセンサーで、マイクロマウスではタイヤの回転数を計測するためによく使用され、重要な要素となっています。タイヤの回転数から、マウス自身がどれだけ進んだか、また、どれほどの速度で走行しているかが分かります
 一般的に、エンコーダには、光と機械的な特性を用いた光学式と磁石の磁力線の特性を用いた磁気式という2つの方式があります。マイクロマウスではよく小型化されやすい光学式のエンコーダを用いることが多いのですが、本当に小型なものは値段が高く、入手も難しいです。しかし、近年では磁気式エンコーダ用の磁気を読み取る小型のICが安価で入手できるようになりました。このため、磁気式エンコーダを自作するマウスが多くなりました
 私もこの流れにのっかり、磁気式エンコーダを使ってみました

 使った感想としては、ちゃんと使わないと痛い目を見る。ということです。やはり既製品はよくできていて、自作するとボロがたくさんでます

 さて長々と書きましたが、磁気式エンコーダをどのように作製したか、問題点どこだったか、どのように解決したのかというのを書いていきたいと思います

まず、設計   左:組立図   右:分解図
f:id:megato:20151129010118p:plain:w200 f:id:megato:20151129010145p:plain:w300
左から磁気式IC、鉄製スペーサ、磁石、スペーサ、シャフト、ベアリング、モータマウント、スペーサ、ギアです。

 磁石をリング型にして、固定を楽に、さらにシャフトと磁石の回転中心をできるだけ合わせようという狙いでした。
 使用した磁石はネオマグというところのリング型ネオジム磁石内径1.2外径2.6です。

実際に作ったものがこちら
f:id:megato:20151128184302j:plain:w400
 鉄製スペーサは鉄ネジを旋盤で加工して作製、シャフトの磁石固定部分の径落としも旋盤で加工しました

 まず問題になったのがICとのSPI通信です
 今回、磁気式エンコーダICはAS5047を選択し、SPI通信で角度の情報を読み取るという方式を取っていました。その際、マイコンのピン数削減のために、MPU6500と一部を共通配線にしました。
f:id:megato:20151129014228p:plain:w400
 このせいで、めんどくさい問題がでました。MPU6500とAS5047とは通信の方式が同じSPI通信でも少し違っていて、一括で同じ設定で通信ができません。具体的には以下の2つの仕様が違いました。
○MPU6500
・8bit data / frame (一回の通信が8bit毎のデータ量)
・SCLKの基準電圧がhigh
f:id:megato:20151129020546p:plain:w300

○AS5047
・16bit data / frame
・SCLKの基準電圧がlow
f:id:megato:20151129020633p:plain:w300

RX631のRSPIには一つの通信毎にこのような設定を変更する機能があったので今ではなんとか通信出来ていますが、設定するのにずいぶんと時間がかかりました。できれば配線を分けたほうがいいと思います。

 次に問題になったのが、磁石がモータと引き合うというものでした。
 実は当初は上で公開しているような設計ではなく、もう少し大きめの外径6くらいの磁石を使用していました。さらに、モータも比較的大きいものを用いているため、このような問題がおこりました。主観的な説明になりますが、かなり強力に引きつけていました。100度くらい磁石を意図的に回しても、手を離した瞬間にすぐ戻ってしまうほどには。
 この問題を解決すべく、磁石の径を上で説明しているものに落とし、鉄製のスペーサで囲いました。こうすることによって、改善しました。手で意図的に回しても、引きつけられているとは感じないまでになりました。

 さて、肝心のエンコーダからの取得データですが、このようになりました。
 左:速度mm/sに直したもの 右:取得角度(最大14bit)
f:id:megato:20151129022235p:plain:w300 f:id:megato:20151129022248p:plain:w300
これはモータにduty10%?ほどかけて空転させたときのデータです。これを見たときは少し絶望しました。ここまでブレるのか・・・と。

 ここからは次回書くことにします。
 長文になりましたが、ここまで読んでくださり、ありがとうございました。

磁気式エンコーダ その2

こんにちは。エヌがのです。

 前回から引き続き、磁気式エンコーダについて書いていきたいと思います。
 エンコーダから角度を取得しグラフにしたところ、このような結果になったことを前回書きました
左:速度mm/s 右:取得角度(14bit/rot)
f:id:megato:20151129022235p:plain:w300 f:id:megato:20151129022248p:plain:w300
モータに一定のdutyをかけ、空転させたときのデータです
 速度がものすごくブレてます。理想的な状態ならば、速度が一定になるはず。角度から察するに、速度のブレの周期がおよそ磁石が1回転する周期と同等程度なのはわかります。どうしてこんなにぶれているかの原因を推測しますと、

・磁気式ICと磁石の並行がとれていない
・磁気式ICの計測中心と磁石の回転中心があっていない
・磁石の回転が偏心している
・磁石自体の精度が悪い
・SPI通信で値を取得しているため、時間の整合性が合ってない

 様々な原因がありますが、一番の原因は磁気式ICの計測中心と磁石の回転中心がずれていることだと考えました。そこで、再びばらばらにし磁気式エンコーダICを丁寧にはんだづけしましたが、機械的な基準も拘束もなかったため、肉眼で合わせるくらいしかできませんでした。
f:id:megato:20151128184427j:plain:w300 f:id:megato:20151128184417j:plain:w300
肉眼では合っているように見える。
 改善の結果としては、少しマシになった程度で、効果は薄かったです。

 機械的な原因はもう設計時点でのミスであり、どうすることができませんでしたので、次はソフトウェアで対処することにしました
 とりあえず適当にFF制御で動かしたマウスの速度データが以下になります。
f:id:megato:20151129162645p:plain:w400
これでは制御ができないのでなんとか使えるデータにしてみます
 
 方法としては、こちらで紹介されている方法を用いました。
 10,20,30回で平均をとったデータがこちらです
f:id:megato:20151129163623p:plain:w400
 10,20,30と増やしていくに連れて、データが平滑化されているのがわかります。これはローパスフィルタがかかっているものと同義と私は考えていて、ある程度は効果がありますが、平滑化しすぎると応答の遅れから発振しやすくなります。私は、どれくらい平滑化するかは完全に主観で決め、20回と設定しました。

 これでまともに制御できるくらいにはなりました。しかし、まだ振れが大きくゲインをあまり上げられないという問題があり、なんとかならないかと考えました。

 今回はここまでになります。この話題についてはあと1回ほど書こうと思っていますが、ほとんどおまけみたいなものです。
 長文になりましたがここまで読んで下さり、ありがとうございます。