From 9cae466da843c5f86675b8f746527762e1063452 Mon Sep 17 00:00:00 2001 From: Markus Rosenstihl Date: Thu, 9 Mar 2017 15:43:07 +0000 Subject: [PATCH] updated documentation --- pfg_security.md | 51 ++++++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/pfg_security.md b/pfg_security.md index bbbe575..d1b696a 100644 --- a/pfg_security.md +++ b/pfg_security.md @@ -1,45 +1,56 @@ PFG Arduino basierte Sicherheitsschaltung ========================================= -Dieses Arduino Sketch dient zur Sicherheitsüberwachung der PFG Spule. Es werden +Dieser Arduino Sketch dient zur Sicherheitsüberwachung der PFG Spule. Es werden dabei folgende Parameter überwacht: -* Kühlmitteldurchflussmenge -* Temperatur (TODO) +1. Kühlmitteldurchflussmenge +2. Temperatur (TODO) -Durchflussmenge -=============== + +i Durchflussmenge +================= Zur Durchflussüberwachung dient ein Durchflussmesser der im Rücklauf des Wasser- -kreislaufs angebracht ist. Er liefert mit Hilfe eines Hallsensors Pulse welche -proportional des Durchfluss sind. +kreislaufs angebracht ist. Er liefert mit Hilfe eines Hallsensors Pulse mit einem +Duty-Cycle von 50% deren Frequenz proportional zum Durchfluss ist. -In diesem Sketch wird der Abstand zweier Pulse gemessen. -Zur Messung wird der timer1 (der 16bit timer) des Arduino verwendet. +In diesem Sketch wird der Abstand zweier Pulse gemessen, d.h. die Periodendauer.. +Zur Messung wird der timer1 (der 16bit Timer) des Arduino verwendet. Der Signalausgang des Durchflussmessers ist mit dem Interrupt 0 des Arduino verbunden. Dieser ist so konfiguriert dass er bei einer steigenden Impulseflanke -auslöst und die Zeit zum letzen Puls in ein Array abspeichert (Periodendauer). -Der Counter des timer1 wird danach immer auf 0 gesetzt. +auslöst und die Zeit seit dem letzen Puls in ein Array abspeichert (Periodendauer). +Der Counter des timer1 wird bei jedem Puls wieder auf 0 gesetzt. Falls innerhalb eines konfigurierbaren Zeitintervals *kein* Puls gemessen wird löst der timer1 einen Interrupt Service Request aus und setzt die Periodendauer auf den höchsten Wert (UINT_MAX, höchster Wert für unsigned int). Zum Ausgleich von Messfehlern werden die Periodendauern über mehrere Werte (N=16) gemittelt. -Falls ein Wert im Array UINT_MAX beträgt wird die Mittelung abgebrochen und der gemittelte Wert -auf ULONG_MAX gesetzt (höchster Wert für unsigned long). Damit wird der Durchfluss im Rahmen der -Rechengenauigkeit 0 l/min und ein Fehler wird ausgelöst. +Falls ein Wert im Array UINT_MAX beträgt (z.B. wegen des timeouts) wird die Mittelung +abgebrochen und der gemittelte Wert auf ULONG_MAX gesetzt (höchster Wert für unsigned long) +und zurückgegeben. Damit wird der Durchfluss im Rahmen der Rechengenauigkeit 0 l/min und +ein Fehler wird ausgelöst. -Temperatur Überwachung -====================== +Die Durchflussmenge berechnet sich nach der Formel: + +flow = N/(float)total/conversion + +* N ist die Anzahl der Werte im Array +* total ist die Summe der Periodendauern +* conversion ist der Konversionfaktor (Pulse/Sekunde pro l/min) + + +2 Temperatur Überwachung +======================== -Copley Verstärker Interlock -=========================== +3 Copley Verstärker Interlock +============================= Die Copley Stromquelle erwartet ein HIGH Signal am Eingang des Interlocks. Wird ein Fehler -ausgelöst wird der Interlock-PIN des Arduino (konfigurierbar) auf LOW gesetzt. Sobald die -Störung behoben ist geht der PIN wieder auf HIGH. +ausgelöst wird der Interlock-PIN des Arduino (Pin konfigurierbar) auf LOW gesetzt. Sobald die +Störung behoben ist geht der PIN wieder automatisch auf HIGH.