Git Product home page Git Product logo

as5601_breakoutboard_v1_0's Introduction

12bit (4096P/R) 磁気式エンコーダAS5601 Breakout Board

概要

12bit (4096P/R) 分解能の磁気式アブソリュートエンコーダ AS5601 (ams AG製) を2.54mmピッチに変換する基板です。ネオジム磁石を同梱。
5V、3.3V、GNDの電源ピンとI2C、A/B相インクリメンタル出力のピンが出ています。電源電圧は5Vもしくは3.3Vです。
※AS5600との違いはAS5600の出力方式がアナログ/PWM出力であるのに対し、AS5601はA/B相のインクリメンタル出力である点です。

AS5601の特徴

  • 4096P/R の高分解能 (インクリメンタル出力は最大2048ppr)
  • 磁気式のため非接触で角度計測が可能であり、信頼性と耐久性に優れている
  • インターフェイス:I2C、インクリメンタル出力、PUSHピン
  • I2C:設定レジスタにアクセスでき、角度の読み取りや動作設定が可能
  • インクリメンタル出力:8ppr~2048pprの分解能設定が可能なA/B相の直交出力
  • サンプリング時間:150μs
  • AS5601とネオジム磁石の軸中心が1mm程度ずれても値の読み取りが可能

基板仕様

  • 基板サイズ:横20mm×縦13.5mm
  • 基板マウント用穴:15mmピッチ、M3×2穴
  • 電源電圧に5Vを供給する場合は3.3Vピンをオープンに、3.3Vを供給する場合は5Vピンにも3.3Vを供給してください。
  • PUSHピンは接続されていないためアクセスできません

販売

スイッチサイエンス委託販売ページ
※大量注文や在庫に関する問い合わせはこちらまでご連絡ください。

内容物

  • AS5601 Breakout Board 本体
  • エンコーダ用ネオジム磁石

回路図

寸法

取付方法

  1. 同梱のネオジム磁石を回転体の軸中心に取り付けます
  2. AS5601の中心とネオジム磁石の中心が合うよう基板を固定部に取り付けます

取付例

Arduinoによるプログラム例

I2Cによる角度の取得

配線図

ミニマムコード

#include <stdint.h>
#include <Wire.h>
#define AS5600_AS5601_DEV_ADDRESS      0x36
#define AS5600_AS5601_REG_RAW_ANGLE    0x0C

void setup() {
  // I2C init
  Wire.begin();
  Wire.setClock(400000);

  // Read RAW_ANGLE value from encoder
  Wire.beginTransmission(AS5600_AS5601_DEV_ADDRESS);
  Wire.write(AS5600_AS5601_REG_RAW_ANGLE);
  Wire.endTransmission(false);
  Wire.requestFrom(AS5600_AS5601_DEV_ADDRESS, 2);
  uint16_t RawAngle = 0;
  RawAngle  = ((uint16_t)Wire.read() << 8) & 0x0F00;
  RawAngle |= (uint16_t)Wire.read();
  // Raw angle value (0 ~ 4095) is stored in RawAngle
}

void loop() {
}

インクリメンタル出力ピンを用いた角度の取得

配線図

ミニマムコード

#include <stdint.h>
#include <Wire.h>
#define AS5600_AS5601_DEV_ADDRESS       0x36
#define AS5601_REG_ABN                  0x09

volatile int32_t EncoderCount;

void Encoder_GPIO_init(void) {
  DDRD  &= ~((1 << PD2) | (1 << PD3));  // Set PD2 and PD3 as input
  EICRA = 0b00000101; // Trigger event of INT0 and INT1 : Any Logic Change
  EIMSK = 0b00000011; // Enable interrupt INT0 and INT1
  sei();              //Enable Global Interrupt
}

// Encoder "A" pin logic change interrupt callback function
ISR(INT0_vect) {
  updateEncoderCount();
}

// Encoder "B" pin logic change interrupt callback function
ISR(INT1_vect) {
  updateEncoderCount();
}

void updateEncoderCount(void) {
  const static int8_t EncoderIndexTable[] =
    {0, -1, 1, 0,  1, 0, 0, -1,  -1, 0, 0, 1,  0, 1, -1, 0};
  static uint8_t EncoderPinState_Now, EncoderPinState_Prev = 0;

  EncoderPinState_Now = (PIND >> 2) & 0x03; // Bit1 : PD3 (Encoder B), Bit0 : PD2 (Encoder A)
  EncoderCount += EncoderIndexTable[EncoderPinState_Prev << 2 | EncoderPinState_Now];
  EncoderPinState_Prev = EncoderPinState_Now;
}

void Encoder_I2C_init(void) {
  // Set AS5601 resolution 2048ppr
  Wire.beginTransmission(AS5600_AS5601_DEV_ADDRESS);
  Wire.write(AS5601_REG_ABN);
  Wire.write(0b00001000);   // ABN(3:0)
  Wire.endTransmission();
  delay(1);
}

void setup() {
  // I2C init
  Wire.begin();
  Wire.setClock(400000);

  // Peripheral init
  Encoder_I2C_init();
  Encoder_GPIO_init();
}

void loop() {
  // Angle value (0 ~ 2047) is stored in EncoderCount
}

設定レジスタの焼き付けによる分解能の固定

AS5601のデフォルトの分解能は8pprなので、初期状態ですと電源投入毎に分解能を設定する必要があります。 そこで、分解能を2048pprに設定後にBurn_Settingコマンドにより設定レジスタを焼くことで、電源を落として再度電源を投入しても起動時から2048pprに設定された状態で固定され、I2Cにより分解能等の設定情報を再設定する必要がなくなります。
※一度書き込むと以後分解能やフィルタ設定などを変更することはできなくなります。

サンプルコードはこちら

License

MIT License

as5601_breakoutboard_v1_0's People

Contributors

y2kblog avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.