KiCad/Reverse Engineering

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Diese Seite beschreibt das Reverse-Engineering von Leiterplatten mittels KiCad.

Manchmal hat man nur noch die Leiterplatte vorliegen ohne weitere Dokumentation. Mittels des Reverse-Engineering soll dann das Leiterplatten-Layout repliziert werden z.B. um eine neue Charge herzustellen oder es soll sogar der Schaltplan aus dem Layout herausgezeichnet werden z.B. für Fehlersuche / Reparatur oder ein tiferes Verständnis der Schaltung.

Hier wird beschrieben, wie aus Photos der Leiterplatte wieder das Layout und der Schaltplan rekonstruiert werden kann.

Hinweis: Dieses Tutorial richtet sich an Nutzer, die bereits schon einige Erfahrungen mit KiCad gesammelt und einige eigene Leiterplatten design haben. Es wird vorausgesetzt, dass man mit der grundsätzlichen Bedienung, insbesondere dem Layer-Modell und den Tastenkombinationen vertraut ist.


Gültigkeit

Diese Anleitung ist gültig für folgende KiCad-Versionen:


Vorbereiten der Leiterplatte

  • Die Platine umfassend photographisch dokumentieren:
    • Alle Steckverbinder und Nummern, Positionen von Jumpern,
    • alle Kabelfarben,
    • alle übrigen Beschriftungen, Revisionsstände etc.,
    • alle Bauteilwerte, Farbringe, IC-Nummern etc. sollen deutlich sichtbar sein!
      • Bauteilwerte ggf. schriftlich notieren.
    • Leiterplatten-Abmessungen mit Messschieber erfassen und notieren.
      • Bei komplexen Geometrien Skizze anfertigen.
  • Leiterplatte gründlich reinigen:
    • Staub vorab mit weichem Pinsel / Bürste entfernen.
    • Lötseite(n) mit Isopropanol / Ethanol von Flussmittelresten mit (Zahn-)bürste sorgfältig befreien.
      • Für besonders hartnäckige / angebrannte Flussmittelreste eignet sich industrieller Leiterplattenreiniger wie "Electrulube Fluxclene (FLU)" oder "Kontakt LR".
    • Leiterplatte gründlich mit Alkohol spülen.
    • Leiterplatte mit warmer (nicht heißer!) Luft trocknen z.B. vom Haartrockner.
      • Dabei für gute Belüftung sorgen, da Alkoholdämpfe zündfähige Gemische bilden können - am besten
    • Bei der Verdunstung von Alkohol können sich Wasserrückstände bilden entweder durch Kondensation von Raumluft oder als Rückstand des nichthundertprozentigen Alkohols. - Diese Rückstände mit einem Papiertuch aufsaugen.
    • Reinigungsschritte ggf. wiederholen.


Photographieren der Leiterplatte

  • Für ausreichende, diffuse Rundum-Beleuchtung sorgen (ggf. draußen photographieren).
  • Direktes Licht vermeiden, da sich sonst Schlagschatten bilden.
  • Punktuelles Licht vermeiden, da sich sonst unerwünschte Reflektionen bilden können.
  • Leiterplatte auf einfarbige, neutrale Unterlage (weiß, grau) positionieren.
  • Leiterplatte eben (d.h. flach) ausrichten.
  • Leiterplatte gerade (d.h. möglichst parallel zu einer Bezugslinie, z.B. Tischkante) ausrichten. - Das erspart das spätere Rotieren.
  • Kein Handy zum Photographieren verwenden, sondern eine richtige Kamera!
  • Makro-Objektiv oder Makro-Funktion verwenden.
  • Die Kamera so weit wie möglich von der Leiterplatte halten jedoch so nah wie nötig, um noch fokussieren zu können.
    • Das minimiert die perspektivischen Verzerrungen zu den Rändern und Abschattungen bei hohen Bauteilen (z.B. Elkos).
  • Ggf. Hilfslinien im Display einblenden und sich an diesen orientieren.
  • Kamera mittig über die Leiterplatte halten.
  • So nah ranzoomen, dass die Vorschau möglichst ausgefüllt ist.
  • Blitzen ist OK. Optimal ist indirektes Blitzen mittels Softbox. Probieren geht über studieren!
  • Keinen Digital-Zoom verwenden!
  • Keinen "Kreativ-Modus" oder irgendwelche Automatiken verwenden.
  • Der übliche Programm-Modus ("P") ist ausreichend.
  • Bei ausreichender Beleuchtung sind ISO, Belichtungszeit und Blende irrelevand und werden eh zu deinem Gunsten eingestellt (d.h. möglichst feinkörnig, möglichst kurz und möglichst tiefenscharf).
  • Ausreichend Bilder machen!
    • Speicherplatz kostet nichts. - Nichts ist jedoch ärgerlicher, als alles noch mal zu wiederholen, weil man am Rechner festgestellt hat, dass doch kein befriedigendes Bild dabei ist.
  • Beide seiten sorgfältig Photographieren.


Nachbereiten der Bilder

  • Beim Sichten der Bilder die Auswahl der Bilder auf zwei, maximal drei je Seite einschränken. - Diese können weiter optimiert werden.
    • Die übrigen Bilder verbleiben als Backup.
  • Als gutes Bildbetrachtungs- und Bearbeitungs-Programm für den Alltag hat sich beim Autor seit über 25 Jahren IrfanView bewährt.[1]
  • Die Bilder grob vorcroppen (ca. 5 mm vom Platinenrand).
  • Die Bilder grob zurechtdrehen, falls notwenig.
  • Beim Speichern maximale Qualität ("lossless JPG") bevorzugen.


Die folgenden Schritte in GIMP orientieren sich an diesem YouTube-Tutorial: Dhishoom Dhishoom: Reverse Engineer PCB Kicad

  • Für eine korrekte Anpassungn der Abmessungen und evtl. perspektivische Entzerrung der Bilder wird das Open-Souce-Programm GIMP[2] verwendet.
  • Per Drag-and-Drop das Bild in GIMP reinziehen
  • Neues leeres Bild erstellen mit "Strg + N"
    • Als Abmessungen die Abmessungen der Leiterplatte angeben
    • Als dpi-Auflösung die des bestehenden Bildes (siehe EXIF-Informationen)
  • Das importierte Bild mittels "Strg + C" kopieren und in das neue leere Bild mittels "Strg + V" einfügen
    • Es sollte jetzt etwas größer sein, als der vorgezeichnete, gestrichelte Rahmen, so das die Randbereiche noch nicht sichtbar sind. - Das ist OK.
  • Menü -> Werkzeuge -> Transformationen -> Perspektive wählen.
  • Das Bild an den vier Ecken so zerren / stauchen, dass die Ecken der Leiterplatte exakt auf den Ecken des gestrichelten Rahmens zu liegen kommen.
    • Mittels "Strg + Mausrad" kann gezoomt werden.
  • Wenn man mit dem Ergebnis zufrieden ist, den Button "Transformation" klicken.
    • Das Bild wird eingepasst, es sollten jetzt alle Leiterbahnen / Bauteile bis an den Rand der Leiterplatte korrekt dargestellt werden.
  • Menü -> Datei -> Exportieren klicken.
    • Zielpfad und Dateiname (inkl. Dateiendung!) wählen.
    • Exportieren klicken.
      • Qualität auf "100" stellen, andere Einstellungen können so beibehalten werden.

Wir sollten hiernach jetzt mindestens zwei Ansichten von Lötseite und Bestückseite haben, die möglichst unverzerrt sind und exakt so groß (in mm) wie die eigentliche Leiterplatte.


Import in KiCad

  • Wir fangen im Board-Editor an.
  • Es empfiehlt sich, vorab zwei der User-Layer umzubenennen z.B. in "IMG_Loet" und "IMG_Bestueck".
    • Dies hat den Vorteil, dass sich diese nachher beliebig ein- und Ausblenden lassen.
  • Leiterplattenumriss auf Layer "Edge_Cuts" zeichnen.
  • Ursprung sinnvoll zuordnen, z.B. in linke obere Ecke.
  • Leiterplattenumriss durch Kopieren auf die Layer "IMG_Loet" und "IMG_Bestueck" übertragen und in selben Ursprung verschieben, d.h. deckungsgleich zum eigentlichen Leiterplattenumriss.
  • Layer "IMG_Loet" selektieren.
  • Mittels des Bitmap-Tools das zuvor in GIMP "transformierte" Photo von der Lötseite importieren.
  • Da wir bereits die Abmessungen korrekt eingestellt haben, können wir "Scale = 1.000000" beibehalten.
    • Das importierte Bild sollte jetzt exakt gleichgroß sein, wie unsere gezeichneten umrisse.
  • Das importierte Bild ungefähr in die Ecke der Leiterplatte schieben.
    • Zur präzisen Positionierung das Bild selektieren und "E" (für Eigenschaften bzw. Properties) drücken.
      • Sicherstellen, dass das Bild dem korrekten Layer zugeordnet ist (hier also: IMG_Loet).
      • Für die Positionskoordinaten die jeweils halben Bildabessungen für X und Y eingeben. Das Bild hat nämlich seinen Ursprung in der Mitte. Damit wird es exakt in die zuvor gezeichneten Umrisse eingepasst.
  • Schritte für Layer "IMG_Bestueck" mit dem Photo der Bestückungsseite wiederholen.
  • Wenn die Ansichten soweit zufriedenstellend sind, können die Umrisse und die Bilder "gelockt" werden, um sie vor versehentlichem Verschieben oder Löschen zu schützen.
  • Beim "Selection Filter" empfiehlt es sich dann auch, das Häkchen bei "Locked items" zu löschen. - So können die (im Gegensatz zu Bauteilen vollflächigen) Bilder beim versehentlichen Anklicken nicht mehr selektiert werden und verdrängen so nicht alle anderen Bauteile und Leiterbahnen in den Hintergrund.

Positionieren der Bauteile

  • Beide Ebenen "IMG_Loet" und "IMG_Bestueck" einblenden.
  • Die "Opacity" so einstellen, dass beide Seiten gut sichtbar sind, d.h. Bauteile und Leiterbahnen gut zu erkennen sind wie in einer Art "Röntgenblick."
  • Für große oder vielpinnige THT-Bauteile (z.B. ICs, Steckverbinder), empfiehlt es sich, Hilfslinien auf z.B. "User.Comments" zu zeichnen.
    • Geeigentes Raster einstellen. Z.B. für DIP-ICs 0,254 oder 0,127 mm, um die Linien präzise positionieren zu können.
    • Zeichenmodus falls möglich auf "H, V, 45°" einschränken
    • Hilfslinien durch die Pin-Reihen der ICs ziehen.
    • IC-Gehäuse anhand der Hilfslinien ausrichten und platzieren.
  • Übrige Bauteile positionieren.
  • Bauteilnamen ("Reference") wie im Bestückungsdruck zuordnen oder falls nicht vorhanden automatisch durchnummerieren lassen


Leiterbahnen nachzeichnen

  • Es empfiehlt sich, mit GND und der übrigen Stromversorgung anzufangen.
  • Alle Pins von Bauteilen mit einer Massefläche oder Leiterbahn verbunden sind, erhalten als Netzname das Label "GND".
  • Alle Pins mit einer Versorgungsspannung verbunden sind, erhalten als Netzname ein sinvolles Label z.B. "Vcc", "+12V" etc.
  • Bei ICs empfiehlt es sich, den Referenz-Bezeichner des ICs voranzustellen, z.B. "IC1_p1" für Pin 1 von IC1.
    • Man kann auch anhand der Datenblätter die konkrete Funktion dem Pin zuordnen (z.B. "IC1_RESET"), dies ist aber nur zusätzliche Arbeit und bringt zunächst für die reine Replikation des Layouts keinen weiteren Vorteil. - Es kann aber sehr wohl für das spätere Nachvollziehen der Schaltung und das Rauszeichnen des Schaltplans nützlich sein.
  • Durch visuelles Nachverfolgen der Leiterbahnen können die anderen Pins von Bauteilen bereits vorhandenen Netzen zugeordnet werden.
    • Durch Vias oder Jumper kann dies nicht immer so offensichtlich sein, so dass man hier auf "natürliche Intelligenz" und Erfahrung angewiesen ist. - GGf. mit dem Durchgangsprüfer durchklingeln.

Auf diese Weise entsteht eine "graphische Netzlise" Luftlinien, die die Pins mit gleichen Netznamen verbinden.

Diese Luftlinien können nun nach und nach aufgelöst werden, indem die Leiterbahnen in den entsprechenden Layern wie in den Photos nachgezeichnet werden. Das Verfahren ist wie bein layouten einer normalen Leiterplatte aus dem Schaltplan identisch, so dass man auch hier Leiterbahnbreiten, Abstände und Planes definieren und Anwenden kann.

Zum Schluss sollten alle Pins mit den entsprechenden Leiterbahnen angebunden sein und keine Luftlinie übrig sein.

Hat man bei der Zuordnung der Netznamen eine gewisse Sorgfalt walten lassen sollten auch keine Kurzschlüsse entstanden sein.

Der Vorteil einer konsequenten Vergabe von Netznamen ist, dass man nebenbei eine Netzliste erstellt hat, die sich in den Schaltplan importieren lässt und sich so mit entsprechender Geduld und Erfahrung auch ein Schaltplan daraus zeichnen läst.


Schaltplan generieren

TBD