Daftar Isi:
Video: Dekoder Rotary Sederhana: 4 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Instruksi ini menjelaskan metode sederhana decoding rotary encoder sekuensial menggunakan Arduino Uno R3.
Rutinitas perangkat lunak yang ringkas digunakan untuk menghitung jumlah transisi, menghilangkan pantulan kontak, dan menentukan arah rotasi. Komponen tambahan dan tabel pencarian tidak diperlukan.
Versi kode interupsi dan non-interupsi disediakan.
Versi interupsi kode hanya membutuhkan satu pin interupsi.
Gambar-gambar:
- Foto pembuka menunjukkan encoder yang dirakit.
- Tangkapan layar menunjukkan kode untuk versi interupsi dan hitungan saat poros encoder diputar searah jarum jam dan berlawanan arah jarum jam.
- Video menunjukkan hitungan selama rotasi cepat.
Langkah 1: Diagram Sirkuit
Diagram pengkabelan encoder ditunjukkan pada gbr.1.
Kabel jumper disolder langsung ke pin encoder.
Tukarkan dua kabel biru jika arah hitungan dibalik.
Langkah 2: Daftar Bagian
Bagian berikut diperoleh dari
- 1 hanya Arduino UNO R3 dengan Kabel USB.
- 1 hanya rotary encoder sekuensial (EC11 atau setara) dengan sakelar.
- 1 hanya kenop yang sesuai dengan poros.
- 3 hanya kabel jumper male-to-male Arduino.
Langkah 3: Teori
Rotary encoder berurutan menghasilkan dua gelombang persegi yang masing-masing dipindahkan sebesar 90 derajat seperti yang ditunjukkan pada Gambar.1.
Pola logika pada Kontak A dan Kontak B berbeda ketika poros diputar searah jarum jam (CW) dan berlawanan arah jarum jam (CCW) melalui posisi 1 sampai 6.
Metode umum untuk menentukan arah rotasi meliputi:
- perangkat keras
- interupsi kembar
- tabel pencarian pola
Proyek ini menggunakan metode perangkat lunak yang tidak memerlukan tabel pencarian. [1]
Arah
Alih-alih melihat pola keluaran dari Kontak A dan Kontak B, mari kita fokus pada Kontak A.
Jika kami mengambil sampel Kontak B setelah setiap transisi Kontak A, kami mencatat bahwa:
- Kontak A dan Kontak B memiliki status logika yang berlawanan ketika encoder diputar CW
- Kontak A dan Kontak B memiliki status logika yang sama ketika encoder diputar CCW
Kode sebenarnya:
// ----- Hitung transisi
CurrentStateA = stateContactA(); if (CurrentStateA != LastStateA) { CurrentStateB = digitalRead(ContactB); jika (CurrentStateA == CurrentStateB) Hitung++; if (CurrentStateA != CurrentStateB) Hitung--; LastStateA = CurrentStateA; }
Metode ini menawarkan keuntungan sebagai berikut:
- tabel pencarian tidak diperlukan
- hanya satu jalur interupsi yang diperlukan
Debounce
Semua encoder mekanis mengalami “contact bouncing”.
Jika kontak sakelar tidak membuat/putus dengan bersih, status logikanya akan berosilasi dengan cepat dari TINGGI ke RENDAH hingga kontak sakelar menetap. Ini menghasilkan penghitungan palsu.
Salah satu metode untuk menekan pantulan kontak adalah dengan menambahkan kapasitor kecil di setiap kontak sakelar. Kapasitor dan resistor pull-up terkait membentuk integrator yang secara efektif memperpendek frekuensi tinggi dan memungkinkan tegangan sakelar naik/turun dengan anggun.
Kelemahan dari pendekatan ini adalah bahwa transisi mungkin terlewatkan jika poros encoder diputar dengan cepat.
Perangkat Lunak Debouncing
Metode ini menggunakan dua counter (Open, Closed) yang telah disetel ke nol. [2]
Setelah transisi terdeteksi pada Kontak A:
- Polling terus menerus Hubungi A.
- Tingkatkan penghitung Terbuka, dan setel ulang penghitung Tertutup, setiap kali Kontak A TINGGI.
- Tingkatkan penghitung Tertutup, dan setel ulang penghitung Terbuka, setiap kali Kontak A RENDAH.
- Keluar dari loop ketika salah satu penghitung mencapai hitungan yang telah ditentukan. Kami secara efektif mencari periode kondisi mapan setelah bouncing kontak apa pun.
Kode sebenarnya:
// ----- Debounce Kontak A
while (1) { if (digitalRead(ContactA)) { // ----- ContactA Terbuka Tertutup = 0; // Kosongkan integrator berlawanan Open++; // Integrasikan jika (Buka > MaxCount) mengembalikan TINGGI; } else { // ----- KontakA Tertutup Buka = 0; // Kosongkan integrator berlawanan Closed++; // Integrasikan jika (Closed > MaxCount) mengembalikan LOW; } }
Tidak perlu melakukan debounce Kontak B karena transisi Kontak A dan Kontak B tidak bersamaan.
Perhitungan
Sebuah "penahanan" mekanis secara efektif menggandakan hitungan Anda karena dua hitungan terdaftar di antara klik (lihat gambar 1).
Jumlah "detents" dapat ditentukan menggunakan aritmatika modulo 2 seperti yang ditunjukkan di bawah ini.
Kode sebenarnya:
// ----- Hitung "penahan"
if (Hitung % 2 == 0) { Serial.print("Hitung: "); Serial.println(Hitung / 2); }
Referensi
Informasi lebih lanjut dapat ditemukan di:
[1]
howtomechatronics.com/tutorials/arduino/ro…
[2]
newbiehack.com/ButtonorSwitchDebounceinSof…
Langkah 4: Perangkat Lunak
Proyek ini memerlukan versi terbaru dari Ardino Uno R3 IDE (lingkungan pengembangan terintegrasi) yang tersedia dari
Unduh masing-masing dari dua sketsa Arduino berikut (terlampir)
- rotary_encoder_1.ino (versi polling)
- rotary_encoder_2.no (versi interupsi)
Klik dua kali pada versi pilihan Anda dan ikuti petunjuk di layar.
Menikmati …
Klik di sini untuk melihat instruksi saya yang lain.
Direkomendasikan:
Tangan Terkendali Sederhana Arduino Sederhana: 5 Langkah
Arduino Simple Low-Cost Controllable Hand: Ada banyak lengan robotik berbasis 3D yang dicetak dan sensor fleksibel di seluruh internet yang luas. Namun, sebagai mahasiswa saya tidak memiliki banyak akses ke hal-hal seperti, CNC, printer 3D, dan alat-alat listrik. Saya punya solusi, kita akan membangun l
Cara Memprogram Dekoder IR untuk Kontrol Motor AC Multi-kecepatan: 7 Langkah
Cara Memprogram Dekoder IR untuk Kontrol Motor AC Multi-kecepatan: Motor arus bolak-balik satu fase biasanya ditemukan di barang-barang rumah tangga seperti kipas, dan kecepatannya dapat dengan mudah dikontrol saat menggunakan sejumlah belitan diskrit untuk kecepatan yang disetel. Dalam Instruksi ini kami membangun pengontrol digital yang
Cara Menggunakan Motor Stepper Sebagai Rotary Encoder dan Tampilan OLED untuk Langkah: 6 Langkah
Cara Menggunakan Motor Stepper Sebagai Rotary Encoder dan Tampilan OLED untuk Langkah-Langkahnya: Dalam tutorial ini kita akan mempelajari cara melacak langkah motor stepper pada Tampilan OLED. Tonton video demonstrasi. Kredit untuk tutorial Asli diberikan kepada pengguna youtube "sky4fly"
Dekoder Sensor RF Arduino: 5 Langkah
Arduino RF Sensor Decoder: Rumah saya sebelumnya dilengkapi dengan sistem keamanan pra-instal yang memiliki sensor pintu, sensor gerak, dan panel kontrol. Semuanya disambungkan ke kotak elektronik besar di lemari dan ada instruksi untuk memasang kabel telepon rumah ke otomatis
Cara Cepat dan Mudah untuk Mengubah Layar Kunci Anda dalam 6 Langkah Sederhana (Windows 8-10): 7 Langkah
Cara Cepat dan Mudah untuk Mengubah Layar Kunci Anda dalam 6 Langkah Sederhana (Windows 8-10): Ingin mengubah banyak hal di laptop atau PC Anda? Ingin perubahan dalam suasana Anda? Ikuti langkah-langkah cepat dan mudah ini untuk berhasil mempersonalisasi layar kunci komputer Anda