Mit dem Schaltplan- und Layout-Editor EAGLE (Einfach Anzuwendender Grafischer Layout Editor) können in der Freeware-Version zweiseitige Platinen bis zur Größe einer halben Europakarte - entsprechend 8 x 10 cm - erstellt werden.
Die fertige Platine kann man bei einem professionellen Leiterplattenservice in Auftrag geben, man kann die Platine aber auch in Eigenregie fertigen.
Der frühere Ansatz, die Platine im chemischen Verfahren zu ätzen, hat mich nie wirklich überzeugt, die Entsorgung der anfallenden Reste in Form einer giftigen Brühe über das Schadstoffmobil wirken als Spaßbremse.
Seit ich im Besitz einer CNC-Fräse und der passenden Software in Form von OpenCNCPilot bin, habe ich Abstand von der fotochemischen Variante genommen und fräse meine Platinen.
Initiale Unterstützung bei der Wandlung der in EAGLE erstellten Platine in eine von meiner Fräse interpretierbaren Form von Daten bietet das ULP (User Language Program) PCB-Gcode, das von John T. Johnson 2003 erstellt wurde. PCB-Gcode wandelt die Polygone von EAGLE in umschließende Bahnen um, die dann von der Fräse abgefahren werden - man spricht von Isolationsfräsen. Hier der Link auf die aktuelle Version des ULP. Das ULP funktioniert auch mit aktuelleren Versionen von EAGLE, ich arbeite mit EAGLE V7.7.
Als Werkzeug für die Erzeugung der Fräsbahnen zur Leiterplattenherstellung werden gemeinhin sogenannte V-Fräser oder auch Gravierstichel verwendet. Ich verwende normalerweise solche mit 0,2 mm Spitzenbreite und einem Schneidenwinkel von 45 oder 30 Grad. Bei besonders kleinen Strukturen kommt auch schon mal ein Stichel mit 0,1 mm Spitzenbreite und 10 Grad Spitzenwinkel zum Einsatz. Die einfachsten und sehr gut geeigneten Stichel haben einen D-förmigen Querschnitt und somit eine Schneide. Im ULP kann man auswählen, ob die Gravur mit der Vorschubrichtung (“Always climb” genannt) oder gegen die Vorschubrichtung erfolgen soll. Nach meiner Erfahrung werden die Kanten, die gegen den Vorschub geschnitten werden am saubersten, Kanten, die mit dem Vorschub geschnitten werden, sehen nicht sehr schön aus, wirken meist etwas ausgefranst.
Leider kann das ULP in seiner ursprünglichen Form alle Fräsbahnen entweder nur mit oder ohne die Option “Always climb” erzeugen, man muss sich also entscheiden und legt sich am besten auf “Normal”, also nicht “Always climb” fest, dann sind wenigstens die Konturen der Leiterbahnen sauber.
Da ich mit diesem Verhalten des ULP unzufrieden war, habe ich das Programm analysiert und mit wirklich überschaubarem Aufwand die Möglichkeit geschaffen, die erste Kontur um den resultierenden Leiter herum in der bevorzugten Richtung, also gegen den Vorschub zu fräsen, alle weiteren Fräsbahnen jedoch in der entgegengesetzten Richtung, so dass jetzt auch die Konturen der übrig bleibenden Kupferflächen gegen den Vorschub geschnitten werden. Damit sehen die resultierenden Kanten der Kupferflächen genauso gut aus, wie die Leiterbahnen.
Die Änderung am ULP ist in der Datei “PCB-Gcode.ulp” ab Zeile 1288 einzubauen, direkt hinter
// set direction of cut around contour
if (((g_side == TOP) && !CLIMB_MILLING) ||
((g_side == BOTTOM) && CLIMB_MILLING))
m_fwd = true; else m_fwd = false;
Hier habe ich den folgenden Code eingefügt:
////////// Harald added 13 Feb 2020
// Provided our tool is rotating clockwise when viewed from the top.
// If we are in the first turn around a trace, we mill it
normal (not climbing) since we mill the _inner_ side of the trench,
// so we move the tool on the right side of the trace counter clock wise around the track.
// If we are in the second or beyond turn, switch to
the opposite mode (climbing) since now we mill the _outer_ side of the trench,
// which results again in "normal" (not climbing) milling for the given side of the trench.
// If the user chose
"climbing" in the settings, both cases result in "climbing" milling
if (m_pass_num == 0) m_fwd ; else m_fwd = !m_fwd;
//////////
Zuerst viel Kommentar, echter Code ist nur die letzte Zeile. Hier wird im ersten Durchgang (m_pass_num == 0) die im Setup von PCB-Gcode eingestellte Richtung beibehalten, in allen weiteren Fällen, also wenn und falls Durchgänge erfolgen um den Graben zwischen Leiterbahn und verbleibender Kupferfläche zu vergrößern, wird die Fräsrichtung umgekehrt.
Eine weitere Verbesserung gegenüber der Originalversion wurde bereits Ende 2017 von Alexander Arkusha vorgeschlagen.
Bei dieser Verbesserung geht es um das Problem, dass im Original die Markierungen für die Löcher, Spot Drill genannt, mit derselben Tiefe gebohrt wurden wie die richtigen Löcher, wenn die Erzeugung der Drill-Datei aktiviert ist. Korrekter Weise sollen die Spot Drills nur die Oberfläche markieren um ein Verlaufen des Bohrers beim Ansetzen zu verhindern.
Die von Alexander vorgeschlagene Korrektur am Code ist etwas umfangreicher, es müssen folgende Änderungen durchgeführt werden (ich füge hier den Originaltext von Alexander ein, der auch von John Johnson genau so zitiert wird):
step 1. ADD FOLLOWING TEXT AT THE END OF "source\pcb-file-utils.h"
void output_drill_spot_hole(real drill_x, real drill_y, real depth)
{
if (SIMPLE_DRILL_CODE) {
rxy(drill_x, drill_y);
fzr(depth, FEED_RATE_DRILL_Z);
rz(DEFAULT_Z_UP);
}
else {
out(frrrr(DRILL_SPOT_HOLE, drill_x, drill_y, depth, FEED_RATE_DRILL_Z));
update_cur_xy(drill_x, drill_y);
}
}
step 2. ADD FOLLOWING TEXT FROM LINE #102 IN "settings\gcode-defaults.h"
string DRILL_SPOT_HOLE = RAPID + MOVE_XY + EOL
+ FEED_MOVE_Z_WITH_RATE + EOL
+ RAPID + "Z" + real_to_string(DEFAULT_Z_UP) + EOL;
step 3. REPLACE FOLLOWING TEXT BETWEEN LINES ##467-473 IN "PCB-Gcode.ulp"
if (m_first_spot_drill) {
output_drill_first_hole(drill_x, drill_y, SPOT_DRILL_DEPTH);
m_first_spot_drill = NO;
}
else {
output_drill_hole(drill_x, drill_y, SPOT_DRILL_DEPTH);
}
...WITH FOLLOWING TEXT
output_drill_spot_hole(drill_x, drill_y, SPOT_DRILL_DEPTH);
step 4. (optional): REMOVE LINE #455 IN "PCB-Gcode.ulp"
SINCE VARIABLE m_first_spot_drill BECAME USELESS.
Es gibt weitere Verbesserungen. So existiert ein Patch von Timo Birnschein, der das Ausfräsen der fertigen Leiterplatte in mehrere Durchgänge splittet, damit der Fräser nicht die komplette Dicke der Platine in einem Durchgang fräsen muss. Der Patch wird auf Hackaday.io beschrieben, der komplette Code findet sich hier.
Leider fehlt auch hier noch die Möglichkeit, sogenannte Anbindungen zu generieren, die die fertig ausgeschnittene Platine im restlichen Platinenmaterial festhält um ein Verkanten des Fräsers zu verhindern. Wenn die Rohplatine allerdings flächig mit doppelseitigem Klebeband fixiert ist, kann auf Anbindungen verzichtet werden.
Hier der Link auf die offizielle Homepage von PCB-Gcode.
Bei einfachen Geometrien der Platine, z.B. rechteckig, kann man diese Korrektur manuell berücksichtigen und man hat dadurch dann sogar die Möglichkeit sogenannte Anbindungen vorzusehen. Bei komplizierteren Umrissen ist dieses Verfahren aber aufwändig. Hat die Platine dann noch Einschnitte und/oder muss Abmessungen genau einhalten, kommt man schnell an die Grenze des mit vernünftigem Aufwand noch Machbaren.
Zum Glück gibt es das Tool GCode-Ripper, das den von PCB-Gcode generierten GCode wieder ins DXF Format zurück wandeln kann, so dass man z.B. Estlcam dazu verwenden kann, die Fräserbahn mit Fräserradiuskorrektur und Anbindungen zu erzeugen. So geschehen beispielsweise bei dem Ersatznetzteil für unsere Paradigma Heizung.
Hinweis
John hat in der aktuellen Version V3.7.0 einige der erwähnten Verbesserungen in sein
ULP eingebracht. Leider ist ihm dabei ein kleiner Fauxpas unterlaufen, weshalb Konturen einer Leiterplatte mit abgerundeten Ecken nicht korrekt erzeugt werden.
Die Konstruktion in EAGLE (hier beim E-Scooter Bremslicht):
Das Ergebnis auf der Fräse:
Anstelle einer verrundeten Ecke werden kleine Ohren erzeugt.
Das hat John repariert, leider in der etwas älteren Version 3.6.6 des ULP. Die aktuelle 3.7.0 wurde bisher nicht diesbezüglich überarbeitet (Stand 07/2024).
Wo wir gerade bei Versionen von pcb-gcode sind...
Die von mir eingesetzte Version 3.7 ist anscheinend nie als offizielle Version veröffentlicht worden. Zumindest gibt es Stand heute (07/2024) nur V3.6.6 unter Master auf Github.
Die V3.7 findet sich im Branch endmill-holes. Aber Achtung, hier funktionieren die abgerundeten Ecken nicht, siehe oben.
Der Vorteil der V3.7 gegenüber V3.6.6 ist die Möglichkeit, Löcher in der Platine mit einem Fräser kleineren Durchmessers per helical drill auszuführen. Dabei wird der Lochdurchmesser in kreisförmigen Bahnen langsam in das Platinenmaterial abgesenkt, es entfällt die Notwendigkeit, für jeden Lochdurchmesser den passenden Fräser einsetzen zu müssen.
Damit das funktioniert, muss im Drill-Rack-File, das ist die Datei default.drl im Ordner settings innerhalb des pcb-gcode Verzeichnisses, eingetragen werden, welcher Fräser für welche minimalen und maximalen Durchmesser verwendet werden soll.
Genauere Informationen, wie die Tabelle aufzubauen ist, findet man im Handbuch pcbgcode.pdf, zu finden im Ordner docs.
Update
Ich habe mich mal hingesetzt und die Korrekturen aus V3.6.6 in meine aktive V3.7.0
übertragen. WinMerge ist dabei normalerweise eine große Hilfe, wobei ich diesmal die Vergleichsoption von Github heran gezogen habe.
Kurzum, meine “private” Version von pcb_gcode.ulp erzeugt jetzt abgerundete Ecken korrekt und beherrscht helical drill. Letztlich endlich das rundum-sorglos-Paket von pcb_gcode, das ich mir für meine Zwecke schon immer gewünscht habe :)
Da ich das Voodoo um forks auf Github nicht (gut genug) beherrsche, biete ich die von mir gepatchte V3.7.0 für Interessierte hier zum Download an.
Ich muss aber anmerken, dass die Github Version V3.6.6 von John 21 Änderungen mehr aufweist, als die von mir gepatchte V3.7.0. Es ist also nicht ausgeschlossen, eher sehr
wahrscheinlich, dass die V3.6.6 Korrekturen für Fehler enthält, die mir einfach noch nicht aufgefallen sind. Der changelog auf Github ist in dieser Richtung etwas wirr
aufgebaut, vermutlich, weil John nur noch sehr sporadisch an pcb_gcode arbeitet und dadurch vielleicht hin und wieder den Faden verloren hat ;)
Oder ich durchschaue Johns Kommentare schlicht nicht.
Nota bene:
Die Version V3.7.0 meldet sich im Konfigurationsdialog als Version 3.7.2-alpha.