Methoden zum Erkennen einer Fehlerbedingung in Microcontroller-Systemen
Hi Spezialisten,
beim Bau von autonomen Robotern gibt es ab und zu das Problem, dass in einem Programm eine Fehlerbdingung auftritt. Das sollte es natürlich bei guter Programmierung nicht geben, aber auch Hardware-Probleme oder Ereignisse von außen könnten ein Programm z.B. zum "Absturz" bringen.
Ich habe derzeit ein Doppel-Prozessor-System, das via I2C verbunden ist. Das System soll wechselseitig feststellen, ob auf der jeweils anderen Seite alles ok ist und ob das Programm dort läuft.
Das habe ich schon umgesetzt durch einen "Heartbeat"-Prozeß, der Alarm gibt, wenn ein "Herzschlag" der anderen Seite nicht mehr bemerkt wird. Das setzt aber z.B. zumindest eine funktionierende I2C-Verbindung voraus, was auch gestört sein könnte.
Wenn z.B. ein Mars-Rover auf dem Mars herumfährt, muss er ja auch merken, wenn sich z.B. ein internes Teilsystem "aufhängt" und muss dann sicher stellen, dass z.B. die Kommunikation mit der Basisstation auf der Erde noch klappt oder Solarzellen zum Licht gedreht werden. Dann müßte er auch versuchen, das 1. System probeweise wieder "hochzufahren", um zu merken, ob es noch funktioniert.
Fragen über Fragen:
Was sind Methoden und Konzepte für so ein Sicherheitskonzept?
Braucht man immer dafür mind. ein ZWEITES Controller System oder gibt es auch eine Sicherheitsmethode für ein EINZELNES Controllersystem, damit es sich selbst überwacht?
Wie würdet ihr sowas programmieren?
Hat jemand das schon einmal gemacht?
Liste der Anhänge anzeigen (Anzahl: 1)
Anhang 31458
So hab ich mir das vorgestellt ...
Das untere AND sorgt dafür dass erst bei allen Bedingungen die Motoren eingeschalten werden können ... und zwar in Hardware. Wenn das einmal läuft, dann läuft es ;)
Erklärung:
Das nachtriggerbare Monoflop und die Zwei Flankenerkennungen prüfen in Hardware, das der µC sein Togglebit von sich gibt.
Bsp. kann man so auch den Heartbeat von A->B auf so eine Abfrage setzen -> Zentral AND
Bsp. kann man so auch den Heartbeat von B->A auf so eine Abfrage setzen -> Zentral AND
Navigation von µC A ok: -> Ausgang zum Zentral AND
Endstufenlogik von µC B ok: -> Ausgang zum Zentral AND
Auch wie Peter schon sagte, watchdog zum neustarten wenn was schief läuft. Damit fallen dann die Eingänge des Zentral AND weg (Heartbeat A oder B) und egal was der andere µC macht, die Motoren stehen. Wenn das Zentral AND gefallen ist, kann man auch in Hardware dafür sorgen, dass beide µC verzögert einen Reset bekommen um neu anzufangen.
EDIT: Ok, ich seh gerade am Ausgang der Steigenden Flanke muss noch ein Inverter hin ;)
Gruß
Georg