Auslesen der Hall-Sensoren über Arduino

Hallo an alle,

für mein Projekt muss ich einen digitalen Zwilling für eine CNC-Maschine entwickeln. Die Bewegung der Maschine wird über vier Schrittmotoren realisiert.

eins Schrittmotor für z-Achse
eins Schrittmotor für x-Achse
zwei Schrittmotore für y-Achse

Ziel ist, die Drehwinkel jedes Motors zu erfassen und die Daten in einem digitalen Zwischenspeicher (Cloud) zu speichern. Die Winkelposition jedes Motors wird über Magnetic Encoder iC, welcher auf Hall-Effekt beruht, überwacht. Die Umdrehung des Diametralmagnet wird über Hall-Sensoren erfasst und sinusförmig in die Bearbeitungseinheit des Bausteins weitergegeben. Das Sinus-Signal wird mit der Frequenz 256 KHz abgetastet. Der Sensor ist so konfiguriert, dass ein Signal mit 256 Flanken (steigend und fallend) für eine Umdrehung von 360° am Ausgang zurückgibt (Winkelauflösung 1,4°).

Nach dem Datenblatt hat der Sensor eine Oszillator-Frequenz von 256 KHz. Wenn ich richtig gerechnet habe, ist die Periode für eine Flanke ca. 4 µs.

Linkt zum Sensor: iC-Haus Homepage - product: iC-MA

Es gibt 4 Sensoren, die sehr oft gleichzeitig ausgelesen werden müssen. Keine Flanke darf verloren werden. Der Kontrollerboard, welches ich verwende, ist Arduino Mega 2560.

Meine Idee ist die Steigende Flanken über GPIO mit dem Interrupt auszulesen. Wir wissen schon, dass die Interrupts in Arduino Prioritäten haben.

Ich fürchte mich, wenn die Flanke gleichzeitig kommen, dann wird z.B. ein Interrupt ausgelöst, danach verliere ich andere Flanken.

Ich weiß, dass mit dieser Idee etwas nicht stimmt ist. Kann einer von euch eine Lösung vorschlagen?

Ich werde auf eure Rückmeldungen freuen. Bei jeder Frage bitte nicht verzögern. Danke im Voraus

Mit freundlichen Grüßen

Der Mega hat 6 Hardware Interrupts. Rein vom Prinzip geht da nichts verloren. Höchstens hohe Frequenzen können problematisch sein, da der Prozessor mit der Bearbeitung hinterher kommen muss

Generell setzen Interrupts nur Flags im Prozessor. Wenn dann ein neuer Maschinenbefehl ausgeführt wird werden die Flags überprüft. Interrupts können sich zwar nicht gegenseitig unterbrechen, aber wenn der Interrupt zu Ende ist kommen Interrupts dran die in der Zwischenzeit eingetroffen sind. Ereignisse gehen erst verloren wenn während eines Interrupts mehrere Ereignisse auf dem gleichen Interruptvektor eintreffen

1 Like