Hallo zusammen, Ich hoffe, dass bei dir alles in Ordnung ist. Ich arbeite an einem Projekt für die Uni. Ich muss eine CNC-Maschine mit Raspberry Pi entwerfen. Ich habe die Grundlagen gemacht. Es ist mir gelungen, den Schrittmotor anzuschließen. Ich habe auch die mechanische Struktur entworfen. Jetzt stecke ich fest. Ich muss ein Code-Panel für CNC entwerfen. Der Benutzer gibt Maschinensprachencode ein und der Raspberry Pi wandelt den Code in eine Aktion um. Ich verwende dieses Raspberry Pi-Modell: https://www.theengineeringprojects.com/2021/03/what-is-raspberry-pi-4-pinout-specs-projects-datasheet.html Diese Schrittmotoren: https://www.amazon.com/stepper-motor/s?k=stepper+motor Ich wäre für jede Hilfe dankbar. Danke.
Simi James schrieb: > Der Benutzer gibt Maschinensprachencode ein und der Raspberry Pi > wandelt den Code in eine Aktion um. Aha. Maschinensprachcode also. Und, wo hakt es jetzt bei Dir? Was ist eine "Aktion", und was soll dieser ominöse "Maschinensprachcode" sein? Meinst Du ARM-Instruktionen? Ich hoffe nicht. Meinst Du G-Code?
ja, ich muss den G-Code dekodieren. Achsenwerte aus dem G-Code abrufen und die Motoren entsprechend ansteuern.
Um was für eine Aufgabe handelt es sich? Was ist die Veranstaltung und an welcher Uni? Wenn du aus Privatsphäregründen das nicht sagen willst, wieviele ECTS hat die Veranstaltung bzw. diese Arbeit? Daraus lässt sich der Anspruch an die Aufgabe ableiten. Letztendlich ist es viel Fleißarbeit. Du benötigst ein Programm, das den G-Code in Bewegungen umsetzt. Hier mal ein Beispiel, wie man das konzeptionell für G0 angehen könnte, also einfach eine Verfahrbewegung Als Beispiel haben wir den Code
1 | G0 X100 Y200 Z50 F800 |
das heißt: Direkte Bewegung zu Koordinate X=100, Y=200, Z=50 mit Feedrate (Geschwindigkeit) 800, wir nehmen hier mal als Konvention mm/min, kann aber natürlich auch irgendwie anders sein, je nach CNC. Zunächst musst du herausfinden, wieviele Schritte deine Schrittmotoren machen müssen, um eine Einheit zu verfahren.
1 | steps_per_mm_x = stepper_steps_per_rotation / motion_system_mm_per_stepper_rotation |
Wenn dein Schrittmotor also z.B. eine Gewindespindel mit 1.5mm Steigung pro Umdrehung bewegt und 200 Schritte pro Umdrehung hat, dann hast du 200/1.5 = 133 Schritte pro mm. Das kann für X, Y, Z natürlich unterschiedlich sein. Nun musst du ausrechnen, wie schnell die Schritte gemacht werden sollen, das geht anhand der Feedrate. Der Schrittmotor macht einen Schritt pro Puls an den Schrittmotortreiber. Wir müssen uns also zunächst ausrechnen, wie schnell wir die Pulse schicken müssen, um die Feedrate zu erreichen.
1 | pulses_per_minute = feedrate * steps_per_mm |
2 | pulses_per_second = pulses_per_minute/60 |
3 | pulse_duration_ms = 1000/pulses_per_second |
Danach wird der Schrittmotortreiber angesteuert. Benötigt werden die Anzahl der Pulse (eine Anzahl < 0 sagt uns hier, dass der Schrittmotor in die andere Richtung fahren soll), die Länge eines Pulses, der GPIO-Pin für den Pulsausgang und der GPIO-Pin für die Richtungsumkehr (low=vorwärts, high=rückwärts)
1 | def move_stepper_motor(number_of_pulses, pulse_duration, gpio_pin_pulse, gpio_pin_reverse_direction): |
2 | if (number_of_pulses < 0): |
3 | set_output_high(gpio_pin_reverse_direction) |
4 | else: |
5 | set_output_low(gpio_pin_reverse_direction) |
6 | |
7 | for (i = 0..abs(number_of_pulses)): |
8 | set_output_high(gpio_pin) |
9 | wait_ms(pulse_duration/2) |
10 | set_output_low(gpio_pin) |
11 | wait_ms(pulse_duration/2) |
Obacht: Realistische Systeme werden recht bald in die Knie gehen, weil so kaum schnelles Timing zu machen sein wird. Üblicherweise werden diese Funktionen auf spezielle Hardware-Einheiten oder eigene Echtzeit-Microcontroller ausgelagert. Nachdem wir diese Funktion haben, müssen wir jetzt nur noch ausrechnen, wieviele Schritte wir brauchen.
1 | needed_steps_x = target_position_x - current_position_x |
usw. für y und z. Ein Raspberry Pi ist ungeeignete Hardware, weil er nicht schnell genug pulsen kann. Der Code ist eine Illustration, wie so ein Problem grundsätzlich gelöst werden kann, auf einem Niveau, auf das der Threadersteller auch selbst hätte kommen können.
Simi James schrieb: > ja, ich muss den G-Code dekodieren. Achsenwerte aus dem G-Code abrufen > und die Motoren entsprechend ansteuern. Na dann mal los! Das ist eine Aufgabe fööör den Schööööler. Dazu gibt es tonnenweise Information und auch Projekte im Internet. Zu konkreten Problemen musst du schon konkrete Fragen stellen.
Simi James schrieb: > ja, ich muss den G-Code dekodieren. Achsenwerte aus dem G-Code abrufen > und die Motoren entsprechend ansteuern. Warum installiert Du nicht Linux-CNC? Selbst ein Raspi sollte mit den Mesa-Karten gut laufen. Warum müssen alle Dinge immer wieder neu erfunden werden?
:
Bearbeitet durch User
Hardy F. schrieb: > Simi James schrieb: >> ja, ich muss den G-Code dekodieren. Achsenwerte aus dem G-Code abrufen >> und die Motoren entsprechend ansteuern. > Warum müssen alle Dinge immer wieder neu erfunden werden? Damit man lernt, wie's geht. Deshalb ist es ja auch ein Projekt im Rahmen der Lehre.
F. schrieb: > Deshalb ist es ja auch ein Projekt im Rahmen der Lehre. Und das löst man am besten, in dem man in einem Forum nach einer vorgekauten Lösung sucht. Das ist ja fast so wie ChatGPT zu fragen.
Harald K. schrieb: > F. schrieb: >> Deshalb ist es ja auch ein Projekt im Rahmen der Lehre. > > Und das löst man am besten, in dem man in einem Forum nach einer > vorgekauten Lösung sucht. Das ist ja fast so wie ChatGPT zu fragen. Man lernt wenig dadurch, aber es wird gelöst, insofern: Ja, das ist eine Möglichkeit. Offensichtlich ist die Fragestellung aber bereits so schlecht beschrieben, dass sich da wenig helfen lässt, daher habe ich auch keinerlei Bedenken darin, einfachste Berechnungen zu erklären. ChatGPT würde es übrigens deutlich besser hinkriegen als das Forum hier, sofern man in der Lage ist, die Frage richtig zu stellen.
"ChatGPT würde es übrigens deutlich besser hinkriegen als das Forum hier, " haha, ohne Scheiß, dass habe ich hier schon mehrfach gesagt. Diese ewigen Diskussionen in die hier oft wegen einer Frage ausartet, geht auf keine Kuhhaut und ob es jemand für die Schule Uni oder sonstwas fragt, hat niemanden zu interessieren. Am ende ärgert man sich oft nur unnötig und fragt sich, warum man überhaupt hier gefragt hat. Gibt genug andere Foren
Vor allem könnte der OP ChatGPT in seiner Muttersprache befragen. Den Code der da dann zusammenfantasiert wird muss allerdings gut gegengelesen und vor allem verstanden werden. Was man bei CNC-Maschinen nicht vergessen darf: Sicherheit. Überwachung, Notaus, Maschinenlimits. Was passiert wenn in den Daten X10000000 steht? Was bei F99999999? F0? Und dann die Herausforderung, die unregelmäßigen Takte des RPi in glatte schnelle Bewegungen mit Beschleunigungs- und Bremsrampe zu transferieren.
Paule M. schrieb: > Diese ewigen Diskussionen in die hier oft wegen einer Frage ausartet, > geht auf keine Kuhhaut und ob es jemand für die Schule Uni oder sonstwas > fragt, hat niemanden zu interessieren. Nö. Eines der Grundprinzipien hier ist Hilfe zur Selbsthilfe, d.h. der Wille, Leuten etwas beizubringen. Fertig vorgekaute Lösungen haben Null Lerneffekt.
Falk B. schrieb: > Simi James schrieb: >> ja, ich muss den G-Code dekodieren. Achsenwerte aus dem G-Code abrufen >> und die Motoren entsprechend ansteuern. > > Na dann mal los! Das ist eine Aufgabe fööör den Schööööler. > Dazu gibt es tonnenweise Information und auch Projekte im Internet. > Zu konkreten Problemen musst du schon konkrete Fragen stellen. Falk B. schrieb: > Simi James schrieb: >> ja, ich muss den G-Code dekodieren. Achsenwerte aus dem G-Code abrufen >> und die Motoren entsprechend ansteuern. > > Na dann mal los! Das ist eine Aufgabe fööör den Schööööler. > Dazu gibt es tonnenweise Information und auch Projekte im Internet. > Zu konkreten Problemen musst du schon konkrete Fragen stellen. Hallo Simi James, ich war 10 Jahre in einer Firma, welches genau das gemacht hat. ich kann dir nur eines sagen.... Für eine Uniarbeit nebenbei... Vergiss es. Wir haben mit 3 Mann Vollzeit daran gearbeitet. 1. Echtzeit.... Mit einem Raspi --> keine Chance.... 2. Interpolator .. Sprich für jede Bahn für alle beteiligten Motoren musst du erst mal den schwächsten Motor suchen. Sprich Beschleunigung aufgrund der zu fahrenden Wegstrecke. Das wird dann die führende Achse. Dann berechnen wenn die Bremsrampe kommt. Du kannst bei vollem speed in X nicht auf einmal mit Y losfahren und hoffen dass X anhält... 3. G-Code Interpreter: CNC ist ein langjähriger Lehrberuf !! Wie schon oben vorgeschlagen Linux CNC... Schauen, dass eine Einfache schrittmotorenkarte rennt. Damit bist du schon dicke beschäftigt. Mit einer MesaCard 7I76E biste gut bedient. Such dir einen Kleinen PC.. (incl Wlan) Nimm die Netzwerkbuchse zur MesaCard und Wlan für die Kommunikation. Falls du 2 x Netzwerk brauchst .. USB Netzwerk gibt es auch noch... Nur die interne geht dann zur MesaCard. Gruß Thomas
Thomas K. schrieb: > 1. Echtzeit.... Mit einem Raspi --> keine Chance.... Hallo Thomas, meinst Du allein mit Raspi oder in Verbindung mit der Mesa-Karte? Ich wollte meine CNC eigentlich mit dem Raspi5 + Mesa bauen. Soweit ich das verstanden habe macht die Mesa-Karte doch die Arbeit ... Hardy
Hardy F. schrieb: > Thomas K. schrieb: > >> 1. Echtzeit.... Mit einem Raspi --> keine Chance.... > > Hallo Thomas, > > meinst Du allein mit Raspi oder in Verbindung mit der Mesa-Karte? Ich > wollte meine CNC eigentlich mit dem Raspi5 + Mesa bauen. Soweit ich das > verstanden habe macht die Mesa-Karte doch die Arbeit ... Ja, das hast Du richtig verstanden :-) Bei LinuxCNC inkl. Ethernet-Mesa-Karte braucht man keinen feinkörningen base thread im µs-Bereich (das übernimmt die Karte), sondern nur den deutlich langsameren servo thread mit üblicherweise 1ms. Das reicht für normale Maschinen und Bahnsteuerung vollkommen aus. Auch 2ms sind oft kein Problem, zumal die MESA-Karten (zumindest die mir bekannten 7i76E und 7i96S) auch noch Puffer haben. Wenn da also mal ein UDP-Paket zu spät kommt, ist das immer noch kein Drama. Das kann der Raspi durchaus leisten.
:
Bearbeitet durch Moderator
Chris D. schrieb: > Bei LinuxCNC inkl. Ethernet-Mesa-Karte braucht man keinen feinkörningen > base thread im µs-Bereich (das übernimmt die Karte), sondern nur den > deutlich langsameren servo thread mit üblicherweise 1ms. Das reicht für > normale Maschinen und Bahnsteuerung vollkommen aus. Auch 2ms sind oft > kein Problem, zumal die MESA-Karten (zumindest die mir bekannten 7i76E > und 7i96S) auch noch Puffer haben. Wenn da also mal ein UDP-Paket zu > spät kommt, ist das immer noch kein Drama. > > Das kann der Raspi durchaus leisten. In der Anfangszeit der 3D-Drucker ("RepRap"-Zeitalter) wurde die G-Code-Übersetzung und die Schrittmotorsteuerung von AVR-Arduinoboards übernommen. Mein erster 3D-Drucker hat dann ein RaspBerry Pi als Standalone-Steuerung bekommen, damit der "große PC" nicht konstant laufen musste, wenn es mal wieder länger dauerte. Also: Nur das Raspi zu verwenden, ist etwas zu aufwendig für eine Uni-Projekt. Oder man ist das programmiertechnische Super-GAU... [OT] Simi James schrieb: > Ich muss ein Code-Panel Wer zwingt dich, sowas zu studieren? [/OT]
Hardy F. schrieb: > Ich > wollte meine CNC eigentlich mit dem Raspi5 + Mesa bauen. Soweit ich das > verstanden habe macht die Mesa-Karte doch die Arbeit ... > > Hardy Jou des geht... Mit dem Echtzeit Kernel für den Raspi Sprich das geht nur damit /* https://www.linuxcnc.org/iso/rpi-5-debian-bookworm-6.1.61-rt15-arm64-ext4-2023-11-17-1520.img.xz */ des ist das Linux CNC mit Echtzeit Kernel. Einmal Update mit normalen Linux Kernel = TOT Die Arbeit macht die Mesa Karte nur die kommuniziert im 1Milli-Sekunden Takt mit der Mesa Card. Und wenn es geht Bitte jitter frei !!!!!! Gruß Thomas
moin, so ne CNC-Steuerung läuft doch schon auf 8051. Anbei mal ein G-Code-Viewer, damit kann man mal G-Code testen. Der Decoder dafür ist doch simpel, nur die Fräsradienkorrektur erfordert etwas mehr Schulmathematik ( wegen die Winkelfunktionen ) Viel Spass Peter
Peter L. schrieb: > nur die Fräsradienkorrektur erfordert > etwas mehr Schulmathematik ( wegen die Winkelfunktionen ) Genau das...... Stichpunkt Schwalbenschwanz-Taschen Wenn der Fräser breiter ist, wie der Platz zum fräsen .... "viel mehr als Schulmathematik" Gruß Thomas
Peter L. schrieb: > ... nur die Fräsradienkorrektur erfordert > etwas mehr Schulmathematik ( wegen die Winkelfunktionen ) Macht das nicht das Programm der G-Code-Erstellung? Woher soll die Steuerung wissen auf welcher Seite das Material ist?
moin genau für solche Fragen hatte ich mir das Programm geschrieben. >>Wenn der Fräser breiter ist, wie der Platz zum fräsen .... dann sieht man den Mist vor dem fräsen... >>woher soll die Steuerung wissen auf welcher Seite das Material ist? G40, G41, G42 sind dafür vorhanden. Als erweiterung G4? um die Einstellung im Prgramm vornehmen zu können. Peter
Rahul D. schrieb: > Oder man ist das programmiertechnische Super-GAU Was haben Programmierfähigkeiten mit einem größten anzunehmenden Unfall zu tun? 🤔
Rainer W. schrieb: > Rahul D. schrieb: >> Oder man ist das programmiertechnische Super-GAU > > Was haben Programmierfähigkeiten mit einem größten anzunehmenden Unfall > zu tun? 🤔 Das musst du Dr. Berghammer fragen. Der nannte einen Kommilitonen so.
Thomas K. schrieb: > Mit einer MesaCard 7I76E biste gut bedient. Zwischenfrage: Hat die eigentlich jemand in den letzten Jahren mal gekauft? Ich sehe die diversen Mesa-Karten seit Jahren immer nur als "nicht lieferbar".
Simi James schrieb: > Ich verwende ... > Diese Schrittmotoren: > https://www.amazon.com/stepper-motor/s?k=stepper+motor Naja, ein wenig genauer solltest du das schon noch spezifizieren. > ich muss eine CNC-Maschine mit Raspberry Pi entwerfen. Auch die Mechanik dafür? Gleich eine mit 7 synchronen Achsen? > Ich muss ein Code-Panel für CNC entwerfen. Die Hardware und die Mechanik ebenfalls? > ich muss den G-Code dekodieren. Von woher kommen die Informationen? An einer solchen Aufgabe "Entwurf einer CNC Maschine" arbeiten viele erfahrene Ingenieure viele Jahre. Insofern glaube ich, dass deine Aufgabe wesentlich einfacher bzw. nur ein Teil dieser Aufgabe ist. Simi James schrieb: > Es ist mir gelungen, den Schrittmotor anzuschließen. Dann sorge jetzt dafür, dass er sich konstant ohne Ruckeln und gleichmäßig beschleunigt/gebremst auf vorgegebene Endpositionen dreht. Und dann schließe einen 2. (und danch einen 3.) Motor an und sorge dafür, dass sich die Motoren synchron zueinander bewegen, nur dass die dabei in unterschiedliche Richtungen mit unterschiedlichen Endpositionen fahren. Thomas K. schrieb: > Wenn der Fräser breiter ist, wie der Platz zum fräsen "Ahals!!" hätten meine Kinder da ganz laut gerufen.
:
Bearbeitet durch Moderator
Thomas F. schrieb: > Thomas K. schrieb: >> Mit einer MesaCard 7I76E biste gut bedient. > > Zwischenfrage: > Hat die eigentlich jemand in den letzten Jahren mal gekauft? Ich sehe > die diversen Mesa-Karten seit Jahren immer nur als "nicht lieferbar". dann nimm doch die 7I96S: https://www.welectron.com/Mesa-Electronics-7i96S-5-Axis-STEP-DIR-Ethernet-Controller?utm_campaign=gs
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.