Viele Anwender haben Probleme mit ihrer C-Control, wenn diese in elektromagnetisch verschmutzter Umgebung betrieben wird. Häufig führt z.B. der Umschaltfunke bei Relais dazu, daß die C-Control einfach stehenbleibt, resettet wird oder auf andere Weise in unregelmäßigen Abständen aus dem Tritt gerät. Das liegt meist an einem unzureichendem Schaltungsdesign, in dem den Störungen nicht genug Beachtung geschenkt wurde. Einige Anwender behaupten auch, daß C-Controls, die auf einem EPROM-Kontroller basieren, seltsamerweise weniger Probleme machen sollen als die ROM-Variante.
Bei der M-Unit hat Conrad Electronic zudem einen Stützkondensator vergessen. Aus diesem Grund spricht der sehr sensibel reagierende Reset-Baustein viel zu häufig an. Dieser Baustein ist auch ein Problem bei den Kurzschlüssen, die in regelmäßigen Abständen auf dem I²C-Bus auftreten. Bei der Main-Unit wirken sich diese vermutlich deshalb nicht aus, weil die Versorgungsspannung ausreichend über Kondensatoren gepuffert wird. Um mit der M-Unit vernünftig arbeiten zu können sollte man darum einen Elko (bis zu 1000 µF) und einen Tantalelko parallel in die Versorgungsspannung schalten. Beide Kondensatoren sollten möglichst nahe am Kontroller sitzen und müssen richtig gepolt werden.
Zur Störungseleminierung trägt außerdem bei, den Verbraucher und die C-Control aus getrennten Netzteilen zu versorgen, alle digitalen Ein- und Ausgänge über Optokoppler zu trennen und Tiefpaßfilter an die A/D-Eingänge zu schalten. Durch diese Maßnahmen kann die C-Control auch in der Nähe großer Lasten (150 A und mehr) betrieben werden.
Die C-Control verfügt, wie jeder 68HC05-Mikrokontroller, über einen sogenannten Watchdog (zu deutsch: Wachhund). Er dient normalerweise zum Resetten des Mikrokontrollers und der eventuell am RESET-Pin angeschlossenen externen Baugruppen, wenn das laufende Programm abgestürzt ist.
Ein einmal aktivierter Watchdog kann aus Sicherheitsgründen nicht mehr per Software deaktiviert werden. Das laufende Programm ist nun gezwungen, einen Zähler in periodischen Zeitintervallen zu löschen, damit dieser nicht überläuft. Bei einem Überlauf löst die Watchdog-Baugruppe einen Reset aus und das Programm startet von neuem. So ist eine weitgehende Funktionssicherheit des Mikrokontrollers auch bei nicht anwesendem Anwender gewährleistet.
Wenn ein Programm den Watchdog benutzen möchte, muß es ihn
durch Setzen eines Bits im Miscellaneous register aktivieren. In Assembler
geschieht dies durch den Befehl BSET 0,$0c. Nachdem der Watchdog aktiv
ist, muß das Programm den angegebenen
BSET-Befehl
mindestens einmal in 3 ms ausführen, da die C-Control sonst resettet wird.
Dieses Zeitintervall ist für eine sinnvolle Verwendung in CCBASIC oder
CCPLUS viel zu klein.
Leider hat diese Lösung noch ein paar Schwachstellen: Bei Programmen, die Manipulationen am free running timer counter vornehmen, versagt der Watchdog ebenso, wie beim Aussetzen des externen Takts.
Für die absolute Sicherheit kann man deshalb einen Hardwarewatchdog einsetzen. Die nebenstehende Schaltung kann durch Anklicken vergrößert werden und zeigt, wie man einen Hardwarewatchdog mit Hilfe eines MAX 823 aufbaut. Das Schaltbild stammt ebenso wie die weiter unten stehenden Informationen zur Störungsunterscheidung und -behebung von Michael von Gersdorff.
Die Schaltung zeigt, wie man den MAX 823 mit der C-Control verbindet. Zur
Funktion ist noch zu sagen, daß es erforderlich ist, den Watchdog auch
während der Neuprogrammierung der C-Conrol zu füttern. Wie aus der
Schaltung entnommen werden kann, ist zu diesem Zweck der Startjumper mit dem
Pin 1 (TCMP2) des Kontrollers hardwareverknüpft. (Am TCMP2-Pin gibt die
C-Control ein 50-Hz-Rechtecksignal aus, solange das Interruptssystem aktiv ist.)
Sobald der Startjumper gesteckt ist, was bedeutet, daß das Programm läuft,
muß in regelmäßigen Abständen (häufiger als alle
1,6 Sekunden) ein kurzer Impuls an Port 16 gesendet werden, damit der Prozessor
nicht aus dem MAX 823 einen Reset erhält. Aus einem CCBASIC-Programm heraus
kann das mit Hilfe des PULSE-Befehls geschehen. Allerdings ist zu beachten,
daß PULSE nur wirkt, wenn der Port vorher auf Ausgang geschaltet wurde.
Siehe folgendes Beispielprogramm:
DEFINE watchdog PORT[16] watchdog=OFF 'Watchdog-Pin auf Ausgang schalten #endlos |
Noch eine letzte Anmerkung: Es ist auch ein Mischbetrieb aus internem und externen Watchdog denkbar. Der 68HC05-Watchdog wird im Miscellaneous register aktiviert und mit Hilfe einer kleinen Assemblerroutine, die im TIMERCMP-Interrupt eingebunden wird, alle 3 ms zurückgesetzt. Allerdings ist nun dafür zu sorgen, daß dieser Interrupt alle 3 ms stattfindet, darum muß per BEEP-Befehl ein Dauerton mit einer Periodendauer von weniger als 6 ms erzeugt werden. Mit Hilfe des externen Watchdog wird zusätzlich überprüft, ob das Interruptsystem der C-Control ausgefallen ist und gegenenfalls ein Reset ausgelöst.
Wie man eine Interruptroutine in das Betriebssystem der C-Control integriert, wird in der C-Control-intern-Informationssammlung gezeigt.
Es gibt prinzipiell zwei Möglichkeiten wie Störungen eingekoppelt werden können: kapazitiv oder induktiv.
Kapazitive Kopplungen sind nicht von den fließenden Strömen, sondern vom Abstand der Leitungen und von der Signalgeschwindigkeit du/dt abhängig. Diese Art von Störungen lassen sich mit Abschirmung in den Griff kriegen. Als zusätzliche Maßnahme hilft es, die Pull-Up- oder Pull-Down-Widerstände so klein wie vertretbar zu machen, damit die Eingänge niederohmig werden. Als weitere Maßnahme kann ein RC-Glied, welches das störende Signal langsamer macht, also auf das du/dt wirkt, Wunder wirken. Als letzte Maßnahme helfen Multilayer mit VCC- und GND-Zwischenlagen.
Induktive Kopplungen werden durch Abschirmung nicht beseitigt. Sie wirken auf relativ große Entfernungen. Hier hilft ein Verdrillen der stromführenden Leitungen (oft Verbesserung um den Faktor 10) und ein möglichst großer Abstand zwischen den Leistungsstufen und dem Prozessorteil. Ein sauberes Massekonzept mit nur einem gemeinsamen Bezugspunkt von Prozessorground und Power-Ground ist sehr wichtig. Pull-Up- oder Pull-Down-Widerstände möglichst klein ist auch hier von Nutzen. Falls Verbraucher geschaltet werden, die am Eingang Kondensatoren haben, hilft nur das Vorschalten von Induktivitäten damit der Einschaltstrom reduziert wird. Falls induktive Lasten geschaltet werden helfen Dioden gegen Spannungsspitzen, die kapazitiv koppeln. Durch die Dioden entstehen aber Stomspitzen so das evtl. zusätzliche Maßnahmen (Diode mit Widerstand in Reihe) erforderlich sind.
Als letztes sollte man bei Störungen prüfen, ob diese vielleicht vom Netzteil kommen, indem die Versorgung versuchsweise aus einer Batterie vorgenommen wird. Gerade bei getakteten Netzteilen findet man oft Impulse mit größeren Spannungen bei kurzer Dauer (100 ns ... 5 µs). Diese lassen sich am einfachsten mit in Reihe geschalteten Induktivitäten und gegen Masse geschalteten Kondensatoren glätten. Mehr als 5 mV Wechselspannungsanteil sollte auf einer Prozessorversorgung von 5 VDC nicht gemessen werden .
Vielen Dank an PKi und Michael für die Informationen.
(p) Dietmar Harlos, 12. Mai 2002