Döner enkoderlerde genelde 4 uç bulunur. Bunlar Vcc, Gnd, A ve B uçlarıdır. Vcc + besleme ucu Gnd - besleme ucu A ve B uçları da kod çıkış uçlarıdır. Bu çıkışlardan A ve B birbirlerine göre 90 derece faz farkı olan 2 kare dalgadır. Ürettikleri pals sayıları aynıdır. Bir tam turda enkoderin çözünürlüğü kadar pals üretirler. Eğer A çıkışı, B çıkışından 90 derece önde ise dönme yönü saat yönünde, B çıkışı A çıkışından 90 derece önde ise dönme yönü saat yönünün tersi yönündedir. Bu iki çıkış karşılaştırılarak dönme yönü belirlenebilmektedir.

Basitçe anlatmak gerekirse 2 kanalında sıfır olduğu zamanı başlangıç kabul eder isek önce A kanalı 1 oluyor ise saat yönü B kanalı bir oluyorsa Saatin ters yönü dönüş olmaktadır.
Örnek Arduino devresi:

Bu kullandığımız enkoderi bulmak oldukça kolaydır. Bu devreyi gerekli eklemeleri yaparak değer değiştirme, devir sayma veya menü ayarlamada kullanabiliriz. Enkoderin ortasında bir tanede butun bulunmaktadır, bu buton ile menülerde seçme işlemi yapılabilir. Enkoder uçları ise CLK kanal A, DT Kanal B, SW buton ucu,+ pozitif besleme, GND ise negatif beslemedir.
Örnek Arduino kodu:
// Pin Tanımlamaları
const int swPin = 3; // Buton pini
const int clkPin = 4; // CLK (A kanalı)
const int dtPin = 5; // DT (B kanalı)
int sayac = 0;
int sonDurumCLK;
unsigned long sonDebounceZamani = 0;
void setup() {
pinMode(clkPin, INPUT);
pinMode(dtPin, INPUT);
pinMode(swPin, INPUT_PULLUP); // Dahili pull-up direnci aktif
Serial.begin(9600);
// Başlangıç durumunu oku
sonDurumCLK = digitalRead(clkPin);
Serial.println("Enkoder Hazir!");
}
void loop() {
// CLK pinindeki değişimi oku
int simdikiDurumCLK = digitalRead(clkPin);
// Eğer CLK durumu değişmişse (Dönüş başladıysa)
if (simdikiDurumCLK != sonDurumCLK) {
// DT pininin durumu, CLK ile aynı değilse saat yönüne dönüyordur
if (digitalRead(dtPin) != simdikiDurumCLK) {
sayac++;
} else {
sayac--;
}
// Yeni değeri seri monitöre yazdır
Serial.print("Pozisyon: ");
Serial.println(sayac);
}
// Mevcut durumu bir sonraki döngü için kaydet
sonDurumCLK = simdikiDurumCLK;
// Buton Kontrolü (Sayacı sıfırlar)
if (digitalRead(swPin) == LOW) {
if (millis() - sonDebounceZamani > 200) {
sayac = 0;
Serial.println("Pozisyon Sifirlandi!");
sonDebounceZamani = millis();
}
}
}
Henüz yorum yapılmamış. İlk yorumu siz yapın!