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