- Pengekod Rotary dan Jenisnya
- Pin dan keterangan Pengekod Rotary Encoder KY-040
- Bagaimana Rotary Encoder Berfungsi
- Komponen Diperlukan
- Diagram Litar Interfacing Rotary Encoder PIC16F877A
- Penjelasan Kod
A pengekod Rotary adalah alat input yang membantu pengguna untuk berinteraksi dengan sistem. Ia lebih mirip radio potensiometer tetapi menghasilkan rangkaian denyutan yang menjadikan aplikasinya unik. Apabila tombol Encoder diputar, ia berputar dalam bentuk langkah kecil yang membantunya digunakan untuk pengendali motor stepper / Servo, menavigasi melalui urutan menu dan Menambah / menurunkan nilai nombor dan banyak lagi.
Dalam artikel ini, kita akan belajar mengenai pelbagai jenis Rotary Encoders dan bagaimana ia berfungsi. Kami juga akan menghubungkannya dengan PIC Microcontroller PIC16F877A dan mengawal nilai integer dengan memutar Encoder dan memaparkan nilainya pada skrin LCD 16 * 2. Pada akhir tutorial ini, anda akan selesa menggunakan Rotary Encoder untuk projek anda. Oleh itu, mari kita mulakan…
Pengekod Rotary dan Jenisnya
Pengekod putar sering dipanggil pengekod aci. Ia adalah transduser elektromekanik, yang bermaksud ia menukar pergerakan mekanikal menjadi denyut elektronik atau dengan kata lain ia menukar kedudukan sudut atau gerakan atau kedudukan poros ke isyarat digital atau analog. Ini terdiri dari tombol yang ketika berpusing akan bergerak selangkah demi selangkah dan menghasilkan urutan kereta nadi dengan lebar yang telah ditentukan untuk setiap langkah.
Terdapat banyak jenis rotary encoder di pasaran yang mana pereka dapat memilihnya mengikut aplikasinya. Jenis yang paling biasa disenaraikan di bawah
- Pengekod Penambahan
- Pengekod mutlak
- Pengekod Magnetik
- Pengekod Optik
- Pengekod Laser
Pengekod ini dikelaskan berdasarkan isyarat Output dan teknologi penginderaan, Encoder Inkremental dan Encoder Mutlak diklasifikasikan berdasarkan isyarat Output dan Encoder Magnetik, Optik dan Laser dikelaskan berdasarkan Teknologi Sensing. The Encoder digunakan di sini adalah jenis pengekod tokokan.
Pengekod mutlak menyimpan maklumat kedudukan walaupun setelah kuasa dilepaskan, dan maklumat kedudukan akan tersedia apabila kita kembali menggunakan kuasa.
Jenis asas lain, Encoder tambahan menyediakan data apabila pengekod mengubah kedudukannya. Tidak dapat menyimpan maklumat kedudukan.
Pin dan keterangan Pengekod Rotary Encoder KY-040
Pinout encoder jenis KY-040 Incremental ditunjukkan di bawah. Dalam projek ini, kami akan menghubungkan Rotary Encoder ini dengan mikrokontroler PIC16F877A yang popular dari microchip.
Dua pin pertama (Tanah dan Vcc) digunakan untuk memberi kuasa kepada Encoder, biasanya bekalan 5V digunakan. Selain memutar tombol pada arah jam dan arah lawan jam, pengekod juga mempunyai suis (Active low) yang dapat ditekan dengan menekan kenop ke dalam. Isyarat dari suis ini diperoleh melalui pin 3 (SW). Akhirnya ia mempunyai dua pin output (DT dan CLK) yang menghasilkan bentuk gelombang seperti yang telah dibincangkan di bawah. Kami telah menghubungkan Rotary Encoder ini sebelumnya dengan Arduino.
Bagaimana Rotary Encoder Berfungsi
Keluarannya bergantung sepenuhnya pada pad tembaga dalaman yang menyediakan hubungan dengan GND dan VCC dengan poros.
Terdapat dua bahagian Rotary Encoder. Shaft Wheel yang dihubungkan dengan poros dan berputar mengikut arah jam atau berlawanan arah jam bergantung pada putaran poros, dan pangkalan di mana sambungan elektrik dilakukan. Pangkalan mempunyai 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 kedua port DT dan CLK.
Output akan menjadi seperti apabila poros berputar-
Dua pelabuhan memberikan gelombang persegi tetapi terdapat sedikit perbezaan dalam jangka masa. Oleh kerana itu, jika kita menerima output sebagai 1 dan 0, hanya ada empat keadaan, 0 0, 1 0, 1 1, 0 1. Urutan output binari menentukan putaran mengikut arah jam atau putaran lawan jam. Seperti, misalnya, jika Pengekod Rotary menyediakan 1 0 dalam keadaan tidak aktif dan memberikan 1 1 setelah itu, itu bermaksud pengekod mengubah kedudukannya satu langkah ke arah arah jam, tetapi jika ia menyediakan 0 0 setelah siaga 1 0, bermaksud poros menukar kedudukannya mengikut arah lawan jam dengan satu langkah.
Komponen Diperlukan
Inilah masanya untuk mengenal pasti apa yang kita perlukan untuk menghubungkan Rotary Encoder dengan PIC Microcontroller,
- PIC16F877A
- Perintang 4.7k
- Perintang 1k
- 10k periuk
- Kapasitor cakera seramik 33pF - 2pcs
- Kristal 20Mhz
- Paparan 16x2
- Pengekod Putar
- Penyesuai 5V.
- Papan Roti
- Kabel cangkuk.
Diagram Litar Interfacing Rotary Encoder PIC16F877A
Berikut adalah gambar persediaan terakhir setelah menyambungkan komponen mengikut Circuit Diagram:
Kami menggunakan perintang 1K tunggal untuk kontras LCD dan bukannya menggunakan potensiometer. Juga, periksa video berfungsi penuh yang diberikan di akhir.
Penjelasan Kod
Kod PIC yang lengkap diberikan di akhir projek ini dengan video demonstrasi, di sini kami menerangkan beberapa bahagian penting kod tersebut. Sekiranya anda baru menggunakan PIC Microcontroller, ikuti tutorial PIC kami dari awal.
Seperti yang telah kita bincangkan sebelumnya, kita perlu memeriksa output dan membezakan output binari untuk DT dan CLK, jadi kita membuat bahagian if-else untuk operasi.
if (Encoder_CLK! = kedudukan) { if (Encoder_DT! = kedudukan) { // lcd_com (0x01); kaunter ++; // Tingkatkan kaunter yang akan dicetak pada lcd lcd_com (0xC0); lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, kaunter); } lain { // lcd_com (0x01); lcd_com (0xC0); kaunter--; // mengurangkan kaunter lcd_puts (""); lcd_com (0xC0); lcd_bcd (1, kaunter); // lcd_puts ("Kiri"); } }
Kita juga perlu menyimpan kedudukan pada setiap langkah. Untuk melakukan ini, kami menggunakan pemboleh ubah "posisi" yang menyimpan kedudukan semasa.
kedudukan = Encoder_CLK; // Ini untuk menyimpan kedudukan jam pengekod pada pemboleh ubah. Boleh 0 atau 1.
Selain daripada ini, terdapat pilihan untuk memberitahu mengenai tekan tekan pada LCD.
jika (Encoder_SW == 0) { sw_delayms (20); // kelewatan debounce jika (Encoder_SW == 0) { // lcd_com (1); // lcd_com (0xC0); lcd_puts ("suis ditekan"); // itoa (kaunter, nilai, 10); // lcd_puts (nilai);
The system_init fungsi digunakan untuk memulakan pin I / operasi O, LCD dan untuk menyimpan kedudukan Rotary Encoder itu.
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 Memulakan kedudukan LCD = Encoder_CLK; // Mencatat kedudukan CLK pada sistem init, sebelum gelung sementara bermula. }
Fungsi LCD ditulis di perpustakaan lcd.c dan lcd.h di mana lcd_puts (), lcd_cmd () diisytiharkan.
Untuk pengisytiharan pemboleh ubah, bit konfigurasi dan coretan kod lain, sila dapatkan kod lengkap di bawah.