Fehlersuche: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
(eBook hinzugefügt)
Zeile 150: Zeile 150:
* http://www.repairfaq.org Seite mit umfangreichen Tips zur Fehlersuche, Reperatur diverser Elektronik, Laser und mehr (engl.)
* http://www.repairfaq.org Seite mit umfangreichen Tips zur Fehlersuche, Reperatur diverser Elektronik, Laser und mehr (engl.)
[[Kategorie:Grundlagen]]
[[Kategorie:Grundlagen]]
* [http://www.analog.com/library/analogdialogue/archives/43-09/linear_circuit_design_handbook.html Basic Linear Design seminar notes] - fundiertes eBook / PDFs mit nützlichen Infos zu Schaltungsdesign, parasitären Effekten und Fehlersuche

Version vom 23. Dezember 2013, 16:18 Uhr

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
    • 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
    • "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.
  • 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 Begin 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 findet man meist recht schnell, wenn man mit einem strombegrenzten Netzteil die Schaltung speist. Sie werden warm bis heiß, das findet man schnell.
  • 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 zu den verschiedensten Punkten im Netz messen. Dort wo die größte Spannung abfällt, ist der Kurzschluss.
  • Feine Kurzschlüsse auf Leiterbahnen, welche z.B. durch Fehler beim Ätzen entstehen, weil Dreck, Haare oder ähliches zur 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!

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).

  • 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

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 Bob Peace
  • 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