Druckknopf an einen Controller-Pin anschließen


8

Dieses Problem ist Jahrzehnte alt, aber ich sehe auf dieser Website keine direkte Antwort darauf. Ich möchte folgendes:

Geben Sie hier die Bildbeschreibung ein

Mit dieser Schaltung kann nur der Status der Taste im Inneren des Mikrocontrollers überprüft werden. Nichts Besonderes. Meine Fragen:

  1. Gibt es etwas Besseres als dieses einfache Design?
  2. Ist der Wert eines 100-Kilo-Ohm-Widerstands für unsere heutigen CMOS-Geräte wie dsPIC30FXXXX und nicht für eine Hochleistungsanwendung ausreichend?

2
1) Nicht wirklich, es sei denn, Sie suchen nach Hardware-Debouncing. 2) Ja.
NickHalden

Antworten:


6

Erstens haben viele Mikrocontroller und digitale Signalcontroller interne Pull-up-Widerstände. Hier ist ein Beispiel, ein Atmel ATMega164.ATMega164p GPIO-Port

In der Regel gibt es ein Register, in dem die internen Klimmzüge ein- und ausgeschaltet werden können. Aufgrund von Abweichungen im Herstellungsprozess sind diese internen Klimmzüge in einem sehr großen Bereich erhältlich und keine gute Wahl, wenn Sie die Stromaufnahme in Anwendungen mit extrem geringem Stromverbrauch sehr genau kontrollieren müssen. Wenn es wichtig ist, die Anzahl der Komponenten niedrig zu halten, ist dies eine einfache Möglichkeit. Die Verwendung interner Klimmzüge für das Entprellen der Hardware wäre keine gute Idee, da es nicht möglich ist, ihren genauen Wert vorherzusagen.

Ob der 100 Wert ausreichend ist, hängt davon ab. Wenn es sich nur um einen Schalter handelt, der von einem Benutzer regelmäßig umgelegt wird, sind 100 eine gute Wahl, um den Stromverbrauch zu minimieren. Für Dinge, die schneller schalten werden, wie z. B. Drehgeber, würde ich den Prozess durchlaufenk ΩkΩkΩ

  1. Den maximalen Senkenstrom finden Sie im Datenblatt
  2. Berechnen Sie einen Pull-up-Wert nach dem Ohmschen Gesetz
  3. Wählen Sie einen Widerstand in Standardgröße, der einige Größen größer ist, abhängig von der tatsächlich benötigten Geschwindigkeit
  4. Testen Sie, ob die gewählte Widerstandsgröße die erforderlichen Anstiegs- und Abfallzeiten ergibt
  5. Dementsprechend anpassen

Wenn also der maximale Senkenstrom pro GPIO-Pin 10 mA beträgt und bei 5 V arbeitet: 10 mA . Wenn Sie diesen R-Wert so klein wie möglich halten, werden die schärfsten Kanten und die höchsten Schaltfrequenzen berücksichtigt.R=VI=5V10mA=500Ω


Wollen Sie damit sagen, dass Sie aufgrund der Draht- / Trace-Kapazität eine RC-Schaltung haben, die Signalausbreitungsverzögerungen zum uC verursacht, und dass diese Ausbreitungsverzögerungen bei einem größeren R tatsächlich zu einer Fehlinterpretation eines Drehgebers führen können?
Angelatlarge

Ja, parasitäre Reaktanzen sind nur eine Tatsache des Lebens, die mit zunehmender Häufigkeit immer mehr behandelt werden muss.
Matt Young

Interessant! Ich bin jedoch verwirrt: Unter der Annahme, dass die parazitische Kapazität weniger als 1 uF beträgt, erhalten wir bei einem Widerstand von 100 kOhm und unter der Annahme von 0,1 uF parasitärem C eine Zeitkonstante von etwa 23 ms (Eingang = 5 V, Ausgang = 4,5 V). Mit anderen Worten, in einem 5-V-Stromkreis sieht der uC in einem ansteigenden Impuls in weniger als 25 ms 4,5 V am Eingang. Damit der uC dies übersieht (unter der Annahme, dass er nicht abfragt), würde der Codierer Impulse mit etwa 40 Hz erzeugen. Ist das etwas, worüber wir uns Sorgen machen sollten?
Angelatlarge

Die parasitäre Kapazität liegt typischerweise im Nano- oder Pico-Farad-Bereich. Dies wird zu einem Problem bei Drehgebern mit höheren Geschwindigkeiten. Stellen Sie sich einen optischen Encoder vor, der 24 Impulse pro Umdrehung ausgibt und sich mit 1500 U / min dreht. Die Ausgangsrechteckwellen werden 600 Hz mit einer Periode von ungefähr 1,2 ms betragen. Dies ist immer noch langsam genug, so dass ein Pull-up mit minimaler Größe nicht erforderlich wäre, aber 100 würden zu Anstiegs- und Abfallzeiten führen, die wahrscheinlich nicht akzeptabel sind. Dies ist allein schon eine Frage wert. kΩ
Matt Young

Richtig und wahr. Ich dachte an manuelle Drehgeber.
Angelatlarge

4

Einfacher geht es nicht.

Verwenden Sie einfach einen internen Pull-Up / Pull-Down-Widerstand in Ihrem Mikrocontroller.

100k sind ausreichend, aber interne Pullups könnten in einigen MCUs etwas niedriger sein, zum Beispiel in AVR atmega8 sind es 30-80kOhm für das Zurücksetzen des Pullups und 20-50kOhm für alle anderen E / A-Pins.


Man kann nicht sagen, dass 100.000 ausreichend sind. Es gibt keine universelle Quittung, Sie müssen den Wert entsprechend der MCU und dem Gerät berechnen, das den Pin auf der anderen Seite steuert.
Blup1980

1
Die Person, die die Frage stellte, gab einen Druckknopf an. Ich sehe kein Problem mit dieser Antwort.
mjh2007

1
  1. Gibt es etwas Besseres als dieses einfache Design?


    Besser kann nicht ohne bestimmte Kriterien beantwortet werden, an denen Sie messen können, die Sie nicht angegeben haben. In den meisten Fällen ist die angezeigte Topologie in Ordnung. Zwei Varianten könnten je nach Situation "besser" sein:

    Viele Mikrocontroller haben interne Klimmzüge an einigen ihrer Pins. Diese sind für genau diese Art von Situation gedacht. Der Widerstand befindet sich dann im Mikro und Sie stellen ein bisschen irgendwo ein, um ihn zu aktivieren. Der einzige externe Teil, der benötigt wird, ist nur der Druckknopf selbst.

    Eine weitere nützliche Variante, die Sie berücksichtigen sollten, ist die Ausführung mit geringem Stromverbrauch, bei der die Taste möglicherweise ein Schalter ist, der für längere Zeit geschlossen werden kann. In diesem Fall möchten Sie den langfristigen Durchschnittsstrom durch den Pullup-Widerstand minimieren. Sie machen es so groß wie möglich, aber es gibt Grenzen und Nachteile, wenn Sie es zu groß machen. Stattdessen schalten Sie den Pullup jeweils nur für einige µs ein, um eine Tastenmessung durchzuführen. Wenn Sie die Taste alle 1 ms überprüfen und der Pullup 10 µs lang eingeschaltet ist, wird der durchschnittliche Pullup-Strom um das 100-fache reduziert. Bei einem externen Widerstand verwenden Sie einen anderen Stift, um die Oberseite des Pullups anzusteuern. Mit einem internen Pullup aktivieren / deaktivieren Sie es bei Bedarf in der Firmware.

  2. Ist der Wert eines 100-Kilo-Ohm-Widerstands für unsere heutigen CMOS-Geräte wie dsPIC30FXXXX und nicht für eine Hochleistungsanwendung ausreichend?


    Ich habe dies hier bereits ausführlich beantwortet .


0

Besser als dieses einfache Design? Ja. Wenn Sie eine Kappe darauf setzen, haben Sie einen einfachen Hardware-entprellen Schalter.

Geben Sie hier die Bildbeschreibung ein

Der Kondensator wäre eine übliche 0,1uf Keramikkappe. Der Widerstand wäre ein 10k. Diese Seite enthält alle Details zum Warum. Kurz gesagt, eine Entprellungsschaltung verhindert, dass der Mikrocontroller beim Drücken der Taste mehrere Drücke falsch registriert. Das Widerstands- / Kondensator-Setup glättet das mechanische Aufprallen der Taste, sodass ein stetiger Übergang erfolgt.


Elektrolytkappen mögen es nicht, kurzgeschlossen zu werden. Ich verwende regelmäßig 100nF, was für meine Anwendungen gut funktioniert.
Jippie

1
@ jippie das symbol war das was das bild hatte, aber eine 100nf oder 0.1uf keramik wird benötigt.
Passant

3
Dies ist keine gute Entprellschaltung. Erstens wird dadurch nur eine Pause, keine Marke entprellt. Wenn die Taste gedrückt wird, wird die Kappe sofort kurzgeschlossen. Zweitens ist die Zeitkonstante von 1 ms zu kurz, um viel genutzt zu werden. Drittens sollte dies nur in einen Schmidt-Triggereingang eingespeist werden. Normale Eingänge mögen keine langsam ansteigenden Signale. Lassen Sie einfach die Kappe weg und führen Sie das Entprellen in der Firmware durch, was Sie ohnehin auch mit der Kappe tun müssten.
Olin Lathrop

Ja, bei der Herstellung wird die Kappe sofort kurzgeschlossen, aber das Aufladen aufgrund von Sprungkraft wird tiefpassgefiltert, wodurch alle Auswirkungen der Sprungkraft beseitigt werden. Vielleicht genauer ist das Entprellen bei Make ein ganz anderer Mechanismus als das Entprellen bei Pause. Eine ms ist allerdings zu schnell. Ich mag es nicht, diese Schaltung aus einer Reihe von Gründen zu benutzen. Wenn Sie jedoch einen Interrupt mit dem betreffenden Pin auslösen, ist das Entprellen in der Firmware häufig nicht die beste Lösung. Der Wechsel zu einem DPST und das Entprellen mit einem SR-Flipflop ist in diesem Fall eine ziemlich gute Methode.
Scott Seidman

0

BEARBEITEN - Der Kommentar, den ich unten gemacht habe, sollte das, was Olin später über die Schaltung gesagt hatte, mit einem Kondensator fortsetzen, um angeblich eine Entprellung hinzuzufügen. Es tut mir leid, dass es an der falschen Stelle erscheint - vielleicht kann jemand das beheben, weil ich offensichtlich zu blind oder dumm bin, um zu sehen, wie ich es hätte tun sollen !!

Ich stimme Olin zu - es bietet keine gute Entprellung. Ich würde auch hinzufügen, dass ein Kurzschluss des Kondensators einen starken Stromstoß verursachen kann, der den Mikroprozessor zurücksetzen kann, wenn das PCB-Layout nicht wirklich gut ist. Einige Schalter benötigen einen Benetzungsstrom, um korrekt und zuverlässig zu arbeiten, und 100 k können für einige Schalter (insbesondere Membranschalter) zu hoch sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.