Isi kandungan:

Decoder Rotary Mudah: 4 Langkah
Decoder Rotary Mudah: 4 Langkah

Video: Decoder Rotary Mudah: 4 Langkah

Video: Decoder Rotary Mudah: 4 Langkah
Video: Absolute Encoder (Shaft Encoder, Rotary encoder) - how it works! 2024, Julai
Anonim
Image
Image
Decoder Rotary ringkas
Decoder Rotary ringkas

Instruksional ini menerangkan kaedah mudah untuk menyahkod pengekod putar berurutan menggunakan Arduino Uno R3.

Rutin perisian padat digunakan untuk menghitung jumlah peralihan, menghilangkan kenalan kenalan, dan menentukan arah putaran. Komponen tambahan dan jadual pencarian tidak diperlukan.

Versi kod gangguan dan tanpa gangguan disediakan.

Versi interupsi kod hanya memerlukan pin interrupt tunggal.

Gambar:

  • Foto pembukaan menunjukkan pengekod yang dipasang.
  • Tangkapan skrin menunjukkan kod untuk versi gangguan dan kiraan ketika batang pengekod diputar mengikut arah jam dan berlawanan arah jam.
  • Video menunjukkan kiraan semasa putaran pantas.

Langkah 1: Diagram Litar

Rajah Litar
Rajah Litar

Gambar rajah pendawaian pengekod ditunjukkan dalam rajah 1.

Wayar pelompat dipateri terus ke pin pengekod.

Tukar kedua wayar biru jika arah kiraan terbalik.

Langkah 2: Senarai Bahagian

Bahagian berikut diperoleh dari

  • 1 sahaja Arduino UNO R3 dengan Kabel USB.
  • 1 pengekod putar berurutan sahaja (EC11 atau setara) dengan suis.
  • 1 butang sahaja yang sesuai dengan aci.
  • 3 wayar jumper lelaki-ke-lelaki Arduino sahaja.

Langkah 3: Teori

Teori
Teori

Pengekod berputar berurutan menghasilkan dua gelombang persegi yang masing-masing dipindahkan oleh 90 darjah seperti yang ditunjukkan dalam Rajah 1.

Corak logik pada Contact A dan Contact B berbeza apabila poros diputar mengikut arah jam (CW) dan lawan arah jam (CCW) melalui kedudukan 1 hingga 6.

Kaedah umum untuk menentukan arah putaran termasuk:

  • perkakasan
  • berkembar mengganggu
  • jadual carian corak

Projek ini menggunakan kaedah perisian yang tidak memerlukan jadual carian. [1]

Arah

Daripada melihat corak output dari Contact A dan Contact B mari fokus pada Contact A.

Sekiranya kita mencuba Contact B selepas setiap peralihan Contact A, kita perhatikan bahawa:

  • Kenalan A dan Kenalan B mempunyai keadaan logik yang berlawanan apabila pengekod diputar CW
  • Kenalan A dan Kenalan B mempunyai keadaan logik yang sama apabila pengekod diputar CCW

Kod sebenar:

// ----- Hitung peralihan

CurrentStateA = stateContactA (); jika (CurrentStateA! = LastStateA) {CurrentStateB = digitalRead (ContactB); jika (CurrentStateA == CurrentStateB) Hitung ++; jika (CurrentStateA! = CurrentStateB) Hitung--; LastStateA = CurrentStateA; }

Kaedah ini menawarkan kelebihan berikut:

  • jadual carian tidak diperlukan
  • hanya satu talian gangguan diperlukan

Tolak

Semua pengekod mekanikal mengalami “contact bounce”.

Sekiranya kenalan suis tidak membuat / pecah dengan bersih keadaan logiknya akan bergegas dengan pantas dari TINGGI ke RENDAH sehingga kontak suis berhenti. Ini menghasilkan pengiraan yang salah.

Salah satu kaedah untuk menekan lantunan kenalan adalah dengan menambahkan kapasitor kecil di setiap kenalan suis. Kapasitor dan perintang pull-up yang bersangkutan membentuk integrator yang memendekkan frekuensi tinggi dengan berkesan dan membolehkan voltan suis naik / turun dengan anggun.

Kelemahan pendekatan ini adalah bahawa peralihan mungkin terlepas jika poros pengekod diputar dengan cepat.

Melengkapkan Perisian

Kaedah ini menggunakan dua pembilang (Terbuka, Tertutup) yang telah ditetapkan ke sifar. [2]

Setelah peralihan dikesan pada Kenalan A:

  • Pungutan suara secara terus menerus Hubungi A.
  • Tingkatkan pembuka Buka, dan tetapkan semula penghitung Tertutup, setiap kali Kenalan A TINGGI.
  • Tingkatkan penghitung Tertutup, dan tetapkan semula pembuka Buka, setiap kali Kenalan A RENDAH.
  • Keluar dari gelung apabila salah satu pembilang mencapai kiraan yang telah ditentukan. Kami secara efektif mencari tempoh keadaan stabil berikutan kenalan yang melambung.

Kod sebenar:

// ----- Menolak Kenalan A

sementara (1) {if (digitalRead (ContactA)) {// ----- ContactA Terbuka Ditutup = 0; // Integrator bertentangan kosong Buka ++; // Integrasikan jika (Open> MaxCount) mengembalikan TINGGI; } lain {// ----- ContactA Ditutup Terbuka = 0; // Integrator bertentangan kosong Ditutup ++; // Integrasikan jika (Closed> MaxCount) kembali RENDAH; }}

Tidak perlu untuk menolak Kenalan B kerana peralihan Kenalan A dan Kenalan B tidak bertepatan.

Mengira

“Penahanan” mekanikal berkesan menggandakan jumlah anda kerana dua pertuduhan didaftarkan antara klik (lihat rajah 1).

Bilangan "penahanan" dapat ditentukan menggunakan aritmetik modulo 2 seperti yang ditunjukkan di bawah.

Kod sebenar:

// ----- Hitung "tahanan"

jika (Kira% 2 == 0) {Serial.print ("Count:"); Serial.println (Kiraan / 2); }

Rujukan

Maklumat lebih lanjut boleh didapati di:

[1]

howtomechatronics.com/tutorials/arduino/ro…

[2]

newbiehack.com/ButtonorSwitchDebounceinSof…

Langkah 4: Perisian

Projek ini memerlukan versi terbaru dari Ardino Uno R3 IDE (persekitaran pembangunan bersepadu) yang tersedia dari

Muat turun setiap dua lakaran Arduino berikut (dilampirkan)

  • rotary_encoder_1.ino (versi pengundian)
  • rotary_encoder_2.no (versi gangguan)

Klik dua kali pada versi pilihan anda dan ikuti arahan di skrin.

Selamat menikmati …

Klik di sini untuk melihat arahan saya yang lain.

Disyorkan: