Platinen fräsen mit Linux

Wichtiges vorneweg !

Es geht hier "nur" um das Erstellen von einlagigen Platinen. Doppellagige Platinen habe ich erstmal nicht auf dem Schirm, ich bin schon froh, wenn die Sache erstmal einseitig klappt.

Historie dieses Vorhabens

Die Schwanekamp-Fräse habe ich ursprünglich zum Platinenfräsen (Isolationskanal-Fräsen) von einem guten Freund übernommen. Mit Windows hätte nur bis Win 3.11 geklappt, da die Software eigentlich für DOS gedacht war. Und das Aufspannen der Platine mit angeschraubten Haltern klappte auch nicht wirklich. Entweder die Platine verschob sich oder hatte einen Buckel,

Mit LinuxCNC war das Software-Problem zwar gelöst, nicht das der Befestigung. Schließlich fand ich in den späten 2020ern einen Unterdrucktisch zum Aufschrauben auf eine 2D-Fräse über eine Modellbau-Zeitschrift. Mit diesem Teil sitzt die Platine bombenfest. Jetzt hätte es also losgehen können ...

Hätte ... können ...

Leider ist das unter Linux nicht ganz so einfach. Eagle als Software für Schaltpläne und Platinen kannte ich schon seit Anbeginn meiner Entwicklerlaufbahn, das gab auch für Linux. Und es gab sogar ein ULP (User Language Program) zum Erzeugen der Isolationskanäle. Leider hatte das einen Fehler, sodaß ich es nicht zum Laufen gebracht habe. Ich habe dann Stunden und Tage im Web verbracht, um herauszubekommen, wie mein Problem mit Linux zu lösen ist.
KiCad als Schaltungs- und Platinenentwurfprogramm war schnell das Mittel der Wahl. Nur an die Fräsdaten zu kommen erschien mit mit jedem Blog, Foreneintrag, Tutorial und Video komplizierter. Irgendwie waren immer unständliche Kompromisse oder Windowsprogramme mit Wine oder nicht mehr verfügbare Programme nötig. Der Durchbruch kam mit dem Video-Tutorial Exporting from KiCAD to Fab Mods (Method 1, SVG direct) (ab Min. 1.01). Aufgrund der alten Version (5.4) von KiCad passt das zwar nicht mehr genau, aber der zündende Funke war da. Jetzt ist die Toolchain für Linux komplett und einfach und schnell zu verwenden.
Ein weiteres Programm in der Toolchain ist dxf2gcode, das ich auch schon lange für Teile meiner Modellhubschrauber eiinsetzte.

Arbeitsschritte vom Schaltplan bis zum G-Code

Die Handhabung von KiCad bis zum fertigen Layout werde ich hier nicht beschreiben. Das sollte jeder, der KiCad benutzt, intus haben.
Wichtiger sind die Schritte bis zur Fräse .
Zum Einordnen der folgenden Schriite hier noch die aktuell verwendeten Programm-Versionen (Stand 14.4.2025) : Als Beispiel verwende ich hier den Adapter vom Raspberry Pi 4 zum Schwanekamp SM 1020 Stepper-Motor-Driver.

KiCad

Der Schaltplan ist die Grundlage des "Workflows".
Daraus erstellt man das Platinenlayout :

Wenn man das Platinenlayout fertig hat, ist es wichtig, den Ursprungspunkt der Driil/Place-Dateien die richtige Stelle zu setzen. Und zwar muss dieser an die rechte, untere Ecke der Platine. Der Grund erklärt sich später ...

Hinzufügen -> Ursprung Drill-/Place-Datei

Und jetzt kommt der Trick :

Im Menü Plotten ist das Plotformat DXF auszuwählen.
Die zu plottenden Layer sind bei einer einseitigen Platine B.Cu (Lötseite) und Edge.Cuts (Platinenrand).
Unter Allgemeine Optionen sind alle Haken zu entfernen, nur Ursprung der Driil/Place-Datei verwenden wird aktiviert. Da gespiegelter und negativer Plot für DXF nicht zur Verfügung stehen, liegt hier der Grund für den Ursprung an der rechten Ecke! Das wird später wieder korrigiert.
Unter Optionen DXF wählt man noch die Einheit Millimeter aus, der Rest bleibt, wie er ist.

KiCad-Dialog zum Plotten deer DXF-Dateien

Schließlich klickt man auf Plotten, womit dann pro Layer eine .dxf-Datei entsteht.

DXF2GCODE

In dxf2gcode wird zunächst ein Projekt angelegt. Dazu läd man die dxf-Datei mit dem zu fräsenden Layer. Hierbei wird ein Fehler angezeigt.
Toleranzfehler
Um diesen kümmern wir uns als nächstes. Unter dem Menüpunkt Optionen -> Toleranzen werden beide Werte auf 0,00001 geändert. Damit ist die Fehlermeldung weg.

Bei Optionen -> Maschinen-Konfig setzen wir bei den Standardwerten der dritten Achse die Werte für Schnittiefe und Endfrästiefe auf 0,15 mm.

Schließlich wählen wir noch Optionen -> Mirror All und dort Mirror all on X-Axis. Damit ist das Fräsbild korrekt für die Unterseite der Platine.

Diese Einstellungen legt man mit Datei -> Projekt speichen als .d2g-Datei ab.

Als letztes folgt die Ausgabe der Fräsdaten mit Exportieren -> Pfade optimieren und exportieren in eine .ngc-Datei.

Das nächste Bild zeigt den ersten Fräsversuch mit LinuxCNC.

Erster Fräsversuch mit LinuxCNC

Bohrungen

Um die Daten der Bohrlöcher aus KiCAD in LinuxCNC zu bekommen, habe ich einen machbaren Weg gefunden.

Zuerst wird wieder das Menü Plotten aufgerufen und hier Bohrdateien erzeugen angeklickt. Als Format wird Excellon gewählt, alles andere bleibt aus. Mit Speichern werden dann zwei Dateien erzeugt, die Datei ...-PTH.drl ist die für die Unterseite.

Die Umwandlung in GCode habe ich mit einer leicht an LinuxCNC angepassten und erweiterten Version von drl2gcode.py durchgeführt. Diese Version steht hier zum Download bereit. Alle Optionen werden mit drl2gcode.py -h angezeigt.

Als Beispiel kann die folgende Befehlszeile dienen :

$ drl2gcode.py --spindle-speed 800 --xy-move-speed 200 --z-move-speed 200 --drill-move-speed 80 --drill-depth 1.2 --safe-height 5.0 -s -d 1 -m RaspberryPi4-PTH.drl

Namespace(drlfile=['RaspberryPi4-PTH.drl'], spindle_speed=800.0, xy_move_speed=200.0, z_move_speed=200.0, drill_move_speed=80.0, drill_depth=1.2, safe_height=5.0, single_file=True, offset=[0, 0], mirror_x=True, drill_offset=1)
Writtent to RaspberryPi4-PTH_Tall.ngc

Jetzt kann man in der vorher erzeugten Datei RaspberryPi4-B_Cu.dxf die letzte Zeile durch den Inhalt der eben erzeugten Datei RaspberryPi4-PTH_Tall.ngc ersetzen und hat alle Daten zum Fräsen und Bohren zusammen.

Fazit

Die Ursache für den ganzen Zusatzaufwand liegt daran, das KiCAD, wie jedes andere Platinenlayoutprogramm, vernünftigerweise eine "Durchsicht" der Platine erzeugt. Ich will aber nur die Unterseite, gespiegelt um die senkrechte Mittelachse der Platine, haben, um sie dann fräsen und bohren zu können.

Es fehlen nun noch die Daten zum Ausfräsen der Platine, die sich aus der Datei RaspberryPi4-Edge_Cuts.dxf erzeugen lassen. Dazu muss ich noch etwas experimentieren.

Aber ich bleibe dran - versprochen!

© Uwe Jantzen 21.04.25