Come funziona il condensatore in un circuito di debouncing?


13

Sul seguente circuito (un pulsante debounce che accende un LED):

schematico

simula questo circuito - Schema creato usando CircuitLab

Sto cercando di capire perché il LED non si accende poiché il condensatore sembra bypassare l'interruttore. Quando il condensatore è pieno, non trasmette / conduce elettricità?

Noterai che sono molto alle prime armi, ma dopo 20 ore di lettura di vari tutorial, non riesco ancora a capire qualcosa di molto semplice; come funziona il condensatore completo in modo diverso rispetto a un semplice filo? Se avessi sostituito il condensatore con un filo posizionato un filo invece del condensatore, la luce sarebbe sempre accesa.

Modifica: Alcune persone hanno sottolineato che il circuito di debouncing non aveva senso (cattiva tensione, ecc.) Ecco il mio secondo tentativo di dare più senso. R5 e R6 potrebbero essere gli stessi, ma ho pensato che tenerli separati avrebbe aiutato a mantenere 1 lavoro per ogni componente.

circuito

Risposte:


14

Questo non è un buon circuito di rimbalzo.

Un problema è che (almeno idealmente) l'interruttore e i suoi fili di collegamento hanno una resistenza pari a zero. Ciò significa che il condensatore si scarica istantaneamente quando l'interruttore è chiuso. (In termini pratici, inoltre, questa scarica rapida potrebbe persino essere dannosa per i contatti dell'interruttore o il cablaggio, se sul condensatore è presente una tensione sufficientemente elevata e ha una capacità sufficientemente elevata.)

Un debounce dell'interruttore capacitivo dovrebbe caricare lentamente il condensatore quando l'interruttore è in uno stato e scaricarlo lentamente quando si trova in un altro stato. La costante RC non deve essere la stessa, ma dovrebbe essere qualcosa di diverso da zero. Il circuito ha resistori che controllano la carica del condensatore; ha solo bisogno di una resistenza nel circuito dell'interruttore per scaricarlo con grazia.

Un altro problema con questo circuito è che il LED è spento solo se il circuito è stato acceso per un po 'di tempo, come se il circuito esistesse dall'inizio del tempo con quella stessa sorgente di tensione. Ma cosa succede se, al momento , la sorgente di tensione è stata 0V e salta improvvisamente alla sua tensione? In quel momento, il condensatore, che deve essere stato vuoto, inizia a caricarsi. Durante la carica, la corrente scorre e il LED si illumina brevemente e poi si spegne. (Beh, forse no, perché la tua fonte ha solo 1V, ma questa è un'altra storia).t=0

In CircuitLab, puoi distinguere queste due situazioni nella simulazione "Dominio temporale". Puoi "Salta iniziale" oppure no. Il risolutore può fingere che il circuito sia esistito nel dato stato per tutta l'eternità fino al tempo , e iniziare a risolverlo da lì. Oppure può risolverlo dal punto di vista del fatto che il circuito è appena nato a e le sorgenti di tensione prendono vita, i condensatori sono vuoti e così via.t = 0t=0t=0

Un'ultima considerazione qui è che il circuito illumina solo un LED, quindi il rimbalzo dell'interruttore è sostanzialmente discutibile, a meno che il LED non brilli su un rilevatore ottico in cui il rimbalzo dell'interruttore si trasforma in un difetto nel segnale. Se il compito del LED è quello di fornire solo una bella luce, il tuo occhio non sarà nemmeno abbastanza veloce da vedere l'interruttore rimbalzare.


Ecco una simulazione nel dominio del tempo del circuito (dopo aver cambiato V1 in 3V). Ciò che viene tracciato è la corrente del LED. Importante: il parametro Skip Initial è impostato su Sì, quindi possiamo vedere cosa succede quando il condensatore è inizialmente vuoto e la sorgente di tensione si eccita a 3V. Questo è tutto con l'interruttore in uno stato aperto.

inserisci qui la descrizione dell'immagine

Come puoi vedere, la corrente aumenta attraverso il LED e poi si spegne. Se il tuo intento era che il LED fosse controllato rigorosamente dall'operatore tramite il pulsante, il tuo progetto non implementerà il tuo intento al cento per cento.


Per quanto riguarda il commento qui sotto, supponiamo che l'obiettivo sia effettivamente guidare un pin del microcontrollore (tutto ciò che funziona a 5 V). In primo luogo, possiamo farlo senza alcuna capacità e gestire il debouncing nel software campionando il pin a una velocità ragionevolmente bassa.

schematico

simula questo circuito - Schema creato usando CircuitLab

Quando l'interruttore è aperto, l'uscita viene tirata a 0 V dal resistore pull-down. Quando chiudiamo l'interruttore, la tensione nella parte superiore della resistenza sale a 5V. Questa uscita può essere considerata come un segnale. Siamo interessati alla componente a bassa frequenza del segnale: pressioni interruttore relativamente lente. Vogliamo rifiutare le alte frequenze, come il cambio di rimbalzo. A tale scopo, possiamo aggiungere un filtro passa basso RC passivo unipolare:

schematico

simula questo circuito

Ora quando l'interruttore si chiude, la tensione aumenta gradualmente man mano che il condensatore viene caricato. Puoi vederlo nella simulazione del dominio del tempo:

chiusura dell'interruttore levigata

Quando l'interruttore viene aperto, il condensatore si scarica attraverso R1 e R1, riportando gradualmente la tensione a zero. Il condensatore segue fondamentalmente la tensione di R1, ma con un ritardo dovuto alla necessità di caricare attraverso R1 e scaricarsi attraverso R1 e R2. (Nota che lo scarico è due volte più lento della carica!)

L'ingresso a microprocessore rileva la tensione con alta impedenza, quindi possiamo ignorare il suo effetto di caricamento e nemmeno mostrarlo sul diagramma. Non possiamo farlo nel caso del LED perché richiede corrente che il nostro circuito deve fornire. Quella corrente fluisce attraverso i nostri resistori e sviluppa tensioni di cui dobbiamo tener conto: in altre parole, ha "effetti di caricamento".

Questo tipo di circuito funziona ancora meglio se alimentiamo l'uscita a un trigger Schmidt. Un trigger Schmidt è una sorta di buffer per segnali digitali che mostra un'isteresi simile a un termometro. La sua uscita aumenta quando viene superata una soglia di ingresso elevata e scende quando viene superata una soglia bassa diversa. Ad esempio, potrebbe aumentare quando l'ingresso supera 3,5 volt e scendere solo quando l'ingresso scende al di sotto di 1,5.

Quindi, anche se il condensatore permette attraverso un po 'di rumore che potrebbe comunque causare qualche piccolo ribaltamento avanti e indietro vicino al superamento della soglia di un ingresso, il trigger Schmidt lo rifiuterà.


Supponiamo di voler rimbalzare il LED con un condensatore? Il problema è che le resistenze finiscono per essere troppo basse a causa della necessità di fornire corrente al LED. Se utilizziamo semplicemente lo stesso circuito e riduciamo i resistori (e il condensatore si ingrandisce dello stesso fattore), si finisce con qualcosa che consuma energia. Il modo per farlo è quello di utilizzare un piccolo circuito di segnale per gestire l'interruttore e rimbalzarlo, quindi utilizzare la tensione per controllare un transistor che scarica corrente nel LED.

Anche se rimbalzare un LED potrebbe essere inutile, se rendiamo i resistori e / o il condensatore abbastanza grandi, possiamo ottenere un comportamento piacevole: quello del LED che si sbiadisce lentamente quando si tiene premuto il pulsante e che si sbiadisce quando viene rilasciato.

schematico

simula questo circuito

Questo è lo stesso circuito di prima: il nodo "out to microcontroller" ora si collega alla base di un MOSFET a canale n che guida la corrente al LED. Il MOSFET "buffer" la logica di debounce dal pilotaggio del LED. Il circuito di debounce non è disturbato dalla bassa impedenza del LED e il LED non è privo di corrente dalle alte impedenze nel circuito di debounce.


Hum, quindi quale sarebbe la soluzione? Il LED potrebbe essere un ingresso arduino o qualcos'altro. La mia domanda riguardava più il condensatore ... Ho appena provato a copiare un circuito di debouncing esistente per illustrare la mia domanda sul condensatore. La tensione sarebbe 5V, non 1.
FMaz008

Posso aggiungerlo alla risposta.
Kaz,

Quindi quello che stai dicendo è che dovrei aggiungere una resistenza di 100olm tra V1 e SW1? Immagino di essere solo confuso perché devo ancora vedere un circuito di rimbalzo del pulsante che ha coinvolto più di 1 resistenza in tutto il tutorial che ho visto. Ma la maggior parte non disegna il circuito completo (su OUT, su Arduino, ecc.) Quindi è difficile da capire per me. Quindi questo sarebbe male? : digital.ni.com/public.nsf/8e0a9cd1e264dced86256a100082b910/…
FMaz008

Strano, quindi mi hai spiegato che non posso fare un pulsante che illumini un LED, con un circuito di rimbalzo. Ad ogni modo, questo ha risposto alla domanda iniziale, farò ulteriori ricerche per il resto: p Non mi piace semplicemente dire "l'arduino lo farà": lo so, potrei solo aggiungere un ritardo di 20 ms e NON fare un rimbalzo affatto, ma sto cercando di capire qual è la magia che sta dietro ... ecco perché voglio un circuito completo.
FMaz008,

Puoi rimbalzare un pulsante che guida un LED, ma è inutile perché l'interruttore che rimbalza non causa un malfunzionamento del LED. Per un circuito completo, immagina di avere Arduino lì alimentato da + 5V e terra. Quindi il nodo "out" si collega al pin di input che si desidera guidare.
Kaz,

2

Questo effetto si verifica perché allo stato stazionario un condensatore blocca efficacemente qualsiasi corrente dalle tensioni CC. Questo può essere visto comprendendo l'equazione

i = C * (dV / dt)

A CC il termine differenziale è 0, quindi la corrente è 0. Pertanto la corrente attraverso il condensatore sarà zero allo stato stazionario.

Se lo dai per scontato, dovrebbe essere abbastanza ovvio il motivo per cui questo circuito funziona. Se vuoi ancora più dettagli di questo, allora questo video probabilmente farà un lavoro migliore nel dimostrare come la fisica di un condensatore si gioca per produrre il risultato sopra di quanto la mia descrizione possa fare.


Questo video è fantastico, ad eccezione del colpo di testa che mi ha dato: p Grazie :)
FMaz008

1

Un condensatore può, per molti scopi, essere considerato una batteria ricaricabile molto piccola. Passerà corrente solo durante la carica o la scarica.

La maggior parte dei LED richiede almeno 2 volt per accendersi - affinché il circuito funzioni, la sorgente di tensione dovrebbe essere almeno 3 volt. Quindi potresti vedere il LED continuare a illuminarsi per una frazione di secondo dopo aver aperto l'interruttore, mentre il condensatore si carica.


Non ho configurato la tensione e tutto il resto, tranne la resistenza. È il mio primo utilizzo di circuit lab, quindi stavo solo "posizionando il componente con valori predefiniti". Se lo facessi davvero, sarebbe 5V.
FMaz008,

1
"When the capacitor is full, it doesn't transmit/conduct electricity"

Sì. Non è un filo, è (come il simbolo) due piastre parallele vicine tra loro.

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.