ทำให้สวิตช์ชั่วขณะควบคุมการสลับ


17

อะไรคือวิธีที่ง่ายที่สุดถูกที่สุดและเล็กที่สุดในการสร้างสวิตช์ชั่วขณะสร้างเอาต์พุตสลับ 2 สถานะ (สวิตช์ล็อคชั่วขณะ)?

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


ฉันคิดว่าคำตอบที่ดีที่สุดนี้ขึ้นอยู่กับผู้ถามและคุณพอใจกับฮาร์ดแวร์หรือซอฟต์แวร์โซลูชันหรือไม่
J. Polfer

นอกจากนี้ยังขึ้นอยู่กับตำแหน่งของสวิตช์เอาต์พุตนี้และแรงดันไฟฟ้า (รัฐ!) ที่คุณมีอยู่
XTL

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

ฉันชอบโซลูชันที่มีอินเวอร์เตอร์ 2 ตัว แค่สงสัยว่าจะต้องเปิดใช้งานสิ่งนี้เพื่อสลับ 30V @ 1A หรือไม่
stevenrcfox

@Overlow: แทนที่ทรานซิสเตอร์เอาท์พุทด้วยทรานซิสเตอร์พลังงานหรือถ่ายทอด
endolith

คำตอบ:


9

นี่เป็นอีกทางเลือกหนึ่งที่มีอินเวอร์เตอร์สองตัวและ debouncing:

Two inverters

สำหรับเอาท์พุทลอจิกต้องการเพียงอินเวอร์เตอร์สองตัว RC และตัวต้านทานป้อนกลับที่จำเป็น:

enter image description here

NC7WZ14คือ $ 0.06 พร้อมอินเวอร์เตอร์ 2 ตัว, แพ็คเกจ 6 พินเล็ก ๆ , และชมิดท์ทริกเกอร์อินพุต, ถึงแม้ว่าฉันคิดว่าวงจรนี้ไม่จำเป็นต้องใช้อินพุตชมิดท์เพราะ RC นอกจากนี้ยังสามารถขับได้ 24 mA ดังนั้นคุณสามารถเชื่อมต่อ LED โดยตรงกับมันหากคุณใช้ LED ด้วยเหตุผลใดก็ตาม

นอกจากนี้ยังแสดงให้เห็นที่นี่และที่นี่เป็นสวิตช์สลับสัมผัส

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

ชุดตัวเลือกมีการอธิบายไว้ที่กด ON - กดปุ่มวงจรล็อคอ่อน :

AND gate variant


เมื่อเปิดเครื่องครั้งแรกมันจะเริ่มทำงานพร้อมกับเปิดปิดหรือสุ่ม? เพียงแค่ตรวจสอบวงจรฉันเดาว่ามันจะเปิดขึ้นพร้อมกับเอาท์พุท
Craig McQueen

@CraigMcQueen เมื่อเปิดเครื่องครั้งแรกตัวเก็บประจุจะมี 0 V ข้ามมัน ดังนั้นวงจรแรกจะเริ่มในตำแหน่งเปิด เชื่อมต่อตัวเก็บประจุกับแหล่งจ่ายแทนที่จะเป็นกราวด์และมันจะเริ่มต้นในตำแหน่ง OFF
endolith

@CraigMcQueen จริงๆแล้วรับประกันได้ไหม? ฉันไม่แน่ใจ. ความต้านทานเอาต์พุตต่ำของอินเวอร์เตอร์จะครอบงำตัวต้านทาน 220k ดังนั้นจึงอาจเริ่มต้นในสถานะสุ่ม
endolith

@CraigMcQueen วงจรสุดท้ายที่แสดงจะเริ่มต้นด้วยตัวเก็บประจุ 0.01 μF 0 V ดังนั้น Vout จะเป็น 0
endolith

@endolith ในภาพสุดท้ายที่เชื่อมต่อ VCC อยู่ที่ไหน? ฉันเห็นพื้นดินและ Vout
Mike

7

วิธีการหนึ่งที่เป็นไปได้:

ใช้ RC เพื่อ debounce สวิตช์

RC network connected to momentary switch to debounce

จากนั้นป้อนลงใน D flip-flop ด้วยเอาต์พุตการป้อนกลับไปยังอินพุตเพื่อใช้ฟลิปฟล็อป T

D flip-flop configured as toggle flip-flop

D flip-flop จำเป็นต้องเรียกใช้ขอบบวกเท่านั้นและต้องการเอาต์พุตแบบกลับด้าน

  • 8-pin NC7SZ74ควรใช้งานมีขนาดเล็กมากและมีค่าใช้จ่าย $ 0.12
  • 74HC74 เป็น flip-flop คู่ D ที่มี 14 พินในราคา $ 0.05

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


5
ต้องการบัฟเฟอร์ทริกเกอร์ schmitt บนอินพุตจากปุ่มจริง ๆ (หรือหากฟลิปฟลอปมีอินพุตทริกเกอร์ schmitt ที่ใช้งานได้เช่นกัน) ไม่เช่นนั้น FF อาจสั่นไหวชั่วขณะเมื่อสัญญาณนาฬิกาเพิ่มขึ้นอย่างช้าๆเมื่อปล่อยปุ่ม (สิ่งนี้สามารถบรรเทาได้บ้างด้วยการเลือกหมวกและตัวต้านทานที่เลือกอย่างระมัดระวัง แต่ไม่เคยกำจัด)
Connor Wolf

คุณไม่สามารถใช้ตัวกรอง RC ในเส้นทางข้อเสนอแนะเพื่อป้องกันการตีกลับได้หรือไม่
endolith

6

หรือคุณสามารถทำได้ด้วยไมโครคอนโทรลเลอร์ 6 ขาเล็ก ๆ เพียงตัวเดียวและไม่มีส่วนประกอบอื่น ๆ อาจมีค่าใช้จ่ายเพิ่มขึ้นเล็กน้อย แต่ก็ง่ายขึ้นและใช้พื้นที่น้อยลง การเปิดสวิตช์ในซอฟต์แวร์นั้นง่ายแล้วมันเป็นเพียงวิธีการเก็บบูลีนหากเอาต์พุตควรสูงหรือต่ำ mcu รุ่นเล็กที่สุดมาในแพ็คเกจเมาท์พื้นผิว 2 มม. x 2 มม. ในปริมาณมากอาจเป็น $ 0.50

สลับแผนผัง


+1 - แต่ฉันเชื่อว่าส่วนนั้นมาใน SMT เท่านั้น
J. Polfer

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

ดังนั้นคุณจะต้องใช้ตัวต้านทาน pull-up ภายในบน PB0 ตั้งค่าเป็นอินพุตดิจิตอลแล้วต่อกราวด์เพื่อทริกเกอร์ใช่ไหม คุณไม่จำเป็นต้องมีตัวต้านทานแบบอนุกรมโดยใช้สวิตช์ในลักษณะนั้น
endolith

1
@TokenMacGuy ไม่มีกระแสควรไหลจาก PB0 ถึง GND เนื่องจาก PB0 จะเป็นอินพุตไม่ใช่เอาต์พุต @ แก้ไขด้วยการใช้ pull-up ภายในหมายความว่าไม่จำเป็นต้องดึงภายนอก (นอกจากนี้การดึงขึ้นไม่ได้เป็นแบบเดียวกับสวิตช์พร้อมกับตัวดึงข้อมูลภายในหรือภายนอก) @ sheepsimulator ที่มาใน SMT เป็นเพียงปัญหาสำหรับผู้เล่นอดิเรก ในกรณีนั้นเงินพิเศษหรือสองดอลลาร์จะไม่เป็นปัญหาและคุณสามารถก้าวไปสู่ ​​ATTiny25 8 พินได้อย่างง่ายดาย
davr

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

1

วงจรนี้ (อธิบายไว้ที่นี่ด้วย ) มีราคาถูกมาก แต่มีความซับซ้อนมากขึ้น ถ้าทรานซิสเตอร์มีปริมาณ $ 0.02 ในปริมาณมากอาจจะรวม $ 0.10

สวิตช์ล็อคแบบ 3 ทรานซิสเตอร์


$ 0.02 ... บางทีถ้าคุณซื้อ 27,000 คนชอบที่นี่: search.digikey.com/scripts/DkSearch/…
davr

1
$ 0.03 เป็นจำนวนมากอันยิ่งใหญ่เช่น $ 0.02 ในปริมาณน้อย ...
SingleNegationElimination

3904s สำหรับ 1.4 เซ็นต์: newark.com/on-sem Semiconductoror/mmbt3904lt1g/ ในปริมาณสูงตัวเก็บประจุจะมีค่าเท่ากับ 1 เซ็นต์และตัวต้านทานเป็น 1 ใน 10 ของค่าเซ็นต์
endolith

ดูเหมือนว่าทรานซิสเตอร์ Q2 ต้องการตัวต้านทานบนฐานเพื่อ จำกัด กระแสที่ไหลผ่านฐาน
Craig McQueen

1

สร้าง T flip-Flop ด้วยการย่ออินพุตของ jk flipflop ที่เรียกขอบบวกและเชื่อมต่อเอาต์พุตปุ่มกดเข้ากับอินพุตนาฬิกาของ jk flip flop

แผนผัง

จำลองวงจรนี้ - แผนผังที่สร้างโดยใช้CircuitLab


0

ฉันรู้ว่ามันเป็นวิธีการ "ทางอ้อม" แต่คุณสามารถรับเซ็นเซอร์เอฟเฟกต์ฮอลล์เช่น sparkfun ได้: http://www.sparkfun.com/commerce/product_info.php?products_id=9312

และเพียงใช้แม่เหล็กฉันค้นพบ (วิธีที่ยาก) ว่าเอฟเฟกต์ฮอลล์นี้กำลังล็อคดังนั้นมันจะไม่ทำงานสำหรับสิ่งที่ฉันต้องการ แต่ดูเหมือนว่ามันจะเป็นไปได้ในทางทฤษฎีสำหรับสิ่งที่คุณกำลังมองหา .

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


1
คุณจะ "ปลดสลัก" ได้อย่างไร การนำแม่เหล็กเข้ามาใกล้กับเซ็นเซอร์เป็นครั้งที่สองจะไม่ทำให้มันหลุดออกไปใช่ไหม?
davr

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

0

ทางเลือกที่ง่ายที่สุดคือการใช้สวิตช์ปุ่มกด

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


0

ไม่แน่ใจว่าเป้าหมายสุดท้ายคืออะไร แต่ฉันคิดว่าฉันจะเอาสิ่งนี้ออกไป:

นี่เป็นวงจรเล็ก ๆ ที่ยอดเยี่ยมที่ฉันชอบใช้เพื่อขับเคลื่อนรีเลย์ขนาดเล็ก มันค่อนข้างถูกที่จะสร้างเช่นกัน

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

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

ฉันชอบที่จะใช้สิ่งนี้ในเอฟเฟกต์ของกีต้าร์เพื่อที่ฉันจะสามารถข้ามหรือต่ออุปกรณ์ด้วยสวิทช์ชั่วขณะ แน่นอนว่าสวิตช์ 3PDT จะทำสิ่งเดียวกันด้วยตัวเอง แต่การสลับนั้นเงียบกว่าด้วยวิธีนี้ (ไม่มีป๊อปใหญ่) และ footswitch แบบสัมผัสที่นุ่มนวลชั่วขณะหนึ่งรู้สึกดีกว่าตัว 3PDT ตัวใหญ่มาก

หวังว่านี่จะช่วยได้

Latching Relay Driver


0

คุณไม่สามารถทำในซอฟต์แวร์ได้หรือไม่?

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

โดยการจัดเก็บสถานะปุ่มในหน่วยความจำมันค่อนข้างง่ายต่อการใช้สวิตช์ชั่วขณะเป็นสลับ

boolean buttonState = false; // store for toggle state, false = off true = on

if(yourButton == HIGH && buttonState == false) // if button is pressed and toggled off
{
     Serial.println("Button Toggled On"); // do something while button is on

     buttonState = true // set button state to on
}

if(yourButton == HIGH && buttonState == true) // if button is pressed and toggled on
{
     Serial.println("Button Toggled Off");  // do something else while button is off

     buttonState = false // set button state to off
}

ขออภัยถ้าไม่มีเครื่องหมายแสดงว่าคำตอบนี้ขึ้นอยู่กับคุณที่ใช้ MCU หรือชิปที่ตั้งโปรแกรมได้


โดยส่วนตัวแล้วฉันต้องการวิธีแก้ปัญหาแบบสแตนด์อโลน แต่คำถามนั้นตั้งใจให้เป็นเรื่องทั่วไป
endolith

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