PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Redundantes Mikrocontrollersystem



Powell
07.06.2008, 17:18
Hallo zusammen,

ich hatte vor einiger Zeit von einem seltsamen Problem erzählt, wens interessiert kann sich den Thread nochmal hier anschauen:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=40649&highlight=

Ich konnte die Fehlerursache bisher immer noch nicht herausfinden, mir ist nun aber ein anderer Lösungsansatz eingefallen, das Stichwort heißt Redundanz.

Um die Funktion des Systems noch mal kurz zu erläutern, schaut euch das Schema an (vereinfacht, nur die wichtigen Komponenten enthalten).

Das ganze funktioniert so: zwei Taster tasten auf GND. Wenn sie gedrückt werden erhält der Controller am entsprechenden Eingang eine fallende Flanke, die über DEBOUNCE ausgewertet und ein Sprung in das zugehörige SUB vollzogen wird. Hier wird der dazugehörige Ausgang auf 1 gesetzt und nach 100ms wieder rückgesetzt auf 0. Der andere Ausgang bleibt auf 0.
Durch die logische Ungleichheit der Ausgänge des MC führt der Motortreiber (ist ein VNH2SP30) den Schaltbefehl am Treiberausgang aus, wodurch eine Spannung zwischen OUTA und B anliegt, die wiederum den Motor drehen lässt.

Ich habe nun mehrere Lösungsansätze zu denen mir aber bisher leider die Ideen zur Hardwaretechnischen Umsetzung fehlen:

1.: Der Schaltbefehl des Tasters wird parallel zum Controllereingang auch zum Motortreibereingang geführt. Der Controller gibt nun nicht mehr den Befehl "Motor soll für 100ms drehen", sondern der Tastendruck selbst gibt den Befehl zum drehen. Der Controller muss nun nach 100ms das Signal des Tasters unterbrechen, falls der Taster länger gedrückt bleibt, und er muss den Befehl des Tasters für 100ms aufrechterhalten, falls der Taster schon vor Ablauf der 100ms losgelassen wird.
Soetwas kann man sicher irgendwie über Transistoren realisieren, mir ist dazu aber noch nichts passendes Eingefallen, für Entwürfe bin ich dankbar.

In diesem Falle muss also, falls der Controller ausfällt, der Motortreiber noch angesteuert werden wenn man den Taster drückt. Hierbei wird die Zeit von 100ms zwar nicht mehr eingehalten, das ist aber besser als gar keine Reaktion.

2.: Das System bleibt so wie es ist, nur werden alle komponenten zweifach verwendet. Das heißt 2 Controller die unabhängig voneinander arbeiten, und 2 Motortreiber, die jedoch nicht voneinander unabhängig arbeiten dürfen: Angenommen ein Controller fällt aus, dann muss der andere Controller den Schaltbefehl auch an den anderen Motortreiber weitergeben, sodass diese parallel weiterarbeiten (andernfalls würde es einen Kurzschluss am Ausgang der Motortreiber geben).
Soetwas müsste man auch irgendwie mit Dioden oder evtl. Transistoren lösen können, aber auch hier hatte ich noch nicht den richtigen Einfall.

Es ist auch denkbar dass man beide Systeme kombinieren könnte, aber ich warte doch zunächst mal ab ob jemand von euch ne clevere Idee zu dieser Problemstellung hat.

Grüße Paul

Besserwessi
07.06.2008, 18:11
Hier sollte man besser eine Saubere einfache Lösung anstreben, als eine komplitzierte redundante. Wenn es wirklich nur um die Pulserzeugung geht wäre eine Lösung mit TTL ICs oder eventuell einem NE556 eine Alternative.

Powell
07.06.2008, 18:23
Hi,

also die Frage ist was du unter sauber und einfach verstehst.

Vom Controller weggehen schließe ich schon mal faktisch aus, die flexibilität geht damit verloren. Die Hauptaufgabe ist zwar tatsächlich die Ausgabe eines Impulses nach Erkennen einer fallenden Flanke, jedoch lassen sich über den MC die Zeiten einfach verändern, was im einsatz hin und wieder vorkommt, und das Programm lässt sich erweitern (automatisierung), was ebenfalls eine gewünschte option ist.

alter Mann
08.06.2008, 10:22
Hallo,

wenn Du unbedingt eine Lösung mit redundanten Controllern anstrebst, könntest Du zwei miteinader kommunizierene Controller verwenden.

Ich würde das so angehen, das beide Controller unabhängig voneinander die Tastendrücke empfangen und ihre Signale an den Motortreiber ausgeben, sich aber gegenseitig überwachen. d.h. jeder controller sendet den Status der Tasten auch an den anderen. Und wenn einer der beiden feststellt, das dem anderen das Signal des Tasters abhanden gekommen ist, dann resettet der diesen.
Die Ausgänge zu dem Motortreiber werden dann einfach verodert.

Eine andere Möglichkeit wäre es, das beide Controller das Signal an den Motortreiber senden und die Ausgänge und-verknüpft sind.
Beide empfangen die Tastendrücke und reichen sie an den anderen Controller weiter. Wenn einer den Tastendruck nicht selber empfängt, wertet er das Signal des jeweils anderen aus um das Signal an den Treiber zu senden.

Beide Möglichkeiten könnten funktionieren, wenn beide Controller in anderen Programmiersprachen von unterschiedlichen Programmierern programmiert sind, damit sich nicht ein Fehler eines Programmierers oder eines Compilers auf beide Controller auswirkt.
Bei Sicherheitsrelevanten Systemen wird das häufig so angegangen, das mindestens 3, aber auf jeden Fall eine ungerade Anzahl Systeme zum Einsatz kommen, die wie oben beschrieben von verschiedenen Programmierern mit unterscheidlichen Compilern programmiert wurden und eine Art Mehrheitsentscheidung durchführen um Fehler eines Systems zu kompensieren.
Entweder Das "fehlerhafte" System läuft dann trotzdem noch mit um bei nachfolgenden Aktionen noch einen Mehrheitsentscheid zu haben oder es wird stillgelegt und durch ein zusätzliches System welches in warmer Bereitschaft mit läuft ersetzt zu werden.

Florian