Apakah saklar perlu dilepas saat dibuka?

8

Misalkan input pada mikrokontroler memiliki resistor pullup ke 5V dan switch ke ground (biasanya terbuka) yang terhubung dengannya. Saya tahu bahwa switch harus didebounce (dalam kasus saya, dalam perangkat lunak) saat ditutup, tetapi apakah debouncing saat switch dibuka diperlukan?

Nate
sumber

Jawaban:

11

Ya, debouncing di kedua arah diperlukan jika Anda ingin satu sisi dijamin setiap kali saklar berubah.

Untungnya, Anda tidak memerlukan perangkat keras tambahan untuk debouncing jika sakelar terhubung ke mikrokontroler. Jika mikro memiliki pullup internal, yang banyak dilakukan, Anda tidak membutuhkan yang lebih eksternal daripada saklar antara pin mikro dan arde.

Saya menemukan 50 ms adalah waktu debounce yang baik. Sebagian besar saklar memantul dengan baik kurang dari itu, tetapi beberapa bisa hampir selama itu. Tapi, 50 ms masih akan terasa instan bagi pengguna manusia, jadi Anda mungkin juga bisa diandalkan. Satu-satunya perbedaan adalah jumlah yang Anda hitung dalam firmware, jadi tidak ada biaya tambahan di sana. Saya biasanya memiliki interupsi periodik 1 ms karena alasan lain, jadi jika sakelar berada dalam status yang sama 50 kali berturut-turut dalam interupsi itu, maka Anda menyatakannya terputus ke status baru.

Detail tentang debounce logic sebagai tanggapan atas komentar:

Secara umum Anda akan memiliki bit global yang menunjukkan status resmi sakelar yang didebok. Inilah logika yang perlu diketahui ke arah mana switch diatur menggunakan. Satu-satunya keadaan tambahan yang Anda butuhkan adalah penghitung, biasanya satu byte, dalam rutin interupsi. Katakanlah interruptnya adalah setiap 1 ms dan waktu debounce adalah 50 ms. Untuk setiap interupsi:

Jika keadaan instanan cocok dengan kondisi debouncing:
  Atur ulang penghitung ke 50
  Selesai

Jika keadaan sesaat berbeda dari keadaan terbebas:
  Penghitung penurunan
  Jika penghitung mencapai 0:
    Nyatakan status debouncing baru
    Atur ulang penghitung ke 50
  Selesai
Olin Lathrop
sumber
Ada artikel yang sangat bagus di www.embedded.com beberapa waktu lalu. Penulis mengambil beberapa sakelar dan meletakkannya di antara catu daya dan input lingkup penyimpanan digital, untuk melihat karakteristik pantulan. Kesimpulan terakhir adalah bahwa Anda tidak dapat memilih waktu debounce "satu ukuran untuk semua": Anda harus menandai setiap switch tertentu dan melihat bagaimana bouncingnya.
John R. Strohm
@ John: dapatkah Anda memberikan tautannya? Saya tidak mengerti mengapa asumsi waktu bouncing maksimum terburuk tidak dapat digunakan untuk semua switch, asalkan cukup pendek untuk memuaskan pengguna. IME 50ms Olin menyebutkan memenuhi kedua kriteria.
Wouter van Ooijen
Terima kasih Olin. Jadi, bagaimana Anda melacak status saklar selama 50 interupsi terakhir? Saya akan menambahkan variabel jika sakelar dalam status yang sama dengan interupsi terakhir, hapus jika keadaan telah berubah, dan pertimbangkan sakelar yang didebok jika mencapai 50. Apakah itu cara yang efisien untuk melakukannya?
Nate
1
Ini mungkin bukan artikel yang disebutkan di atas, tetapi ada banyak info menarik di dalamnya: ganssle.com/debouncing.htm Siapa pun yang berurusan dengan debouncing harus membacanya.
UnconditionalReinstateMonica
1
@Nate: Lihat tambahan untuk menjawab.
Olin Lathrop
2

Ya saya akan menggunakannya, mekanismenya pada dasarnya sama. Saat Anda memutuskan kontak, Anda akan memiliki titik waktu di mana saklar membuat kontak listrik yang baik serta tidak membuat kontak listrik yang baik. Sama seperti saat Anda melakukan kontak.

Guy Perangkat Keras
sumber
1

Secara umum, ya. Sakelar mekanis dapat menghasilkan suara listrik (memantul) baik di dekat maupun terbuka.

Dave Tweed
sumber
1

Secara umum, ya, tapi itu selalu tergantung pada apa yang Anda lakukan dengan input digital. Saya sudah memiliki beberapa sistem yang sama sekali tidak perlu disingkirkan ke kedua arah.

Namun, jika Anda mengendarai interupsi, kemungkinan besar Anda harus melongo.

Scott Seidman
sumber