SKU 3494
12bit (4096P/R) 磁気式エンコーダAS5601 Breakout Board
送料区分: 200
商品コード: Y2KB-003
発売日: 2017-09-28
在庫数: 71
短いURL: ssci.to/3494
受託販売商品
¥1,600
(税込)
¥1,600
-
¥1,600
Current price
¥1,600
12 bit 分解能の磁気式アブソリュートエンコーダ AS5601(ams AG製)を2.54 mmピッチに変換したモジュールです。
5 V、3.3 V、GNDの電源ピンとI2C、A/B相インクリメンタル出力のピンが出ています。電源電圧は5 Vもしくは3.3 Vです。ネオジム磁石を同梱。
※ AS5600との違いはAS5600の出力方式がアナログ/PWM出力であるのに対し、AS5601はA/B相のインクリメンタル出力である点です。
特徴
- 4096 P/R の高分解能(インクリメンタル出力は最大2048 ppr)
- 磁気式のため非接触で角度計測が可能であり、信頼性と耐久性に優れている
- インターフェイス:I2C、インクリメンタル出力、PUSHピン
- I2C:設定レジスタにアクセスでき、角度の読み取りや動作設定が可能
- インクリメンタル出力:8 ppr~2048 pprの分解能設定が可能なA/B相の直交出力
- サンプリング時間:150 μs
- AS5601とネオジム磁石の中心が1 mm程度ずれても値の読み取りが可能
仕様
- 基板サイズ:横20 mm × 縦13.5 mm
- 基板マウント用穴:15 mmピッチ、M3 × 2穴
- 電源電圧に5 Vを供給する場合は3.3 Vピンをオープンに、3.3 Vを供給する場合は5 Vピンにも3.3 Vを供給してください
- PUSHピンは接続されていないためアクセスできません
内容物
- AS5601 Breakout Board 本体
- エンコーダ用ネオジム磁石
取り付け方法
- 同梱のネオジム磁石を回転体の軸中心に取り付けます
- ICの中心とネオジム磁石の中心が合うよう基板を固定部に取り付けます
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
}
資料
- サポートページ
- 回路図
- 寸法図
_Y2Kbさんからの受託販売商品です。_輸送上の問題は当社が責任を負います。技術的なご質問には、当社ではお答えできません。上記技術資料のページなどをご参照の上、ご自身で解決していただく必要があります。
商品コード: Y2KB-003