İçindekiler:
- Adım 1: İçerideki Döner Kodlayıcılar
- 2. Adım: Birçokları İçin Gerçek Acıya Neden Olan Sefalet
- Adım 3: Sonlu Durum Makinesi (FSM) Çözümü
- Adım 4: Arduino Kodu
- Adım 5: Kusursuz Entegrasyon
Video: Eksiksiz Bir Arduino Döner Çözümü: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Döner kodlayıcılar, genellikle Arduino ailesi mikro denetleyicileri ile kullanılan elektronik projeler için döndürülebilir kontrol düğmeleridir. Parametrelerde ince ayar yapmak, menülerde gezinmek, ekrandaki nesneleri hareket ettirmek, her türlü değeri ayarlamak için kullanılabilirler. Potansiyometreler için yaygın olarak değiştirilirler, çünkü daha doğru ve sonsuz döndürülebilirler, bir seferde bir ayrık değeri artırır veya azaltırlar ve genellikle seçim türü işlevler için basılabilir bir anahtarla entegre edilirler. Tüm şekil ve boyutlarda gelirler, ancak aşağıda açıklandığı gibi en düşük fiyat aralığıyla arayüz oluşturmak zordur.
Rotary kodlayıcıların çalışma detayları ve kullanım modları hakkında sayısız makale ve bunların nasıl kullanılacağına dair sayısız örnek kod ve kitaplık bulunmaktadır. Tek sorun, hiçbirinin en düşük fiyat aralığındaki Çin döner modülleriyle %100 doğru çalışmamasıdır.
Adım 1: İçerideki Döner Kodlayıcılar
Enkoderin döner parçasının üç pimi vardır (ve isteğe bağlı anahtar parçası için iki tane daha). Biri ortak zemindir (siyah GND), diğer ikisi düğme çevrildiğinde yönü belirlemek içindir (genellikle mavi CLK ve kırmızı DT olarak adlandırılırlar). Bunların her ikisi de mikrodenetleyicinin PULLUP giriş pinine bağlıdır ve YÜKSEK seviyeyi varsayılan okumaları yapar. Düğme ileri (veya saat yönünde) çevrildiğinde, önce mavi CLK DÜŞÜK seviyeye düşer, ardından kırmızı DT gelir. Daha ileri dönersek, mavi CLK tekrar YÜKSEK'e yükselir, ardından ortak GND yaması her iki bağlantı pimini terk ettiğinden, kırmızı DT de YÜKSEK'e yükselir. Böylece bir tam tik FWD (veya saat yönünde) tamamlanır. Aynısı diğer BWD yönüne (veya saat yönünün tersine) gider, ancak şimdi sırasıyla iki seviyeli görüntüde gösterildiği gibi önce kırmızı düşer ve mavi en son yükselir.
2. Adım: Birçokları İçin Gerçek Acıya Neden Olan Sefalet
Arduino meraklıları için ortak sorun, ucuz Rotary kodlayıcı modüllerinin çıkış seviyelerinde fazladan değişiklikler yaparak fazladan ve yanlış yön sayım okumalarına neden olmasıdır. Bu, kusursuz sayımı önler ve bu modüllerin doğru döner projelere entegre edilmesini imkansız hale getirir. Bu ekstra sıçramalar, bağlantı pimleri üzerindeki yamaların mekanik hareketlerinden kaynaklanır ve ekstra kapasitörler uygulamak bile bunları tamamen ortadan kaldıramaz. Sıçramalar, tam onay döngülerinin herhangi bir yerinde görünebilir ve görüntülerde gerçek hayat senaryolarıyla gösterilmektedir.
Adım 3: Sonlu Durum Makinesi (FSM) Çözümü
Resim, hem doğru hem de yanlış sıçramalar için iki pim (mavi CLK ve kırmızı DT) için olası seviye değişikliklerinin tam durum alanını gösterir. Bu durum makinesine dayanarak, her zaman %100 doğru çalışan eksiksiz bir çözüm programlanabilir. Bu çözümde filtreleme gecikmesi gerekmediğinden, aynı zamanda mümkün olan en hızlı çözümdür. Pinlerin durum uzayını çalışma modundan ayırmanın bir başka yararı da, kişinin hem yoklama hem de kesme modlarını kendi beğenisine uygulayabilmesidir. Yoklama veya kesintiler, pinlerdeki seviye değişikliklerini algılayabilir ve ayrı bir rutin, mevcut durumu ve gerçek seviye değişiklikleri olaylarını temel alarak yeni durumu hesaplar.
Adım 4: Arduino Kodu
Aşağıdaki kod, seri monitördeki FWD ve BWD işaretlerini sayar ve ayrıca isteğe bağlı anahtar işlevini entegre eder.
// Peter Csurgay 2019-04-10
// Arduino portlarına eşlenen döner pinler
#define SW 21 #define CLK 22 #define DT 23
// Döner tarafından ayarlanan sayacın mevcut ve önceki değeri
int eğriVal = 0; int öncekiDeğer = 0;
// FSM'nin yedi durumu (sonlu durum makinesi)
#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int durum = IDLE_11;
geçersiz kurulum() {
Seri.başla(250000); Serial.println("Başlat…"); // Seviye YÜKSEK tüm pinler için varsayılan olacak pinMode(SW, INPUT_PULLUP); pinMode(CLK, INPUT_PULLUP); pinMode(DT, INPUT_PULLUP); // Hem CLK hem de DT, tüm düzey değişiklikleri için kesmeleri tetikler AttachInterrupt(digitalPinToInterrupt(CLK), rotaryCLK, CHANGE); ataşeKesme(dijitalPinToInterrupt(DT), rotaryDT, CHANGE); }
boşluk döngüsü () {
// Bazı döner kodlayıcılara entegre isteğe bağlı anahtarın kullanımı if (digitalRead(SW)==LOW) { Serial.println("Pressed"); while(!digitalRead(SW)); } // Sayaç değerindeki herhangi bir değişiklik Seri Monitörde görüntülenir if (curVal != prevVal) { Serial.println(curVal); öncekiVal = eğriVal; } }
// CLK seviyesi değişiklikleri için State Machine geçişleri
void rotaryCLK() { if (digitalRead(CLK)==LOW) { if (durum==IDLE_11) durum = SCLK_01; else if (durum==SCLK_10) durum = SCLK_00; else if (durum==SDT_10) durum = SDT_00; } else { if (durum==SCLK_01) durum = IDLE_11; else if (durum==SCLK_00) durum = SCLK_10; else if (durum==SDT_00) durum = SDT_10; else if (durum==SDT_01) { durum = IDLE_11; curVal--; } } }
// DT seviye değişiklikleri için State Machine geçişleri
void rotaryDT() { if (digitalRead(DT)==LOW) { if (durum==IDLE_11) durum = SDT_10; else if (durum==SDT_01) durum = SDT_00; else if (durum==SCLK_01) durum = SCLK_00; } else { if (durum==SDT_10) durum = IDLE_11; else if (durum==SDT_00) durum = SDT_01; else if (durum==SCLK_00) durum = SCLK_01; else if (durum==SCLK_10) { durum = IDLE_11; curVal++; } } }
Adım 5: Kusursuz Entegrasyon
Ekli videoda, çeşitli düzensiz sıçrama efektlerine sahip düşük aralıklı döner kodlayıcılar durumunda bile FSM çözümünün doğru ve hızlı çalıştığını kontrol edebilirsiniz.
Önerilen:
Eksiksiz Akıllı Ev: 9 Adım
Eksiksiz Akıllı Ev: Bu proje, röle değerlerine bağlı olarak tavan vantilatörleri ve ışıklar gibi basit 6A yükleri açıp kapatabilir. Android, iOS, Java, Windows veya herhangi bir şeye sahip herhangi bir telefondan 16'ya kadar yük açılıp kapatılabilir. web tabanlı. Android için uygulaması var
SMD Lehimlemeye Yeni Başlayanlar İçin Eksiksiz Bir Kılavuz: 5 Adım (Resimlerle)
SMD Lehimlemeye Yeni Başlayanlar İçin Eksiksiz Bir Kılavuz: Pekala, lehimleme delikli bileşenler için oldukça basittir, ancak daha sonra küçük *buraya karınca adam referansı eklemeniz* gereken zamanlar vardır ve TH lehimleme için öğrendiğiniz beceriler sadece artık başvurun. Dünyaya hoş geldiniz
SKY CAM bir Hava Kamerası Çözümü: 10 Adım (Resimlerle)
SKY CAM bir Hava Kamerası Çözümü: Bu Talimat, Okuldaki GCSE Elektronik Ürünler Projem için nasıl uzaktan kumandalı (Yarı Otonom) Kablo Kamera sistemi yaptığım konusunda size yol gösterecek ve umarım kendi sisteminizi oluşturabilmenizi sağlayacaktır! Bu kaba bir kılavuz olarak tasarlanmıştır
Eksiksiz Arduino Tabanlı Araç GPS+GPRS Hırsızlık Önleme Sistemi: 5 Adım (Resimlerle)
Eksiksiz Arduino Tabanlı Araç GPS+GPRS Hırsızlık Önleme Sistemi: Herkese merhaba!Bir GPS araç hırsızlık önleme cihazı için eksiksiz bir çözüm oluşturmak istedim, bu: mümkün olduğu kadar ucuz ve eksiksiz, çalışır durumda. -mümkün olduğunca yapacak başka bir şey yok, bu yüzden Arduino tabanlı bir çözüm oluşturdum
Eşinizin ve Çocukların Bile Kullanacağı Bir Medya Merkezi Çözümü: 9 Adım
Karısı ve Çocukların Bile Kullanacağı Bir Medya Merkezi Çözümü: Bu Eğitilebilir Tablo, çok çeşitli medya merkezi uygulamalarını, işletim sistemlerini, Donanım ve dosya biçimlerini deneme deneyimimin bir özetidir. Bu bir PVR değil ve canlı TV kaydetmenize veya duraklatmanıza izin vermiyor, ancak iyi bir alternatif önereceğim