Powered By Blogger

2014年1月13日月曜日

磁気式エンコーダIC 「AS5050」

今回は来年使用予定のエンコーダの話。
昨年までエンコーダは定番IC「AS5040」を用いて自作していました。

今年も自作磁気式エンコーダを使いますが、「AS5050」という素子に変更することにしました。
これはインクリメンタル型でなくアブソリュート型で、SPI通信で角度を取得できます。


AS5040と比較しながら、この素子を使うメリットをあげると
・消費電流が少ない(AS5040に比べ最大でも半分、使い方次第で5分の1以下)
・小型かつ軽量、安価
・インクリメンタル型でないので、波形をカウントするタイマー(消費電力大きい)を使わなくてよい
などがあります。

AS5050はSPI通信を介して、ICが内蔵のホール素子で磁石角度を取得するときのサンプルレートを自分で決めることができます。
サンプルレートを下げていくと、かなり消費電流が下げられることが分かりました。ただし、ナイキスト周波数に気をつける必要があります。
実際にどれくらいかというと、例えば2ms周期でサンプリングすると消費電流は2.5mAほどだそうです。
AS5040の16mAに比べるとかなり違いますね。5分の1以下です。


逆にデメリットをあげると
・サンプルレートを下げるとリアルタイムの速度は取得できない
・アブソリュートエンコーダ、SPI通信などの使用により速度取得に関してソフトが使いまわせない

などがあるでしょうか。どちらもソフトの工夫で対処できるものと考えています。


連休を利用してブレッドボード上でテストをしていました。動作確認ができたので、今回情報を公開しています。なかなかいいものですので、興味のある方はぜひ。

5 件のコメント:

  1. This is amazing since lots of MCUs don't have sufficient general purpose timer to drive quadrature encoder hardwarely, some of them don't even have quadrature decoder interface. Even though use SPI to receive signal is slower than just read value from STM32 Timer counter register, the packges(4x4mm) is much smaller than tssop version of AS5040/5145B. This actually solved a problem for one of my project that the MCU doesn't have enough timer to drive motor,servo, and 2 encoders at same time. Thank you very much for sharing, by the way, do you know any 12 bit version with SPI output just like the relation between AS5040 and AS5145B?

    返信削除
  2. Thank you for your comment. I'm glad to help you.

    "AS5055" is 12 bit version of "AS5050".
    You can find details about it at this homepage.

    http://www.ams.com/eng/Products/Position-Sensors/Rotary-Magnetic-Position-Sensors/AS5055

    返信削除
    返信
    1. Thank you for the input for AS5055.
      I realized it's hard to convert angle to distance in this case, all I can think of is the read the angle change through SPI then reset the initial angle every times. Do you have better way to do the converting?

      削除
    2. OK. I'll write about my way.
      First, get the amount of change of AS5055's read angle.
      Like int a = (now read angle) - (previous read angle);
      Then, make 2 parameters which is add or subtract 4096(AS5055's 12bit resolution) and get their absolute value.
      LIke int b = a + 4096,c= a - 4096;
      int d = abs(a),e = abs(b),f = abs(c);
      Finally, compute a minimum value among d,e,f. If e is a minimum value, b is a true differential value between 2 sample time.
      Summing up these true differential values provides distance.
      Here, be careful if tires don't spin more than 180 degree between 2 sample time(fulfill Nyquist frequency).
      We don't have to pay attention if count up occurs(like from 4095 to 0). Besides, AS5055 does not have reset function like making now angle potition as 0 value.

      削除
    3. Thank you! This is indeed a very useful technique.

      削除