Frage:
Ist dies eine akzeptable Schaltung zum Entprellen eines Raspberry Pi-Eingangspins?
Alex
2020-07-31 21:18:58 UTC
view on stackexchange narkive permalink

Ich versuche, eine Schaltung zum Entprellen eines Eingangsschalters auf einem Raspberry Pi zu entwerfen. Der Schalter ist für eine Türklingel vorgesehen, sodass nicht mehrere gültige Druckmaschinen registriert werden müssen, die zeitlich nahe beieinander liegen. Zwischen zwei beliebigen Betätigungen liegt mindestens eine Sekunde.

Ich habe einige Nachforschungen angestellt, und das, was mich verwirrt, ist, dass ich nicht sicher bin, ob sowohl R2 als auch R3 erforderlich sind oder nur eines (und in diesem Fall welches). Mein Verständnis ist, dass ein Wert von 300 nF für den Kondensator und 100 k für den Widerstand, um eine Zeitkonstante von 30 ms zu ergeben, in Ordnung sein sollte.

enter image description here

(wobei R1 der interne Pull-up-Widerstand ist)

Nach meinem Verständnis würde durch Entfernen von R3 der Schalter den Kondensator kurzschließen, wodurch der Entprelleffekt unterbrochen wird. Das Entfernen von R2 würde bedeuten, dass beim Loslassen des Schalters ein großer Einschaltstrom vom Pin in den Kondensator fließt (was könnte den Pin beschädigen?). Ich verstehe nicht, ob sich die Zeitkonstantenberechnung auf R2, R3 oder beides beziehen soll.

(Ich weiß, ich könnte das einfach von irgendwoher kopieren, aber ich würde es gerne lernen.)

Entprellen Sie es in der Software.Das wird heutzutage allgemein gemacht.
AiliqznskxCMT Haha, danke
@mkeith Es ist etwas schwierig, es in Software zu machen.Die von mir verwendete Bibliothek verwendet asynchrone Rückrufe und ich habe keinen Zugriff auf den Triggercode
Wie oft wird unter der Haube der Stift abgetastet?Können Sie es inspizieren?Siehe meine Antwort.
Es ist eine Rost-GPIO-Bibliothek, also werde ich 'sehr oft' raten, aber ich werde es überprüfen :)
Nein, sehr oft sind schlechte Nachrichten für die Prozessorleistung.Es könnte jedoch als Interrupt konfiguriert werden.Ein springender Interrupt-Eingang könnte eine schlechte Nachricht sein.
@mkeith es ist ein Interrupt - nur überprüft
Ja, Bouncing-Interrupt, daher wird der Rückruf jedes Mal aufgerufen, wenn er abprallt. Zu diesem Zeitpunkt ist es zu spät, um Software-Debouncing durchzuführen.
Sie können es nicht in "Abfrage" ändern oder es einfach selbst abfragen?
Ich würde es lieber nicht tun, das Programm muss eine Menge anderer Sachen machen
@Alex: Eh.Nee.Nur weil es sich um einen Interrupt handelt, heißt das nicht, dass Sie in Software nicht entprellen können.Stellen Sie Ihren Rückruf ein.Wenn es ausgelöst wird, notiert Ihr Interrupt-Rückruf den Pegel und stellt einen Timer ein.Setzen Sie den Timer jedes Mal zurück, wenn der Interrupt auftritt.Wenn der Timer abgelaufen ist, verwenden Sie den letzten Wert aus dem Interrupt als Eingangspegel.Sie benötigen eine Interrupt-Rückrufmethode, eine Timer-Rückrufmethode und einen Timer.Der Timer-Rückruf ruft jede Methode auf, die Sie zum Drücken der Taste benötigen.
@JRE Oder, einfacher gesagt, die "Ring" -Routine beim ersten Mal auslösen, den Zeitstempel markieren und frühzeitig "if (now <(lastRing + delay))" zurückkehren.
Drei antworten:
nanofarad
2020-07-31 21:30:54 UTC
view on stackexchange narkive permalink

Sie haben Recht mit R3. R2 ist jedoch nicht erforderlich: Wenn die Taste losgelassen wird, wird der Kondensator aufgrund des Widerstands von R1 langsam aufgeladen. Wenn die Taste gedrückt wird, entlädt sie sich aufgrund des Widerstands von R3 langsam. Tatsächlich kann R2 sogar ein Problem verursachen: Wenn die Taste gedrückt wird, erreicht die Kondensatorspannung nicht Masse (da R2 und R1 einen Spannungsteiler bilden).

Die Zeitkonstante sollte alle Widerstände berücksichtigen, die von den Kondensatoranschlüssen "gesehen" werden. Wenn die Taste gedrückt wird, ist dies \ $ (R_1 + R_2) || R_3 \ $ span> (gefunden durch Kurzschließen der Stromversorgung mit Masse und Auflösen des äquivalenten Widerstands zwischen den beiden Kondensatoranschlüssen).

Wenn die Taste losgelassen wird, basiert die Zeitkonstante zum Laden auf dem Widerstand \ $ (R_1 + R_2) \ $ span>. Wie Sie sehen können, wird der Einschaltstrom auch bei ausgeschaltetem R2 durch R1 begrenzt.

Hier gibt es ein weiteres Problem: die stationäre Spannung beim Drücken der Taste. Diese Spannung ist nicht geerdet, sondern \ $ \ frac {R_3} {R_1 + R_3} \ $ span> (R2 wird ignoriert). Diese Spannung ist mit Ihrer Wahl von R3 viel zu hoch. Sie können R2 und R3 insgesamt entfernen: Der Kondensator wird über die Taste schnell aufgeladen, aber dieser Einschaltstrom ist bei der von Ihnen angegebenen Größe im Allgemeinen akzeptabel, während der Strom des Pull-up-Widerstands weiterhin akzeptabel ist, um GPIO-Schäden zu vermeiden. P. >

Verstanden. Danke.300nF Kondensator + 100k R3 klingt also gut?(R1 befindet sich innerhalb des Pi und ist 10k)
@Alex Es scheint vernünftig.Wolframalpha zeigt dies als 30 ms Zeitkonstante.Sie sind sich nicht sicher über die Absprungrate Ihrer Taste oder die Geschwindigkeit, mit der Sie Drücken / Loslassen erkennen müssen.
Das würde nicht funktionieren.Wenn der Schalter gedrückt wird, bilden R1 und R3 einen Spannungsteiler, und da R3 groß ist, geht der Eingang nicht auf Masse.
@Pangus Danke, dass Sie darauf hingewiesen haben, ich habe nicht genau hingeschaut.Bearbeitung
@Alex siehe obige Kommentare
Möglicherweise eine blöde Frage, aber warum sollte die Spannung viel zu hoch sein?Es ist 3,3 V * (R3 / (R1 + R3)), was ungefähr 3,3 V entspricht?
@Alex Wenn die Taste gedrückt wird, soll die Spannung gegen Null abfallen.Wenn es von 3.3 auf 3.2 geht, erkennt der GPIO-Pin dies nicht als LOW.
@nanofarad und in der Tat war es eine dumme Frage - danke!
AnalogKid
2020-07-31 23:03:45 UTC
view on stackexchange narkive permalink

Sie benötigen R2 nicht.Wenn Sie R3 einschließen möchten, befindet es sich traditionell auf der anderen Seite des Schalters, sodass sowohl der Schalter als auch der Kondensator direkt mit GND verbunden sind.Ja, es ist eine Serienschaltung und es spielt keine Rolle, aber so denken die meisten Designer.

R1 - 100K

R3 - 1K (optional)

Der einzige Grund für R3 besteht darin, den Spitzenstrom durch die Schaltkontakte zu begrenzen, wenn sie sich um einen voll geladenen Kondensator schließen.Wenn dies ein 2-Minuten-Timer mit einem 1000-uF-Kondensator wäre, gäbe es ein Problem.Ein Türklingelschalter kann jedoch eine induktive Last von 1 Ampere verarbeiten, sodass ich nicht denke, dass R3 für einen so kleinen Kondensator wie Ihren erforderlich ist.

mkeith
2020-07-31 22:41:38 UTC
view on stackexchange narkive permalink

Sie benötigen lediglich einen Kondensator und einen Pullup-Widerstand.Alle Entprellungen können in Software erfolgen.Ich weiß nicht, wie Sie den Eingang erfassen, aber eine einfache Möglichkeit besteht darin, ihn alle 10 bis 50 ms zu lesen.Wenn es zweimal hintereinander hoch liest, ist dies ein Knopfdruck.Wenn zweimal hintereinander niedrig angezeigt wird, wurde die Taste losgelassen.Wenn es immer noch springt, ändern Sie es dreimal hintereinander.Stellen Sie den Pullup und den Kondensator etwas in die Nähe des Eingangs.Der Kondensator dient nicht zum Entprellen, sondern zur Störfestigkeit, da wahrscheinlich irgendwo ein langer Draht zu einem Knopf führt.Eine ESD-Diode in der Nähe des Eingangs wäre ebenfalls eine gute Idee, aber der Kondensator hilft auch bei der ESD.Etwas wie 220pF bis 1nF wäre genug.Wenn Sie R2 oder R3 verwenden, sollte ihr kombinierter Widerstand viel kleiner sein als R1, wie andere angemerkt haben.

"Sie brauchen nur einen Kondensator und einen Pullup-Widerstand."* Wenn * der Eingangspin eine Hysterese hat.Wenn der Eingangspin ein einfaches altes Gate ist, kann es beim Durchgang der Spannung durch 1/2 VCC klappern und einen eigenen "elektronischen Sprung" liefern.Ein Widerstand und ein Kondensator, gefolgt von einem Schmitt-Trigger-Puffer, würden sicherlich die Arbeit erledigen.
Ich habe mich nie darum gekümmert, eine Eingabe in ein Produkt zu entprellen, und hatte nie ein Problem.Das FW-Team fragt immer die Eingaben und Entprellungen in FW ab.Normalerweise füge ich zwar mindestens einen kleinen Kondensator hinzu, aber nicht zum Entprellen an sich.Mehr zur Verringerung der Impedanz bei HF, insbesondere bei großen Klimmzügen wie 470k oder 1M.Oft sind die Eingaben jedoch Schmitt-Trigger.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...