Zählsignalumschaltung zwischen Floating und LOW in Arduino

Ich habe einen rotierenden Kontakt (Kontaktunterbrecher eines ICE), der umschaltet, ob er mit nichts verbunden ist (schwebend) oder mit dem Gehäuse des ICE verbunden ist. Das Motorgehäuse ist mit Masse verbunden (gleiche Masse wie der Arduino). Somit wechselt das Signal zwischen kurzen Zeiten auf LOW (mit Masse verbunden) und meistens schwebend. Beide Intervalle sind viel höher als die übliche Hardwareauflösung für Interrupts auf dem Arduino - denken Sie an mehrere Mikrosekunden LOW gegenüber einigen Millisekunden Floating.

Da der "ON" -Zustand des Schalters mit Masse verbunden ist, dachte ich, dass ich die Interrupt-Funktion des Arduino verwenden könnte, um informiert zu werden, wenn der Zustand auf LOW wechselt, um zu zählen, wie oft sich der Motor dreht. Ich habe dies jedoch nur in Kombination mit einem HIGH-Signal und nicht mit einem schwebenden Signal gesehen. Ich habe mich gefragt, ob dies auch funktionieren würde und der Interrupt ausgelöst würde, wenn das Signal von Floating auf LOW wechselt.

Welche Möglichkeiten habe ich, ein Signal zu zählen, das zwischen Floating und dem gleichen Massesignal wie das Arduino umschaltet?

Antworten (2)

Sie können das Signal mit einem Pull-up-Widerstand schwach hochziehen, wenn der Schalter nicht geschlossen ist. GPIO-Ports auf den meisten Mikrocontrollern haben eingebaute Pull-up-Widerstände, die Sie per Software steuern können.

Ich werde das morgen ausprobieren. es auf INPUT_PULLUP einzustellen scheint einfach genug. Ich hoffe, die Spannungsdifferenz zwischen Masse und Floating reicht aus, um es auszulösen :)
@YanickSalzmann Ihr letzter Satz aus diesem Kommentar scheint, als ob Sie über einige Details immer noch etwas verwirrt sind. Das Hinzufügen des Pullup-Widerstands (über Software oder auf andere Weise) führt dazu, dass der Eingang nicht mehr schwebt und eine "Spannungsdifferenz zwischen Masse und Schweben" nicht wirklich sinnvoll ist.
Sie haben Recht, ich bin etwas verwirrt, was ein "Pull-up" -Widerstand ist, aber das kann ich selbst herausfinden :)
@YanickSalzmann Beachten Sie, dass die verfügbaren Standard-Pull-Ups manchmal nicht ausreichen, um die Flanke steil genug zu machen. Daher möchten Sie möglicherweise das Ergebnis berechnen (basierend auf dem Widerstandswert) oder messen (mit einem Oszilloskop).
@YanickSalzmann Ein Pullup-Widerstand ist ein Widerstand zwischen Signal und VCC. Der einfachste Weg, dies zu tun, besteht darin, einfach einen physikalischen Widerstand zwischen die 5 V des Arduino und das Signal zu setzen, wodurch das Signal gezwungen wird, 5 V zu werden, wenn der Ausgang schwebt. Dies bedeutet, dass Sie jetzt in der Lage sind, das Umschalten zwischen 5 V und 0 V zu erkennen, und sich nicht mehr um 0 V und Floating kümmern müssen

Keine MCU kann einen Floating-Pin direkt erkennen, es erfordert externe Komponenten, clevere Software-Tricks oder zumindest die richtige Einrichtung des GPIO-Pins

Deshalb verwenden Sie Widerstände, um das Signal hochzuziehen, damit es nicht schwebt und als hoch gelesen werden kann.

Der Pull-up-Widerstand kann ein externer physikalischer Widerstand sein, oder Sie können möglicherweise auch eingebaute MCU-Pull-ups verwenden, wenn sie für Ihre Anwendung geeignet sind.

Ich würde nicht nie sagen ... Ich kann mir ein paar Möglichkeiten vorstellen, wie Sie einen Floating-Zustand mit einer MCU und einem ADC und einer Schaltung mit Pull-Ups und Pull-Downs bei 2,5 V erkennen können (und dann auf GPIO umschalten). Sie können auch einen „nicht schwebenden“ Zustand erkennen