- Rotary Encoder dan Jenisnya
- KY-040 Rotary Encoder Pinout dan deskripsi
- Bagaimana Rotary Encoder Bekerja
- Komponen Diperlukan
- PIC16F877A Diagram Sirkuit Antarmuka Rotary Encoder
- Penjelasan Kode
Sebuah Rotary encoder adalah perangkat input yang membantu pengguna untuk berinteraksi dengan sistem. Ini lebih terlihat seperti potensiometer Radio tetapi mengeluarkan rangkaian pulsa yang membuat aplikasinya unik. Ketika kenop Encoder diputar, ia berputar dalam bentuk langkah-langkah kecil yang membantunya digunakan untuk mengendalikan stepper / motor Servo, menavigasi melalui urutan menu dan Menaikkan / menurunkan nilai angka dan banyak lagi.
Pada artikel ini, kita akan mempelajari tentang berbagai jenis Rotary Encoder dan cara kerjanya. Kami juga akan menghubungkannya dengan Mikrokontroler PIC PIC16F877A dan mengontrol nilai integer dengan memutar Encoder dan menampilkan nilainya pada layar LCD 16 * 2. Di akhir tutorial ini, Anda akan merasa nyaman menggunakan Rotary Encoder untuk proyek Anda. Jadi mari kita mulai…
Rotary Encoder dan Jenisnya
Rotary encoder sering juga disebut dengan shaft encoder. Ini adalah transduser elektromekanis, artinya mengubah gerakan mekanis menjadi pulsa elektronik atau dengan kata lain mengubah posisi sudut atau gerakan atau posisi poros menjadi sinyal digital atau analog. Ini terdiri dari sebuah kenop yang ketika berputar akan bergerak selangkah demi selangkah dan menghasilkan urutan rangkaian pulsa dengan lebar yang telah ditentukan untuk setiap langkah.
Ada banyak jenis encoder putar di pasaran yang dapat dipilih perancang sesuai dengan aplikasinya. Jenis yang paling umum tercantum di bawah ini
- Encoder Inkremental
- Encoder Mutlak
- Encoder Magnetik
- Encoder Optik
- Pembuat Enkode Laser
Encoder ini diklasifikasikan berdasarkan sinyal Output dan teknologi penginderaan, Encoder Inkremental dan Encoder Absolut diklasifikasikan berdasarkan sinyal Output dan Encoder Magnetik, Optik dan Laser diklasifikasikan berdasarkan Teknologi Penginderaan. The Encoder yang digunakan di sini adalah jenis Encoder Incremental.
Encoder absolut menyimpan informasi posisi bahkan setelah daya dilepas, dan informasi posisi akan tersedia ketika kita kembali menggunakan daya untuk itu.
Jenis dasar lainnya, encoder inkremental memberikan data saat encoder mengubah posisinya. Itu tidak dapat menyimpan informasi posisi.
KY-040 Rotary Encoder Pinout dan deskripsi
Pinout dari encoder putar jenis KY-040 Incremental ditunjukkan di bawah ini. Dalam proyek ini, kami akan menghubungkan Rotary Encoder ini dengan mikrokontroler populer PIC16F877A dari microchip.
Dua pin pertama (Ground dan Vcc) digunakan untuk menyalakan Encoder, biasanya suplai + 5V digunakan. Selain memutar kenop searah jarum jam dan berlawanan arah jarum jam, encoder juga memiliki sakelar (Active low) yang dapat ditekan dengan menekan kenop di dalam. Sinyal dari sakelar ini diperoleh melalui pin 3 (SW). Akhirnya ia memiliki dua pin keluaran (DT dan CLK) yang menghasilkan bentuk gelombang seperti yang telah dibahas di bawah ini. Kami telah menghubungkan Rotary Encoder ini sebelumnya dengan Arduino.
Bagaimana Rotary Encoder Bekerja
Output sepenuhnya tergantung pada bantalan tembaga internal yang menyediakan koneksi dengan GND dan VCC dengan poros.
Ada dua bagian dari Rotary Encoder. Poros Roda yang dihubungkan dengan poros dan berputar searah jarum jam atau berlawanan arah jarum jam tergantung dari putaran poros, dan alas tempat penyambungan listrik dilakukan. Basis memiliki port atau titik yang dihubungkan ke DT atau CLK sedemikian rupa sehingga ketika roda poros berputar, ia akan menghubungkan titik-titik dasar dan memberikan gelombang persegi pada port DT dan CLK.
Outputnya akan seperti saat poros berputar-
Dua port menyediakan gelombang persegi tetapi ada sedikit perbedaan waktu. Karena itu, jika kita menerima keluaran sebagai 1 dan 0, hanya ada empat keadaan, 0 0, 1 0, 1 1, 0 1. Urutan keluaran biner menentukan belokan searah jarum jam atau berlawanan arah jarum jam. Seperti, misalnya, jika Rotary Encoder memberikan 1 0 dalam kondisi idle dan memberikan 1 1 setelah itu, itu berarti encoder mengubah posisinya satu langkah ke arah jarum jam, tetapi jika menyediakan 0 0 setelah idle 1 0, artinya poros mengubah posisinya berlawanan arah jarum jam dengan satu langkah.
Komponen Diperlukan
Saatnya untuk mengidentifikasi apa yang kita butuhkan untuk menghubungkan Rotary Encoder dengan PIC Microcontroller,
- PIC16F877A
- Resistor 4.7k
- Resistor 1k
- 10k pot
- Kapasitor cakram keramik 33pF - 2 lembar
- Kristal 20Mhz
- Layar 16x2
- Rotary Encoder
- Adaptor 5V.
- Papan Roti
- Kabel hookup.
PIC16F877A Diagram Sirkuit Antarmuka Rotary Encoder
Di bawah ini adalah gambar pengaturan akhir setelah menghubungkan komponen-komponen sesuai Diagram Sirkuit:
Kami telah menggunakan resistor 1K tunggal untuk kontras LCD daripada menggunakan potensiometer. Juga, periksa video kerja lengkap yang diberikan di bagian akhir.
Penjelasan Kode
Kode PIC lengkap diberikan di akhir proyek ini dengan video demonstrasi, di sini kami menjelaskan beberapa bagian penting dari kode. Jika Anda baru dengan Mikrokontroler PIC, ikuti tutorial PIC kami dari awal.
Seperti yang telah kita bahas sebelumnya, kita perlu memeriksa keluaran dan membedakan keluaran biner untuk DT dan CLK, jadi kita membuat bagian if-else untuk operasi tersebut.
if (Encoder_CLK! = position) { if (Encoder_DT! = position) { // lcd_com (0x01); counter ++; // Tingkatkan penghitung yang akan dicetak pada lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, penghitung); } lain { // lcd_com (0x01); lcd_com (0xC0); melawan--; // turunkan penghitung lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, penghitung); // lcd_puts ("Kiri"); } }
Kami juga perlu menyimpan posisi di setiap langkah. Untuk melakukan ini, kami menggunakan variabel "posisi" yang menyimpan posisi saat ini.
posisi = Encoder_CLK; // Ini untuk menyimpan posisi jam encoder pada variabel. Bisa 0 atau 1.
Selain ini, tersedia opsi untuk memberi tahu tentang sakelar tekan pada LCD.
jika (Encoder_SW == 0) { sw_delayms (20); // hapus penundaan jika (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("tombol ditekan"); // itoa (counter, value, 10); // lcd_puts (nilai);
The system_init Fungsi ini digunakan untuk menginisialisasi pin I / O operasi, LCD dan untuk menyimpan posisi Rotary Encoder.
batal system_init () { TRISB = 0x00; // PORT B sebagai output, Port ini digunakan untuk LCD TRISDbits.TRISD2 = 1; TRISDbits.TRISD3 = 1; TRISCbits.TRISC4 = 1; lcd_init (); // Ini akan menginisialisasi posisi LCD = Encoder_CLK; // Menurunkan posisi CLK pada sistem init, sebelum loop sementara dimulai. }
Fungsi LCD ditulis pada pustaka lcd.c dan lcd.h dimana lcd_puts (), lcd_cmd () dideklarasikan.
Untuk deklarasi variabel, bit konfigurasi, dan cuplikan kode lainnya, silakan temukan kode lengkapnya di bawah ini.