Forum: Mikrocontroller und Digitale Elektronik Tipps und Tricks zum debuggen von Code


von Alexander (Gast)


Lesenswert?

Hey,
Ich werde nun mein erstes größeres (Schaltnetzteil) Projekt in Angriff 
nehmen, bei dem ein uC (TI F28335)  zum Einsatz kommt.

Die Aufgaben des uC sind entsprechend der Prioritäten gegliedert:
1. Implementierung  einer Strom - und Spannungsregelung und PWM 
Generierung
2. Überstromabschaltung
3. Messen und Abschalten  bei zu hoher Kühlkörpertemperatur

Da ich aus dem Hardware Bereich komme und nur bedingt Erfahrungen mit 
dem Coden habe, stelle ich mir nun  die Frage, wir man geeignete 
Testpunkte zum debuggen des Codes (im laufenden Betrieb)  implementiert.

Mir fallen spontan zwei Möglichkeiten ein.
1. Die gemessenen Parameter (Strom, Spannung etc) über  einen DAC 
ausgeben und mit einem Oszilloskop messen. So kann man z.B. die 
Messspannung mit der Referenz aufm  Oszilloskop vergleichen, oder den 
Ausgang des Reglers direkt ausgeben etc.

2. Einen GPIO des uC toggeln, wenn eine Bedingung innerhalb  der ISR 
wahr wird (z.B. wenn die Temperatur am Kühlkörper einen bestimmten Wert 
überschreitet.

Meine Frage an die Erfahrenen unter euch:
Habt ihr noch weitere Hinweise und Tipps, wie man  den Code debug 
freundlicher machen kann?

Vielen Dank.

Gruß,

von Carl D. (jcw2)


Lesenswert?

Debug-Tip #1:
Fang mit was "kleinerem" an und sammle Erfahrung.

von Alexander (Gast)


Lesenswert?

Carl D. schrieb:
> Debug-Tip #1:
> Fang mit was "kleinerem" an und sammle Erfahrung.

Gut, dann nehme ich  einen 12V buck converter, der die Ausgangsspannung 
auf 5V regeln soll.

Weitere Hilfe würde ich trotzdem sehr schätzen, da ich die Leiterplatte 
selbst herstelle und entsprechend DAC etc. ohne große Probleme auf der 
Leiterplatte verbauen kann. Wenn die Leiterplatte erstmal fertig ist, 
stelle ich es mir schwieriger vor.

von Kai S. (kai1986)


Lesenswert?

Hallo,

ich persönlich würde wohl selbst "bei einem so kleinen Projekt" eine 
serielle Schnittstelle für das Debuggen vorsehen. Es gibt nämlich nichts 
schöneres, als wenn der Code einem erzählt, was er macht (oder auch 
nicht macht). Wo ich nämlich am PC einfach ein print einfüge fehlt die 
Möglichkeit am µC ohne Schnittstelle komplett.

Gruß Kai

von Stampede (Gast)


Lesenswert?

Ich weiß nicht was "größer" heißt, ich denke mal mehr als 1kW?

Aus eigener Erfahrung kann ich dir sagen, dass du mit Punkt 2 beginnen 
solltest. Also deine Hardware  bzw. auch die Software so gestalten, dass 
diese den Wandler im Fehlerfall sofort abschalten. Wenn du 
beispielsweise eine Strommessung hast, und diese einen Komparator für 
die Überstromerkennung triggert, der wiederum die PWM abschaltet (= 
MOSFETS abschalten, nicht floaten) solltest du genau solche Funktionen 
zuerst implementieren und v.a. auch testen. Gleiches gilt für 
Überspannung (v.a. bei Boostreglern).
Das ganze setzt natürlich voraus, dass du die Spannungen und Ströme 
richtig misst, aber da sollte dir dein Debugger helfen.

Das spart dir Nerven, Bauteile, Zeit und Geld.

von Harry M. (harry4516)


Lesenswert?

die Sicherheitsabschaltung würde ich mit einer eigenen Standardschaltung 
machen. uCs haben leider die Eigenschaft im Fehlerfall abstürzen zu 
können und das wars dann mit der Sicherheit.
Zumindest die wegen der Sicherheit kritischen Dinge wie Überstrom und 
Übertemperatur sollten eigens gelöst sein, den Rest kann man dann über 
den uC machen.

von A. H. (ah8)


Lesenswert?

Das Buch „Linux Device Drivers“ (ISBN 0-596-00590-3, online z.B. unter 
https://lwn.net/Kernel/LDD3/) enthält im Kapitel 4 eine ganz gute 
Einführung in die Problematik. Vieles ist natürlich Linux-spezifisch, 
aber die Prinzipien lassen sich durchaus übertragen.

von PittyJ (Gast)


Lesenswert?

Das Ding hat doch 3 Uarts. Was spricht dagegen, einen zu benutzen und 
darauf Debugausgaben zu machen?
Ich hatte auch man einen ähnlichen 2810 programmiert. Den konnte man 
über die TI-Entwicklungsumgebung auch im Einzelschritt-Modus betreiben. 
Also den Jtag herausführen und Debugger einschalten.

von Falk B. (falk)


Lesenswert?

@ Harry May (harry4516)

>die Sicherheitsabschaltung würde ich mit einer eigenen Standardschaltung
>machen. uCs haben leider die Eigenschaft im Fehlerfall abstürzen zu
>können und das wars dann mit der Sicherheit.

Nicht wirklich. Gerade diese Controller vonb TI (C2000 Familie, siehe 
PICCOLO) sind EXAKT für sowas gemacht, incl. Sicherheitsabschaltung 
durch HARDWARE im Controller.

>Zumindest die wegen der Sicherheit kritischen Dinge wie Überstrom und
>Übertemperatur sollten eigens gelöst sein, den Rest kann man dann über
>den uC machen.

Quark. Übertemperatur ist für den Controller eine schnachlangsame 
Funktion, die kann im Sekundenbereich reagieren. Die muss nicht im xx 
kHz Interrupt überwacht werden. Überstrom dagegen schon, der wird 
sinnvollerweise mit einem Hardwarecomparator IM Controller überwacht. 
Das alles kann der uC.

@ Alexander

>1. Die gemessenen Parameter (Strom, Spannung etc) über  einen DAC
>ausgeben und mit einem Oszilloskop messen. So kann man z.B. die
>Messspannung mit der Referenz aufm  Oszilloskop vergleichen, oder den
>Ausgang des Reglers direkt ausgeben etc.

Kann man machen, aber nur, wenn der Controller einen echten DAC 
integriert hat. Ansonsten wird es zu aufwändig und wenig brauchbar. Ich 
hab mir für diverse Zwecke einen Mini-Logger eingebaut, der auf ein 
Triggersignal hin diverse ADC-Werte in ein Array schreibt. Das kann man 
dann Offline auswerten.

>2. Einen GPIO des uC toggeln, wenn eine Bedingung innerhalb  der ISR
>wahr wird

Ja. Ich hab das vor allem zur Messung der kritischen, weil 
hochfrequenten (100kHz) ISRs genutzt, damit man weiß, wieviel CPU-Zeit 
die brauchen.

> (z.B. wenn die Temperatur am Kühlkörper einen bestimmten Wert
>überschreitet.

Das nun gerade nicht, denn das ist ein schnarchlangsames Ereignis, das 
man mit jeder x-bliebigen, LAAAAAANGSAMEN Debugfunktion anzeigen kann 
(LED, UART etc.).

>Habt ihr noch weitere Hinweise und Tipps, wie man  den Code debug
>freundlicher machen kann?

Bei so einem Controller ist es meist nicht ratsam, den Code anzuhalten, 
dann dann kracht es. Aber diese Controller haben vorgesorgt, man kann 
diverse Funktionen (PWMs etc.) beim Debugger-HALT weiterlaufen lassen 
oder sofort auf den sicheren Zustand, meist LOW, schalten lassen. 
Außerdem kann man kritische ISRs weiterlaufen lassen. Siehe Doku.

Das ist ein schöner Controller, viel Spaß und Erfolg damit!

von ./. (Gast)


Lesenswert?

> 1. Die gemessenen Parameter (Strom, Spannung etc) über  einen DAC
> ausgeben und mit einem Oszilloskop messen. So kann man z.B. die
> Messspannung mit der Referenz aufm  Oszilloskop vergleichen, oder den
> Ausgang des Reglers direkt ausgeben etc.

Der Debugger vom Code Composer kann einen Real-Time-Mode.
(Eigentlich sogar zwei: Rude Real-Time und Polite Real-Time.)
Es ist in einem laufenden Programm kein Problem, auch
mehrere Variable im Debugger grafisch darzustellen.

> 2. Einen GPIO des uC toggeln, wenn eine Bedingung innerhalb  der ISR
> wahr wird (z.B. wenn die Temperatur am Kühlkörper einen bestimmten Wert
> überschreitet.

Besser: Mit einem R2R-DAC an den GPIOs Aufrufe der ISRs visualisieren.

Statt Debug-Ausgaben ueber UART, die einfach zu lange brauchen:
Wichtige Ereignisse in ein Speicherarray loggen.
Auch dabei auf kurze Laufzeit achten. Also keine printf-Konsorten,
eher Binaer-/Integerwerte und die dann vom Debugger formatieren
lassen.

von Pandur S. (jetztnicht)


Lesenswert?

Das Erste ist die benoetigte Hardware Funktionalitaet zu testen, also 
TimerTick, Kommunikationsschnittstellen, Debug Schnittstellen. Dann ADC, 
DAC, Tasten, Display, Dann die Safe-State Modi, zB Endstufe abschalten.

Wichtig, beim Design :

Was geschieht, zB beim Powerup im Reset, wenn der Programmer dran ist ? 
Dann sollte zB eine End-/Steuerstufe nicht schon Verbraucher 
einschalten.

Was geschieht, wenn durch einen Programmfehler immer wieder ein Reset 
kommt ? Dann sollte zB kein Relais zu klappern beginnen.

Was geschieht bei Unterspannung, wenn es fuer den Controller reicht, 
fuer den Rest aber nicht ? Wenn ein Ansteuerfehler die Spannung 
zusammenreisst.

Kann ein Steuerfehler einen Schaden verursachen, welche Auswirkungen hat 
der, wie kann er vermieden werden ?

Welches ist/sind der Safe State ? In den/die man bei einem Fehler gehen 
muss. Was geschieht dann ?

von Alexander (Gast)


Lesenswert?

Vielen Dank euch allen.

Ich werde mich mal vermehrt mit den Debugger-Möglichkeiten vom Code 
Composer Studio auseinandersetzen.

Ferner werde ich mich mit dem UART Betrieb vertraut machen. Das ist 
sicherlich ein guter und wichtiger Schritt. Auf dem ersten Blick scheint 
das keine schwarze Magie zu schein.

Ich danke euch für euren Input - ich werde bei Gelegenheit die 
Ergebnisse meiner Arbeit posten.

Gruß,
Alexander

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.