Schalterentprelltopologie für Drehgeber [Duplikat]

Ich möchte den Ausgang eines Drehgebers, den ich als Schalter auf Masse verwende, mit einem Pull-up entprellen. Im Internet habe ich die Entprellschaltung in Abbildung 2 gesehen und hier darüber gelesen . Allerdings habe ich auch das erste Bild unten gesehen und hier darüber gelesen . Ist das eine besser als das andere für meine Anwendung? Laut Datenblatt hat der GPIO des von mir verwendeten imx6sl einen Schmitt-Trigger und eine Eingangshysterese, daher gehe ich davon aus, dass ein Kondensator angeschlossen ist.

Abbildung 1

Abbildung 1

Figur 2

Figur 2

Welchen Encoder verwenden Sie (speziell)?
@DmitryGrigoryev Bei dieser Frage geht es um den Unterschied in der Topologie zwischen den beiden Schaltungen. Ich glaube, es ist anders.
@StephanGM Ich denke nicht, dass die Analyse der schlechten Version der Schaltung viel Wert hat, und die gute ist in beiden Fragen genau gleich. Wenn man bedenkt, dass diese Frage selbst beantwortet ist, verstehe ich nicht, warum Sie möchten, dass sie geöffnet wird. Ich werde deine Antwort positiv bewerten, wenn du dich dadurch besser fühlst :)

Antworten (3)

Angenommen, die MCU und der Schmitt-Trigger haben einen unendlichen Eingangswiderstand und modellieren sie als offen, können wir den Schalter schließen und sehen, was passiert.

Bei geschlossenem Schalter in Abbildung 2 liegt der Widerstand R2 in Reihe mit dem Kondensator, was bedeutet, dass am Eingang 0 V DC anliegen.

Im ersten Diagramm ist der Widerstand R bei geschlossenem Schalter parallel zum Kondensator, was bedeutet, dass am Eingang eine Spannung anliegt, es sei denn, Rpull-up >> R, wodurch der Spannungsabfall über R vernachlässigbar klein wird. Unterschiedliche Widerstandswerte würden bedeuten, dass die Zeitkonstante für das Laden und Entladen unterschiedlich wäre und unsere Entprellung zwischen steigenden und fallenden Flanken inkonsistent wäre.

Daher ist das erste Bild keine brauchbare Alternative zu Abbildung 2 und entprellt den Schalter auch nicht richtig. Abbildung 2 ist vorzuziehen.

Abbildung 2 ist vorzuziehen, wenn davon ausgegangen wird, dass die E/A-Stromversorgung Ihrer MCU mit der Pullup-Spannung für R1 identisch ist und CMOS-Spannungspegel verwendet werden.

Wenn Sie Kondensatoren direkt an die MCU-Pins anschließen, können Sie damit möglicherweise durchkommen, aber es ist besser, einen gewissen Serienwiderstand wie einige hundert Ohm bis zu 1 K zu haben. Wenn Sie sich dafür entscheiden, keine Widerstände zu verwenden, sollten Sie sicherstellen, dass das dv/dt auf der Vdd-Schiene niemals kleiner sein kann als ich M A X C Wo ich M A X ist der maximale Klemmdiodenstrom (um Latchup zu verhindern).

Ich nehme an, Sie haben festgestellt, dass Hardware-Entprellung erforderlich ist. Normalerweise ist dies nicht erforderlich, und Firmware-Entprellung (abgefragte Eingänge) erledigt die Aufgabe. Wenn Sie Interrupts verwenden, kann das Hardware-Entprellen erforderlich sein, aber das ist selten wünschenswert.

Ich habe Software-Polling-Debounce mit sehr guten Ergebnissen verwendet. Dieser Ansatz erfordert, dass Sie die Eingangspins oft genug abfragen können, um die Schalteraktivität nicht zu verpassen:

  1. Eingaben abfragen
  2. offWenn einer der Schalter von zu übergegangen ist on, speichern Sie diesen Wert
  3. Ignorieren Sie weitere Übergänge für einen bestimmten Zeitraum, um ein Springen des Schalters zu vermeiden

Diese Technik kann in Verbindung mit Ihrem Abbildung 2-Hardware-Entpreller verwendet werden, insbesondere wenn Sie nicht sehr oft abfragen können.

Eine Kombination aus Soft- und Hardware-Entprellung ermöglicht es Ihnen, die "Ignorieren"-Zeit auf der Softwareseite und die RC-Zeitkonstante auf der Hardwareseite zu verringern. Dies kann besser sein als eine reine Hardware- oder reine Software-Entprellung.