Forum: Mikrocontroller und Digitale Elektronik CNC-Maschine mit Raspberry PI entwickelt


von Simi James (simijames3104)


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.

von Thomas K. (thomas2021)


Lesenswert?

Vorlesungen verpasst ?

von Harald K. (kirnbichler)


Lesenswert?

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?

von Simi James (simijames3104)


Lesenswert?

ja, ich muss den G-Code dekodieren. Achsenwerte aus dem G-Code abrufen 
und die Motoren entsprechend ansteuern.

von F. (radarange)


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.

von Falk B. (falk)


Lesenswert?

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.

von Hardy F. (hflor)


Lesenswert?

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
von F. (radarange)


Lesenswert?

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.

von Harald K. (kirnbichler)


Lesenswert?

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.

von F. (radarange)


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.

von Paule M. (martin_mu)


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

von Jens M. (schuchkleisser)


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.

von Harald K. (kirnbichler)


Lesenswert?

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.

von Thomas K. (joshua314)


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

von Hardy F. (hflor)


Lesenswert?

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

von Chris D. (myfairtux) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
von Rüdiger B. (rbruns)


Lesenswert?


von Rahul D. (rahul)


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:
> Ich muss ein Code-Panel
Wer zwingt dich, sowas zu studieren?
[/OT]

von 🍅🍅 🍅. (tomate)


Lesenswert?

Mach LinuxCNC drauf und fertig

von Thomas K. (joshua314)


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

von Peter L. (pelikan)


Angehängte Dateien:

Lesenswert?

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

von Thomas K. (joshua314)


Lesenswert?

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

von Hardy F. (hflor)


Lesenswert?

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?

von Peter L. (pelikan)


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

von Rainer W. (rawi)


Lesenswert?

Rahul D. schrieb:
> Oder man ist das programmiertechnische Super-GAU

Was haben Programmierfähigkeiten mit einem größten anzunehmenden Unfall 
zu tun? 🤔

von Rahul D. (rahul)


Lesenswert?

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.

von Thomas F. (igel)


Lesenswert?

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".

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
von Hardy F. (hflor)


Lesenswert?

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
Noch kein Account? Hier anmelden.