Hallo an alle,
für meine Abschlussarbeit muss ich einen digitalen Zwilling für eine
Fräsmaschine entwickeln. Die Bewegung der Maschine wird über vier
Schrittmotoren realisiert.
ein Schrittmotor für z-Achse
ein 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 wird
über einen Magnetic Encoder iC, welcher auf Hall-Effekt beruht,
überwacht. Der Sensor erstellt ein Sinus Signal, welche mit der
untenstehenden Frequenz 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.
Es gibt 4 Sensoren, die sehr oft gleichzeitig ausgelesen werden müssen.
Keine Flanke darf verloren werden. Der Mikrocontroller, den 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 möchte lieber mit dem Arduino weitermachen, aber eine
Mikrokontroller STM32 bzw. ein Entwicklungsboard NUCLEO-F303RE ist auch
vorhanden.
Ich werde auf eure Rückmeldungen freuen. Bei jeder Frage bitte nicht
verzögern.
Mit freundlichen Grüßen
Die AVRs haben Counter, der STM sehr sicher auch.
Die Beschreibung von deinem Encoder verstehe ich grammatikalisch nicht.
Typenbezeichnung? Warum kein digitaler Encoder?
Aber eigentlich ist es deine Abschlussarbeit, und dazu gehört auch
Theorie, Recherche und Konzeption. Die Umsetzung ist idR das dünnste
Brett.
Klingt eher nach einer Aufgabe für Capture and Compare.
Allgemein solltest du ein Polling mit entsprechender hoher Taktung in
Erwägung ziehen.
Interrupts von multiplen Quellen, die sich im schlimmsten Fall
gegenseitig überbieten sind i.d.R. keine gute Idee.
Ausser dein Controller hat verschiedene Kerne mit verschiedenen
Interruptvektoren, aber wäre dann das klassische mit Kanonen auf Spatzen
schießen :)
Milad E. schrieb:> Ziel ist, die Drehwinkel jedes Motors zu erfassen und die Daten in einem> digitalen Zwischenspeicher (Cloud) zu speichern.
Und was will man an diesem Speicherort damit tun ?
Verrate doch einfach mal, welcher Sensor dafür angedacht ist.
... schrieb:> Die AVRs haben Counter, der STM sehr sicher auch.> Die Beschreibung von deinem Encoder verstehe ich grammatikalisch nicht.> Typenbezeichnung? Warum kein digitaler Encoder?
Es tut mir leid, falls die Beschreibung nicht korrekt ist. Ich habe
versucht, es verständlich zu schreiben, aber das war mir schwierig,
ganzes Datenblatt des Sensors in einige Zeile zusammenzufassen. Die
Sensoren sind schon am Gerät eingesetzt. Hier ist ein Link zum Sensor,
falls du Interesse hast. https://www.ichaus.de/product/iC-MA
Schorsch X. schrieb:> Milad E. schrieb:>> Ziel ist, die Drehwinkel jedes Motors zu erfassen und die Daten in einem>> digitalen Zwischenspeicher (Cloud) zu speichern.>> Und was will man an diesem Speicherort damit tun ?>> Verrate doch einfach mal, welcher Sensor dafür angedacht ist.
Die Daten werden aus der Cloud über eine Schnittstelle aufgerufen und
dann in eine CAD-Software weitergeleitet, um die Bewegungen des Gerätes
virtuell in Echtzeit zu überwachen.
Hier ist ein Link zum Sensor: https://www.ichaus.de/product/iC-MA
... schrieb:> Die AVRs haben Counter, der STM sehr sicher auch.> Die Beschreibung von deinem Encoder verstehe ich grammatikalisch nicht.> Typenbezeichnung? Warum kein digitaler Encoder?>> Aber eigentlich ist es deine Abschlussarbeit, und dazu gehört auch> Theorie, Recherche und Konzeption. Die Umsetzung ist idR das dünnste> Brett.https://www.ichaus.de/product/iC-MA
Ich habe vergessen etwas zu erwähnen. Falls du den Link besuchst, kannst
du das Datenblatt des Sensors finden. Nach dem Datenblatt hat der Sensor
28 Betriebsmodi. Was hier konfiguriert wurde, ist Incr. CLK-DIR 8.
Schorsch X. schrieb:> Milad E. schrieb:>> Ziel ist, die Drehwinkel jedes Motors zu erfassen und die Daten in einem>> digitalen Zwischenspeicher (Cloud) zu speichern.>> Und was will man an diesem Speicherort damit tun ?>> Verrate doch einfach mal, welcher Sensor dafür angedacht ist.https://www.ichaus.de/product/iC-MA
Ich habe vergessen etwas zu erwähnen. Falls du den Link besuchst, kannst
du das Datenblatt des Sensors finden. Nach dem Datenblatt hat der Sensor
28 Betriebsmodi. Was hier konfiguriert wurde, ist Incr. CLK-DIR 8.
Milad E. schrieb:> Der Mikrocontroller, den ich verwende, ist Arduino Mega 2560.
Meinst Du nicht, dass Dein Wissen für ein Projekt dieses Maßstabs ein
wenig zu wenig ist?
Es gibt keinen Arduino Mega 2560 Mikrocontroller, es gibt einen
Microchip ATMega2560 und es gibt Arduino Controllerboards mit diesem
Baustein und auf C++ basierendem Softwareaufsatz, der es Bastlern
leichter macht zu einem Ergebnis zu kommen.
Die möglichst "gleichzeitige" Abfrage von Aufnehmern auf 3 Achsen,
zusammen mit einer Internetanbindung ist anspruchsvoll.
Wenn man Deine Fragestellung so hört, dann könnte man zur Meinung
kommen, dass Deine "Auftraggeber" voraussetzen, dass Du scheitern wirst,
sie jedoch den Umfang des Scheiterns, bzw. den Teilerfolg daraus sehen
wollen. Ähnlich Startreks Kobayashi-Maru-Test.
Der bezeichnete 8-Bit Angular Hall Encoder kann auch
Quadratur-Enkodierung, wenn Du 'nen Controller nimmst, der bereits
Quadratur-Dekoder besitzt, dann geht das ganze deutlich entspannter.
Einige der XMega AVRs bringen 3 Quadratur-Dekoder mit, die über ein
Event-System einen guten Teil der Arbeit im Hintergrund ausführen
können.
Außer Du brauchst tatsächlich 4 Dekoder, weil:
Milad E. schrieb:> zwei Schrittmotore für y-Achse