Anschließen eines Drucktasters an einen Controller-Pin

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

Geben Sie hier die Bildbeschreibung ein

Diese Schaltung erlaubt nur, den Zustand der Taste aus dem Inneren des Mikrocontrollers zu überprüfen. Nichts Besonderes. Meine Fragen:

  1. Gibt es etwas Besseres als dieses schlichte Design?
  2. Ist der Wert eines 100-Kiloohm-Widerstands für unsere heutigen CMOS-Geräte wie dsPIC30FXXXX angemessen und nicht für eine Hochleistungsanwendung?
1) Nicht wirklich, es sei denn, Sie suchen nach Hardware-Entprellung. 2) Ja.

Antworten (5)

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

Typischerweise gibt es ein Register, mit dem die internen Pull-Ups ein- und ausgeschaltet werden können. Aufgrund von Variationen im Herstellungsprozess gibt es diese internen Pullups in einem sehr breiten Bereich und sind keine gute Wahl, wenn Sie eine sehr genaue Kontrolle über die Stromaufnahme in Anwendungen mit extrem niedrigem Stromverbrauch benötigen. Wenn es wichtig ist, die Anzahl der Komponenten gering zu halten, ist dies eine einfache Möglichkeit. Die Verwendung interner Pullups für das Hardware-Entprellen wäre keine gute Idee, da es nicht möglich ist, ihren genauen Wert vorherzusagen.

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

  1. Den maximalen Senkenstrom finden Sie im Datenblatt
  2. Berechnen Sie einen Pull-up-Wert mit dem Ohmschen Gesetz
  3. Wählen Sie einen Widerstand in Standardgröße, ein paar Nummern größer, je nach tatsächlich benötigter Geschwindigkeit
  4. Testen Sie und sehen 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 betrieben wird: R = v ich = 5 v 10 m EIN = 500 Ω . Wenn Sie diesen R-Wert so klein wie möglich halten, werden die schärfsten Flanken und höchsten Schaltfrequenzen ermöglicht.

Wollen Sie damit sagen, dass Sie aufgrund der Draht- / Spurkapazität eine RC-Schaltung haben, die Signallaufzeitverzögerungen zum uC verursacht, und dass diese Laufzeitverzögerungen bei einem größeren R tatsächlich zu einem Fehllesen eines Drehgebers führen können?
Ja, parasitäre Reaktanzen sind nur eine Tatsache des Lebens, die mit zunehmender Frequenz immer mehr behandelt werden muss.
Interessant! Ich bin jedoch verwirrt: Unter der Annahme, dass die parasitäre 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 einer 5-V-Schaltung sieht der uC 4,5 V am Eingang in einem aufsteigenden Impuls in weniger als 25 ms. Damit der uC dies verpasst (unter der Annahme, dass er nicht abfragt), würde der Encoder Impulse mit etwa 40 Hz erzeugen. Ist das etwas, worüber wir uns Sorgen machen sollten?
Die parasitäre Kapazität liegt typischerweise im Nano- oder Pico-Farad-Bereich. Dies wird bei Drehgebern bei höheren Geschwindigkeiten zu einem Problem. Stellen Sie sich einen optischen Encoder vor, der 24 Impulse pro Umdrehung ausgibt und sich mit 1500 U / min dreht. Die ausgegebenen Rechteckwellen werden 600 Hz mit einer Periode von etwa 1,2 ms betragen. Dies ist immer noch langsam genug, dass der Klimmzug mit minimaler Größe unnötig wäre, aber 100 k Ω würde zu Anstiegs- und Abfallzeiten führen, die wahrscheinlich nicht akzeptabel sind. Das ist eine eigene Frage wert.
Wahr und wahr. Ich dachte an manuelle Drehgeber.

Sie können einfacher werden.

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

100k ist ausreichend, aber interne Pullups könnten in einigen MCUs etwas niedriger sein, zum Beispiel in AVR atmega8 sind es 30-80kOhm für Reset-Pullup und 20-50kOhm für alle anderen I/O-Pins.

Du kannst 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 Stift auf der anderen Seite antreibt.
Die Person, die die Frage stellte, gab einen Druckknopf an. Ich sehe kein Problem mit dieser Antwort.
  1. Gibt es etwas Besseres als dieses schlichte Design?


    Besser kann nicht ohne spezifische Kriterien zum Messen beantwortet werden, die Sie nicht angegeben haben. In den meisten Fällen ist die von Ihnen gezeigte Topologie in Ordnung. Zwei Varianten könnten je nach Situation "besser" sein:

    Viele Mikrocontroller haben interne Pullups an einigen ihrer Pins. Diese sind genau für diese Situation gedacht. Der Widerstand ist dann intern im Mikro und Sie stellen ihn irgendwo ein, um ihn zu aktivieren. Das einzige erforderliche externe Teil ist nur die Drucktaste selbst.

    Eine weitere nützliche Variante, die Sie im Auge behalten sollten, sind Low-Power-Designs, bei denen die Taste ein Schalter sein könnte, 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 wenige µs ein, um eine Tastenmessung vorzunehmen. Wenn Sie die Taste alle 1 ms aktivieren und der Pullup für 10 µs eingeschaltet ist, wird der durchschnittliche Pullup-Strom um das 100-fache reduziert. Mit einem externen Widerstand verwenden Sie einen anderen Pin, um die Oberseite des Pullups anzusteuern. Mit einem internen Pullup aktivieren/deaktivieren Sie es nach Bedarf in der Firmware.

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


    Darauf habe ich hier schon ausführlich geantwortet .

Besser als dieses einfache Design? Ja. Werfen Sie eine Kappe darauf und Sie haben einen einfachen Hardware-entprellten Schalter.

Geben Sie hier die Bildbeschreibung ein

Der Kondensator wäre eine gewöhnliche 0,1-uf-Keramikkappe. Der Widerstand wäre ein 10k. Diese Seite enthält alle Einzelheiten darüber, warum. Kurz gesagt, eine Entprellschaltung verhindert, dass der Mikrocontroller fälschlicherweise mehrere Betätigungen registriert, wenn Sie die Taste drücken. Das Widerstand/Kondensator-Setup glättet das mechanische Springen der Taste, sodass es sich um einen stetigen Übergang handelt.

Elkos mögen es nicht, kurzgeschlossen zu werden. Ich verwende regelmäßig 100nF, was für meine Anwendungen gut funktioniert.
@jippie das Symbol war das, was das Bild hatte, aber es wird eine 100-nf- oder 0,1-uf-Keramik benötigt.
Dies ist keine gute Entprellschaltung. Erstens entprellt dies nur ein Break, kein Make. Beim Drücken der Taste wird die Kappe sofort kurzgeschlossen. Zweitens ist die Zeitkonstante von 1 ms zu kurz, um von großem Nutzen zu sein. Drittens sollte dies nur in einen Schmidt-Trigger-Eingang eingespeist werden. Normale Eingänge mögen keine langsam ansteigenden Signale. Lassen Sie einfach die Kappe weg und führen Sie die Entprellung in der Firmware durch, was Sie sowieso auch mit der Kappe tun müssten.
Ja, beim Einschalten wird die Kappe sofort kurzgeschlossen, aber jede Wiederaufladung aufgrund von Prellen wird tiefpassgefiltert, wodurch alle Auswirkungen des Prellens entfernt werden. Genauer gesagt ist das Entprellen bei Make ein ganz anderer Mechanismus als das Entprellen bei Break. Eine ms ist jedoch zu schnell. Ich mag es nicht, diese Schaltung aus einer Reihe von Gründen zu verwenden. Wenn Sie jedoch mit dem betreffenden Pin einen Interrupt auslösen, ist das Entprellen in der Firmware oft nicht die beste Lösung. Der Wechsel zu einem DPST und das Entprellen mit einem SR-Flipflop ist eine ziemlich gute Methode für diesen Fall.

BEARBEITEN - Der Kommentar, den ich unten gemacht habe, sollte weiterverfolgen, was Olin später über die Schaltung mit einem Kondensator gesagt hatte, um angeblich eine Entprellung hinzuzufügen. Es tut mir leid, dass es an der falschen Stelle zu erscheinen scheint - 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 das Kurzschließen des Kondensators einen großen 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 funktionieren, und 100 k können für einige Schalter (insbesondere Membranschalter) zu hoch sein.