Forum: Mikrocontroller und Digitale Elektronik Watch Dog Software Architektur


von Peter F. (peter_da_steht_er)


Lesenswert?

Hallo,

ich baue gerade ein Bewässerungssystem mit einem STM32H5. Sollte sich 
die Firmware an einer kritischen Stelle aufhängen, könnte ich meine 
Pflanzen überfluten.

Welche guten Bücher oder Papers gibt es zum Thema "functional safety", 
insbesondere dazu, an welchen Stellen genau der Watchdog resettet werden 
sollte?

Ich suche keine Erklärung, wie ich bei dem STM32H5 die Register setzen 
muss, sondern interessiere mich hier nur für das Konzept.

Vielen Dank

von Teo D. (teoderix)


Lesenswert?


von Volker Z. (vzavza)


Lesenswert?

Einmal in der Main-Loop.
Und bei längeren Aktionen wie zB. Flaschen.

von Matthias 🟠. (homa)


Lesenswert?

Teo D. schrieb:
> 
https://www.intel.com/content/www/us/en/docs/programmable/683711/22-3/watchdog-timer-state-machine.html

Wo hilft das PDF hier bei der gestellten Frage? In dem Abschnitt ab 
Seite 608 sehe ich "nur" eine Erklärung zum Watchdog, aber nicht nach 
einer Erklärung wie plane oder was muss ich beachten Frage des OT.
Ich denke nach Reset muss immer ein betriebssicherer und definierter 
Zustand herbeigeführt werden. Sonst kann das Wasser wirklich dauernd 
laufen... Magnetventile die nur bei Spannung auf etc. Denn der 
klassische Stromausfall gibt es ja auch noch.

von Gerhard H. (hauptmann)


Lesenswert?

Matthias 🟠. schrieb:
> Ich denke nach Reset muss immer ein betriebssicherer und definierter
> Zustand herbeigeführt werden.

Genau. Nämlich Wasser geschlossen.

Volker Z. schrieb:
> Einmal in der Main-Loop.

Genau. Weitere "guten Bücher und Papers" brauchts da nicht.

> Und bei längeren Aktionen wie zB. Flaschen.

Der Watchdog ist nur während der Programmabarbeitung aktiv.

von Andras H. (kyrk)


Lesenswert?

ISO26262

von Bruno V. (bruno_v)


Lesenswert?

functional safety (also z.B. DIN/EN61508) wäre da Kanonen.

Vielleicht eher mit den verschieden Arten eines (externen) Watchdogs 
beschäftigen. Und wie man verschiedene Programmteile über Flags oder 
Zähler auf einen echten WDG mappt.

Einfach wird FS, wenn man den Strom nur abschalten muss, also wenn Dein 
Ventil selbsttätig schließt. Noch einfacher wird es, wenn mehrere 
unabhängige Kreise (die das gleiche machen oder überwachen) in Reihe das 
Ventil schalten. Ein Ausfall führt "zwangsläufig" in den sicheren 
Zustand.

Schwieriger wird es, wenn alles über einen Pin läuft oder in einem 
Prozessor oder mit der gleichen SW in mehreren. Dann macht der "common 
cause"-Faktor allen Wahrscheinlichkeiten einen Strich durch die 
Rechnung.

Mit anderen Worten: wenn es um wirkliche Werte geht und Du FS 
bräuchtest, dann löse das lieber konstruktiv/elektrisch wie in 
Waschmaschinen oder Geschirrspülern.

von Peter F. (peter_da_steht_er)


Lesenswert?

Vielen Dank für die Antworten!

Elektrisch ist die Pumpe zwischen einem PMOS (highside) und einem NMOS 
(lowside), welche auch von verschiedenen Pins angesteuert werden. Der 
Strom wird auch gemessen.

Mein Konzept ist aktuell:
- Pumpe und ein Timer werden gleichzeitig gestartet
- Timer Compare-Match Interrupt stopt Pumpe
- Ich überwache den Timer, periodisch ob er sich tatsächlich wie 
erwartet verhält. Als Referenz verwende ich SysTick und die RTC
- Watchdog wird in der main Schleife rück gesetzt

Als nächstes werde ich noch die Strom überwachung einbauen. Dadurch kann 
ich auch feststellen ob ein MOSFET (im leitenden Zustand) defekt ist.

von Bauform B. (bauformb)


Lesenswert?

Die Pumpe und jedes Ventil könnte je einen eigenen Watchdog bekommen. 
Man braucht zwischen Pin und FET einen Kondensator in Reihe und eine Art 
Monoflop dahinter. Die Software (kein Timer) muss dann ein Rechteck 
erzeugen. Sobald irgendetwas hängt, wird der FET abgeschaltet, egal, ob 
der Pin auf High oder Low hängt.

Die Ventil-Treiber und gleichzeitig die Ventile könnte man mit einem 
Durchflussmesser überwachen. Es reicht einer für alle, wenn man immer 
nur ein Ventil einschaltet. Bonus: man kann einen Alarm absetzen, wenn 
die Pumpe zu wenig Wasser fördert oder ein Ventil nicht öffnet.

Aber sag' bitte, dass STM32H5 ein Tippfehler war; 250MHz, 640K RAM nur 
für die Blumen?

von Thilo L. (bc107)


Lesenswert?

Bauform B. schrieb:
> Aber sag' bitte, dass STM32H5 ein Tippfehler war; 250MHz, 640K RAM nur
> für die Blumen?

Bei mir erledigt das ein AT90S2333. Und er könnte nebenbei noch Pi auf 
beliebig viele Stellen berechnen, was den Blumen natürlich nicht 
wirklich hilft....

von Michael B. (laberkopp)


Lesenswert?

Peter F. schrieb:
> Mein Konzept ist aktuell:

> Watchdog wird in der main Schleife rück gesetzt

So macht man das.

Man bestimmt, eie lange die Hauptschleife maximal dauert, inklusive 
aller eventuellen Interrupt-Aufrufe, und programmiert den Watchdog 
passend.

Ob man den Rest so macht, mit timer compare, ist zweifelhaft, es geht 
doch eher um lange Minuten als kurze Millisekunden, man vergleicht 
besser Tomer und Zustand ebenfalls in der Hauptschleife und nutzt gar 
keine Interrupts.

Relais stören den uC gerne beim Abschalten wenn man den Snubber über dem 
Kontakt vergessen hat.

von Peter F. (peter_da_steht_er)


Lesenswert?

Bauform B. schrieb:
> Aber sag' bitte, dass STM32H5 ein Tippfehler war; 250MHz, 640K RAM nur
> für die Blumen?

Nein, ich habe einfach die Preise bei Mouser grob verglichen.
Da war der STM32H562RGT6 am ziemlich interessant im Bereich Preis.
Ist ein Hobby Projekt -> ich habe keine Stückzahlen


Normal nehme ich immer einen STM32F103C8, den ich über Ali beziehe. Der 
ist aber mittlerweile uralt, hat keine FPU und nur 64kb. Da wirds eng 
mit C++

von Clemens S. (zoggl)


Lesenswert?

Peter F. schrieb:
> Elektrisch ist die Pumpe zwischen einem PMOS (highside) und einem NMOS
> (lowside), welche auch von verschiedenen Pins angesteuert werden.

vielleicht die Fets über eine Ladungspumpe über Pin Toggle aus der main 
ansteuern?

http://hanneslux.de/avr/zuenduhr/lapu.html

wenn die main hängt, toggeln die Pins nicht mehr und das Wasser stoppt.

Die Frequenz der ist ja in weiten Bereichen egal.

sg

von Bauform B. (bauformb)


Lesenswert?

Clemens S. schrieb:
> Ladungspumpe über Pin Toggle

auch eine Art Monoflop, aber ein Überaus elegantes!

von Sven B. (scummos)


Lesenswert?

Verstehe nicht ganz was die externe Hardware mit dem Pin toggeln hier 
bringen soll. Logisch ist das schon im Mikrocontroller so aufgebaut, 
wenn man den Watchdog korrekt programmiert. Warum dasselbe nochmal 
extern dazubauen, mit allen dadurch entstehenden möglichen 
Fehlerquellen?

Idealerweise programmierst du den WDT so, dass er nur resettet, wenn die 
maximal einstellbare Bewässerungszeit überschritten wird. Dann den WDT 
Feed-Befehl nur aufrufen wenn die Bewässerung sicher aus ist (dann ist 
eigentlich egal wo, nur oft genug), und sicherstellen dass nach dem 
Reset auch alles aus ist. Mehr braucht's da nicht.

: Bearbeitet durch User
von Flo 0. (quarks)


Lesenswert?

Wenn Safety, dann muss in Betracht gezogen werden, dass ein Versagen der 
Steuerung ohne Stromausfall in der „Wasser an Phase“ eintritt und die 
Steuerung dann nicht mehr in der Lage ist zu reagieren.
z.B. Überspannungsereignis, das den uC dahin rafft, dessen IOs aktiv 
lässt und  die Fets und die Spule des Ventils überleben. Dann läuft das 
Wasser…
Da ist die Ladungspumpe ein sehr sehr eleganter Weg.

Wenn es ein Safetythema ist, muss alles nach dem Stand der Technik 
Mögliche zur Gefahrenabwehr getan werden.

„Ist aber unwahrscheinlich“ entbindet nicht von der Haftung, verändert 
nur das unternehmerische Risiko.

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.