Welchen Kondensator brauche ich bei einem Hallsensor?
Hallo zusammen
Ich will einen Linearenzylinder (Motek) mit einem Arduino Mega 2560 ansteuern. Das steuern funktioniert. Der Linearzylinder hat zwei Hallsensoren als Encoder. Beide geben versetzt ein Rechtecksignal aus. Dieses möchte ich per ISR im Arduino auf Pin 2 & 3 erfassen. Ich habe denn Pull-Up Widerstand auf Pin 2 & 3 eingeschaltet. Nun zählt er statt einem Schritt ca. 10 schritte. Das liegt wahrscheinlich am Übergang von High zu Low. Denn dabei gibt es mehrere Fallings. Ich könnte diese falschen Signale mit einem Kondensator filtern. Welchen brauche ich? Die Hallsensoren werden mit 5V betrieben und das Eingangssignal ist ebenfalls 5V.
4 Antworten
Hast du dieses Oszillogramm selber aufgenommen oder irgendwo "gelesen"?
Eigentlich "bouncen" Hall-Sensoren nicht, das Magnetfeld ändert ja kontinuierlich und somit auch die Hall-Spannung.
Oder hast du ev. einen Reed-Schalter statt einen Hall-Sensor?
Die Kondensatorgrösse hängt von ein Ein- bzw. Ausgangswiderständen des Sensors und des uC ab.
Am besten mit dem ausprobieren mit verschiedenen Kapazitäten und Kapazität langsam erhöhen und mit dem KO messen, bis du keine Bounces mehr hast.
Ich verstehe die Nachfrage nicht, und sehe auch keine Antwort auf meine Nachfrage.
Welcher Übergang?
Und nochmals: Hast du dieses Signalverhalten im Bild selber gemessen?
Wenn auf dem Datenblatt Hallsensor steht, dann müsste auch stehen, auf welche Art er das Signal abgibt und wie es erzeugt wird (z.B. open collector, oder impuls oder irgendein digitales Protokoll?).
Dass der Arduino zuviele Schrittsignale bekommt, kann x Gründe haben. Z.B. auch zu lange oder nicht abgeschirmte Leitungen.
Man müsste die Eingangssschaltung des Arduino haben und die Ausgangssschaltung des Zylinders.
Widerstand * Kapazität = Tau
Nach 5 tau gilt ein Kondensator als 'geladen'.
Um die Kombination 2,2ms hinzubekommen, gibt es mehrere Möglichkeiten.
Da du das Hardware verhalten kennst wäre auch ein Software Filter dennkbar.
Auch hier lassen sich PT1 Filter programmieren.
In der Tat, je weniger je besser. Also stellt sich die Frage:
"Wie schnell" musst du auf die Pegelveränderung reagieren können ? (Worst case)
Du könntest eine Prozess schreiben der alle 500µS aufgerufen wird und den Pegel prüft und in welcher ein PT1 Filter (oder moving average) immer in Richtung "1" (oder "0") läuft um dann, wenn genügend lang (z.B: 6 Durchläufe = 3ms) stabile Verhältnisse vorliegen den Pegel als neunen Zustand anerkennen.
==
Ausserdem. Einen Folgewert in einem PT1 Filer (oder moving average) zu rechnen ist wenig Aufwand für einen Prozessor. ABER es kommt natürlich darauf an, wie oft dein ISR aufgerufen wird, um dies so zu machen.
Diese Werte muss ich noch ermitteln. Sonst werde ich noch einen Elektrotechniker fragen
Da es sich um einen Hallsensor handelt und damit wahrscheinlich um die "Regelung" von einem Elektromotor kann ich aus eigener Erfahrung sagen, dass alle Latenzen, so gering wie möglich zu halten sind.
Häufig 1% der Debouncezeit 220µsec. (Ich will keinesfalls hier eine Vorgabe machen. Ich kenne deinen Anwendungsfall nicht)
Solltest du es also mit einem eigenen Prozess versuchen so sollte dieser nach dieser maximalen Latenzzeit richten.
Außerdem:
Sofern du im ISR unterwegs bist, dein Programm sonst aber keine weiteren Aufgaben zu erledigen hat, ist es egal wie lange du im ISR bist.
Wieviel Laufzeit man welcher Aktivität gönnt hängt vom System Design ab.
ich muss die Zeiten mal messen. Neben der ISR überprüft der Arduino noch den aktuellen ist Wert und vergleicht diesen mit dem Sollwert. Das sollte auch immer mal wieder geschehen, nicht dass er zu weit fährt.
Wenn du ohnehin schon eine Software verwendest, wozu willst du das Entprellen noch in Hardware machen? Du kannst es mit einem Kondensator probieren, aber Murx sollte man nicht auch noch unterstützen.
Du solltest, wenn schon, versuchen, den Sensor so zu modifizieren, dass das gar nicht passieren kann.
Der Hallsensor ist im Linearzylinder eingebaut. Und in der ISR sollten nicht viele Befehle stehen, darum wollte ich eine Hardware Lösung suchen. Denn durch das längere rechnen, könnte ein Impuls verloren gehen.
Wenn du bereits einen Mikrorechner zum auswerten hast, kannst du das nicht im Programm machen, und dort z.B. einen Zeitfaktor für die Erkennung mit einfügen?
Man sollte doch in der ISR nicht mehr berechnen. Sonst hat man die Geschwindigkeit nicht mehr.
Auf dem Datenblatt steht Hallsensor. Ist es der Übergang, der Probleme macht?