ปุ่มเปิดตัว


32

ฉันเพิ่งอ่านบทความเกี่ยวกับการเปิดใช้งานปุ่มและสงสัยว่าฉันควรคำนึงถึงเรื่องนี้เมื่อทำงานด้วยเช่น Arduino (ATMega mC) หรือไม่ ฉันคิดว่ามันเป็นปัญหาโดยเฉพาะเมื่อทำงานกับการขัดจังหวะ

ดังนั้นจะเป็นการดีกว่าถ้าตรวจจับการตีกลับในรหัสหรือควรได้รับการดูแลด้วยฮาร์ดแวร์หรือไม่ กรุณาอธิบายอย่างละเอียด


คำตอบ:


17

ฉันขอแนะนำให้ติดตั้งขอบเขต (หวังว่าคุณจะมีหนึ่งหรือใช้มือในการใช้) จนถึงสวิตช์ของคุณ ฉันได้เห็นโครงการของนักเรียนที่มีการตีกลับบนสวิตช์ของพวกเขาที่เปลี่ยนจาก 5v ลงไปที่ -5v สูงถึง 4v ลงไปที่ -3v จากนั้นถึง 2v แล้วกลับลงไปที่ 0v เมื่อเราดูที่การจับฉลากปัจจุบันมีขอบเขตที่ค่อนข้างใหญ่มาก

โดยเฉพาะอย่างยิ่งในกรณีของเขามันเป็นสิ่งจำเป็นอย่างยิ่งสำหรับเขาที่จะเดบิวต์สวิตช์ของเขาในฮาร์ดแวร์

อย่างไรก็ตามในทางกลับกันฉันได้เห็นสวิตช์ที่มีเอฟเฟกต์ขนาดเล็กกว่ามากซึ่งสามารถลบออกได้อย่างง่ายดายในซอฟต์แวร์

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


ฉันกำหนดขอบเขตรูปภาพของสวิตช์ตีกลับและโพสต์ไว้ใน Wikipedia: en.wikipedia.org/wiki/File:Switch_bounce.JPG
Thomas O

@Thomas O เป็นภาพการตีกลับที่สนุกมาก ฉันแค่ต้องการให้แน่ใจว่า @Vincent Van Den Berghe เข้าใจดีว่าการเด้งทั้งหมดนั้นจะไม่เป็นเช่นนั้น การตีกลับนั้น จำกัด ไว้ที่ 0-5 โวลต์และจะไม่เป็นเช่นนั้นเสมอไป
Kellenjb

2
@Thomas O ในฐานะที่เป็นบันทึกย่อเราได้สร้างแนวปฏิบัติสำหรับความล้มเหลวของนักเรียนที่ถ่ายภาพ Oscope แบบนั้น แฟลชบนหน้าจอน่ากลัว นอกจากนี้เรายังใช้ขั้นตอนต่อไปและผลักดันให้นักเรียนรวบรวมจุดข้อมูลจริงโดยใช้บางอย่างเช่น CSV หรือ labview เพื่อให้สามารถใช้งานได้ง่ายในรายงานและการวิเคราะห์ข้อมูล
Kellenjb

@Kellenjb ฉันจะได้รับเครื่องพิมพ์เร็ว ๆ นี้สำหรับขอบเขตของฉันที่รองรับ HP-IB นอกจากนี้ฉันได้ค้นพบโหมด "กีฬา" ในกล้องของฉันสามารถถ่ายภาพที่ดีของหน้าจอขอบเขตโดยไม่ใช้แฟลชและไม่เบลอ
โทมัสโอ

1
@Lundin ในสภาพแวดล้อมแบบเรียลไทม์คุณพึ่งพาการขัดจังหวะเป็นจำนวนมาก หากคุณมีการกดปุ่มบนการขัดจังหวะคุณไม่ต้องการให้ระบบเรียลไทม์ของคุณถูกขัดจังหวะหลาย ๆ ครั้งด้วยการกดปุ่มเพียงปุ่มเดียว คุณไม่ต้องการที่จะอุทิศทรัพยากรเพื่อรอ 10 ms
Kellenjb

15

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

ไม่ว่าคุณจะ debounce ในซอฟต์แวร์หรือในฮาร์ดแวร์คุณยังต้องเลือกปุ่มกดคุณภาพ ปุ่ม 157ms ที่น่าอับอายจากบทความนั้นไม่เหมาะสำหรับแอปพลิเคชันใด ๆ
ฉันมักจะสุ่มปุ่มในช่วงเวลา 32msซึ่งเพียงพอที่จะเชื่อมโยงเวลา debounce ของปุ่มดี ฉันเป็นแฟนตัวยงของสวิตช์ SKQG TACT ของAlps

สวิตช์ชั้นเชิงแอลป์

ในอุปกรณ์สองสามตัวที่ฉันทดสอบมันมีช่วงเวลาตีกลับเริ่มต้นที่น้อยกว่า 10ns ในขณะที่มันมีอายุการใช้งาน 100,000 รอบเราทดสอบมันสำหรับ200,000รอบและแม้กระทั่ง debounce 32ms ก็เพียงพอแล้ว (ฉันเดาว่าฉันควรจะวัดระดับของการ debounce จริง แต่ความสนใจหลักของเราในเวลานั้นคือพฤติกรรมของผลิตภัณฑ์ขั้นสุดท้ายอย่างไรก็ตามเราใช้มันไม่เป็นไปตามข้อกำหนด)

หากคุณต้องการโซลูชันฮาร์ดแวร์ฉันขอแนะนำให้ใช้วิธีแก้ไขปัญหา flip-flop ของ SR ในบทความซึ่งเป็นวิธีที่ดีที่สุดในทางเทคนิค:

debounce circuit

flip-flop สามารถสร้างด้วยเกท NAND คู่ซึ่งมีให้ในแพ็คเกจ VSSOP8 ขนาดเล็ก ข้อเสียเปรียบที่สำคัญของวิธีนี้คือคุณต้องใช้ปุ่มกด SPDT ซึ่ง SPST นั้นมีอยู่ทั่วไป


12

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

นี่คือลิงค์ไปยังวิธีการต่างๆ:

http://www.ganssle.com/debouncing.htm

http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/


ฉันจะไปรับลิงค์ไปยัง ganssle เมื่อฉันเห็นคำถาม
Kortuk

บทความ ganssle เป็นเหตุผลที่ฉันถามคำถามนี้มันเชื่อมโยงกับคำถามของฉัน :) ขอบคุณสำหรับลิงค์ไปยังตัวอย่างโค้ด debounce
Vincent Van Den Berghe

คุณจะช่วยสรุปกรณีการใช้งานสองสามกรณีเพื่อแสดงให้เห็นว่าควรใช้ซอฟต์แวร์ / ฮาร์ดแวร์เมื่อใด (อาจเป็นเรื่องส่วนตัว แต่ฉันต้องการตัวอย่างบางส่วน)
Vincent Van Den Berghe

1
@Ventent, Kellenjb สรุปคำตอบของเขาในการตัดสินใจ ฉันไม่ได้คลิกลิงค์ของคุณเพราะมันมีชื่อตลกตอนนี้ฉันคลิกมันฉันเห็น ganssle!
Kortuk

หากนั่นคือฉันทามติ / กฎทั่วไปแล้วแน่นอนไม่จำเป็นต้องมีตัวอย่างเพิ่มเติม
Vincent Van Den Berghe

6

บทความนั้นเป็น "พระคัมภีร์" ในการเปิดตัว การตีกลับที่ติดต่ออาจมีปัญหากับแอปพลิเคชันใด ๆ

โดยทั่วไปแล้วดีที่สุดในการดีทรอยต์สวิตช์ในซอฟต์แวร์เนื่องจากง่ายต่อการปรับสำหรับความล่าช้าของสวิตช์บางตัวเนื่องจากความแตกต่างของจำนวนการตีกลับของผู้ติดต่อ การเปิดตัวการปลดล็อคกุญแจมักจำเป็นเช่นกัน ผู้ผลิตสวิตช์มักระบุปริมาณการตีกลับสำหรับผลิตภัณฑ์โดยทั่วไปประมาณ 10ms - 20ms


ทำไมคนลงคะแนนนี้
Toby Jaffey

จุดดีเกี่ยวกับการปลดล็อคกุญแจ!
Vincent Van Den Berghe

1
ฉันไม่ได้ลงคะแนน แต่เพียงบอกว่าจะทำในซอฟต์แวร์เป็นความคิดอันยิ่งใหญ่ มันเป็นความคิดที่ดีที่จะมีลักษณะ
Kortuk

ฉันพูดว่า "โดยทั่วไป" ซึ่งเป็นกรณีและให้เหตุผล นอกจากนี้ยังลดค่าใช้จ่าย BOM และเพิ่มความน่าเชื่อถือ
Leon Heller

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

1

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

อย่างไรก็ตามหากคุณใช้สวิตช์นั้นเพื่อทำให้เกิดการขัดจังหวะและคุณคาดหวังว่ารูทีนการบริการขัดจังหวะจะทำงานได้อย่างรวดเร็วภายในเวลาไม่ถึง 10 มิลลิวินาทีคุณจะต้องใช้ฮาร์ดแวร์ในการหักล้างมิฉะนั้นเหตุการณ์สวิตช์หนึ่งเหตุการณ์ การขัดจังหวะและบ่อยครั้งมากกว่าที่คาดไว้ ในทางกลับกันถ้ารูทีนการขัดจังหวะทำงานนานพอสวิตช์เด้งจะตัดสินก่อนที่ ISR จะเสร็จสิ้นและคุณก็ใช้ได้ แต่ ISR ที่สร้างขึ้นได้ดีส่วนใหญ่ใช้เวลาไม่นาน


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

@Lundin - หากมีตัวจับเวลาคุณสามารถใช้ตัวจับเวลาเพื่อนำวิธีการสำรวจมาใช้และไม่ต้องกังวลว่าสวิตช์จะสร้างการขัดจังหวะเลย
JustJeff

0

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

วิธีที่ดีที่สุดในการดีดเดตในซอฟต์แวร์คือการตรวจสอบปุ่มต่าง ๆ ในเวลาที่อยู่ไกลออกไปมากกว่าเวลาตีกลับที่ยาวที่สุด ดูเหมือนว่า 50 ms จะเป็นขอบเขตบนเวลาตีกลับของสวิตช์ 'ปกติ' ดังนั้นเมื่อคุณสามารถจัดเรียงซอฟต์แวร์ของคุณเช่นนี้คุณจะเห็นได้ชัดว่า:

forever loop
   wait (at least) 50 ms
   check buttons
   do procesing
end loop

และใช้ตัวจับเวลาบนชิปบน MCU ของคุณสำหรับสิ่งนี้
Lundin

แน่นอนว่าเป็นไปได้ แต่คุณสามารถเขียนโปรแกรมจำนวนมากได้โดยไม่ต้อง
Wouter van Ooijen

3
ซอฟต์แวร์ระดับมืออาชีพในผลิตภัณฑ์คุณภาพจะใช้ตัวจับเวลาบนชิปเสมอ มือสมัครเล่นสามารถหนีด้วย "NOP" สำหรับการวนซ้ำหรือการรอแบบรอช้า แต่ไม่มีเหตุผลที่จะทำเช่นนี้ในผลิตภัณฑ์จริงไม่ว่าคุณจะต้องการตามเวลาจริงหรือไม่ "ฉันไม่รู้ว่าตัวจับเวลาทำงานอย่างไรและการวนซ้ำนี้ใช้เวลา 10 วินาทีเพื่อให้ตัวเองขี้เกียจเขียน" ไม่ใช่อาร์กิวเมนต์ที่ถูกต้องสำหรับวิศวกร
Lundin

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

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

0

วิธีหนึ่งในการ debouncing ที่ยังไม่ได้กล่าวถึงคือใช้สวิตช์แบบ double-Throw โดยมีหนึ่ง Throw ที่เชื่อมโยงกับ VDD และอีกวิธีหนึ่ง ฟีดที่เป็นพินซึ่ง (ผ่านซอฟต์แวร์หรือฮาร์ดแวร์) จะถูกดึงไปยังสถานะปัจจุบันอย่างอ่อน วิธีการดังกล่าวจะให้ข้อดีของสวิตช์แบบ double-Throw แต่จะต้องการเพียงหนึ่ง I / O พินแทนที่จะเป็นสอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.