How to Read the Signal from a Hall Effect Sensor Using an Arduino

Arduino Kullanarak Bir Hall Etkisi Sensöründen Gelen Sinyal Nasıl Okunur

Adam Morissette
Adam Morissette
PA Engineer

Hall etkisi sensörleri, lineer aktüatörlerimizde konum ve hız bilgisi sağlamak için sunduğumuz geri besleme seçeneklerinden biridir. PA-04-HS ve PA-100 stok ünitelerinde Hall etkisi sensörlerine sahiptir. Diğer bazı aktüatörlerimiz ise Hall etkisi sensörleriyle özel olarak sipariş edilebilir.

En iyi aktüatör kontrolü için Arduino mikrodenetleyici yelpazemize göz atın!

HALL ETKİSİ SENSÖRÜ NEDİR?

Hall etkisi sensörü, içinden geçen manyetik alanın şiddetine bağlı olarak gerilim üreten bir elektronik bileşendir. Bu sensör, bir gerilim eşik algılama devresi ile birleştirildiğinde iki durumlu bir sinyal üretilebilir. Aktüatörlerimizde Hall etkisi sensörü, iki kanallı bir sinyal üretmek üzere tasarlanmıştır ve dalga biçimleri iki ikili durumdan birinde (açık veya kapalı) tanımlanır. Aşağıda gösterildiği gibi bu iki sinyal, aralarında 90° faz farkı olacak şekilde elektrik Motor’u döndükçe yükselir ve düşer. Bu darbelerin aktüatördeki konum değişimiyle ilişkili frekansı, genel çözünürlüklerine bağlıdır ve aktüatörlerimiz arasında farklılık gösterir.

Hall etkisi sensörleri 

BU HALL SİNYALLERİ NASIL OKUNUR?

Bir Hall etkisi sensörü nasıl kullanılır

Bir mikrodenetleyici üzerinde dijital sinyal okurken iki temel yöntem vardır; yoklama (polling) ve kesmeler (interrupt). Yoklama, bir mikrodenetleyicinin, bir girişte değişim olup olmadığını görmek için periyodik olarak durum kontrolü yaptığı programlanmış bir yöntemdir. Kesmeler ise, bir girişteki sinyal değiştiğinde mikrodenetleyici programının odağını anında kaydıran bir donanım mekanizmasıdır. Her iki yöntemin de avantajları ve dezavantajları vardır ve her biri farklı uygulamalar için daha uygundur. Bizim durumumuzda, bir sinyalin durum değiştirdiği tam anı bilmek istediğimiz için kesmeleri kullanacağız. Arduino mikrodenetleyicilerle bir Hall etkisi sensörü kullanmak için bir kesme (interrupt) kullanılır. Bir ISR (Interrupt Servicing Routine – Kesmeyi İşleme Rutini) oluşturarak Arduino, belirli bir girişte tanımlı bir değişiklik algılandığında bir kod bölümünü derhal çalıştıracak şekilde programlanabilir. Aşağıda Arduino için bir ISR örneği gösterilmiştir; algılanan sinyalleri LED’lere yönlendiren değiştirilmiş bir sürüm, bir Hall etkisi sensörünü test etmenin bir yoludur.

Arduino’yu Hall etkisi sensörlerini okumak için programlama - kesme yöntemi

// ana program ile ISR arasında veri aktarmak için

// global volatile değişkenlere ihtiyaç vardır

volatile byte signalA;
volatile byte signalB;

// kesmeyle kullanılabilecek pinler, kullandığınız karta

// bağlıdır
const byte inputA = 2;
const byte inputB = 3;

void setup() {
// giriş pinlerinde dahili dirençleri etkinleştir
pinMode(inputA, INPUT_PULLUP);
pinMode(inputB, INPUT_PULLUP);
// girişlerin başlangıç durumunu oku
signalA = digitalRead(inputA);
signalB = digitalRead(inputB);

// yükselen veya düşen kenarı algılayacaktır
attachInterrupt(digitalPinToInterrupt(inputA),signalA_ISR,CHANGE);
attachInterrupt(digitalPinToInterrupt(inputB),signalB_ISR,CHANGE);

}

void loop() {
// Sinyal bilgisi programda burada kullanılabilir
}

void signalA_ISR() {
// bir değişiklik algılandığında bu her zaman

// mevcut durumun tersine olacaktır

signalA = !signalA;
}

void signalB_ISR() {
signalB = !signalB;
}

PA-04-HS modelimiz yerleşik Hall etkisi geri beslemesiyle gelir!

UYGULAMADA NELER DİKKATE ALINMALIDIR?

Okuduğumuz sinyaller yüksek frekansta olacağından bazı hususları göz önünde bulundurmak gerekir. Öncelikle, programın ISR içindeki kodu yürütmesi ne kadar sürecek? Kaç ayrı sinyal için ISR gerekir? Mikrodenetleyicinin saat hızı ne kadar hızlı?

Uzun bir ISR’ye sahip bir programda karşılaşılabilecek bir sorun, ISR’nin, önceki tetiklemede içerdiği kodu tamamlamadan yeniden tetiklenmesidir. Bu sorunu önlemeye yardımcı olmak için bir ISR’de yalnızca gerekli en az miktarda kodu tutmanız önerilir.

Yukarıdaki örnek kodda iki sinyal, ayrı kesmelerle ayarlanmıştır. Lineer aktüatörün hareket yönünü tespit etmek için her iki sinyal de gereklidir; bu, hangisinin diğerinden önce düşükten yükseğe değiştiğinin kontrol edilmesiyle yapılır. Her iki sinyal için de kesmeleri etkinleştirmenin dezavantajı, iki kat ISR kodunun çalıştırılacak olmasıdır. Aktüatörün hareket yönünün gerekmediği ya da zaten çalışan programdan anlaşılabildiği uygulamalarda yalnızca bir sinyal için bir kesme servis rutini ayarlanması yeterlidir.

Bazı mikrodenetleyiciler, saat hızını daha hızlı olacak şekilde değiştirme yeteneğine sahiptir. Saat hızı, mikrodenetleyicinin programı çalıştırma hızını değiştirir. Okunan sinyallerin frekansı yüksekse, yetişebilmek için saat hızının artırılması gerekebilir. Ancak, uygulamanın izin verdiği ölçüde mümkün olan en düşük saat hızını kullanmak güç açısından daha verimlidir.

MIKRODENETLEYİCİ YETERİNCE HIZLI DEĞİLSE NE OLUR?

Yukarıdaki hususlar dikkate alındıktan sonra, bazen mikrodenetleyici, ana kodu çalıştırıp ISR’lere yetişmek için yeterince hızlı olmayabilir. Bu durumlarda ek bir mikrodenetleyici kullanmak isteyebilirsiniz. Bir mikrodenetleyici ISR’leri çalıştırmak ve verileri okumak için, ardından gerekli verileri ana kodun kesintisiz çalıştırılabileceği başka bir mikrodenetleyiciye iletmek için kullanılabilir.