I trigger multipli di Schmitt in serie possono annullare completamente un interruttore?


8

Dopo aver affrontato un po 'di tempo il debouncing del software, trovo che ci sia un enorme tributo sul sistema, quindi ho pensato di creare inizialmente un debouncer hardware con un trigger Schmitt (74HC14), un condensatore, un pulsante e un resistore, come mostrato di seguito da talkingelectronics.com :

circuito di talkelectronics

Ma ho letto che il trigger di Schmitt è la metà cattivo di un normale inverter quando determina quando emettere un valore alto o basso, perché commuta lo stato sul segno del 33% e del 66% dove come un normale inverter si avvicinerebbe al segno del 50% (ma con la versione HC è probabilmente più al 55%).

Mi chiedevo, poiché il trigger Schmitt è composto da sei inverter in un unico pacchetto, il rimbalzo migliorerebbe sostanzialmente con qualsiasi pulsante di mia scelta applicato al primo ingresso se avessi creato sei circuiti sul lato destro con gli stessi valori dei componenti e collegato tutti di loro in serie? (Esempio: uscita del primo circuito all'ingresso del secondo circuito in cui il condensatore e la resistenza si incontrano.)


3
"perché cambia stato al segno del 33% e del 66%" , non è forse questo il punto di usare un trigger schmitt? ... In modo che ci sia una finestra nel mezzo in cui non si cambia, quindi rimbalzando?
Bort

5
In che modo il debounc ha un impatto enorme sul sistema ?? Il debounding del software può essere semplice come mantenere un intervallo di 50 ms tra la lettura dei pulsanti.
Wouter van Ooijen,

2
@Mike Forse hai un malinteso sui trigger di Schmitt? Sei consapevole che hanno un'isteresi e che i punti di commutazione asimmetrici sono "sovrapposti": non esiste una banda media in cui il segnale non è definito.
pipe,

4
Il tuo problema non ha nulla a che fare con questo - il tuo problema è che non sai come scrivere il software che rimbalza in un modo che non è assolutamente inefficiente. Consiglio vivamente di pubblicare un'altra domanda sul forum di revisione del codice per chiedere cosa hai fatto di sbagliato nel tuo software, perché anche il processore a 8 bit più economico può rimbalzare un sacco di input senza sudare.
Graham,

2
@Mike A meno che tu non abbia migliaia di eventi al secondo che devi rimandare, non vedo come questo possa consumare alcun impatto misurabile sul runtime.
Dmitry Grigoryev,

Risposte:


12

L'uso dei trigger Schmitt in serie non ridurrebbe ulteriormente il rimbalzo.

Considera il filtro:

Confronto della forma d'onda del trigger di Schmitt

L'ingresso è (U). La linea rossa è una soglia del 50%, la cui uscita è vista come segnale (A). Rimbalza ogni volta che l'input incrocia.

Le linee verdi sono qualcosa come il 33% e il 66%, come hai affermato. Ma l'uscita (B) cambia solo quando l'ingresso (U) attraversa da una soglia verde all'altra.

Ancora più importante, l'uscita è completamente ALTA o BASSA (digitale). Quindi se l'output di un trigger di Schmitt fosse immesso nell'input di un altro, non ci sarebbe stata sostanzialmente alcuna differenza.

Prendi l'output filtrato dall'alto (B) e pensa a come verrebbe visto da un altro trigger di Schmitt:

Trigger Schmitt in serie con un altro

Ancora una volta, l'output del primo sarebbe ALTO o BASSO. Quindi attraverserebbe le soglie allo stesso tempo, dando come risultato lo stesso output. Non c'è niente da rimandare! Semmai, mi aspetto che crei più rumore, perché stai introducendo più componenti e quindi più spazio per l'errore.

Sembra che quello che stai cercando sia un trigger Schmitt con soglie regolabili. Alcuni sono simmetrici (ad esempio: 33% e 66% o 10% e 90%). Altri non sono simmetrici (ad esempio: 33% e 80%). Puoi crearne uno tuo usando un op-amp.

Prova a giocare con questa simulazione che ho messo insieme qualche tempo fa: Schmitt Trigger Simulation - Non-Inverting Non-Symmetric

Schmitt Trigger Simulation - Non invertente Non simmetrico


Considerando che realizzerò un PCB, a volte collegare due inverter in serie renderà il PCB molto più facile da creare. Quanto più rumore mi aspetterò se avessi legato due di questi inverter in serie?
Mike,

Per quella configurazione, il "rumore" sarebbe probabilmente trascurabile. Potrebbe esserci un microsecondo di propagazione temporale. Il "rumore" di tensione non sarebbe un problema troppo grande, poiché ogni trigger è un filtro dopo tutto. Non mi preoccuperei a meno che l'applicazione non dipenda fortemente dai tempi, ma immagino che non sia perché è solo un pulsante.
Bort,

15
I trigger multipli di Schmitt in serie possono annullare completamente un interruttore?

Un singolo trigger Schmitt con un filtro analogico davanti può essere utilizzato per il rimbalzo. Tuttavia, dopo quel trigger di Schmitt, il segnale è completamente digitale. Eventuali trigger Schmitt aggiuntivi non lo cambieranno. Idealmente, preserveranno il segnale.

Su un argomento separato, il debounc nel firmware non dovrebbe presentare molto carico. Il solito modo è di campionare lo stato dell'interruttore in un interrupt periodico che già si ha comunque. Dichiara lo stato di debounce il valore corrente dello switch quando hai visto lo switch in quello stato per N campioni consecutivi. Di solito richiedo che l'interruttore sia nello stesso stato per 50 interrupt consecutivi da 1 ms affinché il nuovo stato sia considerato valido. Questo di solito richiede una frazione molto piccola dei cicli complessivi del processore.

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.