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.
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.
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.
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.
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?
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....
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.
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++
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.
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.