CNC-Maschine mit Raspberry PI entwickelt

OP #7718505
Lesenswert?

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.

#7718542
Lesenswert?

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.

#7718568
Lesenswert?

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.

Gast #7718573
Lesenswert?

"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

#7718574
Lesenswert?

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.

#7719113
Lesenswert?

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

Moderator Persönliche Seite #7719132
Lesenswert?

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.

#7719146
Lesenswert?

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 im Beitrag #7718505:

Ich muss ein Code-Panel

Wer zwingt dich, sowas zu studieren? [/OT]

#7719339
Lesenswert?

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

#7719396
Lesenswert?

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

Moderator (Firma: Titel) Persönliche Seite #7719536
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren