Hallo, ich habe erst wenig Erfahrung mit Microcontrollern. Jetzt habe ich ein Mega8-Modul von Embedit und möchte damit in einem Modellflugzeug Steueraufgaben übernehmen. Dabei ist es von größter Wichtigkeit, daß sich der Controller im Falle eines Hängers (durch Betriebsspannungseinbruch oder Störeinstreuungen vom 3Phasen-Antriebsmotor ) neu startet. Ist das mit dem internen Watchdog zu machen, oder wäre die Zuverlässigkeit nur begrenzt ? Wann brauche ich einen externen Hardware-Watchdog, und gibt es da erprobte Standardschaltungen ? MfG, Matthias Huck, Oelde
Hallo wenn deine Platine sauber aufgebaut ist, gibts keine Problem durch Einstrahlung, evtl Leitungsgebunden, durch deinen Motor. Aber dann hast du ein massives systematsiches Problem, das man nicht durch einen Watchdog löst. Ein interner Watchdog funktioniert nur dann, wenn der Chip hardware-mäßig in Ordnung ist. Das heißt, wenn der Watchdog einen "software"-Hänger lösen soll, dann ist der OK. Sonst gibts die Hardware-Watchdogs, z.B. von MAXIM: http://para.maxim-ic.com/compare.asp?Fam=Super&Tree=uPSupervisors&HP=Supervisors.cfm&ln= bei Spannungseinbruch durch schwache Batterien nützt dir der Watchdog nicht viel, der macht deinen Batterien nicht wieder voll. Ein hardware-Watchdog macht bei dir nur Sinn, wenn er hardware-mäßig -wie auch immer- dafür sorgen würde, daß dein Flieger wider (sauber) runterkommt. Gerhard
Hallo Gerhard, nun, aber da ist genau das Problem. Ich weiß ja nicht, ob meine Platine sauber aufgebaut ist. Wenn die Schaltung in der Testphase ständig ausfallen sollte, ist mir klar, das da was faul ist, was man nicht durch einen Watchdog lösen kann. Aber es kann ja auch sein, das bei den Tests alles gut läuft, es aber in ganz seltenen Fällen doch zu Störeinflüssen kommt. Und das ist gar nicht so abwegig, denn z.B bei meiner Aquariumsteuerung ist es genau so: die kann ein halbes Jahr fehlerfrei laufen, und dann hängt sich die C-Control beim starten einer Leuchtstoffröhre auf. So einen Fehler werde ich nie finden, aber hier wäre ein Watchdog schon hilfreich ! Und das er bei leeren Akkus auch nicht mehr hilft, ist klar. Aber es kann durchaus mal sehr kurzzeitig zu einem Spannungseinbruch kurz unter die Betriebsspannungsuntergrenze kommen, wenn z.B. ein Spindelantriebsmotor anläuft; auch hiergegen möchte ich die Schaltung schützen. Also, habe ich dich richtig verstanden: Der interne Watchdog schützt nur vor SOFTWARE-Hängern ?? Und für alles andere brauche ich einen Hardware-Watchdog ? Matthias
Natürlich kannst du den internen wunderbar benutzen. Für solche Sachen wie Unterspannungsanzeige etc. gibt es auch noch die Brown-out-Detection. Solange du den Watchdog nicht dauernd in einer Schleife zurücksetzt, in der der Controller durch einen "Software-Hänger" landet, steht seiner Verwendung nichts im Wege. Ausserdem kann man dann nach einem Reset auch feststellen, welches die Reset-Quelle war. Steht im Datenblatt...
Ich hab da ein bisschen weitergedacht. Klar, wenn ein "externes" Ereignis wie ein EMV-Puls auftaucht, das deinen uC abstürzen läßt, kann der interen Watchdog helfen. Aber da Du einen E-Motor verwendest ist es wahrscheinlicher, daß ein leitungsgebundener Puls den uC "gefährdet". Da hilft in erster Linie filtern. Der Watchdog soll - so wahr das gemeint - kein "betriebs-wieder-instandsetzer" sein, der ständig zu tun hat. In der Sicherheitstechnik sind interne Watchdogs nicht gerne gesehen, da sie immer vorraussetzen, daß der uC weiterhin sauber funktioniert. Wenn also nicht ein-EMV-puls den uC ausfallen läßt, sondern Unterspannung, und dieser Zustand dauert an, dann nützt auch der Watchdog nichts mehr (der nur einen reset macht), und da hat der Hardware-Watchdog eine zusätzliche Funktion, er könnte nicht nur einen Reset beim uC durchführen, sondern auch einen Sinkflug herbeiführen. Wenn die Unterspannung nur kurzzeitig auftritt - so kann man dies auch erhindern, indem man den uC separat versorgt, z.B. über eine Diode getrennt unf mit einem Elko gepuffert, übersteht der schon so manche Millisekunde. Rahul hat natürlich recht mit der Brown-out-Erkennung, nützt aber nix, wenn dann dauert ein Brown-out-Ereignis kommt, kommt der uC nicht mehr zum Arbeiten. gerhard
Also, ich denke, das Bisherige hilft mir schon weiter: ich glaube, ich kann den internen Watchdog verwenden. Tatsächlich sind es hauptsächlich (seltene) externe EMV-Ereignisse, die mir am meisten Angst machen (durch magnet. Wechselfelder des 3Phasen-Antriebes). Dieser Hauptantrieb ist schon galvanisch vom Controller entkoppelt (verschiedene Akkus). Spannungseinrüche können höchstens von den Servomotoren kommen, die am gleichen Akku hängen wie der Controller. Damit rechne ich eigentlich auch nicht, ich möchte nur zumindest die Möglichkeit in Erwägung gezogen haben. EMV-Störungen sind von den Servomotoren nicht zu erwarten. Wenn ich merken sollte, das ständig EMV-Störungen des Hauptantriebs den Controller zum Absturz bringen, ist meine Schaltung natürlich ungeeignet. Vielen Dank, Matthias
Ein externer hat einen Vorteil: man kann in einem Programmteil den wd_out nur setzen, in einem anderen zurücksetzen (vorausgesetzt, beide Programmteile werden normalerweise zyklisch aufgerufen). Falls das Programm in einer Endlosschleife hängt, die den internen triggert, kommt man da nicht raus. Seit die AVRs aber mit brown-out ausgestattet sind, verwende ich externe WDs nur noch bei besonderen Anlässen (habe früher externe kombinierte brown out/WD genommen, kosteten manchmal mehr als der MC selbst :-)
Wichtig ist, daß der Watchdog immer wach ist, d.h. daß er nicht extra eingschaltet werden muß und niemals abgeschaltet werden kann. Ein schlafender Watchdog nützt nämlich garnichts. Es gibt z.B. einige µCs mit internem Watchdog, der im Sleepmodus selber schlafen geht (also absolut witzlos). Der 2. Knackpunkt ist das Triggern des Watchdog an der richtigen Stelle. Ein Watchdog, denn man z.B. fest im Timerinterrupt triggert, kannst Du voll vergessen, das Main kann da schon längst abgeschmiert sein. Was man in der Regel macht ist, daß im Timerinterrupt mehrere Register runterzählen, die je einem wichtigen Prozeß entsprechen. Die Prozesse setzen dann bei korrekter Ausführung diese Register auf den benötigten Timeout-Wert. Der Timerinterrupt zählt nun alle diese Register runter und erreicht eines davon 0, geht er in eine Endlosschleife, d.h. wartet bis der Watchdog zuschlägt. Erst wenn jedes dieser Register ungleich 0 war, resettet er auch den Watchdog. Peter
Hallo Matthias, zusätzlich ist noch die interne Kopplung des Watchdogs an die interne uC HW wichtig. Leitet der Watchdog z.B. seinen Takt direkt vom internen uC Takt ab, so ist das nicht empfehlenswert. Ich würde mir also anschauen, ob der interne Watchdog von der internen uC HW entkoppelt ist. Ich würde Dir auch empfehlen, das Ganze sehr gut zu testen. Also probier aus wie "scharf" Dein Watchdog ist. Eine gewisse Toleranz solltest Du Deiner SW nämlich zugestehen. Es bringt nicht´s wenn es durch Laufzeitänderungen der SW zur Auslösung des Watchdog kommt ohne das die SW wirklich hängt. Ansonsten hat Peter genau die zu berücksichtigenden Punkte genannt. Sonst kannst es gleich lassen. Karl
Erstmal danke, ich werde ich mit den o.g. Punkten beschäftigen ! Wenn ich doch einen externen Watchdog verwenden sollte, gibt es da eines besondere Empfehlung (erprobte Schaltung) für einen Mega8 ? Ich fühle mich von den Datenblättern verschiedener Watchdog-IC's etwas erschlagen .... Matthias
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.