Forum: Mikrocontroller und Digitale Elektronik AVR System gegen Ausfall absichern


von Jey B. (jeybee)


Lesenswert?

Moin,

Ich wollte mal fragen, wie man ein System mit AVRs aufbaut, welches eine 
sehr hohe ausfallsicherheit besitzt.

Kann man das nur Softwaretechnisch umsetzten, oder lässt sich das auch 
Hardwaretechnisch machen? (Grundcode in einen ROM brennen / Zweiter AVR 
der bei ausfall des ersten geswitcht wird? / etc)



Ich freue mich für euere Anregungen.



Greez Jey

von P. M. (o-o)


Lesenswert?

Jey Bee schrieb:
> Ich wollte mal fragen, wie man ein System mit AVRs aufbaut, welches eine
> sehr hohe ausfallsicherheit besitzt.

Definiere "Ausfallsicherheit" genauer:
1. Was ist ein Ausfall, d.h., was darf das System auf keinen Fall tun?
2. In welchem Rahmen wird es eingesetzt bzw. was sind mögliche 
"Bedrohungen"?

von Jey B. (jeybee)


Lesenswert?

Naja, es darf auf keinen Fall etwas tun, dass es nicht soll. *gg
Also konkret: Das System wird elektrische Kontakte und dazu passende 
Motoren mit riegeln haben (Schlosssystem). Bei einem Ausfall dürfen z.B. 
auf keinen Fall die Motoren irgend welche riegel öffnen etc. Entweder es 
funktioniert, oder alles ist dicht.


In diesem Fall geht es auch nicht um Angriffe gegen Aussen, sondern um 
technisches Versagen.

von astroscout (Gast)


Lesenswert?

Das wichtigste hier ist erstmal eine gute sichere Programmierung sowie 
eine sinnvolle Beschaltung (es dürfen z.B. nicht bei einem Stromausfall 
die Riegel öffnen bzw. der AVR darf nach einem Reset den Befehl geben, 
alle Riegel zu öffnen)

Um zu Überwachen, ob dein AVR auch noch korrekt arbeitet, könntest du 
ein Rechteckimpuls ausgeben lassen und diesen dann mit einer Hardware 
auswerten.
Fällt der Rechteckimpuls aus, hat sich (bei richtiger Programmierung) 
dein AVR aufgehangen. Dann kannst du (hardwaremäßig) alle Schlösser 
verriegeln.

von STK500-Besitzer (Gast)


Lesenswert?

Sowas macht man in den seltensten Fällen nur in Software.
Not-Aus-Systeme müssen beispielsweise auch funktionieren, wenn die 
Steuerung (Software) nicht mehr geht.
Ähnlich dürfte dein Problem auch geartet sein.
Deine Riegel sollten stromlos von einer Feder in die gewünschte Endlage 
gedrückt werden. So funktionieren zumindest Haustüröffner.

Der Strom für die Riegel sollte dann auch noch durch die 
Alive-Schaltung, die astroscout vorgeschlagen hat, freigegeben werden.

von P. M. (o-o)


Lesenswert?

Stichwort Fail-Safe-Design (Fail-Safe heisst nicht fehlersicher, sondern 
sicher bei Fehler): Jede Komponente fällt automatisch in ihren sicheren 
Ruhezustand, wenn man nicht aktiv etwas dagegen unternimmt. Beispiel 
Türschlösser: Der Riegel geht per Feder in die sichere geschlossene 
Position. Nur durch das Anlegen einer Spannung kann er überhaupt 
ausgelenkt werden.

von lightninglord (Gast)


Lesenswert?

Das mit dem Rechteck ausgeben ist schon was feines, ein 
Missing-Puls-Detektor dahinter ( HW ) der dann auf den RST des AVR geht. 
Am besten noch den WD des AVR aktivieren ( dauerhaft! ), dann verrennt 
sich der µC nicht in irgend einer unerwarteten Dauerschlaufe.

von Jey B. (jeybee)


Lesenswert?

Wie sieht es aus, wenn das Schloss mechanisch nicht verändert werden 
kann? Also es ist keine Feder vorhanden. Wie macht man es dann?


Wenn man davon ausgehen kann, dass das System immer Strom hat, kann man 
ja eine Schaltung aus diskreten Bauteilen basteln, die den Riegel immer 
zu hält, ausser der uC bringt ein eindeutiges Kommando.


Aber wenn es "Strom-Fail-Save" sein sollte, dann müsste man halt schon 
mechanisch dahinter, oder?



hat sonst noch jemand ideen?

von astroscout (Gast)


Lesenswert?

Um deine Frage genauer beantworten zu können, müsste man mal ein wenig 
mehr über die Riegel wissen. Müssen die nur eine Impuls zum Ändern der 
Position der bekommen oder einen Dauerstrom?

Du könntest ggf. um das Problem mit dem Stromausfall zu lösen, einen 
Akku, der das System bei Stromausfall speißt, einbauen.

von Jey B. (jeybee)


Lesenswert?

Ich hab nun ein solchiges Schloss vor mir. Das ganze sieht nun so aus. 
dass der Riegel automatisch über eine Feder in die Fail-Save-Position 
gehalten wird. Zum Entriegeln des Riegels gibt es eine Spule, die ich 
ansteuern kann.
Somit ist das Schloss selber schon mal FailSave, weil es auch noch einen 
"I am God" Schlüssel gibt, mit dem man die Elektronik ümgehen kann.

Zum Programm:

Bisher habe ich nie explizit darauf geachtet (achten müssen), dass das 
wirklich sauber läuft etc. Wie muss ich vorgehen, wenn ich eine Software 
machen will, die wirklich eine niedrige Ausfall- und Fehlerquote hat? 
(neben WatchDog und co.)

von Dirk (Gast)


Lesenswert?

Ein guter Anhaltspunkt sind z.B. die MISRA Rules, die insbesondere für 
Automotive-SW gelten:

http://computing.unn.ac.uk/staff/cgam1/teaching/0703/misra%20rules.pdf

von astroscout (Gast)


Lesenswert?

Ich glaub da gibt es kein Patentrezept, wie man eine zuverlässige 
Software schreibt.

Als Tipp solltest du auf jeden Fall drauf achten, dass alle Komponenten, 
die du verwendest auch richtig initialisiert werden (auch alle PORTS zu 
Beginn des Programms). Häufig klappt es zwar auch ohne eine korrekte 
Initialisierung, aber halt nicht immer.

Außerdem solltest du dir den Aufbau deines Programm im vorhinein genau 
überlegen, damit dir immer klar ist, was dein Programm wann gerade macht 
und was bei welcher Eingabe passiert (passieren könnte); z.B: auch bei 
einem Reset an einer beliebigen Stelle im Programm.

von Jey B. (jeybee)


Lesenswert?

Nunja, das schlimmste was ich mir vorstellen kann, ist halt dass sich 
das System einfach so aufhänt. Hierzu kann man ja aber den WatchDog 
einsetzten. Wie hoch ist die Chance, dass er versagt?

bei einem einfachen Reset durch den WatchDog oder von aussen dürfte 
nicht allzuviel Passieren, da die Spule für den Riegel ja nur für ein 
Paar Sekunden eingeschaltet werde muss.

von Anja (Gast)


Lesenswert?

Jey Bee schrieb:
> Wie hoch ist die Chance, dass er versagt?

Sehr hoch wenn vorher dein Spannungsregler versagt und die volle 
Betriebsspannung (z.B. 24V) auf den Prozessor läßt.

Sicherheitsrelevante Systeme (bei denen eine Rückfallebene bzw ein 
sicherer Zustand existiert) arbeiten grundsätzlich mit externen 
(Window-) Watchdogs.

Der Watchdog hat einen unabhängigen Takt (z.B. RC-Oszillator oder 
Resonator wenn der Hauptprozessor mit Quarz arbeitet).

Der Watchdog hat entweder eine unhabhängige Versorgung oder es wird 
überwacht ob die Versorgung innerhalb des zulässigen Fensters (z.B. 
+/-5% Toleranz) liegt. (Falls nicht wird der sichere Zustand in Hardware 
herbeigeführt).

Der Watchdog stellt zyklisch Fragen an den Hauptprozessor. Im 
Hauptprozessor wird daraus mit kryptografischen Verfahren eine Antwort 
generiert die nur dann richtig ist wenn alle Teilprogramme die für die 
richtige Reaktion des Systems verantwortlich sind in der richtigen 
Reihenfolge ausgeführt wurden. Wenn die Antwort falsch ist oder nicht 
zum richtigen Zeitpunkt beim Watchdog eintrifft dann schaltet der 
Watchdog in den sicheren Zustand.

Alternativ wäre denkbar daß Du ein vollredundantes System mit 2 
Prozessoren (unabhängiger Hersteller und Tool-Kette und unabhängiger 
Versorgung) aufbaust. Das eine System schaltet dann den Plus-Pol des 
Schlosses und das andere den Minus-Pol.

Gruß Anja

von sven (Gast)


Lesenswert?

Kleiner Erfahrungsbericht...

Ich Arbeite recht viel mit avr's und habe denen auch immer recht gut 
vertraut.
z.b. habe ich überall in meiner Wohnung bus Lichtschalter (Taster und 
Relai mit anbindung an ein rs485 ) jeder mit nem pic und noch nie hat 
einer einen fehler gemacht zumindest nicht das ich das gemerkt hätte

Viele Atmel's in der Badezimmer decke für RGB Dekolicht. auch noch nie 
was falsch gelaufen

Elektronisches Thermostat im Kühlschrank Atmel hatte sich nach einem 
Stromausfall obwohl watchdog aktiv war einmal aufgehängt

naja und den Vogel abgeschossen hat meine Spülmaschinensteuerung
- Ständiges aufhängen mit Watchdog
- Unkontrolierte programmsprünge
- Hauptprogramm aufgehängt Interrupts liefen normal
- Hauptprogram normal aber Interrups angehalten
- Vergessen der ansteuerung des lcd
und letzendlich fast das überfluten der Küche

zum glück hatte ich den original Wasserdruckschalter als Notaus mit 
angeschlossen

Bei dem Projekt habe ich lange und intensiv den fehler gesucht und erst 
gefunden als ich längst eine neue spühlmaschine hatte
es war ein defekter 5v Spannungsregler bei weniger als 50 ma hat er noch 
5v gebracht aber über 50ma ist er eingebrochen bis auf unter 2v und das 
mögen avrs wohl nicht :)

Fazit möglichst niemals "gefährliche hardware" ohne zweite absicherung 
betreiben

von Dirk F (Gast)


Lesenswert?

Hallo, zu dem Thema sicher Ansteuerung von Relaisspulen habe ich vor 
einigen Tagen noch folgendes entdeckt:
An einem Ausgang (hier ein PIC18, soielt aber keine Rolle) wird über 
einen Vorwiderstand und Transistor ein Relais angesteuert.
Wenn man nach einem Reset oder dem Einschalten zu lange wartet, und den 
Pin von Eingang auf Ausgang umschaltet, dann reicht die Spannung am Pin 
aus, um das Relais flattern zu lassen.

Also beim Layout darauf achten, dáss ein entsprechender Pull-Down 
Widerstand verwendet wird.

Gruß Dirk

von Thomas (Gast)


Lesenswert?

Der ReverseCurrent einer Dioden kann auch schonmal einen AVR Eingang 
hochziehen...
Hinterlistig wirds bei Erwärmung, dort nimmt er zu.

Somit kann die Schaltung bis zu einer bestimmten Temp. sehr gut 
funktionieren,
ab dann ist aber der "Wurm" (Rev.Curr.) drin !

von Michael J. (jogibaer)


Lesenswert?

Hallo,

habe mal irgendwo gelesen, daß LEDs an hochohmigen
Eingängen ein wenig wie Photodioden arbeiten können.

Du könntest aber auch 2 CPUs einsetzen, die sich gegenseitig überwachen.
Oder nimmst als 2. CPU einen anderen Prozessor.
Oder beide CPUs haben unterschiedliche Programme.

Auf alle Fälle hängt die Zuverlässigkeit hauptsächlich am Programm und
an der Schaltung und deren Layout und Aufbau.


Jogibär

von Jey B. (jeybee)


Lesenswert?

Als erstes möchte ich mich bei allen für die vielen Anregungen bedanken.

Eine zweite Spannungsversorgung zu errichten dürfte ja kein Problem 
sein. Und wenn ich einen genug grossen Pufferkondensator verwende, 
dürfte ja auch die Umschaltzeit keine Rolle mehr spielen.
Aber nach welchem kriterium soll ich umschalten? Soll ich einen TinyAVR 
nur dafür abrichten, die Stromversorgung zu schalten? Was ist, wenn auch 
der versagt?


Als weiteres habe ich es in betracht gezogen, zwei Microcontroller zu 
verwenden. Aber auch hier bin ich mir im umklaren, wie das ganze mit der 
Umschaltung funktionieren soll. Zudem währe es ja recht ungeeginet, wenn 
der eine Controller irgend wo im Programm hängen bleib, den 
(Relais-)port immer flackern lässt, und somit auch der zweite Controller 
ein Problem hat.

von Anja (Gast)


Lesenswert?

Jey Bee schrieb:
> Soll ich einen TinyAVR
> nur dafür abrichten, die Stromversorgung zu schalten? Was ist, wenn auch
> der versagt?

Das gibt keine zusätzliche Sicherheit.

Der richtige Weg ist daß 2 Prozessoren sich gegenseitig überwachen und 
jeder von Ihnen kann im Fehlerfall unabhängig den sicheren Zustand 
herstellen.
Eine Umschaltung ist problematisch: da kann immer noch der Umschalter 
als gemeinsame Fehlerquelle ausfallen.

Gruß Anja

von Jey B. (jeybee)


Lesenswert?

Wie würdest du das ganze mit der Stromversorgung regeln?

Zu dem gegenseitigen Überwachen: Aber dann müssen ja die Controller 
wiederum miteinander Kommunizieren können, so dass der eine den anderen 
"überschalten" kann.

von Jey B. (jeybee)


Lesenswert?

Sry wegen Doppelpost:

Du meinst also, dass ich nur eine Spannungsversorgung habe (bzw. für 
beide Controller je eine), und wenn der eine Controller schlapp macht, 
setzt der andere Controller mit seiner eigenen Spannungsversorgung ein?

Dann frage ich mich noch immer, wie ich sagen kann, welcher Controller 
die Überhand hat.



Greez Jey

von Martin V. (oldmax)


Lesenswert?

Hi
Ich weiß ja nicht, wo der sichere Zustand wirklich ist. Ein Riegel, der 
etwas sicher zuhält muß:
A: ohne Versorgungsspannung in die sichere Lage gebracht werden.
B: Rückmeldung bringen und Gefahr meldenbei Versagen
C: Doppelt (Redundant) ausgelegt sein, das es immer noch zu sicherem 
Verschluß kommt, wenn einer nicht mehr mag. Der Fehler wird festgestellt 
und muß beseitigt werden.
Um es kurz zu machen:
Nimm 2 Controller, am besten verschiedene Bauarten, aber beide mit dem 
selben Programm. Entweder, liegt bei der Anwendung, hast du zwei 
Kontakte in Reihe oder zwei parallel. Dazu die entsprechende Rückmeldung 
auf beiden Controllern. Nun kannst du eine Diagnose fahren: Beide 
Bedingungen erfüllt: ok, Nur eine Bedingung erfüllt, sicherer Zustand, 
aber weitere Schaltspiele nicht erlauben, bis Fehler beseitigt.
Beide Bedingungen nicht erfüllt: Schlimmster Fall: Feuerwehr, 
Krankenwagen, Polizei, THW am besten gleich alle alarmieren.....
Nee, letzteres dürfte dann nicht mehr auftreten.
Letztlich bleibt immer die Frage: wo ist das schwächste Glied.
Ist wie bei einer Kette. Du kannst alle Glieder doppelt so groß 
auslegen, vergißt du eines, geht die Kette kaputt.
man kann natürlich auch nur mit Zwillen auf Spatzen schiessen .....
Gruß oldmax

von Martin V. (oldmax)


Lesenswert?

Hi
Kleiner Nachtrag.
Es gibt Steuerungen extra für Aufgabenstellungen, die sichere Funktionen 
liefern. Schau mal unter dem Stichwort Safety SPS, ob du da mehr Infos 
bekommst. Da werden bspw. die Ausgänge gepulst, um einen Drahtbruch zu 
erkennen,, Eingänge mit einer Spannung aus dem Modul versorgt und das 
ganze innerhalb der Module überwacht. Schaltkontakte überprüft, ob sie 
in einem zugelassenen Zeitfenster schalten usw.  Je nach 
Gefahrenpotential lassen es sich die Anwender das auch was kosten.
Gruß oldmax

von Jey B. (jeybee)


Lesenswert?

Vielen dank für deine erleuterung, oldmax


Also das mit dem Kabelbruch erkennen werde ich mir noch genauer ansehen, 
könnte noch interessant sein.

Der Riegel wird im Stromlosen zustand automatisch in der sicheren 
Position gehalten.

Aber trotz allem bin ich mir noch immer im Unklaren, wie ich das 
Umschalten der beiden Controller realisieren soll, ohne dass sich beide 
gegenseitig ins Handwerk pfuschen.

von Martin V. (oldmax)


Lesenswert?

Hi
Also, das mit den zwei Controllern würd ich nur entwickeln, wenn es die 
Sicherheitsstufe verlangt. Ich hab sowas auch noch nicht gemacht, könnte 
mir aber vorstellen, du gehst da folgendermaßen vor:
Jeder Controller bekommt gleiche Hardware und gleiches Programm, 
natürlich auf den Typ zugeschnitten. Relais haben Kontakte, die 
Arbeitskontakte legst du wie erforderlich entweder Parallel oder in 
Reihe. zusätzlich brauchst du jeweils einen Kontaktsatz für die 
Rückmeldung an die Controller. nun weißt du ja vom Programm her, welchen 
Zustand dein Relais melden sollte. Das war die einePrüfung. Immer noch 
können die Lastkontakte den Geist aufgegeben haben, daher brauchst du 
die Rückmeldung vom Stellglied, am besten Öffner und Schließer. Nun 
kannst du eine Fehlerauswertung machen. Bevor ich aber so weit gehe, 
würd ich erst mal prüfen, brauchts das. Klar, wenn's um die 
Türverriegelung eines Linienfliegers geht, keine Frage. Aber wenns nur 
darum geht, einen Affen im Käfig zu halten, denk ich, reicht einfache 
Rückmeldung und ein Controller. Hochwertige Sicherheits-SPS'en enthalten 
bis zu 3 CPU's mit unterschiedlicher Programmierplatform, um Fehler des 
Compilers auszuschließen. Und dann kontrollieren sie auch ihre 
Ergebnisse, bevor auch nur ein Befehl nach draußen geht. Der Spaß kostet 
dann aber auch richtig.....
Gruß oldmax

von Jey B. (jeybee)


Lesenswert?

Hallo Martin,

Aber ich will ja kein SPS oder sonsitges fertig kaufen, sondern es 
selber lernen.
Schlussendlich geht es aber darum, dass Wertsachen in einem Tresor zu 
schützen.

Aber das mit den Relais währe ja auch doof (mechanisches versagen).

von Anja (Gast)


Lesenswert?

Jey Bee schrieb:
> Aber trotz allem bin ich mir noch immer im Unklaren, wie ich das
> Umschalten der beiden Controller realisieren soll, ohne dass sich beide
> gegenseitig ins Handwerk pfuschen.
>
Du sollst nicht zwischen den Controllern umschalten!!!!!!!!!
Du hast ein Schloßsystem mit Motoren oder Magneten (= Aktor) für die 
Riegel.
Der Aktor hat 2 Anschlüsse.

Mit dem 1. Controller steuerst Du den einen Anschluß z.B. +Pol deines 
Aktors.

Mit dem 1. Controller unabhängig vom 1. Controller den 2. Anschluß z.B. 
-Pol des Aktors.

Im Fehlerfall (Prozessor läuft nicht oder hat Über oder Unterspannung) 
wird der Anschluß stromlos geschaltet.

Gruß Anja

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.