MT6701, MagnTek'in ürettiği, dönen bir mıknatısın açısını Hall algılayıcılarla temassız ölçen 14 bitlik manyetik açı sensörüdür. Açıyı I2C ya da SSI ile dijital, OUT ucundan analog ya da PWM, ayrıca A/B/Z ve UVW encoder darbeleri olarak verir. Çapsal mıknatıslanmış küçük bir mıknatıs çipin tam üstüne 0,5-2 mm mesafede yerleştirilir.
MT6701 manyetik encoder, bir milin açısını temas olmadan ve açılış anından itibaren mutlak olarak ölçmek isteyenlerin sık seçtiği bir çiptir. Fırçasız motor kontrolü, robot eklemleri, temassız potansiyometre ve döner düğme projelerinde kullanılır. Bu yazıda MT6701'in ne olduğunu, hangi çıkışları verdiğini, mıknatısın nasıl yerleştirileceğini, Arduino bağlantısını ve açı okuma kodunu anlatıyoruz.
MT6701 nedir?
MT6701, MagnTek firmasının ürettiği, çipin üstünde dönen iki kutuplu bir mıknatısın açısını Hall algılayıcılarla ölçen ve 0-360° aralığını 14 bit (16.384 adım) çözünürlükle veren bir manyetik açı sensörüdür. Bir adım yaklaşık 0,022°'ye karşılık gelir. SOP-8 ve 3x3 mm QFN-16 kılıfta üretilir, 3,0-5,5 V ile çalışır.
MT6701 mutlak açı verir: enerji verildiği anda milin nerede olduğunu bilir. Mekanik ve optik artımlı encoder'lar ise yalnızca dönüşü sayar; açılışta konumu bilmez. Ölçüm temassız olduğu için aşınma da yoktur. Hall etkisinin temellerini Hall effect sensör nedir yazımızda anlattık.
Çözünürlük ile doğruluğu karıştırmayın: veri sayfasındaki doğrusallık hatası (INL) tipik ±1°, en fazla ±1,5°'dir ve mıknatıs yerleşimine bağlıdır. Yani 14 bit, açıyı çok ince adımlarla izlemenizi sağlar, ancak mutlak açı hatası yaklaşık bir derece mertebesindedir.
MT6701 hangi çıkışları verir?
MT6701 açıyı aynı anda birkaç biçimde sunar: I2C ve SSI ile 14 bit dijital, OUT ucundan 12 bit analog ya da PWM, A/B/Z ucundan artımlı encoder darbesi ve UVW ile fırçasız motor komütasyon sinyali. A, B ve Z pinleri ABZ ile I2C/SSI arasında paylaşılır; hangisinin kullanılacağını MODE pini seçer.
| Çıkış | Pinler (SOP-8) | Ayrıntı | Ne için? |
|---|---|---|---|
| I2C | 6 SDA, 7 SCL | 14 bit; adres 0x06, açı 0x03-0x04 yazmaçlarında | Okuma ve tüm ayarların yapılması |
| SSI | 6 DO, 7 CLK, 8 CSN | 24 bit çerçeve: 14 bit açı + 4 bit durum + 6 bit CRC | Hızlı okuma, aynı hatta birden çok sensör |
| ABZ | 6 A, 7 B, 8 Z | Tur başına 1-1024 darbe, ayarlanabilir sıfır | Optik encoder yerine |
| UVW | A/B/Z pinleri ya da QFN U, V, W | 1-16 kutup çifti | Fırçasız motor komütasyonu |
| Analog | 3 OUT | 12 bit DAC, beslemeye oranlı | Potansiyometre yerine |
| PWM | 3 OUT | 994,4 Hz ya da 497,2 Hz, 12 bit | Tek telle açı aktarımı |
| Push | 5 PUSH | Mıknatıs yaklaşınca sinyal | Temassız buton |
Ayarlar (darbe sayısı, sıfır konumu, yön, çıkış türü) I2C ile yazılır ve çipin EEPROM'una kaydedilir. EEPROM'a yazarken besleme 4,5 V'un üzerinde olmalıdır. SSI çerçevesindeki durum bitleri mıknatıs alanının çok güçlü ya da çok zayıf olduğunu bildirir; bu, mıknatıs mesafesini ayarlarken işe yarar.
MT6701 için mıknatıs nasıl yerleştirilir?
MT6701, çapsal (diametral) mıknatıslanmış silindir bir mıknatısın, milin ucunda çipin tam ortasının üstünde dönmesiyle çalışır. Çapsal mıknatısta N ve S kutupları yan yanadır; mıknatıs dönünce çipin yüzeyindeki alan yönü de döner. N kutbu üstte, S kutbu altta olan eksenel mıknatıs döndüğünde alan değişmez ve açı okunamaz.
| Parametre | Veri sayfası değeri (Rev 1.8) |
|---|---|
| Önerilen mıknatıs | Ø6 mm × 2,5 mm silindir, NdFeB, çapsal |
| Çip yüzeyindeki alan | 200-1000 Gauss (20-100 mT) |
| Hava boşluğu (mıknatıs - çip) | 0,5-2,0 mm, tipik 1,0 mm |
| Eksen kaçıklığı | En fazla 0,3 mm |
| En yüksek devir | 55.000 dev/dk |
Yerleşim için şu adımları izleyin:
- Çapsal mıknatıslanmış mıknatıs kullanın; satın alırken "diametral" ya da "çapsal" ifadesini arayın. Sıradan disk mıknatısların çoğu ekseneldir.
- Mıknatısı milin ucuna, mil ekseniyle merkezli olacak şekilde yapıştırın ya da bir tutucuya oturtun.
- Çipin algılama merkezi kılıfın geometrik merkezidir; mil eksenini bu noktaya 0,3 mm içinde hizalayın.
- Mıknatısın alt yüzü ile çipin üst yüzü arasında yaklaşık 1 mm boşluk bırakın.
- Mili elle çevirip açıyı izleyin; değer zıplıyorsa ya da alan durumu "zayıf" diyorsa boşluğu azaltın, "güçlü" diyorsa artırın.
Mıknatısı mümkünse plastik, alüminyum ya da pirinç bir tutucuyla bağlayın; çelik parçalar ve yakındaki motor mıknatısları alanı bozabilir. Neodyum mıknatısların türleri ve güvenli kullanımı için neodyum mıknatıs nedir yazımıza bakabilirsiniz.
MT6701 Arduino'ya nasıl bağlanır?
MT6701 I2C ile Arduino Uno'ya dört kabloyla bağlanır: VDD → 5V, GND → GND, SDA (pin 6) → A4 ve SCL (pin 7) → A5. CSN (pin 8) I2C'de kullanılmaz; veri sayfası boş bırakır, yaygın Arduino kütüphanesinin örnekleri ise VDD'ye bağlar. Veri sayfasındaki referans devrede SDA ve SCL hatlarında 5 kΩ pull-up direnç vardır; çoğu modülde bu dirençler kart üzerindedir.
Hazır MT6701 modüllerinde pin adları üreticiye göre değişir: "DO/SDA", "CLK/SCL", "CSN", "OUT", "PUSH" gibi. Modülünüzde MODE ucu ya da köprüsü varsa I2C/SSI konumunda olduğunu satıcının şemasından kontrol edin. ESP32-WROOM-32D geliştirme kartında modülü 3V3'ten besleyip SDA'yı GPIO21'e, SCL'yi GPIO22'ye bağlayabilirsiniz.
SSI ile okumak için DO ucu SPI'nin MISO pinine, CLK ucu SCK pinine, CSN ucu herhangi bir dijital pine bağlanır (Uno'da D12, D13 ve örneğin D10). SSI yalnızca okuma yapar; ayar değiştirmek için yine I2C gerekir. Her sensöre ayrı CSN pini vererek aynı hatta birden çok MT6701 okunabilir; I2C'de ise adres sabit olduğundan bir hatta tek sensör kullanmak en sorunsuz yoldur.
MT6701 açısı Arduino ile nasıl okunur?
MT6701 açısı, I2C üzerinden 0x03 ve 0x04 yazmaçları sırayla okunup 14 bitlik değer birleştirilerek bulunur: 0x03 açının üst 8 bitini, 0x04'ün üst 6 biti alt 6 bitini taşır. Aşağıdaki kod ek kütüphane gerektirmez:
#include <Wire.h>
const uint8_t MT6701_ADRES = 0x06;
float aciOku() {
Wire.beginTransmission(MT6701_ADRES);
Wire.write(0x03); // aci yazmacinin ilk byte'i
if (Wire.endTransmission(false) != 0) return -1;
Wire.requestFrom(MT6701_ADRES, (uint8_t)2);
if (Wire.available() < 2) return -1;
uint8_t ust = Wire.read(); // 0x03: Angle<13:6>
uint8_t alt = Wire.read(); // 0x04: Angle<5:0> (bit 7..2)
uint16_t ham = ((uint16_t)ust << 6) | (alt >> 2); // 0..16383
return ham * 360.0 / 16384.0;
}
void setup() {
Serial.begin(115200);
Wire.begin();
}
void loop() {
float aci = aciOku();
if (aci < 0) {
Serial.println("MT6701 cevap vermiyor");
} else {
Serial.print("Aci: ");
Serial.println(aci, 2);
}
delay(100);
}
Mili çevirdiğinizde değer 0 ile 359,98 arasında değişmelidir. Ayar yapmak ve SSI ile okumak için Arduino Kütüphane Yöneticisi'ndeki MT6701 kütüphaneleri kullanılabilir; fırçasız motor projelerinde SimpleFOC gibi FOC kütüphaneleri MT6701'i konum sensörü olarak destekler. Açıyı sahada görmek için değeri 0,96 inç I2C OLED ekrana yazdırabilirsiniz; OLED ile MT6701 farklı adreslerde olduğu için aynı I2C hattını paylaşır.
MT6701 mi, rotary encoder mı, optik encoder mı?
Mutlak açı, temassız ölçüm ve yüksek çözünürlük gerekiyorsa MT6701; menüde gezinmek gibi basit işler için mekanik rotary encoder yeterlidir. Optik encoder ise yüksek devirde güvenilir artımlı darbe verir, ancak açılışta konumu bilmez.
| Özellik | KY-040 mekanik | Optik encoder | MT6701 |
|---|---|---|---|
| Ölçüm türü | Artımlı | Artımlı | Mutlak |
| Çözünürlük | Çoğunlukla 20 tık/tur | 360-400 darbe/tur (örnek modeller) | 16.384 adım/tur |
| Açılışta konum | Bilinmez | Bilinmez | Bilinir |
| Aşınma | Kontaklar aşınır | Yok | Yok |
| Çıkış | A/B + buton | A/B | I2C, SSI, ABZ, UVW, analog, PWM |
| Mekanik iş | Panele vidalanır | Mile kaplin ile bağlanır | Mile mıknatıs, karta çip |
Menü düğmesi için KY-040 rotary encoder modülü en pratik seçenektir; kullanımını KY-040 rotary encoder yazımızda anlattık. Hazır gövdeli ve milli çözüm istenirse 400 darbe artımlı optik döner enkoder doğrudan mile bağlanır. Yalnızca bir mıknatısın yakında olup olmadığını bilmek yeterliyse açı sensörü yerine 3144E Hall effect sensör modülü kullanılır.
Sık sorulan sorular
MT6701 kaç bit çözünürlük verir?
MT6701'in çekirdek çözünürlüğü 14 bittir; I2C ve SSI ile okunan açı 0-16.383 arasında, yani yaklaşık 0,022° adımlarla gelir. OUT ucundaki analog ve PWM çıkışı 12 bit (4096 adım), ABZ çıkışı ise tur başına en fazla 1024 darbedir (4096 kenar). Mutlak doğruluk ise tipik ±1° mertebesindedir.
MT6701 için hangi mıknatıs kullanılır?
MT6701 için çapsal (diametral) mıknatıslanmış silindir neodyum mıknatıs kullanılır; veri sayfası Ø6 mm × 2,5 mm boyutunu önerir. Mıknatıs çipin tam ortasının üstünde, yaklaşık 1 mm mesafede (0,5-2 mm arası) dönmelidir. Kutupları üst ve alt yüzde olan sıradan eksenel disk mıknatıslarla doğru açı okunmaz.
MT6701'in I2C adresi nedir?
MT6701'in varsayılan 7 bit I2C adresi 0x06'dır ve açı 0x03 ile 0x04 yazmaçlarından okunur. Adres EEPROM'a yazılarak bir alternatif değere çevrilebilir, ancak seçenek sınırlıdır. Aynı hatta birden çok sensör gerekiyorsa her biri ayrı CSN pini alan SSI bağlantısı daha uygundur.
MT6701 3,3 V ile çalışır mı?
Evet, MT6701 3,0-5,5 V aralığında çalışır; ESP32 gibi 3,3 V'luk kartlarla doğrudan kullanılabilir. Tek istisna EEPROM'a ayar kaydetmektir: veri sayfası bu işlem sırasında beslemenin 4,5 V'un üzerinde olmasını ister. Ayarları bir kez 5 V'ta kaydedip sonra 3,3 V'ta çalıştırabilirsiniz.
MT6701 açısı neden zıplıyor ya da yanlış çıkıyor?
Açının zıplamasının en yaygın nedeni mıknatısın yanlış türde, çok uzakta ya da eksenden kaçık olmasıdır. Mıknatısın çapsal olduğundan, boşluğun 0,5-2 mm arasında kaldığından ve mil ekseninin çip merkezine 0,3 mm içinde hizalandığından emin olun. Yakındaki çelik parçalar, motor mıknatısları ve uzun I2C kabloları da hatalı okumaya yol açabilir.
Özet
- MT6701, dönen bir mıknatısın açısını Hall algılayıcılarla temassız ve mutlak olarak ölçen 14 bitlik (16.384 adım) bir manyetik açı sensörüdür.
- Açıyı I2C (adres 0x06, yazmaç 0x03-0x04), SSI, ABZ (1-1024 darbe/tur), UVW, 12 bit analog ve PWM olarak verir.
- Çapsal mıknatıslanmış Ø6 × 2,5 mm neodyum mıknatıs, çip merkezinin üstünde yaklaşık 1 mm (0,5-2 mm) boşlukla ve en fazla 0,3 mm kaçıklıkla döner.
- 3,0-5,5 V ile çalışır; ayarları EEPROM'a kaydetmek için besleme 4,5 V'un üzerinde olmalıdır.
- 14 bit çözünürlük ince izleme sağlar, mutlak doğruluk ise tipik ±1° mertebesindedir.
