Uno switch deve essere rimosso prima dell'apertura?


8

Supponiamo che un ingresso su un microcontrollore abbia una resistenza di pullup a 5 V e un interruttore a terra (normalmente aperto) collegato ad esso. So che un interruttore dovrebbe essere rimosso (nel mio caso, nel software) quando chiuso, ma è necessario rimbalzare quando viene aperto un interruttore?

Risposte:


11

Sì, è necessario rimandare in entrambe le direzioni se si desidera un bordo singolo garantito ogni volta che l'interruttore cambia stato.

Fortunatamente, non è necessario alcun hardware aggiuntivo per il debounc se lo switch è collegato a un microcontrollore. Se il micro ha un pullup interno, cosa che molti fanno, non è necessario niente di più esternamente dell'interruttore tra il micro pin e la terra.

Trovo che 50 ms sia un buon tempo di rimbalzo. La maggior parte degli switch rimbalza per ben meno, ma alcuni possono essere quasi così lunghi. Tuttavia, 50 ms si sentiranno comunque istantanei per un utente umano, quindi potresti anche essere estremamente affidabile. L'unica differenza è il numero che conta nel firmware, quindi non ci sono costi aggiuntivi. Di solito ho un interruzione periodica di 1 ms per altri motivi, quindi se l'interruttore si trova nello stesso stato 50 volte di seguito in quell'interruzione, allora lo dichiari rimbalzato al nuovo stato.

Dettagli sulla logica di rimbalzo in risposta al commento:

Generalmente avrai un bit globale che indica lo stato debounce ufficiale dello switch. Questo è ciò che utilizza ogni logica che deve sapere in che modo viene impostato l'interruttore. L'unico stato aggiuntivo necessario è un contatore, in genere un singolo byte, nella routine di interrupt. Supponiamo che l'interrupt sia ogni 1 ms e il tempo di debounce sia di 50 ms. Per ogni interruzione:

Se lo stato instananeo corrisponde allo stato rimbalzato:
  Ripristina contatore su 50
  Fatto

Se lo stato istantaneo differisce dallo stato rimbalzato:
  Contatore decrementi
  Se il contatore raggiunge 0:
    Dichiarare il nuovo stato rimbalzato
    Ripristina contatore su 50
  Fatto

C'è stato un ottimo articolo su www.embedded.com qualche tempo fa. L'autore ha afferrato un gruppo di interruttori e li ha posizionati tra un alimentatore e un input dell'ambito di archiviazione digitale, per esaminare le caratteristiche di rimbalzo. La conclusione finale è che non puoi scegliere un tempo di rimbalzo "taglia unica": devi caratterizzare ogni particolare interruttore e vedere come rimbalza.
John R. Strohm,

@John: puoi dare il link? Non capisco perché un presupposto del tempo di rimbalzo massimo nel caso peggiore non possa essere utilizzato per tutti gli switch, a condizione che sia abbastanza breve da soddisfare l'utente. L'IME menzionato da Olms per 50ms soddisfa entrambi i criteri.
Wouter van Ooijen,

Grazie Olin. Quindi, come tenere traccia di quale stato è stato l'interruttore negli ultimi 50 interrupt? Vorrei incrementare una variabile se l'interruttore si trova nello stesso stato dell'ultimo interrupt, deselezionarlo se lo stato è cambiato e prendere in considerazione lo switch annullato se raggiunge 50. È un modo efficace per farlo?
Nate,

1
Questo potrebbe non essere l'articolo menzionato sopra, ma contiene molte informazioni interessanti: ganssle.com/debouncing.htm Chiunque abbia a che fare con il rimbalzo dovrebbe leggerlo.
Incondizionatamente

1
@Nata: vedi aggiunta per rispondere.
Olin Lathrop,

2

Sì, ne userei uno, il meccanismo è sostanzialmente lo stesso. Quando interrompi il contatto, avrai dei punti in cui l'interruttore sta effettuando un buon contatto elettrico, oltre a non avere un buon contatto elettrico. Lo stesso di quando si effettua il contatto.


1

In generale si. Gli interruttori meccanici possono produrre rumore elettrico (rimbalzo) sia in chiusura che in apertura.


1

In genere sì, ma dipende sempre da cosa stai facendo con l'ingresso digitale. Ho avuto alcuni sistemi che non avevano assolutamente bisogno di essere rimbalzati in entrambe le direzioni.

Se stai guidando un interrupt, tuttavia, molto probabilmente dovresti rimbalzare.

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.