Allgemein_Header_6

 

PCB-Gcode

[Dieser Text in Englisch]

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.


Tipp
Leider generiert PCB-Gcode den Umriss eines Boards im Milling Layer nur mit einer Fräserbahn exakt auf dem Platinenumriss. Würde man das mit der CNC-Fräse so ausführen , wäre die Platine auf jeder Seite um den halben Fräserdurchmesser zu klein.

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.

 


Beim Aufruf dieser Funktion werden Daten an Google in USA übermittelt. Neben Ihrer IP-Adresse wird auch die URL der besuchten Seite übertragen.
Besucherzaehler

Besucher seit
25.11.2000