Fräs-Plotter

Zur schnellen Herstellung von einfachen Platinen (Rapid Prototyping)

Dieses Projekt beschreibt ein Software Filter Programm geschrieben in Python welches:
Die CNC Dateien laufen auf dem CNC Kreuztisch, welcher ebenfalls ein Projekt dieser Webseite ist.

Der Filter plt2cnc.py (Rechte Maustaste, Ziel speichern unter...) kann mit folgenden Argumenten gestartet werden:

Aufruf: plt2cnc [-inc] [-mx] [-my] [-zx=nn.nn] [-zy=nn.nn] [-i=init] Input.plt [Output.cnc], wobei:
-inc = Inkremental Werte, also XI/YI anstelle X/Y
-mx/y = Mirror X/Y, also X und/oder Y Achse spiegeln
-zx/y = Zero X/Y, also den X und Y Nullpunkt setzen
-i = Init cnc, fügt eine Zeile am Anfang des CNC Programs ein, mehrfach möglich z.B -i=V12 -i='F 200' -i="P X0 Y0"
Input.plt = Eingabedatei, Output.cnc = Ausgabedatei oder Console falls keine angegeben.

Vorgehen / Voraussetzungen

Wir haben ein Elektronikprojekt mit KiCad entwickelt und ein Platinen Layout mit KiCad PCB erstellt. Die Platine ist entweder einseitig mit Kupfer beschichtet, oder wie hier beschrieben eine Lochraster Platine mit durchgehenden horizontalen Leiterbahnen.

Um die Funktion zu verdeutlichen wurde eine Testzeichnung mit KiCad PCB erstellt. Der Weg des Gravierfräsers wird z.B. auf dem User.Drawings erstellt.

(Für Vollbild, rechte Maustaste, Grafik in Menü Tab öffnen)

Um Kreise, Bögen und schräge Linien zu testen, wurden solche gezeichnet. Außerdem soll das Filter Programm zusammenhängende Objekte erkennen und den Weg des Fräsers so optimieren, dass möglichst wenig Z-Bewegungen nötig sind. Um zusammenhängend zu fräsen, schließt man Linien und Bögen möglichst ohne Abstände. Um Stummel oder Sackgassen anzuschließen, kann man diese leicht versetzt anordnen und auch einen "Rückweg" zeichnen so dass diese nicht als einzelne Linien bearbeitet werden sondern auch als zusammenhängende Linie. Dazu müssen die Abstände größer als die Toleranz sein (siehe weiter Unten bei Rundungsfehler und Toleranz)

Danach wird die HPGL Plot-Datei erstellt. Es wird nur der User.Drawings Layer geplottet und nicht gespiegelt. Gespiegelt wird dann mit dem Filter.


PCB Plot Referenz ist Unten-Links im Blatt-Begrenzungsrahmen. Auf dem PCB Programm ist Y aber oben. Deshalb hat Y den Offset der Blattgröße, z.B. 210mm (Koordinaten werden im KiCad angezeigt). Um 1:1 auf CNC umzuwandeln, muss also keine Achse gespiegelt werden. Beim Spiegeln ändert das Vorzeichen der entsprechenden Achse.

Beispiel

Der Board Nullpunkt ist dann also von Unten-Links gemessen bzw. vom KiCad PCB die X-Position und die Blatt-Höhe minus Y-Position.
Beispiel: Board Unten-Links ist im KiCad PCB bei X127.00, Y127.00, Blatthöhe=210, somit ist -zy=83 (210 - 127), X und Y gespiegelt (als Test).
Die Datei PLT2CNC-User_Drawings.plt wird von KiCad so generiert (Projektname-Layername.plt)
V12
F200
PX0Y0

:...> ./plt2cnc.py PLT2CNC-User_Drawings.plt -zx=127 -zy=83 -mx -my -i=V12 -i=F200 -i=PX0Y0 PLT2CNC.cnc

Daraus resultiert dieses CNC Programm.

Die ersten Zeilen sind:
-i=V12, Simulationsmodus um das erst zu simulieren.
-i=F200, Fräsvorschub 200mm/min ist zwingend nötig da die Maschine sonst stehen bleibt.
-i=PX0Y0, starte zuerst bei X0 und Y0 im Eilgang.

Nach dem Umwandeln kann das CNC Programm mit der Simulation getestet werden, wie im CNC Projekt beschrieben. Lässt man es laufen und zeichnet die Daten in eine .csv-Datei auf, kann man diese im Excel/Libreoffice importieren und daraus ein X-Y Diagramm einfügen. In dem Beispiel zeigt sich folgendes Bild:


Löscht man nun noch die X-Y Werte vom Eilgang, ergibt das folgendes Bild:
 

Das entspricht der Zeichnung von KiCad. Die beiden Achsen wurden dabei gespiegelt wie beim Umwandeln in der Kommandozeile mit -mx und -my angegeben.

Beispiel Lochraster-Platine vom MPPT-II Projekt

Bei dem Projekt wurde das Layout für eine Lochraster-Platine mit horizontalen einseitigen Leiterbahnen erstellt.


Im User.Drawings Layer wurde der Weg des Gravierfräsers gezeichnet um die Leiterbahnen schnell und zuverlässig zu unterbrechen.


Danach wird wie oben beschrieben eine HPGL Plotdatei exportiert und danach mit plt2cnc.py umgewandelt. In diesem Fall wird nur die Y-Achse gespiegelt, da die Platine horizontal überschlagen auf der Rückseite bearbeitet werden soll. Um Sicherzustellen, dass der Fräser am richtigen Ort läuft, wurde ein Rechteck gezeichnet und separat exportiert und umgewandelt. Lässt man das separat laufen, kann man sicherstellen, dass die Platine auf der Maschine korrekt ausgerichtet wurde.

Die bearbeitete Platine sieht dann so aus.

Rundungsfehler und Toleranz

Da die meisten Bauteile Maße in Inch (Zoll) haben, arbeiten Layout Designer normalerweise mit Inches. Im KiCad kann man zwar das Raster auf Metrisch und Inch einstellen. Trotzdem empfiehlt es sich im Inch-Raster zu arbeiten. Das HPGL Format arbeitet aber metrisch mit einer Auflösung von 0.025mm. Dadurch entstehen kleine Rundungsfehler. Deshalb wird der Abstand der einzelnen Linien am Anfang und Ende zu einer benachbarten Linie berechnet und wenn er kleiner als eine Toleranz von 0.04mm beträgt trotzdem verbunden. Wäre das nicht so, würde dazwischen die CNC Maschine an eine neue Position fahren, welche u.U. nur wenige Tausenstel beträgt (Pinole Hoch, Eilgang, positionieren, Pinole runter, Fräsgang...). Das macht keinen Sinn und verlangsamt die Arbeit nur.

Die Toleranz ist am Anfang des Python Scripts definiert und kann ggf. angepasst werden. Es gibt aber 2 verschiedene Anwendungen der Toleranz:
1. Abstand des Linienendes zum nächsten Linienanfang beim zusammenhängen der Linien(< 0.04mm)
2. Distanz um eine neue Position im Eilgang anzufahren beim erzeugen des CNC Codes (> 0.04mm)
Innerhalb der Toleranz wird also eine neue Position ignoriert. Das bedeutet, dass eine gerade Linie um die Toleranz schräg verlaufen kann, weil der Anfang ignoriert und direkt zum Ende der Linie gefahren wird.

HPGL Implementation

Das HPGL Format hat viele Kommandos, welche nicht verwendet werden bzw. im plt2cnc.py nicht implementiert sind. Es ist abgestimmt auf das KiCad Elektronik Designer Tool mit dem Zweck, Elektronik Platinen mit einem Gravierfräser auf der auf dieser Webseite vorgestellten CNC Maschine herzustellen. Folgende Objekte des KiCad sind implementiert.
- Gerade Linien, in einer beliebigen Richtung mit einem beliebigen Winkel
- Bogen von 0...360°
- Kreise
- Texte werden von KiCad in Linien umgewandelt und können deshalb verarbeitet werden.
Gefüllte Flächen, Text Fonts, Ovale, Langloch, Beizer usw. sind nicht implementiert, können aber entsprechend gezeichnet werden.
Um Projekte von in einem anderen Tool zu bearbeiten, empfiehlt es sich, dieses als .svg zu exportieren (skalierbare Vektor Grafik) und im KiCad zu importieren. So können auch z.B. komplexe Figuren und Konturen gefräst werden.
Ebenfalls empfehlenswert ist es das CNC Programm mit der Simulationsmöglichkeit zu überprüfen bevor es auf der Maschine verarbeitet wird.

Bohrloch-Datei (Drill-File)

Es gibt ein zweites Filter-Programm um eine Bohrloch-Datei in ein CNC Programm umzuwandeln, nämlich drl2cnc.py (Rechte Maustaste, Ziel speichern unter...). Damit kann man die Platine auch aus dem Vollen Fräsen und Bohren. So können 2-Seitige Platinen hergestellt werden. Entsprechend benötigt man 2-Seitig mit Kupfer beschichtete Platinen. Das drl2cnc.py kann mit folgenden Argumenten gestartet werden:

drl2cnc [-i=init] [-t=cmd] Input.drl [Output.cnc], wobei:
-i=Init cnc, mehrfach möglich z.B -i=V12 -i="P X0 Y0"
-t=Tool Header, vor dem T Kommando um eine Position zum Werkzeugwechsel einzufügen, z.B -t="X -10 Y -20"
Input.drl = Eingabedatei, Output.cnc = Ausgabedatei oder Console falls keine angegeben.

Mit KiCad PCB vom Board eine Bohrdatei erzeugen mit den folgenden Schritten:

Um von der Rückseite zu bohren, bei den Optionen "Datei - Fabrication Outputs - Drill Files" "Spiegelung an Y-Achse" wählen. So kann man die Unterbrücke Fräsen und Löcher bohren ohne neu einzurichten. Der Drill Nullpunkt und der Board Nullpunkt beim Umwandeln mit plt2cnc.py müssen aber übereinstimmen.

Dann den Knopf "Bohrdatei erzeugen" anklicken.

Nun die Datei Platine.kicad_pcb mit drl2cnc.py umwandeln bzw. filtern z.B. mit:

:...> ./drl2cnc.py -i=V12 -i="P X0 Y0"  -t="X -10 Y -20" PlatineNew.drl PlatineNew.cnc

Um ähnliche Bohrdurchmesser zu konsolidieren (zusammenfassen), kann man die Drill Werte in der .kicad_pcb Datei anpassen mit folgendem Vorgehen:

KiCad schließen.

Drill Werte listen mit :...> grep drill Platine.kicad_pcb

Nun sieht man eine Liste der Objekte mit Bohr-Werten. z.B.

    (pad "1" thru_hole circle (at 0 0 270) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask)
    (pad "2" thru_hole circle (at 5 0 270) (size 1.6 1.6) (drill 0.89) (layers *.Cu *.Mask)
    (pad "1" thru_hole circle (at 0 0 180) (size 1.4 1.4) (drill 0.762) (layers *.Cu *.Mask)
    (pad "2" thru_hole oval (at 2.54 0 180) (size 1.4 1.4) (drill 0.7) (layers *.Cu *.Mask)
    ...

Um nun alle Löcher von 0.8 1mm zu ändern, kann man mit dem Tool "sed" den Text mit dem Parameter 's/(drill 0.8)/(drill 1)/g' ersetzen. Die Filter Parameter 's/(drill 0.8)/(drill 1)/g' entsprechend anpassen für andere Löcher bzw. für jeden zu ändernden Bohrer einen neuen. z.B.:

:...> cat Platine.kicad_pcb | sed 's/(drill 0.8)/(drill 1)/g;s/(drill 0.762)/(drill 1)/g;s/(drill 0.7)/(drill 1)/g;s/(drill 0.89)/(drill 1)/g' > PlatineNew.kicad_pcb

ersetzt die Werte 0.8, 0.89, 0.762, 0.7 mit 1. So benötigt man für alle diese Löcher einen einzigen Bohrer.

Danach PlatineNew.kicad_pcb mit KiCad öffnen und wie Oben beschrieben die Bohrdatei erzeugen und in ein CNC Programm umwandeln.




© 2022-2025 by Stefan Ludescher