CNC-MINI-FRÄSE: Der Weg zur gefrästen Platine

Mein wichtigster Grund für die Anschaffung der Fräse war das Isolationsfräsen von elektronischen Schaltungen. Einzelne Platinen in Auftrag zu geben erschien mir zu aufwändig und zu teuer. Der chemische Weg der Herstellung schied aufgrund der Gefährlichkeit der verwendeten Chemikalien aus. Zudem ist es nicht gerade umweltfreundlich.

Mit der kleinen CNC-Mini-Fräse lassen sich mit etwas Know-How gute Platinen erstellen. Nach einiger Recherche und etwas Probieren fand ich einen guten Weg. Den möchte ich hier teilen …

Die verwendete Software besteht aus …

KiCad – Erstellung von elektronischen Schaltplänen und Platinenlayouts

Line Grinder – Übersetzung des Platinenlayouts in GCODE

Notepad++ –  Überarbeitung des GCODES

OpenCNCPilot – Maschinensteuerung mit Höhenkalibrierung

Fangen wir mit KiCad an:

KiCad findet sich im Internet hier. Es ist kostenlos, sehr verbreitet, in keiner Weise eingeschränkt und es findet sich jede Menge Information im Internet dazu. KiCad ist eigentlich ein Programmpaket, da es die Schaltungserstellung und das Layout der Platine voneinander trennt. Neben diversen anderen Modulen um zum Beispiel die Materialliste zu verwalten, enthält es Möglichkeiten fertige Bauteilbibliotheken einzubinden oder selbst solche zu erstellen. Die Bedienung erlernt man leicht mit Hilfe der Dokumentation.

Meine Schaltung sieht so aus:

Hiermit bekommt man auch einen kleinen Einblick in die Arbeitsoberfläche von KiCad. Die kleine Schaltung findet übrigens am Filawinder ihren Einsatz. Sie steuert dort einen Stepper für die Wickelposition, – ein etwas älterer Beitrag.

Das Platinenlayoutprogramm liefert dann nach einiger Arbeit dieses Layout:

Die Platine ist zugegebenermaßen sehr simpel und sie ist nur einlagig. Für einlagige Platinen bitte die Lage B.Cu wählen. KiCad kann problemlos mehrlagig arbeiten. Mehr als zwei Lagen nützen uns beim Isolierfräsen allerdings nichts.

Es gibt gerade mal 4 Bauteile, – na ja, mit Sockelleisten für den DRV8825 sind es zwei mehr.

Bevor es weitergeht setzt man einen Hilfsursprung mit dem  -Symbol in der rechten Symbolleiste. Der Ursprung wir unten links am Platinenrand gesetzt.

Im Menü „Datei“ findet man die Auswahl „Plotten“. Hier werden die berühmten GERBER-Dateien erzeugt.

Bei mir ist der Dialog wie im Bild oben konfiguriert. Ich kenne mich aktuell noch nicht mit allen Einstellungen aus, aber so funktioniert es wunderbar. Wichtig ist ganz besonders der Eintrag in der Mitte: „Verwende Hilfsachsen als Ursprungspunkt“. Der vorher gewählte Hilfsursprung wird dadurch genutzt. Letztendlich bewirkt das, dass die Platine nahe am Koordinatenursprung der CNC-Maschine erstellt wird. „Plotten“ erzeugt dann zwei GERBER-Dateien im oben gewählten Verzeichnis, – eine für das Isolationsfräsen und eine für das Ausschneiden der Platine.

Man könnte jetzt auch eine „Bohrdatei generieren“. Leider führt uns das im weitern Prozess aber auf einen falschen Weg. Die Bohrdatei ist nur nutzbar, wenn die Platine beauftragt wird oder von vorne gebohrt wird. Wir arbeiten aber auf der Rückseite. Ich weiß, dass es im Folgedialog für die Bohrdatei eine Spiegelfunktion gibt. Sie hilft aber leider nicht in diesem speziellen Workflow. Glaube mir! Sofern alles in KiCad gespeichert wurde, können wir das Programm verlassen.

Zeit für Line Grinder. Zuerst muss das Programm in seinen Parametern eingerichtet werden. Das sind nicht gerade wenige. Line Grinder sperrt sich übrigens erfolgreich dagegen unter Win10 aus dem „Programme (x86)“-Verzeichnis zu laufen. Besser gesagt, Win10 erlaubt es nicht, dass das Programm in sein eigenes Verzeichnis schreibt. Die Settings könnten also nicht gespeichert werden. Also einfach den Line Grinder – Ordner an eine Stelle legen, die durch Win10 nicht verwaltet wird.

Line Grinder begrüßt uns zunächst recht schmucklos:

Ein Klick auf die Settings-Lasche bringt uns weiter:

Line Grinder hat einen recht intelligenten Filemanager, der bestimmte Files an charakteristischen Namensanteilen erkennt. Hier ist die Einstellung für das Isolationsfräsen geöffnet: -B.Cu.gbr Sobald dieser Text im geladenen File entdeckt wird, kommt diese Einstellung zu Einsatz. Wichtig: Wenn die Fräse mit metrischen Werten läuft, muss auch rechts MILLIMETERS eingestellt sein. In der mittleren Spalte finden sich diverse Einstellungen zum Verhalten der Fräse. Vorschübe, Eintauchtiefen, Bewegungshöhen und Anderes kann eingestellt werden.

Der ISOZCutLevel mit -0.2 ist für meine Maschine mit einem 30°-Stichel passend. Ich habe das im Versuch ermittelt. Ganz unten im Programmfenster werden die Einträge übrigens erklärt. Ein Tutorial im Internet hilft auch weiter. Ganz wichtig ist folgender Eintrag:

Das bewirkt, dass die Löcher für die Bauteile erzeugt werden. Eigentlich ist diese Stelle dafür gedacht die Löcher nur anzukratzen und zu markieren. Wir werden es zweckentfremden. Normalerweise würde man dann auch nur etwa -0.3 eintragen. Da wir aber durchbohren wollen, setzen wir den Wert auf -3mm. Damit kommen wir durch die Platine durch. Zudem muss unbedingt der IsoFlipMode auf Y-Flip gesetzt werden. Dadurch spiegeln wir die Platine, weil wir ja von der Rückseite arbeiten. „Save Confoguration“ nicht vergessen!

Zurück zu „Plot View“. Über „Open Gerber/Drill File …“ öffnen wir unser *-B.Cu.gbr – File. Keine Reference-Pins gesetzt? Macht für einlagige Platinen nichts. Die zweite Meldung klingt schon freundlicher. Jetzt sieht man auch die Leiterbahnen in der Darstellung. Jetzt den Knopf „Convert to GCode“ klicken. Eine Erfolgsmeldung sollte erscheinen und ein neuer Tab erscheint. Zudem kann links der „Isolation GCode“ zur Darstellung angewählt werden.

„Save Iso GCode …“ klicken. Dadurch wird die Datei mit dem Code geschrieben.

Das Erzeugen des Codes zum Ausschneiden der Platine zeige ich in einem weitern Beitrag.

Das Erzeugen des Bohr-GCodes ist nicht notwendig. Das machen wir anders aufgrund der beschriebenen Probleme. Line Grinder kann verlassen werden.

Ein vernünftiger Texteditor wird jetzt gebraucht. Ich empfehle Notepad++. Wie üblich: Im Internet und für private Anwendung kostenlos. Wir zerteilen jetzt den soeben erzeugten Code.

Im Texteditor sehen wir jetzt das erzeugte .ngc-File. Es ist eine Ansammlung von Maschinenbefehlen in GCode-Schreibweise. Suche in diesem File die folgende Stelle: (… pad touchdown start …)

Schneide bis (… pad touchdown end …) alles aus und schreibe das Ausgeschnitte in einer neuen Datei test_DRILL_GCODE.ngc weg.

Die Datei aus der wir ausgeschnitten haben test-B.Cu_ISOLATION_GCODE.ngc kann in der jetzt gekürzten Version gespeichert und geschlossen werden.

Die neue Datei test_DRILL_GCODE.ngc  muss noch leicht erweitert werden. Als Vorspann kommt vor den kopierten Teil Folgendes:

G21 (Use MilliMeters)
G90 (Set Absolute Coordinates)
G17 (XY plane selection)
G00 Z2
G00 X0 Y0

Dann sieht es also so aus:

… und einen Nachspann gibt es auch noch:

G00 Z2
G00 X0 Y0
M05 (Stop spindle)
M02 (Program End)

Das sieht dann am Ende so aus:

Die Datei wird jetzt ebenfalls gespeichert. Damit haben wir eine Bohrdatei und eine Fräsdatei.

Schon geht es an die Maschine. Auf dem Rechner, der die Maschine steuert ist wahrscheinlich GRBL-Controller installiert, wenn mein Blog nachvollzogen wurde. Wir benötigen jetzt aber ein anderes Programm: OpenCNCPilot. Dieses Programm gibt es hier. Es ist wie auch die anderen Programme kostenlos, aber diesmal vielleicht nicht ganz so verbreitet. Auf Youtube gibt es ein sehr gutes Video dazu. Das Besondere an dem Programm ist seine Fähigkeit die Oberfläche des Platinenrohlings abzutasten und die gewonnenen Daten mit dem GCode zu verrechnen. Dadurch werden die Fräsergebnisse trotz gewölbter Platine immer perfekt.

Ein Platinenrohling sollte auf unserer Opferplatte (siehe Beiträge) befestigt sein. Ich meine wirklich fest! Hier wird gefräst.

Nach dem Start und dem Laden des Bohrfiles über den Button oben links (File/Open) stellt sich die Oberfläche etwa so dar:

Eine Dreitasten-Maus hilft übrigens bei allen genannten Programmen ganz ungemein beim Drehen, Vergrößern und Verschieben.

Der Umgang mit OpenCNCPilot kann in einer schrittweisen Anleitung folgendermaßen dargestellt werden:

Machine -> Settings dient zur Auswahl des richtigen seriellen Ports und der BaudRate.

Machine -> Connect verbindet Rechner und Fräsenelektronik.

Manual -> Enable Keyboard Jogging anhaken. Dadurch kann mit den Cursortasten rauf, runter, rechts, links die Spindel in der x/y-Ebene verstellt werden. Natürlich muss die Fräsenstromversorgung jetzt eingeschaltet sein um die Steppermotoren zu versorgen. Die Spindelposition wird jetzt dort hinverschoben, wo wir die linke untere Ecke der Platine haben wollen. Genauer gesagt ist das eigentlich der Punkt, den unser GCode-File als Ursprung kennt. Mit den PgDn- und PgUp-Tasten kann die Spindel hoch- und runtergefahren werden. Nachdem der 0,8mm-Bohrer in der Spindel fixiert wurde, senken wir die Spindel bis etwa 2mm über die Platine ab. Jetzt wird es Zeit, unser Probenkabel mit den beiden Krokodilklemmen anzuschließen.

Eine Krokodilklemme muss Kontakt zur Platine bekommen. Die zweite Klemme wird auf den Bohrer nahe am Spannfutter gesetzt. Diese Probenkabel macht nicht anderes, als einen geschlossenen Stromkreis zu überprüfen. Und das geht über Masse des Arduinos per Kabel an die eine Krokodilklemme, die an der Kupferbeschichtung der Platine hängt, dann weiter über die Platinenoberfläche. Die andere Krokodilklemme hängt an dem Bohrer (oder Fräser, oder Stichel …) und ist verbunden mit dem Eingang A5 des Arduino, beziehungsweise dem SCL-Anschluss des CNC-Shields. Der Bohrer wird jetzt so lange in Richtung Platine gefahren, bis der Stromkreis geschlossen ist. Damit hat man genau den Z-Nullpunkt erreicht. Und dabei unterstützt uns der OpenCNCPilot:

Macros -> Probe and set Zero fährt nach Anklicken des Buttons den Bohrer genau so weit herunter, dass er gerade die Platine berührt. Jetzt stellt das Makro außerdem diese Position als Nullpunkt für die Z-Achse ein.

Manual -> Zero (G92) -> Send sorgt als Abschluss dafür, dass wirklich alle Achsen genau auf dieser Postion genullt sind. G92 ist laut RepRapWiki zum G-Code übrigens der „Set Position“-Befehl:  Allows programming of absolute zero point, by reseting the current position to the values specified. […] No physical motion will occur.
A
G92 without coordinates will reset all axes to zero.

Jetzt sollte die mittlere obere Anzeig im Programm so aussehen:

Mit dem noch immer angebrachten Probenkabel geht es auch weiter.

Probing -> Create New führt uns zum Dialogfenster zum Anlegen einer Heightmap.

Über die Abbildung des Bohrfiles wird jetzt eine Testfläche mit den Abmessungen aus dem Dialogfile gelegt. Man sollte darauf achten, dass wirklich alle Platinenpunkte von dem Testgrid überlagert sind. Sollten also Leiterbahnen deutlich über die Bohrlöcher hinausgehen, wäre das zu berücksichtigen.

Probing -> Run setzt den Messvorgang in Betrieb. In diesem Beispiel werden 80 Punkte abgefahren und die Oberfläche wird vermessen. Nachdem dieser Vorgang durchgelaufen ist, wird das Probenkabel vollständig von Platine, Bohrer und Elektronikbox entfernt. Dann sind auch keine ungewollten Impulse zu befürchten. Ein farbenfrohes Muster hat sich über den Bohrplan gelegt.

Noch hat die Kalibrierung des Bohrfiles aber nicht stattgefunden. Das geht folgendermaßen …

Edit -> Simplify sorgt für eine Vereinfachung des Codes.

Edit -> Apply HeightMap kalibriert das Bohrfile, passt also die Höhenlage des Bohrers an.

Die Vorbereitungen sind durchgeführt. Jetzt wird gebohrt:

Bitte unbedingt eine Schutzbrille aufsetzen, wenn man zuschauen will. Der Bohrstaub wird recht weit mit hoher Geschwindigkeit umhergeschmissen. Die Zusammensetzung scheint mir für Augen denkbar ungeeignet zu sein.

Spindelmotor einschalten, falls nicht elektronisch per Programm geregelt.

File -> Start startet den Bohrprozess. Lean back and enjoy …

Spindelmotor aus.

Eigentlich braucht man das ganze Höhenkalibrieren beim Bohren nicht wirklich. Wir müssen es aber sowieso machen. Also warum nicht gleich am Anfang. Ich mache es so.

Weiter geht es mit dem Isolationsfräsen. Zunächst müssen wir das Werkzeug wechseln. Bohrer raus und Fräser rein.

Manual -> Enable Keyboard Jogging benutzen wir jetzt um die Spindel mit PgUp soweit nach oben zu fahren, dass der Bohrer raus und der Fräser rein können. Beim Lösen und Festziehen sollte man vorsichtig vorgehen, damit die Position der Achsen nicht allein schon durch äußere Einflüsse verändert wird. Es ist auch eine gute Idee, den Bohrstaub bei dieser Gelegenheit wegzusaugen. Nicht wegblasen, siehe oben. Ein kleiner Pinsel ist für solche Arbeiten auch ganz sinnvoll.

Die Spindel wird wieder soweit heruntergefahren, bis der Fräser fast die Platine berührt. Den Rest der Höheneinstellung überlassen wir wieder der Automatik. Probenkabel anbringen und dann …

Macros -> Probe and set Zero und Probenkabel wieder weg.

Jetzt bloß nicht noch die X- und Y-Achse nullen! Die sind ja schon für die Platine kalibriert!

File -> Clear

File -> Open und das Isolationsfräsfile laden.

So sollte das jetzt aussehen.

Edit -> Simplify sorgt für eine Vereinfachung des Codes.

Edit -> Apply HeightMap kalibriert das Fräsfile, passt also die Höhenlage des Fräsers an.

Außerdem verwenden wir jetzt noch Edit -> ArcsToLines um das File noch weiter zu vereinfachen. Als Parameter kann 1 gesetzt werden. Da bin ich aber aktuell auch noch nicht weiter in die Optimierung gegangen.

Spindelmotor einschalten und auf höchste Drehzahl bringen. Zum Isolationsfräsen kann es laut Literatur kaum schnell genug sein.

File -> Start startet den Fräsprozess. Lean back and enjoy …

Schutzbrille! Ist ja klar. Zwischendurch vorsichtig Staub mit dem Pinsel oder Staubsauger beseitigen wäre nicht schlecht. Man sieht dann ja auch mehr.

Wenn die Spindel wieder auf den Ursprung zurückfährt und sich nicht mehr bewegt, ist das Programm wohl durch. Spindelmotor aus.

Rechts hinten ist der erste Versuch. Da habe ich in KiCad noch die Funktion benutzt, die verbleibende Platinenfläche mit GND zu verbinden. Das gefiel mir nicht. Gebohrt wurde da noch nicht. Außerdem hatte ich glatt die Kalibrierung des Files (Edit -> Apply HeightMap) vergessen.

Links hinten habe ich mich in drei Schritten der richtigen Tiefe für den Fräser genähert. Ich bin wirklich fasziniert über die Wiederholgenauigkeit der Maschine. Ich habe nirgends Abweichungen gesehen. Gebohrt habe ich im zweiten Schritt und dabei fiel mir dann auf, dass es bei kleinen Lötpunkten fast immer dazu kam, dass der Bohrvorgang die Kupferfläche komplett ausgerissen hat. Löten wäre also nicht möglich. Daraus zwei Lehren: Immer mit dem Bohren anfangen und schon beim Layout der Platine auf möglichst große Lötflächen achten.

Rechts vorne dann der finale Durchgang. Erst gebohrt und dann gefräst. Das alles mit der richtigen Tiefe der Werkzeuge und nach HeightMap kalibriert.

Der erste (rechts) und der dritte (links) Versuch in Nahaufnahme.

Ich habe abschließend mit einem Durchgangsprüfer noch die Qualität der Isolation zwischen den Leiterbahnen überprüft. Das geht natürlich erst, wenn der Frässtaub restlos mit einer Bürste aus den Fräsbahnen entfernt wurde. Ich habe keinen einzigen Fehler gehabt. Danach sah es aber auch optisch schon aus.

Ich habe jetzt in mehreren Beiträgen den Weg von der gelieferten China-CNC-Mini-Fräse bis zur ersten fertigen gefrästen Platine aufgezeichnet und dokumentiert. Was noch fehlt, ist das Ausschneiden der Platine mit der Maschine. Dafür benötigt man des Edge.Cuts.gbr-File, dass im gleichen Workflow erstellt werden kann. Ich kann das hier aber noch nicht zeigen, weil zum aktuellen Zeitpunkt der notwendige Fräser noch nicht da ist. Eventuell liefere ich das nach.

Man kann die Platinen jetzt noch veredeln. Reinigen mit einem Glasfaserradierer direkt vor dem Löten bringt deutlich bessere Aufnahme des Lots. Zudem kann man die Platine komplett verzinnen. Das geht mit Lötpaste, die zum Beispiel im Heizungsbau verwendet wird. Sieht auch sehr gut aus, verbessert das Verlöten und verbessert die Korrosionsfestigkeit.

Ja und dann fehlt natürlich noch die Herstellung zweischichtiger Platinen …

Ich hoffe, dass ich das Thema etwas näher bringen konnte und werde versuchen eventuelle Rückfragen zeitnah zu beantworten. Da ich das Forum nicht mehr weiter betreibe, sollten die Fragen möglichst als Kommentar verfasst werden, damit alle Leser etwas davon haben. Mit dem Thema 3D-Druck geht es natürlich auch weiter.

Last not least ein Dank an all die fleißigen und selbstloser Programmierer und Tüftler, die solche tollen Tools wie KiCad, Line Grinder, OpenCNCPilot und Notepad++ kostenlos zur Verfügung stellen.

 

8 Gedanken zu „CNC-MINI-FRÄSE: Der Weg zur gefrästen Platine“

  1. Hallo Thomas,

    ich habe Deine Anleitung ab dem Teil in dem Opencncpilot ins Spiel kommt befolgt.

    Das Fräsen klappt ansich auch ganz gut, allerdings habe ich ein Problem mit dem Autoleveling:
    auf der tieferen Seite der Platine, die per Probe auch so angezeigt wird, fräst der Fräse nicht tief genug in die Platine.

    Ich habe mehrfach überprüft, dass ich „Simplify“ (für das Problem wohl unerheblich), „Apply HeightMap“ und „ArcToLines“ (hierfür wohl auch unerheblich) ausgefühlt habe.
    Außerdem kann ich bestätigen, dass die Height-Map in einem gewissen Maße auch angewandt wird (beim Fräsen von der hohen zur niedrigeren Seite sehe ich, dass der Stepper für die Z-Achse diese nach unten fährt.
    Anscheinend wird die Z-Achse aber nicht weit genug abgesenkt.

    Ich verwende die Version 1.5.0 von OpenCncPilot.

    Hast Du irgendeine Idee woran dies liegen könnte?

    viele Grüße
    Alex

    1. Hallo Alex,
      schön, dass ich Dir zumindest im Ansatz mit der Anleitung helfen konnte. Das geschilderte Problem lässt sich aus der Ferne nur sehr schwer analysieren. Theoretisch wäre es möglich, dass der Frässtichel die tiefe Position gar nicht erreichen kann, was eventuell an einem Endstop oder an mechanischen Endpunkten liegen kann. Eine andere Fehlerquelle könnte darin liegen, dass die Platine, eventuell sogar mit der Basisplatte zusammen, beim Eindringen des Frässtichels nachgibt, also nach unten ausweicht. Beides kannst Du aber recht einfach ausprobieren, indem Du an der betreffenden Stelle einfach mal mit laufender Spindel gesteuert in die Platine hereinfährst. Das geht ja mit GRBl-Controller recht einfach. Beobachte dabei auch, ob die Platine nach unten ausweicht. Ich glaube auch nicht, dass es an „Simplify“ oder „ArcToLines“ liegt, denn das sind ja nur Optimierungsmethoden. Wenn Du die Platine mal um 180° horizontal drehst und dann alles genauso durchführst, bleibt der Fehler an der gleichen Stelle der Maschine oder wandert er mit der Platine mit?
      Melde Dich auch gern über das Kontaktformular wenn Du nicht weiterkommst. Für weitergehende Analysen ist das über die Kommentarfunktion schwierig.

      Viele Grüße
      Thomas

  2. Hallo Thomas,

    schöner Artikel über alle Programme, ich hätte nur noch ein paar Anmerkungen zu OpenCNCPilot:
    – Simplify verändert den Code nicht, es entfernt nur Kommentare und überschüssige nullen. Intern wird die Datei einfach nur eingelesen und wieder ausgespuckt. Macht aber auch ApplyHeightMap, daher ist dieser Schritt redundant.
    – ArcToLines würde ich nur verwenden wenn die Datei später in ein anderes Programm exportiert wird, welches keine G2/G3 unterstützt. OpenCNCPilot und grbl kommen mit den Kreisbögen problemlos klar. Der Parameter gibt die maximale Länge der enstehenden G1 an, 1mm ist für Platinen viel zu grob und sorgt dafür dass runde Pads eckig werden, für diesen Zweck wären ~0.1mm eher sinnvoll falls dieser Schritt überhaupt nötig ist.

    Grüße
    Martin (martin2250)

    1. Hallo Frank,
      ich hatte Dir ja schon per email geantwortet. Es ist wichtig, dass genau die Schritte durchgeführt werden, die ich in meiner Anleitung dargestellt habe. Besonders die Settings, in denen das Verhalten für die einzelnen Dateitypen festgelegt werden, sind enorm wichtig.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.