Fehlersuche

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

Einleitung

Auf neudeutsch Debugging genannt (engl. bug = Wanze). Die Fehlersuche in Geräten, welche defekt sind oder die man sogar selber gebaut hat, ist eine der Hauptbeschäftigungen beim Umgang mit Elektronik, egal ob Hardware oder Software. Deshalb sollte man sie möglichst effizient betreiben.

Grundlagen

Vorgehen

Am Anfang kann man von unzähligen Fehlermöglichkeiten förmlich erschlagen werden. Und dann weiß man manchmal nicht so recht, wo man anfangen soll. Aber auch dafür gibt es Konzepte, welche sich dem individuellen Problem anpassen lassen.

  • Einfach zu prüfende, grundlegend wichtige Dinge zuerst prüfen. Wenn ein Auto stehen bleibt, prüft man erstmal, ob noch Treibstoff im Tank ist und nicht, ob die Kurbelwelle gebrochen ist. Grundlegende Dinge sind
    • Stromversorgung
    • wichtige Eingangssignale
    • wichtigen Zwischensignale
  • Sind meine Messgeräte OK?
    • Batterie im Multimeter noch halbwegs voll?
    • Kalibrierung stimmt?
    • Tastköpfe am Oszilloskop richtig kompensiert?
  • Messe ich am richtigen IC und am richtigen Pin? Je nach Bauteil zeigt das Datenblatt die Pinbelegung von oben (top view) oder unten (bottom view).
  • Keine voreiligen Schlüsse. Man sollte Fehlerursachen nur dann wirklich ausschließen, wenn man sie eindeutig geprüft und gemessen hat.
  • Den Testaufbau schrittweise einschränken und vereinfachen. Nach Möglichkeit Schaltungs/- oder Softwareteile deaktivieren bzw. abklemmen oder austauschen (ICs, Module, Kabel, Programmteile, Funktionen, etc.).
  • Teile und herrsche. Wenn in einer langen Signalkette das Ausgangssignal nicht stimmt, sollte man sich sich nicht Schritt für Schritt durchhangeln sondern immer erst die Mitte der Kette prüfen. Beispiel. In einer Kette von 10 Verstärkerstufen prüft man zuerst die 5. Stufe. Ist das Signal dort OK, liegt der Fehler zwischen Stufe 5 und 10, also prüft man danach Stufe 7 oder 8. Im anderen Fall, wenn Stufe 5 schon kein gutes Siganl mehr ausgibt, liegt der Fehler zwischen 1 bis 5, man prüft somit im nächsten Schritt Stufe 2 oder 3. Somit findet man in einer Kette bzw. Reihenschaltung von sehr vielen Elementen sehr schnell das Problem.

Hilfsmittel

Für die Fehlersuche in Hardware braucht man je nach Art der Schaltung

  • ein oder mehrere Multimeter
  • Labornetzteil mit Strombegrenzung
  • Status-LEDs
  • Oszilloskop
  • Logikanalysator
  • Funktionsgenerator
  • Netzwerkanalysator
  • Trenntrafo

Typische Werkzeuge für das Softwaredebuggen sind

  • Simulator: Damit wird der Code nur auf dem PC simuliert
  • In Circuit Debugger: Er kann das echte Programm auf der echten Hardware debuggt werden, man kann Haltepunkte (engl. break points) im Programm setzen, Variablen anschauen und vieles mehr
  • UART für Debugausgaben
  • Status-LEDs
  • Testpins

Allgemeine Hinweise

  • Wenn ein Fehler konstant vorliegt oder reproduzierbar ist, hat man in gewisser Weise Glück. Diese Fehler sind eher leicht zu finden und zu beheben. Ziel der Fehlersuche ist es, einen Fehler reproduzierbar zu machen.
  • Sporadische Fehler sind sehr gefährlich und sehr schwer lokalisierbar, wie z.B. Hardwarefehler
    • Wackelkontakte
    • Haarrisse
    • Risse durch mechanische oder thermische Spannungen
  • oder Softwarefehler wie
    • nichtatomare Zugriffsfehler auf Variablen in Interrupts
    • Variablenüberläufe, welche erst nach Stunden oder Tagen auftreten (Echtzeituhr, Datum, Ereigniszähler)
    • Pufferüberläufe in Strings und Arrays

Gerade die sporadischen Fehler sollte man vermeiden, indem man möglichst solide arbeitet. D.h.

  • Hardware
    • gutes Konzept, d.h. die Schaltung sollte möglichst unempfindlich gegenüber Bauteiltoleranzen und Störungen sein
    • sauber löten
    • Bauteilkennwerte nicht überschreiten, Reserven einplanen
    • Toleranzen und Temperaturverhalten der Bauteile beachten
  • Software
    • gutes Konzept
    • sauber programmieren, keine Hackertricks
    • defensiv programmieren, umfangreiche Fehlerbehandlung

Fehlersuche in Hardware

  • Stromversorgung
    • Ist das Gerät ans Netz(teil) angeschlossen? Korrekte Polung?
    • Ist die Sicherung OK?
    • Liefert der Spannungsregler die korrekte Spannung?
    • Ist mein Messgerät auf die richtige Spannungsform eingestellt (AC oder DC)?
    • Liegt die Spannung an allen wichtigen ICs an?
    • Liegt die Stromaufnahme im erwarteten Bereich?
  • Signalpfade
    • Wie sieht das Eingangssignal aus?
    • Liegen die richtigen Ruhesignale (Arbeitspunkt, Ruhestrom) an den wichtigen Punkten der Schaltung an?
    • Liegen die richtigen Signale an den Zwischenpunkten der Schaltung an?
    • Sind Logikpegel sauber LOW und HIGH? Wenn nein, dann sind oft mehrere Ausgänge gleichzeitig auf einem Bus aktiv und ziehen in verschiedene Richtungen (Low und High). Oder Die Ausgänge sind zu schwach, um die Lasten zu treiben.
    • Sind Taktsignale sauber ohne Überschwinger und Zacken in den Flanken? Falsche Terminierung, schleche Leitungsführung (Masse) oder EMV-Probleme können die Ursache sein.
    • Dabei sollte man aber auch sauber messen, um nicht einem Phantom hinterher zu jagen (Bandbreite des Tastkopfes und Oszilloskops, kurze Masseverbindung (ground spring), möglichst keine Erdschleifen).
    • Wenn Signale ganz fehlen oder sich nicht ändern? Kurzschlüsse? Unterbrechungen? Wackelkontakte?
  • Fehlfunktionen
    • Werden ICs ungewöhnlich heiß? Einfache Logik-ICs und Operationsverstärker werden normalerweise kaum warm, Endstufen, Treiber, Leistungstransistoren, Linearregler und große ICs (FPGAs, Tranceiver etc.) dagegen schon.
    • Schwingen Quarze und Oszillatoren korrekt? Vorsicht beim direkten Messen an Quarzen, die reagieren bisweilen empfindlich auf zusätzliche Lastkapazitäten, hier auf jeden Fall mit einem 10:1 Tastkopf messen. In schwierigen Fällen schaltet man noch einen winzigen Kondensator mit 1pF in Reihe zum Tastkopf. Damit wird das Signal zum Oszilloskop zwar noch kleiner, aber die kapazitive Belastung des Oszillators sinkt auf unter 1pF.
    • "Hello World!" Minimaltest für Mikrocontroller. Eine LED im 1s Rhytmus blinken lassen. Damit kann man viele einfache Dinge erstmal prüfen, das sollte man am Anfang immer erst einmal machen.
      • Compiler funktioniert und erzeugt ein gültiges Hex-File
      • Programmierung funktioniert
      • Mikrocontroller kann das Programm ausführen, Spannung und Takt liegen an

Tips zum Hardwaredebugging

  • Freie Pins an Mikrocontrollern, FPGAs, CPLDs auf Testpads legen, das ist vor allem bei kleinen Gehäusen wie TQFP, MLF oder gar BGAs notwendig, um dort mit Testspitzen und Drähten ranzukommen. Wenn es genügend Platz gibt sollte man Testpunkte mit Bohrung (THT) nehmen, in diese kann man Drähte einlöten und dort Prüfklemmen anschließen. Diese Testpunkte sind mechanisch deutlich stabiler.
  • In wichtige Punkte der Stromverteilung Null Ohm Widerstände einfügen, dort kann man später ein Messgerät einschleifen; alternativ wenigstens die Leiterbahn gut zugänglich auf der Ober- oder Unterseite layouten, damit man sie im Testfall mit dem Skalpell auftrennen kann.
  • Viele Vorgänge in Mikrocontrollerschaltungen sind nicht periodisch. Um sie zu messen braucht man meist ein Digitaloszilloskop. Hat man sowas nicht zur Verfügung, muss man versuchen, die Vorgänge periodisch zu machen, indem man z.B. eine Datenausgabe per UART oder SPI in einer Schleife immer wieder ausführt. Damit kann man sie auch mit einem Analogoszilloskop darstellen.
  • Testpins sind sehr nützlich, um Zeitverhalten von Software zu messen, z.B. Interruptroutinen. Zum Beginn setzt man ein Pin auf HIGH, am Ende auf LOW, das kann man dann sehr einfach mit einem Oszilloskop messen
  • Ebenfalls kann man mit so einem Testpin den Anfang eines speziellen Programmablaufs signalisieren, um ein Oszilloskop zu triggern, was sonst in einem komplexen Signalspiel nur sehr schwer möglich wäre
  • Treten Fehler erst bei hohen oder niedrigen Temperaturen auf? Mit Kältespray und Heißluftpistole kann man sie provozieren.
  • Einfache Logikschaltungen wie z.B. den SPI-Bus kann man auch ohne Oszilloskop anschauen, indem man das Timing der Steuersignale extrem verlangsamt. Das schafft man, indem man im Programm hinter jedem Portzugriff eine Pause von ca. 1s macht (avr gcc -> _delay_ms(1000)). Damit kann man an jedes Signal eine LED mit Vorwiderstand anschließen und das Signalspiel sichtbar machen. Das Gleiche gilt für I2C, da auch dieser ein synchroner Bus ist und damit beliebig langsam getaktet werden kann. Man muss nur beachten, dass dadurch die Busleitungen mit den Open Drain Ausgängen nicht zu sehr belastet werden. Am Besten schließt man diese Test-LEDs ebenfalls invertiert an, parallel zu den Pull Up Widerständen, d.h. Anode über Vorwiderstand an VCC und die Kathode jeweils an die beiden Siganle SCL und SDA. Beim UART geht das leider nicht, dieser ist asynchron und auf ein genaues Timing angewiesen.

FPGAs und CPLDs

  • In komplexeren FPGA-Schaltungen, welche z.B. Videodaten mittels AD-Wandler aufnehmen und verarbeiten, kann man den AD-Wandler zu Testzwecken durch ein synthetisches Modul im FPGA ersetzen, welches definierte Datenströme erzeugt, sozusagen ein digitaler Funktionsgenerator
  • In FPGAs kann man auch virtuelle Logikanalysatoren einbauen, welche Datenströme im FPGA aufzeichnen; Die Steuerung erfolgt oft über JTAG oder spezielle Schnittstellen

Kurzschlüsse finden

In der Entwicklung von Schaltungen geht immer mal was kaputt. Bauteile brennen durch. Doch wie findet man sie, wenn sie zwar defekt, aber nicht äusserlich zerstört sind? Wie findet man einen defekten IC an einem SPI-Bus mit 10 angeschlossenen ICs?

  • Verpolte Elektrolytkondensatoren (Aluminium, Tantal) findet man meist recht schnell, wenn man mit einem strombegrenzten Netzteil die Schaltung speist. Sie werden warm bis heiß, das findet man schnell (Mit dem Finger alle Bauteile prüfen, ggf. vorher den Finger leicht anfeuchten, das verhindert Verbrennungen). Immer daran denken. In realen Kurzschlüssen wird Wärme erzeugt, denn der Widerstand ist nie Null. Wenn man Strom und Spannung mißt, kennt man die Verlustleistung. Die kann nicht verschwinden, die muss irgendwo Wärme erzeugen. Diesen Fleck bzw. das Bauteil muss man finden. Ist der Kurzschluß SEHR niederohmig, braucht man eben deutlich mehr Strom.
  • Kurzschlüsse auf verzweigten Netzen findet man per Milliohmmessung nach dem Vierleiterprinzip.
    • Schaltung ausschalten
    • Über ein strombegrenztes Netzteil oder eine Spannungsquelle mit großem Vorwiderstand einen Konstantstrom in das fehlerhafte Netz einspeisen. Dabei richtet sich dessen Höhe nach der Art des elektrischen Netzes. Für ein Signal auf einer Platine reichen meist 100mA, für Stromversorgungsleitungen oder Verkabelung in einem Gerät können es schon mal 1-10A sein.
    • Mit dem Multimeter im Millivolt-Messbereich die Spannung vom Einspeisepunkt (0) zu den verschiedensten Punkten im Netz messen.
    • Dabei mißt man zunächst die Spannung an den Verzweigungspunkten im Layout. Dazu kann man sich das Netz im Layoutprogramm anzeigen lassen (bei Eagle ist das SHOW). Vorsicht, man sollte sich dabei nicht von der Darstellung im Schaltplan irritieren lassen.
    • Steigt die Spannung hinter einer Verweigung nicht an, liegt der Kurzschluß im anderen Abzweig.
    • Hat man die letzte Verzweigung mit dem höchsten Spannungsabfall gefunden (7), weiß man, daß der Kurzschluß zwischen diesem Meßpunkt und dem vorherigen (3) liegt.
    • Zwischen den beiden Meßpunkten muss man nun die Leitung an mehreren Stellen messen und den Punkt finden, an dem der Spannungsabfall nicht mehr größer wird. Dort liegt der Kurzschluß.

Netz mit Kurzschluss

  • Feine Kurzschlüsse auf Leiterbahnen, welche z.B. durch Fehler beim Ätzen entstehen, weil Dreck, Haare oder ähliches beim Belichten zu sehr feinen Kurzschlüssen geführt haben, kann man teilweise durch einen starken Strompuls aus einem großen Kondensator oder Netzteil freibrennen, der Kurzschluss verdampft dabei das Kupfer. Aber Vorsicht! Wenn man Pech hat verdampft auch gleich ein guter Teil der Leiterbahn!
  • Kurzschlüsse durch Fehler in den CAM-Daten (Gerber-Daten) kommen auch hin und wieder vor, vor allem bei Prototypen. Wie findet man den Kurzschluss zwischen einer Massefläche und VCC-Fläche? Die Vierdrahtmethode versagt hier, weil die Massefläche so groß und niederohmig ist, dass kaum Potentialunterschiede messbar sind. Auch hier braucht man wieder viel Strom. Mittels Hochstromnetzteil speist man 10-200A über möglichst dicke Anbindungen in die Flächen. Eine flächige Anbindung erreicht man bei Mehrlagenplatinen, indem man die oberen Lagen wegfräst und dort breit ein Kupferband oder Kupferfolie anlötet. Mit einer Thermokamera kann man dann den Fleck mit der Wärmeentwicklung sehen. Heutzutage gibt es bereits preiswerte Vorsätze für Smartphones (FLIR ONE, Homepage), um diese als preiswerte Thermokamera nutzen zu können. Um einzelne VIAs als Übeltäter überführen zu können muss man einen kurzen (1s) Strompuls mit möglichst viel Strom nutzen, dann leuchten die VIAs kurz auf. Denn schon nach wenigen Sekunden hat man nur noch einen großen, unscharfen Wärmefleck, weil die Masseflächen die Wärme des Kurzschlußes schnell und gut verteilen. Bei der Kühlung eines ICs ist das von Vorteil, hier aber ein Nachteil. Einen Hochstromtrafo für Wechselspannung kann man sich mit einem kleinen Ringkerntrafo (50-200W) selber bauen. Auf diesen wickelt man 1-5 Windungen sehr dicken Kabels, 6mm^2 Querschnitt und mehr. Damit hat man einen Schweißtrafo, er locker 200A bei wenig Spannung abgeben kann. Die Strommessung, so man sie braucht, macht man dabei sinnvollerweise über einen Stromwandler. Den Trafo kann man primärseitig problemlos schalten und mit einem Stelltrafo ggf. auch den Ausgangsstrom einstellen.
  • Hat man keine Thermokamera muss man den warmen Fleck mit dem Finger ertasten. Um dann einzelne VIAs als Kurzschluss zu finden, muss man sie einzeln aufbohren und prüfen, ob der Kurzschluss beseitigt ist.

Erstmaliges Einschalten einer Schaltung

Schaltet man eine Schaltung das erste Mal ein, sollte man einiges beachten, um im Fehlerfall nicht vor einem Haufen Asche zu sitzen. Das gilt vor allem für Schaltungen, die größere Leistungen beinhalten (Netzteile, Motorendstufen, Wechselrichter, etc.) oder aus sehr kräftigen Quellen gespeist werden (Stromstarke Netzteile, Akkumulatoren, 230V Netz).

  • Vor dem Einschalten die Platine noch einmal kontrollieren
    • Sind alle Bauteile richtig bestückt?
    • Polarität von Dioden und Kondensatoren stimmt?
    • ICs nicht verdreht?
    • Keine Kurzschlüsse durch Lötzinn?
    • Ist alles um die Platine herum richtig angeschlossen?
  • Schaltungen mit Kleinspannung aus einem Netzteil mit Strombegrenzung speisen, die Strombegrenzung nur wenig höher einstellen als das Gerät schätzungsweise benötigt.
  • Schaltungen mit größerer Leistung bzw. Netzanschluss mit einem Sicherungsautomaten absichern.
  • Nach dem Einschalten die wichtigsten Ströme und Spannungen messen und prüfen, ob sie wie erwartet sind
  • Wichtige Zwischensignale messen und prüfen
  • Wärmeentwicklung prüfen
  • Belastung von Netzteilen und Verstärkern langsam steigern

Fehlersuche in Software

Tips zum Softwaredebugging

  • Eine Ausgabe von Debuginformationen per UART ist oft sehr nützlich, auch wenn das Gerät im Normalbetrieb keinerlei UART nutzt
  • Im EEPROM kann man auch Debuginformationen ablegen und später wieder auslesen
  • Wenn man fremde Projeke übernimmt, sollte man schrittweise vorgehen.
    • Zuerst das Projekt, welches meist ein Beispiel enthält, ohne jegliche Änderungen/Anpassungen komplett kompilieren. Wenn das funktioniert, weiß man erstmal, dass der Compiler soweit funktioniert.
    • Danach nur minimale Änderungen, z.b. Pinzuordungen, Konfigurationen vornehmen und testen.
    • Nach erfolgreichem Test des Beispiels mit minimalen Änderungen kann man das Projekt in größerem Maße umbauen bzw. in sein Projekt integrieren. Aber auch hier sollte man eher kleine Schritte machen und zwischendurch immer wieder die Funktion testen. Das ist einfacher als sehr viele Änderungen auf einmal durchzuführen und danach zu testen.

Siehe auch

Links

  • Analog Circuits (World Class Designs) ISBN 978-0750686273, eine Zusammenstellung von verschiedensten Schaltungen mit ausführlichen Erklärungen; Filter, AD-Wandler, Lasertreiber, U-F Wandler, Mikrocontroller etc.
  • Troubleshooting Analog Circuits, ISBN 978-0750694995, eine umfangreiche Mischung von Praxistips zur Entwicklung und Fehlersuche in analogen Schaltungen, viele Informationen über Bauteile und Konzepte, geschrieben von der Analoglegende Robert A. Pease. Im Elektor-Verlag erschien die deutsche Übersetzung "Troubleshooting in Analogschaltungen" ISBN 3-89576-059-5
  • http://www.repairfaq.org Seite mit umfangreichen Tips zur Fehlersuche, Reperatur diverser Elektronik, Laser und mehr (engl.)
  • Basic Linear Design seminar notes - fundiertes eBook / PDFs mit nützlichen Infos zu Schaltungsdesign, parasitären Effekten und Fehlersuche
  • Debugging rare modes of failure (engl.)