สวิตซ์ bounce และ debounce

ผู้เขียน/โดย : เกริก ภิรมย์โสภา (Krerk Piromsopa)
เขียนเมื่อ/ปรับปรุง : 2004-07-12 16:03:44

สวิตซ์

สวิตซ์นั้นมีอยู่ด้วยกันหลายรูปแบบ แต่ถ้าหากเราจะจำแนกตามลักษณะการกดจะสามารถจำแนกได้เป็นสวิตซ์กดปล่อย (Push button) และ สวิตซ์เปิดปิดทั่วๆ ไปแต่ถ้าหากจำแนกตามหน้าสัมผัสของสวิตซ์แล้ว เราจะแบ่งสวิตซ์ได้เป็น สวิตซ์ 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

เกือบทุกชนิดของสวิตซ์ Mechanic (ยกเว้นสวิทซ์พิเศษบางประเภท เช่นสวิตซ์ปรอท) จะมีปัญหาการ bounce ของสัญญาณจากการกระทบกันของหน้าสัมผัส อันจะทำให้สัญญาณเคลื่อนที่ไปกลับเป็นระยะเวลาสั้นๆ (หากนึกไม่ออกให้ลองจินตนาการ momentum ที่เกิดจากการชนกันของสิ่งของ 2
สิ่ง ซึ่งจะทำให้มันกระเด็นออกจากกันพักหนึ่งก่อนที่จะสัมผัสกันได้) อย่างไรก็ตามการ bounce จะเกิดขึ้นเพียงระยะสั้นๆ (หน่วยมิลิวินาที)
ซึ่งรวดเร็วมากจนเราไม่สามารถมองเห็นได้ แต่เมื่อเปรียบเทียบกับวงจรซึ่งทำงานในหน่วย นาโนวินาทีแล้ว การ bounce ของสัญญาณ อาจจะทำให้วงจรนับแบบดิจิตอลทำงานผิดพลาดได้

การ Debounce เพื่อกำจัดสัญญาณรบกวนสามารถทำได้หลายแนวทางเช่น การใช้ตัวเก็บประจุ การใช้ S-R Latch หรืออาจจะแก้ปัญหา Debounce
ด้วยวิธีการ Sampling สัญญาณก็ได้

ในการ 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 ของสัญญาณนาฬิกา

 

Leave a Reply

Your email address will not be published. Required fields are marked *

Connect with Facebook

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>