สวิตซ์ การ Debounce

สวิตซ์

สวิตซ์นั้นมีอยู่ด้วยกันหลายรูปแบบ แต่ถ้าหากเราจะจำแนกตามลักษณะการกดจะสามารถจำแนกได้เป็นสวิตซ์กดปล่อย (Pushbutton) และ สวิตซ์เปิดปิดทั่วๆ ไป แต่ถ้าหากจำแนกตามหน้าสัมผัสของสวิตซ์แล้ว เราจะแบ่งสวิตซ์ได้เป็น สวิตซ์ 1 และ 2 หน้าสัมผัส ทั้งนี้ไม่ว่าจะเป็นสวิตซ์ในลักษณะใดก็ตามหากเป็นสวิตซ์ Mechanic แล้วต่างก็จะมีปัญหาการ Bounce ของสัญญาณทั้งสิ้น ซึ่งเมื่อมีการนำสวิตซ์มาต่อเข้ากับวงจร Digital ที่ทำงานด้วยความเร็วสูงแล้ว อาจจะทำให้เกิดผิดพลาดในการประมวลผลได้ ดังนั้นเอกสารนี้จึงจัดทำขึ้นเพื่ออธิบายลักษณะของสวิตซ์ การ Debounce สัญญาณและการทำวงจร Edge Detection อย่างง่าย เพื่อใช้ตรวจจับขอบสัญญาณขาขึ้นและขาลง

SPST และ SPDT

SPST (Single Pole/Single Throw ) เป็นสวิตซ์ที่ขั้วสำหรับต่อกับด้านนอก 2 ขั้ว ซึ่งการสับสวิตซ์จะเป็นการเลือกว่าให้ขั้วทั้ง 2 นั้นต่อถึงกัน หรือว่าให้ขั้วแยกออกจากกัน สวิตซ์ในลักษณะเช่นนี้ เหมาะสำหรับใช้เป็นอินพุตของวงจรตรรกะทั่วไป คือ เมื่อปิดวงจรให้หน้าสัมผัสถึงกันผลลัพธ์ที่ได้จะเป็น Logic “0” และเมื่อเปิดวงจร ค่า Logic เป็น “1”

การใช้สวิตซ์ SPST เพื่อเป็นอินพุตของวงจรตรรกะ

SPDT (Single Pole/Double Throw ) เป็นสวิตซ์ที่ขั้วสำหรับต่อกับภายนอก 3 ขั้ว และการสับสวิตซ์จะเป็นการเลือกว่าต้องการใช้ขั้วใดต่อถึงกัน สวิตซ์ประเภทนี้ เหมาะจะเป็นเป็นสวิตซ์ตัวเลือกมากกว่า อย่างไรก็ตามหากต้องการประยุกต์ใช้สวิตซ์ดังกล่าวกับวงจรตรรกะก็อาจจะประยุกต์ใช้งานได้เช่นกัน

การใช้สวิตซ์ SPDT เพื่อเป็นอินพุตของวงจรตรรกะ

การ Debounce

ในการ Debounce วงจรด้วยตัวเก็บประจุ ทำได้โดยการใส่เก็บประจุขนาด 0.1 ไมโครฟารัด ระหว่างเอาท์พุตของสวิตซ์กับ Ground ซึ่งตัวเก็บประจุจะช่วยให้ค่าที่ได้มีการ bounce น้อยลงจนวงจรมองไม่เห็น (เหมือนกับการทำงานของวงจร RC ทั่วไป) และเพื่อให้การทำงานได้ผลดียิ่งขึ้นควรจะใส่ Invertor ที่เป็น Schmidt trigger (เพื่อตัดปัญหาเรื่องค่า threshold ของวงจร)

การ Debounce ด้วยตัวเก็บประจุ

การ Debounce โดยใช้ SR Latch นั้น แนะนำให้ใช้ SR Latch แบบ NAND ซึ่งการ Debounce แบบนี้ เป็นการอาศัยคุณสมบัติของ SR Latch ซึ่งจะคงจำค่าเดิมไว้จนกว่าจะมีการ Set หรือ Reset ค่าใหม่อีกครั้งหนึ่ง

การ Debounce โดยการใช้ SR Latch

จากการ Debounce ทั้ง 2 แนวทางข้างต้นจะต้องอาศัยวงจรเพิ่มเติมทั้งสิ้น ดังนั้นวิธีการที่ง่ายกว่าและไม่จำเป็นจะต้องใช้วงจรเพิ่มเติม คือ การแก้ปัญหาด้วย Software หรือวิธีการตรวจรับสัญญาณ (Sampling) ซึ่งวิธีการนี้เหมาะกับการทำงานที่มี Processor และพัฒนาโปรแกรมเพื่อให้อ่านค่าสัญญาณเป็นจังหวะ แต่ไม่สามารถใช้ได้กับวงจรที่เป็น Combination Logic ทั่วไป จากการทดสอบพบว่าสวิตซ์ขนาดเล็กจะ bounce ไม่เกิน 20 มิลลิวินาที ดังนั้นหากเราอ่านค่าสวิตรซ์ทุกๆ 40-50 มิลลิวินาที เราก็จะไม่พบสัญญาณ bounce โดยปริยาย

การ Debounce โดยอาศัยการ Sampling ที่ possitive edge ของสัญญาณนาฬิกา