Attiva / disattiva un interruttore momentaneo


17

Quali sono i modi più semplici, economici e più piccoli per fare in modo che un interruttore momentaneo produca un output di commutazione a 2 stati (interruttore momentaneo di blocco)?

In altre parole, l'output è continuamente basso e quando si preme momentaneamente il pulsante / interruttore tattico, l'output cambia continuamente in alto, quindi quando lo si preme di nuovo, torna in basso.


Penso che la migliore risposta a ciò dipenda dal richiedente e dal fatto che tu sia più a tuo agio con una soluzione hardware o software.
J. Polfer,

Dipende anche da dove si trova questo interruttore di uscita e quali tensioni (stati!) Sono disponibili.
XTL,

Solo due stati, alto e basso, come qualsiasi logica digitale. Se vuoi fare più stati che stai attraversando, penso che richiederebbe un microcontrollore. Probabilmente ne avresti comunque uno nel tuo circuito.
endolith,

Mi piace la soluzione con 2 inverter. Ti stai solo chiedendo cosa sarebbe necessario per abilitare questo interruttore a 30V @ 1A?
stevenrcfox

@Overlow: sostituire il transistor di uscita con un transistor di potenza o un relè
endolith

Risposte:


9

Ecco un'altra alternativa con due inverter e debouncing:

Two inverters

Per l'uscita logica, sono necessari solo i due inverter, RC e la resistenza di retroazione:

enter image description here

NC7WZ14 costa $ 0,06 con 2 inverter, un piccolo pacchetto a 6 pin e ingressi trigger Schmitt, anche se penso che questo circuito non abbia nemmeno bisogno degli ingressi Schmitt a causa dell'RC. Inoltre può pilotare 24 mA, quindi è possibile collegare il LED direttamente ad esso se si utilizza un LED per qualsiasi motivo.

Anche mostrato qui e qui come interruttore a levetta .

Penso che la resistenza di retroazione debba essere molto più piccola della resistenza centrale per evitare che oscilli se si tiene premuto il pulsante, perché la connessione a bassa impedenza all'uscita impedirà al condensatore di caricarsi fino alla media tensione fino a quando non si rilascia.

Le varianti sono descritte in Press ON - Premere OFF sui circuiti di chiusura a scatto :

AND gate variant


Quando viene acceso per la prima volta, si avvia con l'uscita attivata, disattivata o casuale? Ispezionando il circuito, immagino che si accenderà con l'uscita attiva.
Craig McQueen,

@CraigMcQueen Alla prima accensione, il condensatore avrà 0 V su di esso. Quindi il primo circuito inizierà in posizione ON. Collegare il condensatore all'alimentazione anziché a terra e si avvierà in posizione OFF.
endolith

@CraigMcQueen In realtà è garantito? Non ne sono sicuro. La bassa impedenza di uscita dell'inverter dominerà sulla resistenza da 220k, quindi potrebbe avviarsi in uno stato casuale.
endolith

@CraigMcQueen L'ultimo circuito mostrato inizierà con un condensatore 0,01 μF 0 V, quindi Vout sarà 0.
endolith

@endolith Dove nell'ultima immagine è collegato il VCC? Vedo terra e Vout.
Mike,

7

Un possibile metodo:

Usa un RC per rimbalzare l'interruttore

RC network connected to momentary switch to debounce

e quindi inseriscilo in un flip-flop D con l'output che ritorna all'input per implementare un flip flop T.

D flip-flop configured as toggle flip-flop

Il flip-flop D deve essere solo attivato dal fronte positivo e necessita di un output invertito.

  • L' NC7SZ74 a 8 pin dovrebbe funzionare, è molto piccolo e costa $ 0,12 in quantità.
  • Il 74HC74 è un flip-flop a doppia D con 14 pin per $ 0,05.

Ci sono problemi con questo? L'interruttore dovrebbe essere tenuto premuto per un breve periodo di tempo per consentire al tempo di salita di attivare l'ingresso di clock, il che è probabilmente buono. Se tieni premuto il pulsante, si attiverà una sola volta, il che è positivo. C'è un modo migliore per rimandare nel loop di feedback o qualcosa del genere?


5
Ha davvero bisogno di un buffer trigger schmitt sull'input dal pulsante (o se il flip-flop ha input trigger schmitt che funzionerebbero anche). Altrimenti, l'FF potrebbe oscillare momentaneamente quando l'ingresso del clock sale lentamente quando si rilascia il pulsante. (Questo può essere in qualche modo mitigato con un'attenta selezione del cappuccio di debouncing e del resistore, ma mai eliminato)
Connor Wolf

Non potresti anche utilizzare un filtro RC nel percorso di feedback per evitare il rimbalzo?
endolith,

6

Oppure potresti farlo con un singolo microcontrollore a 6 pin e senza altri componenti. Potrebbe costare un po 'di più, ma è più semplice e occupa meno spazio. Debouncare un interruttore nel software è semplice, quindi è solo un modo per memorizzare un valore booleano se l'output deve essere alto o basso. La versione più piccola di questo mcu è disponibile in un pacchetto di montaggio superficiale da 2 x 2 mm. In grandi quantità potrebbe essere $ 0,50.

toggle schematic


+1 - Ma credo che una parte arrivi solo in SMT.
J. Polfer,

1
Sì, ma anche il microcontrollore più economico costa più della semplice logica digitale. È un sistema piuttosto complesso per svolgere un compito semplice e ti stai aprendo al mondo dei bug del software. Inoltre, aumenta i costi di produzione per programmare ogni micro?
endolith,

Quindi useresti il ​​resistore pull-up interno su PB0 impostato come un ingresso digitale e poi lo mettere a terra per attivarlo, giusto? Non dovresti aver bisogno di un resistore in serie con l'interruttore in quel modo.
endolith,

1
@TokenMacGuy Nessuna corrente dovrebbe fluire da PB0 a GND, poiché PB0 sarebbe un input, non un'uscita. @endolith corretto, l'uso del pull-up interno non significa che il pull-up esterno sia necessario. (Inoltre, il pull-up non è in serie con l'interruttore, con un pull-up interno o esterno). @sheepsimulator in arrivo in SMT è solo un problema per l'hobbista. In tal caso, un dollaro o due in più non sarebbe un problema e puoi facilmente passare al DIP ATtiny25 a 8 pin.
davr

@endolith Dipende dall'applicazione immagino. Ci sono sempre dei compromessi. Tutto tranne il dispositivo più elementare ha una sorta di logica. Dire che ti apri al mondo dei bug del software non è un grosso problema ... senza la mcu ti apri ai bug dell'hardware, poiché stai costruendo una sorta di circuito digitale / analogico per eseguire la logica.
davr

1

Questo circuito (anche descritto qui ) è molto economico, ma è più complesso e occupa un po 'di spazio con tutti i componenti. Se i transistor sono come $ 0,02 in grandi quantità, sarebbe forse $ 0,10 in totale?

Interruttore di blocco a 3 transistor


$ 0,02 ... forse se ne acquisti 27.000 come qui: search.digikey.com/scripts/DkSearch/…
davr

1
$ 0,03 è terribilmente come $ 0,02 in piccole quantità ...
SingleNegationElimination

3904s per 1,4 centesimi: newark.com/on-semiconductor/mmbt3904lt1g/… In quantità elevate, i condensatori sono come 1 centesimo e i resistori sono come 1/10 di centesimo.
endolith,

Sembra che il transistor Q2 abbia bisogno di un resistore sulla base, per limitare la corrente che scorre attraverso la base.
Craig McQueen,

1

Crea un infradito T cortocircuitando gli ingressi di un jk flipflop attivato da fronte positivo e collega l'uscita del pulsante all'ingresso di clock del flip flop jk.

schematico

simula questo circuito - Schema creato usando CircuitLab


0

So che è un po 'un modo "indiretto" di farlo, ma puoi ottenere un sensore ad effetto hall come sparkfun ha: http://www.sparkfun.com/commerce/product_info.php?products_id=9312

e basta usare un magnete, ho scoperto (nel modo più duro) che questo particolare effetto hall è in attesa, quindi non funzionerà per quello che mi serve, ma sembra che in teoria potrebbe funzionare per quello che stai cercando .

L'ho appena inserito in una breadboard, penso che potrei aver usato un resistore (è stato probabilmente un mese quindi sono un po 'sfocato sui dettagli), e quando muovo il magnete vicino (momentaneo) chiude il sensore e lì tu vai.


1
Come lo "sblocceresti" comunque? Portare il magnete vicino al sensore una seconda volta non lo disinnesterebbe, vero?
davr

Credo che dovresti invertire la polarità del magnete per "cancellarlo" Dovrò collegarlo di nuovo a casa per testarlo per essere sicuro, tuttavia sto cercando in quanto tempo ci vuole per "resettare" se si rimuove il potere. Potrei essere in grado di usarlo per il mio progetto che stavo andando, uccidendo il potere per il tempo specificato (a condizione che non sia troppo lungo)
onaclov2000

0

L'alternativa più semplice è utilizzare un interruttore a pulsante alternato.

Se ignori il fatto che si blocca in posizioni diverse, è quasi esattamente come un interruttore momentaneo. Capisco che questo non è lo spirito della domanda, ma è una soluzione semplice e compatta che non richiede software né hardware esterno.


0

Non sono sicuro di quale sia l'obiettivo finale, ma ho pensato di pubblicarlo qui:

Questo è un piccolo grande circuito che mi piace usare per pilotare relè bistabili. È anche abbastanza economico da costruire.

Premendo l'interruttore momentaneo si commuta lo stato del relè e del LED. Non è molto esigente per quanto tempo tieni premuto il pulsante. Poiché il relè si blocca, non assorbirà molta corrente per la maggior parte del tempo.

In questa configurazione, il LED si accenderà quando il relè è nella sua condizione impostata e si spegne quando il relè viene ripristinato. Puoi anche collegare R7 al terminale + di C3 per accendere il LED quando il relè viene resettato invece.

Mi piace usarlo negli effetti per chitarra in modo da poter bypassare o attivare il dispositivo con un interruttore a pedale momentaneo. Naturalmente uno switch 3PDT farebbe la stessa cosa da solo, ma lo switch è più silenzioso in questo modo (nessun grande pop) e gli interruttori a pedale soft-touch momentanei sembrano molto più belli di quelli grandi 3PDT.

Spero che sia di aiuto.

Driver relè di ritenuta


0

Potresti non farlo solo nel software?

Il pulsante sarà un input su un dispositivo programmabile o è necessario attivare / disattivare il regno hardware?

Memorizzando in memoria lo stato di un pulsante è abbastanza semplice utilizzare un interruttore momentaneo come interruttore.

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
}

Scusate se non è così, ovviamente questa risposta dipende da voi usando un MCU o un chip programmabile.


Personalmente, ho bisogno di una soluzione autonoma, ma la domanda deve essere generale.
endolith,

1
Sì, questa è sicuramente la soluzione ragionevole quando hai un microprocessore. Nota, dovresti anche implementare "debounce" poiché interruttori e pulsanti sono rumorosi quando si cambia.
Craig McQueen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.