====== PCBs Fertigen mit der Proxxon MF 70 (CNC-Aufrüstung) ====== Dieser Kurs beschreibt das Herstellen eigener kleiner Platinen mithilfe einer CNC-Fräse. Auch wenn hier konkret die {{http://www.proxxon.com/de/micromot/27110.php|Proxxon MF 70}} verwendet wird, kann die Technik auf jeder CNC-Fräse benutzt werden. Der [[mitglieder:pcaroli|Kursleiter]] ist selber kein CNC-Profi. Anregungen und Kritik sind immer erwünscht! **Vorraussetzungen** * grundlegende {{https://cadsoft.io/de/|Eagle}}-Kenntnisse * installierte {{https://cadsoft.io/de/|Eagle}}-Version (>= 7.3) * {{https://github.com/fablab-ka/TinyCNC_PCB_Tools|Eagle-Dateien}} herunterladen und in das Eagle-Hauptverzeichniss kopieren. * installiertes {{http://flatcam.org/download|FlatCam}} (bernötigt Python) * installierter {{http://winder.github.io/ugs_website/|Universal Gcode Sender (UGS)}} (benötigt Java) **Kursziele** * Vorbereitung des Platinendesigns für das Platinenfräsen * Grundlegendes Verständnis von CNC-Fräsen * Befähigung, kleine Platinen zu Fräsen ===== Theorie: CNC-Fräsen ===== Fräsmaschinen sind spannende Werkzeugmaschinen, die einen Fräser in drei Achsen bewegen können. Im Gegensatz zu z.B. einer Standbohrmaschine, die einen Bohrer nach oben und unten bewegen kann, kommen bei einer Fräse noch die Bewegungsrichtungen links/rechts und vorne/hinten dazu. Diese Achsen werden mit Buchstaben abgekürzt, Entfernungen und Positionen auf den Achsen werden dabei in Millimetern angegeben: * **X** ist die links/rechts-Achse, wobei ein positiver X-Wert nach rechts zeigt. * **Y** ist die vorne/hinten-Achse, wobei ein positiver Y-Wert nach hinten zeigt. * **Z** ist die oben/unten-Achse, wobei ein positiver Z-Wert nach oben zeigt. * **A**, **B**, und weitere Achsen sind weitere (Rotations-)Achsen die zum Beispiel bei Drehmaschinen verwendung finden, hier verwenden wir sie nicht. Um eine CNC-Fräse zu steuern, benötigt sie ein Programm, das abgefahren wird. Wie bei vielen anderen Werkzeugmaschinen auch, wird dafür {{https://de.wikipedia.org/wiki/Computerized_Numerical_Control#DIN.2FISO-Programmierung_bzw._G-Code|G-code}} verwendet. Der am meisten verwendetste Befehl dieser Sprache ist //G1//, der die Maschine dazu veranlasst, in einer geraden Linie auf eine neue Position zu fahren. Um zwei Löcher im Abstand von 1cm zu Bohren, kann z.B. folgender Code verwendet werden, der Text nach den zwei Backslashes ist dabei ein Kommentar und wird von der Maschine nicht beachtet: G1 X0 Y0 Z1 //Fahre zum Nullpunkt, Höhe 1mm G1 X0 Y0 Z-5 //Fahre/Bohre 5mm direkt nach unten G1 X0 Y0 Z1 //Hole den Bohrer wieder aus dem Loch heraus G1 X10 Y0 Z1 //Fahre zur nächsten Position G1 X10 Y0 Z-5 //Bohre das zweite Loch G1 X10 Y0 Z1 //Hole den Bohrer nach oben Wie man sich schnell vorstellen kann, ist das händische Schreiben von G-Code langwierig und fehleranfällig. Um eine CNC-Fräse richtig benutzen zu können, muss daher ein Programm verwendet werden, welches automatisch G-Code erstellt - in unserem Fall aus den Konturen eines Platinendesigns. ==== Theorie: Platinen Fräsen ==== Platinen sind Epoxid- oder Hartpapierplatten mit einer dünnen Kupferschicht auf einer oder beiden Seiten. Der wichtigste Arbeitsschritt beim Platinenfräsen ist das sogenannte Isolationsfräsen, bei dem Leiterbahnen voneinander getrennt werden. Dafür muss ein Fräser die Konturen der einzelnen Leiterbahnen bzw. Kupferflächen abfahren und dabei die Kupferschicht vollständig durchtrennen. Die dabei entstehende Fräsbahn hat (bei Verwendung eines geeigneten Fräsers) eine Breite von bis zu einem halben Millimeter - was zur Folge hat dass zwei zu fräsende Kupferflächen nicht zu dicht aufeinander liegen dürfen. Nach dem Isolationsfräsen können die Löcher für {{https://de.wikipedia.org/wiki/Durchkontaktierung|Vias}} und {{https://de.wikipedia.org/wiki/Through_Hole_Technology|THT}}-Komponenten gebohrt werden. Abschließend können noch Aussparrungen in der Platine, und dann die Außenkontur derselben gefräst werden. ===== Vorbereiten des Platinendesigns in Eagle ===== Da das Platinenfräsen keine so feinfühlige Arbeit wie das Platinenätzen ist, sollte beim Entwurf der Schaltung darauf geachtet werden, keine winzigen SMD-Komponenten zu verwenden. Da auch alle Leiterbahnen, Pads und Vias ausreichend groß gestaltet sein sollten, ist es meistens auch nicht möglich Leiterbahnen zwischen den Pins von DIP-Bauteilen hindurchzuführen. Das Design ist deshalb für komplexe Platinen oft schwieriger und mit mehr Drahtbrücken bei einseitigen bzw Vias bei zweiseitigen Platinen verbunden. === Design Rules Check === Um zu kontrollieren dass das Design auch Frästauglich ist, können bei Eagle //Design Rules// verwendet werden. Ein fertiger Satz Frästauglicher Designregeln findet sich {{https://github.com/fablab-ka/TinyCNC_PCB_Tools|hier}}. Nachdem die Datei heruntergeladen und abgespeichert wurde (idealerweise im Eagle-Unterverzeichniss //dru//), kann Sie unter //Tools->DRC//geladen werden. Nach einem Klick auf //Apply// passen einige Elemente wie Pads und Vias gegebenenfalls automatisch ihre Größe den Erfordernissen an. Mit einem Klick auf //Check// wird die Platine dann auf Fehler im Design überprüft. Wenn Fehler aufgetreten sind öffnet sich ein kleines Fenster mit der Fehlerliste. Mit einem Doppelklick auf den Fehler in der Liste kann dann gleich gesehen werden wo es Probleme gibt. Nachdem alle Fehler durch Verschieben von Leiterbahnen und Bauteilen oder durch einen mehr oder weniger großen Umstrukturierungsvorgang beseitigt sind, ist die Platine Frästauglich. === Gerber-Export === Der Industriestandard für die Weitergabe von Platinendesigns in die Computergestützte Produktion (CAM) ist das {{https://de.wikipedia.org/wiki/Gerber-Format|Gerber-Format}}. Dabei können in Eagle aus einer Fülle von Formaten und Optionen ausgewählt werden, was genau benötigt wird. Ein fertiger Satz Export-Einstellungen findet sich {{https://github.com/fablab-ka/TinyCNC_PCB_Tools|hier}}. Nachdem die Datei heruntergeladen und (idealerweise im Eagle-Unterverzeichniss //cam//) abgespeichert wurde, kann unter dem Menüpunkt //File->CAM Prozessor// das Export fenster geöffnet werden und dort unter //File->Open->Job// die heruntergeladene Datei ausgewählt werden. Dabei werden fünf Tabs im Fenster erzeugt: * **Top** beinhaltet die obere Kupferseite mit ihren Leiterbahnen. bei einseitigen Platinen wird sie nicht benötigt. Sie erzeigt die Gerber-Datei Datei //top.grbl//. * **Bottom** beinhaltet die untere Kupferseite mit ihren Leiterbahnen. Sie erzeúgt die Gerber-Datei //bottom.grbl//. * **Bohrungen** speichert die Informationen über Bohrungen. Hierbei wird nicht das Gerber-Format, sondern das Excellon-Format. Sie erzeugt die Datei //bohr.xln//. * **Dimension** beinhaltet die Außenkontur der Platine. Sie erzeugt die Gerber-Datei //dimension.grbl//. * **Mill** beinhaltet weitere Fräsungen in der Platine, zB größere Befestigungs-Langlöcher. Sie erzeigt die Datei //mill.grbl//. Alle Exportdateien werden im Ordner erzeugt, in dem sich auch die Eagle-Dateien des Platinenlayouts befinden. ===== Benutzung anderer Designtools ===== Natürlich ist Eagle nicht das einzige Programm, mit dem Platinen designed werden können. Für den Fall dass ein anderes Tool verwendet werden soll, sind hier die wichtigsten Einstellungen der Eagle Design Rules aufgelistet: * Clearance: 16mil Abstand zwischen Pad/Wire/Via * Distance: 40mil Abstand zum Platinenrand * Sizes: 16mil minimale Leiterbreite * Resting: 20mil minimale Padgröße, 32mil minimale Viagröße * Supply: 16mil thermische Isolation, generiere Thermals für Vias Exporteinstellungen * Top: Gerber_RS274X, Layer: Top, Pads, Vias * Bottom: Gerber_RS274X, Spiegeln, Layer: Bottom, Pads, Vias * Bohrungen: Excellon_24, Layer: Drills, Holes * Dimension: Gerber_RS274X, Layer: Dimension * Mill: Gerber_RS274X, Layer: Milling ===== Erzeugen von G-Code mit FlatCam ===== FlatCam hat Probleme mit Dateipfaden, in denen Leerzeichen oder Umlaute vorkommen. Falls beim Dateiimport nichts passiert, die Dateien unter einem anderen Ordner ohne Leerzeichen und Umlaute speichern, zB //C:/tmp/// Nachdem FlatCam gestartet wurde, muss es zuerst noch für Eagle konfiguriert werden. Dafür muss die FlatCam-Kommandozeile unter //Tool->Command Line// gestartet werden und folgender Code eingegeben werden: set_sys excellon_zeros T Der Code sollte mit einem //Ok// quittiert werden, daraufhin kann das Fenster wieder geschlossen werden. === Isolationsfräsen === Unter //File->Open Gerber// wird die Datei //bottom.grbl// ausgewählt. Nach einigen Sekunden sollte das Layout der Leiterbahnen der Platine zu sehen sein. Mit einem Doppelklick auf den einzigen Eintrag in der Liste links kommt man dann zu den Einstellungen des Isolationsfräsens (Isolation Routing). Wir wählen hier einen **Tool dia.** von 0.4 und eine **Width** von 1. Mit einem Klick auf //Create Geometry// wird dann die Fräsbahn erzeugt. Nachdem optisch überprüft wurde, dass auch alle Leiterbahnen voneinander isoliert wurden, kann im linken Teil des Fenster nach einem Klick auf //Project// der Eintrag //bottom.grbl_iso// per Doppelklick ausgewählt werden. Hier müssen noch die Maschinenspezifischen Einstellungen ausgewählt werden: * **Cut Z** -0.3 * **Travel Z** 1 * **Feed Rate** 400 * **Tool dia** 0.4 Mit einem Klick auf //Generate// wird dann der passende G-Code erzeugt. Nachdem die Liste wieder durch einen Klick auf //Project// angezeigt wird und der Eintrag bottom.grbl_iso_cnc durch Doppelklick aktiviert wurde, kann der G-Code schlussendlich mit einem Klick auf //Export G-Code// gespeichert werden. Wir wählen als Namen hier //bottom.gcode//. Falls eine zweiseitige Platine erforderlich ist, muss der obere Vorgang noch einmal für die Gerber-Datei top.grbl wiederholt werden. === Bohrungen === Mit //File->Open Excellon// wird die Datei bohr.xln geladen und der Listenpunkt durch Doppelklick ausgewählt. In der Tabelle //Tools// werden einem alle auf der Platine vorkommenden Bohrdurchmesser angezeigt. Wenn mit unterschiedlichen Bohrern gearbeitet werden soll, dann müssen alle "unpassenden" Durchmesser abgewählt werden. Als Einstellungen wird **Cut Z** -3.0, **Travel Z** 1 und **Feed Rate** 100 gewählt. Mit einem Klick auf //Generate// wird dann der G-Code erzeugt. Nach einem Doppelklick auf //bohr.xln_cnc// kann der G-Code mit einem Klick auf //Export G-Code// unter dem Namen //bohr.gcode// gespeichert werden. === Fräsungen === Wenn Aussparungen oder Ähnliches in die Platine gefräst werden sollen, dann kann mit //File->Open Gerber// die Datei //mill.grbl// geöffnet werden.Als **Tool dia** benutzen wir hier -2.0, was zur Folge hat dass die Fräsung nach innen versetzt wurde, mit einem 2mm-Zylinderfräser wird damit genau die im Design eingetragene Fräsung (vorrausgesetzt sie ist mind. 2mm breit) abgefahren. Nach dem üblichen Klick auf //Generate Geometry// wird in der Liste der Eintrag //mill.grbl_iso// gewählt und der Gcode mit folgenden Optionen erzeugt: * **Cut Z** -2.0 * **Travel Z** 1.0 * **Feed Rate** 50 * **Tool Dia** 2.0 Danach wird der G-Code unter dem Namen //mill.gcode// abgespeichert. ===== Fräsen der Platine ===== === Vorbereiten der Fräse === Da die Fräse noch keinen festen Platz hat, muss sie vor Benutzung zuerst Funktionsfähig gemacht werden: * Fräse an geeignetem Arbeitsplatz aufstellen. * Fräse an Steckdosen anschließen. * Fräse mit USB-Kabel zu Computer verbinden. * Bei Bedarf Einspannen einer neuen Opferplatte. * Aufkleben einer Platine mithilfe von doppelseitigem Klebeband. Mit dem Proxxon-Maulschlüssel und einem weiteren 10er-Schlüssel kann dann das erste Werkzeug, der Gravierstichel, in der Fräse eingespannt werden. Dabei ist darauf zu achten dass die richtige Spannzange benutzt wird - in eine falsche passt er nicht rein oder fällt leicht wieder heraus. Dannach kann der Universal G-Code Sender gestartet werden. Als Baudrate wird //115200// eingetragen, der Port sollte automatisch gefunden worden sein, als Firmware wird //GRBL// ausgewählt. Mit einem Klick auf //Open// wird die Verbindung aufgebaut. Nachdem das Tab //Machine Control// auf der rechten Seite ausgewählt wird, kann mit einem Klick auf //$H// die Referenzfahrt gestartet werden. Die Fräse fährt jetzt zuerst den Z-Nullpunkt und dannach den XY-Nullpunkt an. **Achtung**: Bei der Z-Fahrt kann die schwarze Plastikabdeckung der Z-Achse so weit nach oben geschoben werden dass sie heraussteht. Wenn das passiert, nochmal die Referenzfahrt starten und per Hand die Abdeckung hinten halten. === Einstellen des Nullpunkt === Im Tab //Machine Mode// wird zuerst die //Step size// auf 10 eingestellt und dann mit einem viermaligem Klick auf **Y-** und einem einmaligem Klick auf **X-** der Nullpunkt in der X- und Y-Achse eingestellt. Danach wird mit Klicken auf //Z-// vorsichtig an die Platine herangefahren. Zuerst mit 10mm-Schritten, dann mit 1mm-Schritten und dann mit 0.1mm-Schritten. auf jen letzten Zehntelmillimetern hilft ein Multimeter im Durchgangsmodus, dessen Messspitzen jeweils an Platine und Fräser gehalten werden. Sobald ein Kontakt besteht, hat man die passende Höhe gefunden. Jetzt noch 0,1mm nach Z+ fahren und per //Reset Zero// den neuen Nullpunkt setzen. Jetzt die Spindeldrehzahl mit dem Drehrad auf **16** einstellen und die Spindel einschalten. Noch einmal sicherstellen dass sich keine Fremdkörper im Fräsbereich befinden. === Isolationsfräsen === Im Tab //File Mode// kann jetzt die Datei //bottom.gcode// geladen und mit einem Klick auf //Send// gesendet werden. Die Fräse beginnt nach einer Sekunde zu arbeiten. Sollte etwas schiefgehen, sofort den Aus-Schalter der Fräse betätigen und danach die Spindel ausschalten. Danach muss eine neue Referenzfahrt eingeleitet werden. Während des Isolationsfräsens immer mal wieder mit dem Staubsauger die Späne beseitigen und überprüfen ob die Bahn in Ordnung ist. Wenn das Kupfer nicht ganz durchtrennt wurde oder die Bahn viel zu breit ist bei Bedarf den Vorgang beenden und den Fehler suchen. === zweiseitiges Isolationsfräsen === Bei zweiseitigen Platinen sollte zuerst die Datei //top.gcode// ausgeführt werden. Dabei muss der Nullpunkt nach unten links gelegt werden, was durch 10cm Verfahren in Richtung **X-** gemacht wird. Also erster Schritt sollte im Nullpunkt ein Loch gebohrt werden, damit ist eine Referenz für die zweite Seite gegeben. Die Platine muss genau an einem Anschlag ausgerichtet werden damit beide Seiten deckungsgleich sind. Nachdem das Top-layer gefräst wurde, wird die Platine abgenommen, umgedreht und wieder aufgeklebt. Jetzt richtet man den Nullpunkt am gebohrten Loch aus. Dann kann die Datei //bottom.gcode// ausgeführt werden. Ob alles passt sieht man aber erst am Ende, wenn man die Platine wieder abnimmt. === Bohren === Die Fräse nach oben fahren lassen und den Gravierstichel ausspannen. Dabei aufpassen dass die X- und Y-Achsen nicht durch versehentliche Berührung verstellt werden! Jetzt den passenden Bohrer einspannen und wie beim ersten Mal wieder vorsichtig in negativer Z-Achse vorantasten. Diesmal genügt eine Einstellung auf 1mm genau aus, da der Bohrer die Platine nicht ankratzen soll, sondern sie vollständig durchbohrt. Die Spindeldrehzahl auf 18 einstellen und die Spindel wieder einschalten. Nachdem die Datei //bohr.gcode// geladen ist, kann gebohrt werden. === Fräsen === Zum Fräsen wird ein 2mm-Zylinderfräser eingespannt und die Drehzahl auf 10 gesetzt. Nach dem üblichen Anfahren des Nullpunkts kann dann die Datei //mill.gcode// gefolgt von //dimension.gcode// ausgeführt werden. === Abbau === Nachdem die Platine von der Opferplatte abgezogen wurde, wird die Fräse mit dem STaubsauger gereinigt, abgebaut und ordentlich verstaut.