- Rotary Enkoder ve Çeşitleri
- KY-040 Rotary Encoder Pinout ve açıklaması
- Rotary Encoder Nasıl Çalışır?
- Gerekli Bileşenler
- PIC16F877A Döner Kodlayıcı Arayüz Devre Şeması
- Kod Açıklama
Bir döner kodlayıcı, bir sistem ile etkileşime kullanıcıya yardımcı olan bir giriş cihazıdır. Daha çok bir Radyo potansiyometresine benziyor, ancak uygulamasını benzersiz kılan bir darbe dizisi çıkarıyor. Enkoderin düğmesi döndürüldüğünde, küçük adımlar halinde dönerek onun step / Servo motor kontrolü, bir dizi menüde gezinme ve bir sayının değerini artırma / azaltma ve çok daha fazlası için kullanılmasına yardımcı olur.
Bu yazıda, farklı Rotary Enkoder türleri ve nasıl çalıştığını öğreneceğiz. Ayrıca PIC Mikrodenetleyici PIC16F877A ile arayüz oluşturacak ve Kodlayıcıyı döndürerek bir tamsayının değerini kontrol edecek ve değerini 16 * 2 LCD ekranda görüntüleyeceğiz. Bu eğitimin sonunda, projeleriniz için bir Döner Kodlayıcı kullanmak konusunda rahat olacaksınız. Öyleyse başlayalım…
Rotary Enkoder ve Çeşitleri
Döner kodlayıcı genellikle şaft kodlayıcı olarak adlandırılır. Elektromekanik bir dönüştürücüdür, yani mekanik hareketleri elektronik darbelere dönüştürür veya başka bir deyişle açısal konumu veya hareketi veya şaft konumunu dijital veya analog bir sinyale dönüştürür. Döndüğünde adım adım hareket eden ve her adım için önceden tanımlanmış genişlikte bir dizi darbe dizisi üreten bir düğmeden oluşur.
Piyasada tasarımcı, uygulamasına göre birini seçebileceği birçok döner kodlayıcı türü vardır. En yaygın türler aşağıda listelenmiştir
- Artımlı Kodlayıcı
- Mutlak Kodlayıcı
- Manyetik Kodlayıcı
- Optik Kodlayıcı
- Lazer Kodlayıcı
Bu kodlayıcılar, Çıkış sinyali ve algılama teknolojisine göre sınıflandırılır, Artımlı Kodlayıcı ve Mutlak Kodlayıcılar Çıkış sinyaline göre sınıflandırılır ve Manyetik, Optik ve Lazer Kodlayıcı, Algılama Teknolojisine göre sınıflandırılır. Encoder burada kullanılan bir artımsal Encoder.
Mutlak kodlayıcı, güç kesildikten sonra bile konum bilgilerini saklar ve konum bilgileri, ona tekrar güç uyguladığımızda kullanılabilir olacaktır.
Diğer temel tür olan Artımlı kodlayıcı, kodlayıcı konumunu değiştirdiğinde veri sağlar. Konum bilgisini saklayamadı.
KY-040 Rotary Encoder Pinout ve açıklaması
KY-040 Artımlı tip döner kodlayıcının pin çıkışları aşağıda gösterilmiştir. Bu projede, bu Döner Kodlayıcıyı mikroçipten popüler mikro denetleyici PIC16F877A ile arayüzleyeceğiz.
İlk iki pin (Topraklama ve Vcc) Kodlayıcıya güç sağlamak için kullanılır, tipik olarak + 5V besleme kullanılır. Düğmeyi saat yönünde ve saat yönünün tersine döndürmenin yanı sıra, kodlayıcı ayrıca içindeki düğmeye basılarak basılabilen bir anahtar (Aktif düşük) içerir. Bu anahtardan gelen sinyal, pim 3 (SW) aracılığıyla elde edilir. Son olarak, aşağıda daha önce tartışıldığı gibi dalga formlarını üreten iki çıkış pimine (DT ve CLK) sahiptir. Bu Rotary Encoder'ı daha önce Arduino ile arayüzledik.
Rotary Encoder Nasıl Çalışır?
Çıkış tamamen GND ve VCC ile şaft ile bağlantı sağlayan dahili bakır tamponlara bağlıdır.
Rotary Encoder'ın iki parçası vardır. Şaft ile bağlantılı olup şaftın dönüşüne göre saat yönünde veya tersi yönde dönen Şaft Çarkı ve elektrik bağlantısının yapıldığı taban. Tabanda, şaft tekerleği döndüğünde taban noktalarını birleştirecek ve hem DT hem de CLK bağlantı noktasında kare dalga sağlayacak şekilde DT veya CLK'ya bağlanan bağlantı noktaları veya noktaları vardır.
Çıktı, mil döndüğünde olduğu gibi olacak.
İki bağlantı noktası kare dalgayı sağlar ancak zamanlamada küçük bir fark vardır. Bundan dolayı, çıkışı 1 ve 0 olarak kabul edersek, yalnızca dört durum olabilir, 0 0, 1 0, 1 1, 0 1. İkili çıkışın sırası, saat yönünde veya saat yönünün tersine dönüşü belirler. Örneğin, Döner Kodlayıcı boşta durumda 1 0 sağlar ve bundan sonra 1 1 sağlarsa, bu, kodlayıcının konumunu saat yönünde tek bir adım değiştirdiği anlamına gelir, ancak boşta 1 0'dan sonra 0 0 sağlıyorsa, şaftın saat yönünün tersine bir adımda pozisyon değiştirdiği anlamına gelir.
Gerekli Bileşenler
Rotary Encoder ile PIC Microcontroller arasında arayüz oluşturmamız için neye ihtiyacımız olduğunu belirleme zamanı,
- PIC16F877A
- 4.7k direnç
- 1k direnç
- 10k pot
- 33pF seramik disk kondansatör - 2 adet
- 20Mhz kristal
- 16x2 Ekran
- Döner Kodlayıcı
- 5V adaptör.
- Ekmek Tahtası
- Bağlantı telleri.
PIC16F877A Döner Kodlayıcı Arayüz Devre Şeması
Bileşenleri Devre Şemasına göre bağladıktan sonra son kurulumun resmi aşağıdadır:
Bir potansiyometre kullanmak yerine LCD'nin kontrastı için tek bir 1K direnç kullandık. Ayrıca, sonunda verilen tam çalışma videosunu kontrol edin.
Kod Açıklama
Bu projenin sonunda bir tanıtım videosu ile birlikte eksiksiz PIC kodu verilmektedir, burada kodun birkaç önemli bölümünü açıklıyoruz. PIC Microcontroller konusunda yeniyseniz, PIC eğitimlerimizi en baştan takip edin.
Daha önce tartıştığımız gibi , çıkışı kontrol etmemiz ve hem DT hem de CLK için ikili çıkışı farklılaştırmamız gerekiyor, bu yüzden işlem için bir if-else parçası oluşturduk.
if (Kodlayıcı_CLK! = konum) { if (Kodlayıcı_DT! = konum) { // lcd_com (0x01); sayaç ++; // lcd_com (0xC0) üzerine basılacak sayacı artırın ; lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, sayaç); } başka { // lcd_com (0x01); lcd_com (0xC0); sayaç--; // sayacı azaltın lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, sayaç); // lcd_puts ("Sol"); } }
Ayrıca her adımda konumu kaydetmemiz gerekir. Bunu yapmak için, mevcut konumu saklayan bir değişken "konum" kullandık.
position = Encoder_CLK; // Değişken üzerinde kodlayıcı saat konumunu saklamaktır. 0 veya 1 olabilir.
Bunun dışında LCD'de düğmeye basıldığını bildirmek için bir seçenek sağlanmıştır.
eğer (Kodlayıcı_SW == 0) { sw_delayms (20); // gecikmeyi geri al if (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("düğmeye basıldı"); // itoa (sayaç, değer, 10); // lcd_puts (değer);
System_init fonksiyonu pimi I / O işlemi, LCD başlatmak için ve döner enkoder konumunu kaydetmek için kullanılır.
void system_init () { TRISB = 0x00; // çıkış olarak PORT B, Bu port LCD TRISDbits için kullanılır.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Bu, LCD konumunu başlatır = Encoder_CLK; // while döngüsü başlamadan önce sistem başlangıcında CLK konumunu belirledi. }
LCD işlevi, lcd_puts (), lcd_cmd () 'nin bildirildiği lcd.c ve lcd.h kitaplığına yazılır.
Değişken bildirimi, yapılandırma bitleri ve diğer kod parçacıkları için lütfen aşağıdaki kodun tamamını bulun.