Ich spiele mit einigen Rad-Encoder-Sensoren und einem Arduino herum. Der Sensor muss etwas entprellt werden, daher habe ich mich gefragt, wie der Mikrocontroller-Kern die Eingabe sieht. Das heißt, wie sieht das Eingangssignal aus, nachdem es den Schmitt-Trigger und den Synchronizer im GPIO-Eingangspfad durchlaufen hat?
Gibt es eine Möglichkeit, zwei GPIO-Pins direkt zu schleifen, einen als Eingang und den anderen als Ausgang, damit ich sehen kann, wie das Signal am anderen Ende des Synchronizers aussieht?
Wie ich es sehe, verliere ich Informationen, wenn ich einen Lese- / Schreibvorgang in Software versuche, wenn das Programm länger als eine Anweisung ist. WAHR?
Die Idee des Entprellens ist nicht gut, wenn Sie einen Quadratur-Encoder verwenden müssen. Sogar die max. Die theoretische Frequenz (gezählt von der max. Drehzahl) ist niedrig, Sie können ein hochfrequentes Flackern auf einem Kanal sehen, der plus eins, minus eins usw. ist. Wenn Sie eine Flanke verpassen (z. B. durch einen externen Interrupt behandelt), sehen Sie eine Verschiebung. Wenn Sie Aufwärts-/Abwärtszählimpulse benötigen, können Sie einen externen Taktgeber für zwei AVR-Zähler wiederverwenden. Die MCU unterstützt einige einfache Entprellungen und die Bandbreite ist hoch genug. Es lädt auch die MCU. Ich fand, dass die Auswertung von Quadratur-AB-Signalen im Code nutzlos ist, dh nicht zuverlässig genug für hochpräzise Systeme und eher die Verwendung externer Quadraturzähler LSI.
Einige Probleme im Zusammenhang mit dem Verbinden von zwei Ports sind im AVR ATMega I/O-Pin-Überstromschutz- Thread zu finden.
Beim Entprellen haben Sie im Allgemeinen zwei Möglichkeiten: einen Hardware-Fix oder einen Software-Fix. Je nach Anwendung kann beides vorzuziehen sein.
Je weniger Eingänge entprellt werden müssen, desto besser ist eine Softwarekorrektur vorzuziehen, insbesondere bei Mikrocontrollern mit geringer Leistung. Ein Software-Fix wäre, Interrupts zu verwenden, die immer dann ausgeführt werden, wenn sich der Eingangszustand ändert, und dann eine Art Variable zu haben, die verfolgt, wann die letzte Zustandsänderung oder das letzte "Bouncen" aufgetreten ist. Wenn es sich um eine einstellige Millisekunde handelt, handelt es sich wahrscheinlich um einen Sprung, und Sie möchten diesen Wert ablehnen. Vieles davon wird Versuch und Irrtum sein, um zu sehen, was eine akzeptable Zeit zwischen den Drücken ist, aber 100 ms sind ein guter Ausgangspunkt, da es höchst unwahrscheinlich ist, dass ein Mensch eine Taste schneller als 10 Mal pro Sekunde drücken kann, und es ist noch weniger wahrscheinlich, dass dies der Fall war Absicht, und es ist fast unmöglich, dass ein Tastensprung in über 100 ms auftreten kann, es sei denn, es ist nicht funktionsfähig.
Was eine Hardware-Korrektur betrifft, so kann dies die Anzahl der Schaltungselemente erhöhen, die Ihr Board verwenden muss, also gibt es diesen Nachteil. Wenn Sie jedoch durch die Leistung des verwendeten Mikrocontrollers eingeschränkt sind und viele entprellte Schalter benötigen, ist dies möglicherweise die einzig praktikable Option. Aber wenn Sie es schaffen, die richtige RC-Schaltung abzustimmen und an Ihren Eingang zu löten, können Sie eine "Glättungs" -Schaltung haben, die schnelle Änderungen an Ihrem Eingangssignal ablehnt, bevor es an den Eingang des Mikrocontrollers gesendet wird.
Ignacio Vazquez-Abrams
Martin
Ignacio Vazquez-Abrams
Wladimir Cravero
Martin
Chris Stratton
JimmyB
ahogen