Rotary Encoder Nasıl Çalışır ve Arduino ile Ara Yüz Oluşturur

Rotary Encoder Nasil Calisir Ve Arduino Ile Ara Yuz Olusturur



Döner Kodlayıcı, elektronik alanında çeşitli kullanımlara sahip önemli bir elektromekanik cihazdır. Bu makale, Arduino ile arayüzü ile birlikte döner kodlayıcının türlerini ve çalışmalarını açıklayacaktır.

Döner Kodlayıcı Nedir?

Döner kodlayıcı, döner düğmenin açısal konumunu algılayan ve mikrodenetleyiciye veya bağlı oldukları diğer herhangi bir cihaza sinyaller gönderen bir dijital giriş cihazıdır. Durmadan 360° dönebilirler. Şaft enkoderi olarak da adlandırılır. Yazıcılarda, ses elektroniğinde, motorlarda ve kontrolörlerde kullanılır.









Döner Enkoder Türleri

Ürettikleri çıkış sinyaline göre karar verilen başlıca iki tip döner kodlayıcı vardır. Bu türler şöyle adlandırılır:



Artımlı Döner Kodlayıcı

Bu tip kodlayıcı, döner düğmenin devirlerini darbeler şeklinde sayar. Düğme bir kez döndürüldüğünde, bir darbe üretilir. Her darbe için sayaç, milin açısal konumunu belirtmek üzere artar.





Mutlak Döner Kodlayıcı

Bu tip enkoderler her mil konumu için ayrı bir kodu olduğundan milin mutlak açısal konumunu verir ve bu kod üzerinden açıyı ölçer. Açısal konum çıktısı vermek için sayaca ihtiyaç duymaz. Mutlak döner kodlayıcının enerjisi kesilse bile açısal konumlar için ilgili değerler korunur. Aynı zamanda düşük maliyetli bir kodlayıcıdır.



Döner Kodlayıcının Çalışması

Döner kodlayıcı, topraklanmış ortak bir pin C'ye bağlı eşit aralıklı alanlara sahip bir diskten oluşur. Diğer iki pin A ve B, döner düğme döndürüldüğünde C ile temas eden kontak pinleridir. A veya B pimi toprağa bağlandığında, bir sinyal üretilir. Çıkış pinlerinden üretilen bu sinyaller 90° faz dışıdır. Bunun nedeni, topuz saat yönünde çevrildiğinde A piminin toprağa bağlanması ve topuz saat yönünün tersine çevrildiğinde önce B piminin toprağa bağlanmasıdır. Bu nedenle topuzun dönüş yönü bu bağlantılar vasıtasıyla belirlenir.

eğer durumu B eşit değildir A , ardından düğme saat yönünde dönmüştür.


B'nin durumu A'ya eşitse, düğme saat yönünün tersine dönmüştür.

Döner Kodlayıcının Pin Konfigürasyonu

Aşağıda verilen şema, A ve B çıkış pimlerini, basmalı düğme olarak kullanılabilen bir döner anahtarı ve güç kaynağı pimlerini gösteren döner kodlayıcının bir pin çıkışını verir.

Döner Kodlayıcı Pin Açıklaması

Aşağıda, tüm döner kodlayıcı pimlerinin verilen açıklaması yer almaktadır.

Çıkış B veya CLK

Bu pim, düğmenin veya döner kodlayıcının kaç kez döndüğünün bir çıktısını verir. Düğme her döndürüldüğünde, CLK bir YÜKSEK ve DÜŞÜK döngüsünü tamamlar. Bir devir olarak sayılır.

A veya DT Çıkışı

Bu, dönüş yönünü belirleyen döner kodlayıcının ikinci çıkış pimidir. CLK sinyalinin 90° gerisinde kalır. Bu nedenle, durumu CLK'nın durumuna eşit değilse, dönüş yönü saat yönünde, aksi takdirde saat yönünün tersinedir.

Anahtar

Anahtar pimi, basmalı düğmeye basılıp basılmadığını kontrol etmek için kullanılır.

VCC

Bu pim 5V'luk bir kaynağa bağlıdır.

GND

Bu pin toprağa bağlı

Rotary Encoder ile Arduino Arayüzü

Döner kodlayıcının beş pimi vardır. Döner kodlayıcının VCC ve GND'si Arduino'nunkine bağlıdır. Kalan pinler CLK, DT ve SW, Arduino'nun dijital giriş pinlerine bağlanır.

Döner Kodlayıcı için Arduino Kodu

// Döner Enkoder Girişleri
#define CLK_PIN 2
#DT_PIN 3'ü tanımla
#define SW_PIN 4
int sayacı = 0 ;
int geçerliCLKSdurum;
int sonCLKSdurum;
Dizi akım yönü = '' ;
imzasız uzun lastButtonPressTime = 0 ;
geçersiz kurulum ( ) {
// Kodlayıcı pinlerini ayarla gibi girdiler
    pin Modu ( CLK_PIN, GİRİŞ ) ;
    pin Modu ( DT_PIN, GİRİŞ ) ;
    pin Modu ( SW_PIN, INPUT_PULLUP ) ;
// Seri Monitör Kurulumu
seri.başlangıç ( 9600 ) ;
// CLK'nın başlangıç ​​durumunu okuyun
lastCLKState = digitalRead ( CLK_PIN ) ;
}
boşluk döngüsü ( ) {
// CLK'nın mevcut durumunu okuyun
currentCLKState = digitalRead ( CLK_PIN ) ;
// Eğer son ve CLK'nın mevcut durumu farklıdır, Daha sonra bir nabız oluştu
// Yalnızca tepki ver 1 çift ​​sayımı önlemek için durum değişikliği
eğer ( mevcutCLKSdurum ! = son CLKSdurumu && mevcutCLKSdurum == 1 ) {
// DT durumu CLK durumundan farklıysa, Daha sonra
// Kodlayıcı saat yönünün tersine dönüyor, bu nedenle azalma
eğer ( dijitalOkuma ( DT_PIN ) ! = geçerli CLKSdurumu ) {
tezgah--;
akım Yönü = 'CCW' ;
} başka {
// Enkoder saat yönünde dönüyor, bu nedenle artış
sayaç++;
akım Yönü = 'CW' ;
}
seri.baskı ( 'Dönme Yönü:' ) ;
seri.baskı ( akımYön ) ;
seri.baskı ( ' | Sayaç Değeri: ' ) ;
Serial.println ( tezgah ) ;
}
// hatırla son CLK durumu
lastCLKSstate = mevcutCLKSdurum;
// Düğme durumunu oku
int buttonState = digitalRead ( SW_PIN ) ;
// DÜŞÜK bir sinyal algılarsak, düğmeye basılır
eğer ( buttonState == DÜŞÜK ) {
// üzerinden 50ms geçtiyse son DÜŞÜK nabız, bunun anlamı
// düğmesine basıldı, bırakıldı ve tekrar basıldı
eğer ( milis ( ) - lastButtonPressTime > elli ) {
Serial.println ( 'Düğmeye Basıldı!' ) ;
}
// hatırla son düğmeye basma olayı zaman
lastButtonPressTime = mili saniye ( ) ;
}
// Koymak içinde için hafif bir gecikme yardım okumayı iptal etmek
gecikme ( 1 ) ;
}


Yukarıdaki kodda loop() fonksiyonunda CLK pininin durumu kontrol edilmektedir. Önceki durumuna eşit değilse, döner düğmenin döndüğünü gösterir. Şimdi, topuz dönüş yönünü kontrol etmek için CLK'nin mevcut durumu DT'nin durumu ile karşılaştırılır. Her iki durum da eşit değilse, düğmenin saat yönünde döndüğünü gösterir ve döner düğmenin konumunu göstermek için sayaç değerini artırır. Tersi durumda, sayaç azalır.

Çözüm

Döner kodlayıcılar, sürekli dönebilen gelişmiş konum sensörleridir. İki tipte bulunurlar: artımlı ve mutlak. Döner kodlayıcı, topuzun dönüşü nedeniyle üretilen darbeleri sayarak çalışır. Günlük yaşam elektroniğinden endüstriyel otomasyona kadar çeşitli uygulamalara sahiptir.