วิธีการติดตั้ง Hardware Debounce สำหรับสวิตช์และรีเลย์เมื่อ Software Debounce ไม่เหมาะสม

By Clive "Max" Maxfield

Contributed By DigiKey's North American Editors

ในบริบทของวิศวกรรมไฟฟ้าและอิเล็กทรอนิกส์สวิตช์เป็นส่วนประกอบที่สามารถ "สร้าง" หรือ "ทำลาย" วงจรไฟฟ้าได้ซึ่งจะขัดขวางกระแสไฟฟ้าหรือเปลี่ยนทิศทางจากตัวนำหนึ่งไปยังอีกตัวนำหนึ่ง ตามที่วิศวกรสามารถรับรองได้ มีสวิตช์อยู่หลายประเภท เช่น สวิตช์สลับ, สวิตช์โยก, สวิตช์ปุ่มกด, สวิตช์ไมโครและลิมิต, สวิตช์แม่เหล็กและรีดสวิตช์ และรีเลย์ ทั้งหมดมีสิ่งหนึ่งที่เหมือนกันคือ การเด้ง มันเป็นหน้าที่เดียวของสวิตช์

โดยปกติแล้วการเด้งนี้มีผลต่อวงจรเพียงเล็กน้อยหรือไม่มีเลย แต่ถ้าวงจรดิจิทัลเร็วพอที่จะตรวจจับและตอบสนองต่อการตีกลับหลายครั้งอาจส่งผลร้ายแรงได้ งานของวิศวกรคือการหลีกเลี่ยงหรือลดผลกระทบของการเด้งกลับนี้หรือการ “debounce” สวิตช์ ในขณะที่อุตสาหกรรมได้ฝึกฝนการ debounce ฮาร์ดแวร์มาเป็นเวลานาน แต่เมื่อไม่นานมานี้ บริษัท ได้ย้ายไปใช้วิธีการ debounce ที่ใช้ซอฟต์แวร์มากขึ้น อย่างไรก็ตามมีสถานการณ์ที่การ debounce ฮาร์ดแวร์เป็นตัวเลือกที่ดีกว่า

บทความนี้จะอธิบายเกี่ยวกับการตีกลับและกล่าวถึงวิธีการแก้ปัญหาด้วยทางซอฟต์แวร์และฮาร์ดแวร์ จากนั้นจะชี้ไปที่กรณีที่ฮาร์ดแวร์ debounce เป็นตัวเลือกที่ดีกว่าก่อนที่จะแสดงวิธีการนำไปใช้งาน ตัวอย่างอุปกรณ์สวิตชิ่งและส่วนประกอบ debounce ของฮาร์ดแวร์ได้รับการแนะนำโดยใช้ตัวอย่างจาก NKK Switches ,ON Semiconductor ,Texas Instruments ,Maxim Integrated และLogiSwitch .

Switch Bounce คืออะไร?

เมื่อสวิตช์หรือรีเลย์ถูกดีดหรือสลับ สิ่งที่มนุษย์รับรู้ว่าเป็นการตอบสนองเพียงครั้งเดียวในแต่ละครั้งที่อุปกรณ์เปลี่ยนสถานะอาจเกี่ยวข้องกับการกระทำที่สร้างหรือทำลายอย่างน้อย 100 ครั้งซึ่งยังคงมีอยู่เป็นเวลาหลายพันวินาทีก่อนที่หน้าสัมผัสจะเข้าที่ในที่สุด

ตัวอย่างเช่น พิจารณา single pole, single throw (SPST) แผงสวิตช์เปิด/ปิด แบบปกติเปิด (NO) เช่น M2011SS1W01 จาก NKK สมมติว่าด้านหนึ่งของสวิตช์นี้ซึ่งถือได้ว่าเป็นอินพุตนั้นเชื่อมต่อกับกราวด์ (0 โวลต์) ในขณะที่อีกด้านหนึ่งซึ่งในกรณีนี้คือเอาต์พุตเชื่อมต่อกับแหล่งจ่ายไฟ 5 โวลต์ (แสดงเป็น + ve) ผ่านตัวต้านทานแบบดึงขึ้น (R1) (รูปที่ 1)

แผนผังของสวิตช์สลับ SPST-NO เด้งขึ้นมา (คลิกเพื่อดูภาพขยาย)รูปที่ 1: ในกรณีของสวิตช์สลับ SPST-NO การเด้งกลับอาจเกิดขึ้นทั้งเมื่อเปิดใช้งานและปิดใช้งานสวิตช์ (แหล่งรูปภาพ: Max Maxfield)

สังเกตว่าการเด้งกลับของสวิตช์อาจเกิดขึ้นทั้งเมื่อเปิดใช้งานสวิตช์ (ปิด) และปิดใช้งาน (เปิด) บางครั้งการเด้งกลับอาจเปลี่ยนไปตลอดทางระหว่างรางจ่าย ในที่นี้ถือเป็นสถานะลอจิก 0 และ 1 ในกรณีนี้สิ่งเหล่านี้คือการตีกลับที่ "สะอาด" โดยการเปรียบเทียบหากสัญญาณไปถึงแรงดันไฟฟ้าระดับกลางเท่านั้นสิ่งเหล่านี้จะเรียกว่าการเด้งกลับ "สกปรก"

ในกรณีของ single pole, single throw (SPST) แผงสวิตช์สลับเช่นของ NKK M2012SS1W01-BCการเด้งกลับอาจเกิดขึ้นได้ทั้งในขั้วปกติเปิด (NO) และปกติปิด (NC) (รูปที่ 2) ในกรณีนี้จะแสดงเฉพาะการตีกลับ "สะอาด" เพื่อความเรียบง่าย

แผนผังของสวิตช์สลับ SPDT เด้ง (คลิกเพื่อดูภาพขยาย)รูปที่ 2: ในกรณีของสวิตช์สลับ SPDT-NO การเด้งกลับอาจเกิดขึ้นทั้งเมื่อเปิดใช้งานและปิดใช้งานสวิตช์ (แหล่งรูปภาพ: Max Maxfield)

ในหลาย ๆ กรณีระยะเวลาการตีกลับของสัญญาณนี้จะไม่มีผลใด ๆ ปัญหาเกิดขึ้นเมื่อสวิตช์เชื่อมต่อกับอุปกรณ์อิเล็กทรอนิกส์ที่เร็วพอที่จะตรวจจับและตอบสนองต่อการตีกลับหลายครั้ง สิ่งที่จำเป็นคือวิธีการหักล้างสัญญาณที่มาจากสวิตช์ก่อนที่อุปกรณ์อิเล็กทรอนิกส์จะทำงาน

Debounce ซอฟต์แวร์เทียบกับฮาร์ดแวร์

ในทศวรรษที่ 1960 และ 1970 การ debounce สวิตช์ถูกนำมาใช้โดยใช้เทคนิคฮาร์ดแวร์ที่หลากหลายตั้งแต่วงจรหน่วงเวลาตัวต้านทาน - ตัวเก็บประจุ (RC) แบบธรรมดาที่ใช้กับสวิตช์ SPST ไปจนถึงฟังก์ชันสลัก set/reset (SR) ที่ซับซ้อนยิ่งขึ้น

เมื่อไม่นานมานี้และเนื่องจากระบบจำนวนมากมีหน่วยไมโครโปรเซสเซอร์ (MPU) หรือหน่วยไมโครคอนโทรลเลอร์ (MCU) จึงกลายเป็นเรื่องธรรมดาที่จะใช้เทคนิคซอฟต์แวร์เพื่อแก้ไขสัญญาณที่มาจากสวิตช์ใด ๆ อย่างไรก็ตามการดีบักซอฟต์แวร์ไม่ใช่แนวทางที่ดีที่สุดเสมอไป มีการใช้งานบางอย่างที่เกี่ยวข้องกับโปรเซสเซอร์ขนาดเล็ก ประสิทธิภาพต่ำและหน่วยความจำซึ่งมีพื้นที่โค้ดจำกัด และ/หรือ รอบสัญญาณนาฬิกาที่พร้อมใช้งานสำหรับการใช้งาน debounce ในชีวิตประจำวัน ในกรณีเหล่านี้การติดตั้งฮาร์ดแวร์อาจเป็นทางออกที่ดีกว่า

นอกจากนี้นักพัฒนาซอฟต์แวร์หลายรายไม่คุ้นเคยกับลักษณะทางกายภาพของสวิตช์ เช่นความจริงที่ว่านอกเหนือจากการเปิดใช้งานที่แตกต่างกันไปแล้วลักษณะการเด้งกลับของสวิตช์อาจได้รับผลกระทบจากสภาพแวดล้อม เช่น อุณหภูมิและความชื้น

ปัญหาของการขาดความเชี่ยวชาญด้านสวิตช์ของนักพัฒนาซอฟต์แวร์นั้นรุนแรงขึ้นจากข้อเท็จจริงที่ว่าวรรณกรรมที่มีอยู่เกี่ยวกับการเด้งกลับของสวิตช์มักจะสับสนและขัดแย้งกัน ตัวอย่างเช่น เป็นเรื่องปกติที่จะอ่านว่าสวิตช์จะหยุดตีกลับ 1 มิลลิวินาที (ms) หลังจากการเปิดใช้งานหรือการปิดใช้งาน อย่างไรก็ตาม Jack Ganssle ผู้เชี่ยวชาญด้านระบบฝังตัวที่รู้จักกันดีได้ทำการทดสอบเชิงประจักษ์เกี่ยวกับสวิตช์ประเภทต่าง ๆ โดยเปิดใช้งานสวิตช์แต่ละครั้ง 300 ครั้งและบันทึกจำนวนการตีกลับต่ำสุดและสูงสุดสำหรับทั้งการเปิดและปิดผู้ติดต่อ เขารายงานระยะเวลาตีกลับเฉลี่ย 1.6 มิลลิวินาทีและระยะเวลาตีกลับสูงสุด 6.2 มิลลิวินาที “แนวทางปฏิบัติที่ดีที่สุด” ทางอุตสาหกรรมและการทหารบางอย่างแนะนำให้รอ 20 ms หลังจากเปิดใช้งานครั้งแรกก่อนที่จะถือว่าสวิตช์หยุดเด้งกลับ คนอื่นสนับสนุนให้รอ 20 ms หลังจากการตีกลับที่ตรวจพบครั้งสุดท้ายก่อนที่จะทริกเกอร์การดำเนินการใด ๆ

นอกจากนี้ยังมีระบบที่ไม่ใช้ตัวประมวลผลแบบง่าย ๆ อีกมากมายที่ต้องใช้สวิตช์ในการ debounce ตัวอย่างบางส่วนของระบบดังกล่าวคือตัวนับไบนารีที่ขับเคลื่อนการแสดงผลเจ็ดส่วนการนับพัลส์จากรีเลย์ อินพุตทริกเกอร์ไปยังตัวจับเวลาแบบ 555 one-shot ที่ใช้เป็นตัวควบคุมมอเตอร์สำหรับประตูหรือประตู และเครื่อง จำกัด สถานะตามการลงทะเบียน (FSM) ที่ใช้ปัจจัยการผลิตที่สำคัญ นอกจากนี้ยังมีโพเทนชิโอมิเตอร์แบบอิเล็กทรอนิกส์ (หม้อ) ที่มีการแก้ไขค่าโดยใช้อินพุตสวิตช์ (ขึ้นลงและจัดเก็บในบางครั้ง) ซึ่งการตีกลับของสวิตช์จะเป็นปัญหา

ตัวอย่างทั้งหมดนี้ทำให้ชัดเจนว่าความรู้บางอย่างเกี่ยวกับวิธีดำเนินการ debounce ฮาร์ดแวร์อาจเป็นประโยชน์สำหรับนักออกแบบหรือนักพัฒนา

ฮาร์ดแวร์ดีบักสวิตช์ SPST กับเครือข่าย RC

หนึ่งในโซลูชันการแก้ปัญหาสวิตช์บนฮาร์ดแวร์ที่ง่ายที่สุดใช้เครือข่ายตัวต้านทาน-ตัวเก็บประจุ (RC) ร่วมกับสวิตช์ SPST วงจรดังกล่าวมีหลายรูปแบบ หนึ่งในการใช้งานที่หลากหลายกว่านั้นเกี่ยวข้องกับตัวต้านทานสองตัวและไดโอด (รูปที่ 3)

แผนผังของเครือข่าย RC เพื่อลบสวิตช์ SPST (คลิกเพื่อดูภาพขยาย)รูปที่ 3: เมื่อใช้เครือข่าย RC เพื่อหักล้างสวิตช์ SPST (ด้านบน) การเพิ่มไดโอด (D1) จะบังคับให้ตัวเก็บประจุ (C1) ชาร์จผ่านตัวต้านทาน R1 และปล่อยผ่านตัวต้านทาน R2 (แหล่งรูปภาพ: Max Maxfield)

เมื่อสวิตช์ถูกเปิดใช้งาน (ปิด) ตัวเก็บประจุ C1 จะถูกปล่อยผ่านตัวต้านทาน R2 หากตัดไดโอด D1 ออกจากวงจรนี้เมื่อปิดสวิตช์ (เปิด) C1 จะถูกชาร์จผ่านตัวต้านทาน (R1 + R2) อย่างไรก็ตามการมี D1 หมายความว่า C1 จะถูกเรียกเก็บเงินผ่านทาง R1 เท่านั้น

ในบางกรณีการเปิดใช้งานสวิตช์เท่านั้นที่น่าสนใจ (กล่าวคือกระตุ้นให้เกิดการดำเนินการ) ซึ่งในกรณีนี้อาจละเว้น D1 อย่างไรก็ตามหากต้องทริกเกอร์การดำเนินการเมื่อสวิตช์เปิดใช้งานและปิดใช้งานและหากพิจารณาถึงการลดความล่าช้าให้น้อยที่สุดขอแนะนำให้เพิ่ม D1

สังเกตเส้นโค้งการชาร์จแบบเอ็กซ์โพเนนเชียลและการคายประจุที่แสดงโดยแรงดันไฟฟ้าของตัวเก็บประจุ VC มันไม่ควรอย่างยิ่งที่จะป้อนสัญญาณนี้โดยตรงไปยังอินพุตของฟังก์ชันลอจิกดิจิทัลแบบดาวน์สตรีมซึ่งจะไม่เป็นผลดีต่อการเห็นสัญญาณที่สั่นไหวในพื้นที่ที่ไม่ได้กำหนดไว้ระหว่างค่าลอจิก 0 และลอจิก 1 ที่ "ดี" แต่สัญญาณนี้จะถูกป้อนไปยังอินพุตของบัฟเฟอร์ที่มีอินพุตทริกเกอร์ Schmitt นอกจากนี้โดยทั่วไปจะใช้บัฟเฟอร์ย้อนกลับเช่นหนึ่งช่องสัญญาณของ CD74HC14M96 จาก Texas Instruments เนื่องจากฟังก์ชันการกลับด้านจะเปลี่ยนได้เร็วกว่าฟังก์ชันที่ไม่กลับด้าน

การเปิดตัวสวิตช์ SPDT ด้วยสลัก SR

ในกรณีของสวิตช์ SPDT วิธีแก้ปัญหาการดีบักฮาร์ดแวร์ทั่วไปคือการใช้สลัก SR นับตั้งแต่บริษัทต่าง ๆ เช่น IBM ใช้เทคนิคนี้สำหรับแผงสวิตช์บนคอมพิวเตอร์เมนเฟรมของพวกเขาในช่วงทศวรรษที่ 1960 แนวทางนี้ได้รับการยกย่องว่าเป็น crème de la crème ของโซลูชันการแก้ปัญหาฮาร์ดแวร์อย่างง่าย สลักดังกล่าวสามารถสร้างขึ้นได้โดยใช้ประตู NAND สองอินพุตแบบย้อนกลับสองตัว ตัวอย่างเช่นโดยใช้สองช่องทางของ SN74HC00DR NAND IC รูปสี่เหลี่ยมสองอินพุตจาก Texas Instruments (รูปที่ 4)

แผนภาพของสลัก SR ที่ใช้ NAND เพื่อ debounce สวิตช์ SPDTรูปที่ 4: การใช้สลัก SR ที่ใช้ NAND เพื่อปลดล็อกสวิตช์ SPDT เป็นโซลูชันการดีบักฮาร์ดแวร์ที่มีประสิทธิภาพมาก (แหล่งรูปภาพ: Max Maxfield)

เมื่อขั้ว NC ของสวิตช์เชื่อมต่อกับกราวด์ดังแสดงในครึ่งบนของรูปที่ 4 จะบังคับให้เอาต์พุตของเกต g2 เป็นลอจิก 1 ในทางกลับกันลอจิก 1 สองตัวบนอินพุตไปยังเกต g1 บังคับให้เอาต์พุตเป็นลอจิก 0 จากการเปรียบเทียบเมื่อขั้ว NO ของสวิตช์เชื่อมต่อกับกราวด์ดังแสดงในครึ่งล่างของรูปที่ 4 จะบังคับให้เอาต์พุตของเกต g1 เป็นลอจิก 1 ในทางกลับกันลอจิก 1 สองตัวบนอินพุตไปยังเกต g2 บังคับให้เอาต์พุตเป็นลอจิก 0

เหตุผลที่วงจรนี้ทำงานได้ดีก็คือเมื่ออินพุตทั้งสองอยู่ในสถานะลอจิกที่ไม่ใช้งาน 1 สลัก SR จะจำค่าก่อนหน้านี้ โปรดจำไว้ว่าดังที่แสดงในรูปที่ 2 เมื่อสวิตช์ SPDT ถูกสลับขั้วใดก็ตามที่เชื่อมต่อกับกราวด์ในช่วงเวลานั้นจะเด้งก่อน เนื่องจากการตีกลับเหล่านี้อยู่ระหว่างค่าดั้งเดิม (ลอจิก 0) และค่าใหม่ (ลอจิก 1) จึงไม่มีผลต่อสถานะปัจจุบันของสลัก SR หลังจากที่เทอร์มินัลนี้หยุดตีกลับโดยที่คู่ของมันเริ่มตีกลับซึ่งในเวลานั้นสลัก SR จะเปลี่ยนสถานะ

การเปิดตัวสวิตช์ SPST ด้วยอุปกรณ์เฉพาะ

ปัญหาอย่างหนึ่งของโซลูชันก่อนหน้านี้คือนักออกแบบหลายคนชอบใช้สวิตช์ SPST เนื่องจากโดยทั่วไปมีค่าใช้จ่ายน้อยกว่า SPDT มีอุปกรณ์ดีบัก SPST เฉพาะที่เป็นที่รู้จักจำนวนมากในตลาด เช่น MC14490DWG จาก ON Semiconductor และ MAX6818EAP + T จาก Maxim Integrated

LogiSwitch ผู้ผลิตรายอื่นนำเสนอชุดโซลูชัน debounce สามแชนเนลหกแชนเนลและเก้าแชนเนลในแพ็คเกจอุปกรณ์ติดตั้งบนพื้นผิว (SMD) ตัวอย่างเช่น พิจารณาวงจรโดยใช้อุปกรณ์ LogiSwitch LS18-S (รูปที่ 5)

แผนผังของชิป LS18-S แบบสามช่องสัญญาณโดยเฉพาะเพื่อลบล้างสวิตช์ SPDTรูปที่ 5: การใช้ชิป LS18-S แบบสามแชนเนลโดยเฉพาะเพื่อหักล้างสวิตช์ SPDT (มีอุปกรณ์หกและเก้าช่องสัญญาณ) (แหล่งรูปภาพ: Max Maxfield)

เช่นเดียวกับสมาชิกทุกคนในตระกูล LogiSwitch LS18-S รองรับช่วงแรงดันไฟฟ้าที่ใช้งานได้ตั้งแต่ 2.5 ถึง 5.5 โวลต์ (ค่าของแรงดันไฟฟ้าไม่ส่งผลต่อเวลาตอบสนองของอุปกรณ์) นอกจากนี้ยังแตกต่างจากโซลูชัน IC เฉพาะอื่น ๆ อุปกรณ์ debounce ของ LogiSwitch ไม่ ต้องการส่วนประกอบเพิ่มเติมเช่น นาฬิกาภายนอก, เครือข่ายจับเวลา RC หรือตัวต้านทานแบบดึงขึ้นบนอินพุตหรือเอาต์พุต

LS18-S ใช้เทคโนโลยี NoBounce ที่ปรับเปลี่ยนได้ซึ่งเป็นลิขสิทธิ์เฉพาะของ LogiSwitch ซึ่งมีระบบป้องกันเสียงรบกวนในระดับสูง สัญญาณรบกวนที่เกิดอย่างรวดเร็วที่มีระยะเวลาน้อยกว่า 20 ms ไม่ได้รับอนุญาตจากการเริ่มต้นหรือยุติรอบการทำงานและเอาต์พุตจะล่าช้าเป็นระยะเวลา 20 มิลลิวินาทีหลังจากสวิตช์สุดท้ายเด้งขึ้นทั้งในการเปิดใช้งานและการเปิดตัวโดยไม่คำนึงถึงระยะเวลาการตีกลับ

สรุป

สวิตช์มีหลายประเภทรวมถึงสวิตช์สลับสวิตช์โยกและสวิตช์ปุ่มกดซึ่งทั้งหมดนี้อาจเด้งได้ หากไม่ลดการเด้งของสวิตช์อาจทำให้ไมโครโปรเซสเซอร์และวงจรอิเล็กทรอนิกส์อื่น ๆ เห็นว่าการเปิดใช้งานสวิตช์เพียงครั้งเดียวเกิดจากการเด้งหลายครั้ง

สัญญาณเด้งกลับจากสวิตช์มักจะถูกหักล้างโดยใช้ซอฟต์แวร์ที่ทำงานในไมโครคอนโทรลเลอร์ แม้ว่านี่จะเป็นโซลูชันที่มีต้นทุนต่ำดังที่แสดงไว้ แต่อาจไม่ใช่ตัวเลือกที่ดีที่สุดในทุกกรณี รวมถึงระบบที่อิงตามประสิทธิภาพและไมโครคอนโทรลเลอร์ที่จำกัดหน่วยความจำ, นักพัฒนาซอฟต์แวร์ที่ขาดความเชี่ยวชาญในปัญหาเกี่ยวกับสวิตช์ หรือระบบที่ดำเนินการโดยไม่ใช้ไมโครคอนโทรลเลอร์

อีกทางเลือกหนึ่งคือการ debouncing อาจทำได้ในฮาร์ดแวร์โดยใช้หลากหลายวิธีตั้งแต่เครือข่ายของตัวต้านทาน-ตัวเก็บประจุ ไปจนถึงสลัก SR ไปจนถึงวงจรรวมเฉพาะ

DigiKey logo

Disclaimer: The opinions, beliefs, and viewpoints expressed by the various authors and/or forum participants on this website do not necessarily reflect the opinions, beliefs, and viewpoints of DigiKey or official policies of DigiKey.

About this author

Image of Max Maxfield

Clive "Max" Maxfield

Clive "Max" Maxfield สำเร็จการศึกษาระดับปริญญาตรีสาขาวิศวกรรมควบคุมในปี 1980 จากมหาวิทยาลัย Sheffield Hallam ประเทศอังกฤษและเริ่มอาชีพของเขาในฐานะผู้ออกแบบหน่วยประมวลผลกลาง (CPUs) สำหรับคอมพิวเตอร์เมนเฟรม ในช่วงหลายปีที่ผ่านมา Max ได้ออกแบบทุกอย่างตั้งแต่ชิปซิลิกอนไปจนถึงแผงวงจรและตั้งแต่เครื่องขยายคลื่นสมองไปจนถึง Steampunk Prognostication Engines (ไม่ต้องถาม) นอกจากนี้เขายังอยู่ในระดับแนวหน้าของ Electronic Design Automation (EDA) มากว่า 30 ปี

Max เป็นผู้เขียนและ/หรือผู้ร่วมเขียนหนังสือหลายเล่มรวมถึง Designus Maximus Unleashed (ถูกแบนใน Alabama) Bebop to the Boolean Boogie (An Unconventional Guide to Electronics), EDA: Where Electronics Begins, FPGAs: การเข้าถึงได้ทันที และคอมพิวเตอร์คำนวณคณิตศาสตร์อย่างไร ตรวจสอบบล็อกของเขา “Max’s Cool Beans”

About this publisher

DigiKey's North American Editors