Messwerte erfassen (Labor)

Aus Technische Beeinflussbarkeit der Geschmacksache Kaffee
Zur Navigation springen Zur Suche springen

Armin Rohnen, 19.06.2023

Das Thema wird in der Multi-MCU-Elektronik weiter verfogt. Die STM32-Elektronik wurde außer Betrieb gesetzt.

Armin Rohnen, 07.04.2023

Anstelle des Messwertes Leitwert soll der Messwert Leitungsdruck ermittelt werden. Der dafür erforderliche Sensor ist bereits in der Maschine verbaut. Die (Wasser)Leitungsführung muss geradliniger werden, der elektrische Anschluss muss durchgeführt werden und der Messwert muss entsprechend umgerechnet werden.

Armin Rohnen, 01.01.2023 (Messdatenablage)

Der Messwertpuffer wird über die Buttons "Messwertpuffer speichern" in eine Datei abgespeichert. Es erfolgt eine Gernerierung des Dateinamens auf Basis des Datums und der eingegebenen Beschreibung des Messzyklus. Es werden alle Meta-Daten aus den Eingabefeldern abgelegt und es wird der gesamte Messwertpuffer abgespeichert.

Der Messwertpuffer ist eine spaltenorientierte Matrix mit dem Inhalt:

1. Boilertemperatur
2. Frischwassertemperatur
3. Mischwassertemperatur
4. Boilerdruck
5. Wasserleitfähigkeit
6. Füllstand
7. Durchfluss
8. Pulse Flowmeter
9. Temperatur hinter der Wasserwendel/ vor der Brühgruppe
10. Druck in der Brühgruppe.
11. Pumpensteuerspannung
12. Bypass el. Dosierventil Stellung
13. Mischer/Kaltwasserstrang el. Dosierventil Stellung
14. Brühgruppendrossel Stellung
15. Heizleistung PWM

Die Zeitstempel sind in einem separaten Vektor abgelegt.

Nach der Datenablage wird der Messwertpuffer sowie der Zeitstempelvektor gelöscht und es wird eine neue Startzeit gesetzt.

Armin Rohnen, 01.01.2023 (Drucksensor)

Die Messdatenerfassung erfolgt in der Funktion "messwerteVerarbeiten" dort ist die Umrechnung von Digits auf phys. Messwert für den SEEED Drucksensor eingefügt worden. Wobei die Werte noch zu prüfen sind.

Aus der Kalibrierkurve des verwendeten SEED Drucksensors ergibt sich: Spannungsoffset: 500 mV Kalibrierwert: 335,3 mV/bar bei minimaler Liniaritätsabweichung

Die Umrechnung von Spannungswert auf phys. Messwert ist jedoch nicht in dieser Art programmiert.

Felix Kistler, 20.12.2022

Neben dem SEEED Studio Drucksensor muss in der Software die Datenaufzeichnung der Maschine optimiert werden. Dazu gehören unter anderem die Implementierung eines Dateinamengenerators, eines Zeitstempels und des Namens vom Operator der Messung.

Außerdem müssen folgende Eingabeparameter in den Datensatz mit aufgenommen werden: 1. Kaffeesorte 2. Input-Menge des Kaffeemehls in [g] 3. Tamperdruck in [kg]

Eine ausführliche Liste mit den erforderlichen Eingabeparametern und den gewünschten Messwerten im Datensatz folgt noch.

Felix Kistler, 13.12.2022

Der zukünftig zu verwendende Drucksensor von SEEED Studio muss in die Systemsoftware integriert werden. An der Implementierung des Sensors wird gegenwärtig gearbeitet.

Jan Budnick, 28.05.2022 (Abschlussbemerkung)

Aktueller Stand: Die Messwerterfassung läuft derzeit mit einem gleitenden 10er Mittelwert. Messungen werden mit der Frequenz des Messwerttimers durchgeführt. Die gemittelten Messwerte werden immer im Takt von Timerfrequenz/Prescaler übertragen.

Dies gilt für alle Messwerte bis auf der Durchflussrate/Flowrate. Hier wird eine Mittelwertbildung mit 20 Werten durchgeführt. Die Messfrequenz wird durch den Durchfluss gesteuert und beträgt 39,9 Messungen pro ml.

Um in Zukunft besser auf Dynamik reagieren zu können, könnte ein Regressionsansatz ausprobiert werden (mehr Details im vorherigen Eintrag).

Weitere Verbesserungen: (To-Do)

1. Die Flowrate konnte durch die Mittelwertbildung wesentlich geglättet werden. Bessere Glättung (am besten ohne weitere Verzögerung) wäre jedoch erstrebenswert, um die Dynamik des Flowreglers zu verbessern. Auch eine adaptive Mittelwertlänge würde helfen auch bei hoher Flowrate ausreichend zu glätten. Außerdem sollte das Flowmeter validiert oder ggf. kalibriert werden.

2. Die Messung der Mischertemperatur ist noch nicht ganz stabil. Es gibt noch Schwankungen oberhalb der gewünschten Regelgenauigkeit und ab und an kurzzeitige starke Abweichungen. Hier könnte durch Verbesserung der Durchmischung experimentiert werden. (Abhängig von Flow, Gegendruck, Temperatur und Ausgleichslänge, Drosseln). Außerdem ist der Temperatursenso zu langsam, hier wird ein wesentlich schnellerer gebraucht (Zeitkonstante etwa 0,1- 0,2 s erscheint notwendig zu sein für Einregelzeit 3 s zzgl. Spülung)

3. Zusätzlich zur Schwankung ergibt sich das Problem signifikanter Temperaturverluste zwischen Mischertemperatursensor und Brühgruppe, je nach Positionierung und vorheriger Nutzung. Diese teilen sich auf in Temperaturverluste aufgrund Wärmekapazitäten, welche bei kalten Komponenten schnell jenseits 10 °C liegen können und in bleibende Wärmeverluste. Diese sind abhängig von der Temperatur liegen, aber unterhalb der Siedetemperatur nicht über 5°C. Dies bedeutet, dass für eine effektive Regelung bei Kaffeebezug mehrere Sensoren notwendig sind oder der Temperatursensor möglichst nah an der Brühgruppe sein sollte.

4. Aus der Anforderung die Mischtemperatur möglichst nah an der Brühgruppe zu messen, um Zeit für Durchmischung und möglichst repräsentative Messwerte zu erhalten, ergibt sich das Problem der Reglerverzögerung. Je weiter weg vom Mischer die Messtelle ist desto länger braucht das Wasser bis es gemessen wird, dies ist besonders problematisch bei geringen Volumenstrom (1ml/s) und kann dort zu Verzögerungen von 1-3 s führen.

5. Eine Kalibrierung der Temperatursensoren ist unbedingt notwendig. Vergleicht man die NTCs mit dem "vorkalibrierten" AVS-Römer Leitfähigkeitssensor ergeben sich Unterschiede im Bereich mehrerer °C (bei höherer Temperatur).

Jan Budnick, 28.05.2022

Es wurde eine Untersuchung durch Armin Rohnen zur Pulsation der Pumpe durchgeführt. Da es Pulsation bei der nominellen Drehzahl der Pumpe gab, schlussfolgerte er, dass eine Filterung mindestens eine Umdrehung, am besten ein ganzzahliges vielfaches einer Umdrehung beinhalten sollte. Er kam des Weiteren zu dem Ergebnis, dass zur Erkennung des Funktionsverlauf sich die Methode der kleinsten Fehlerquadrate anbietet (Regression). Da zurzeit noch mit statischen Werten und nicht Verläufen (als Vorgabe) gearbeitet wird, reicht derzeit einfache Mittelung. Da bei einer Umdrehung 0,3 ml ohne Gegendruck gepumpt werden, muss mit mindestens 12 Werten (0.3*39,9) gerechnet werden. Um weitere Unsicherheiten zu berücksichtigen und weil es bisher gut funktioniert hat, werden 20 Werte zu einem Mittelwert zusammengefasst. Es ist dabei zu beachten, dass dies auch bedeutet, dass ein Messwert etwa 0,5 s braucht, bis er vollständig am Regler anliegt (bei einem Durchfluss von 1 ml/s). Es kann auch mit höherer oder geringerer Mittelung experimentiert werden. Es ist jedoch zu beachten, dass dies einen Einfluss auf die Schnelligkeit und Stabilität des Reglers hat.

Die Erkenntnisse von Armin Rohnen sollten genutzt werden, um die Filterung des Durchflusswertes in Zukunft besser zu optimieren. Diese ist derzeit noch nicht zufriedenstellend. Die Schwankung befindet sich normalerweise im Bereich unter +-10%, kann jedoch sporadisch diesen Wert übertreffen. Diese Schwankungen haben auch einen Einfluss auf die Schnelligkeit und Stabilität des Reglers. Es muss somit eine Gute Methode gefunden werden, welche die Verzögerung durch Filterung und die Filterwirkung optimal einstellt.

Jan Budnick, 21.05.2022

Die Verwendung eines FIR-Filters wurde untersucht. Die Verwendung wurde nicht tiefer ergründet. Es wurde sich lediglich die generelle Funktionsweise kurz angeschaut und dann verschiedene Tiefpassfilter mit verschiedenen Eckfrequenzen untersucht (0.1, 1, 4 Hz). Das Ergebnis erschien nicht stabiler als ein Mittelwertbildender Filter. Es wird vermutet, dass dies daran liegt, dass die Schwankung höher frequent ist und somit nicht durch den Filter aufgelöst und gefiltert werden kann (Auflösungslimit halbe Abtastfrequenz).

Vor dem Umbau konnte doch wieder Pulsation gemessen werden. Vorher war nur bei 500 mV, 1500 mV und 2000 mV getestet worden. In neuen Test stellte sich heraus, dass zwischen 600-1200 mV Pulsation messbar war. Da die Pulsation bei höherer Drehzahl verschwindet ist davon auszugehen, dass der Messwert nicht durch ein undichtes Ventil hervorgerufen wird. Armin Rohnen merkte an, dass Pulsation nur in einem bestimmten Bereich indikativ für Resonanz sei. Nach dem Umbau war keine Pulsation aufgefallen, dies muss jedoch erst noch genauer untersucht werden.

Aufgrund eines Programmierfehlers wurden die kalibrierten Messkurven für die NTCs noch nicht verwendet. Vorherige Erkenntnisse sind jedoch qualitativ immer noch richtig. Durch die Kalibrierung sind bei 125°C etwa 3-4 °C dazugekommen. Bei 25 °C gibt es einen Unterschied von etwa einem °C. Im Zuge dessen untersuchte Jan Budnick auch die Abweichung zwischen den Sensoren. Während alle NTCs ähnliche Werte anzeigten, gab der vorkalibrierte Sensor von AVS-Römer (Leitwert und Temperatur) signifikant andere Messwerte aus. Bei etwa 90 °C gab es dort einen Unterschied von etwa 8 °C. Aufgrund dieser Erkenntnisse ist Genauigkeit der durchgeführte Kalibrierung fraglich, besonders vor dem Hintergrund wie sie durchgeführt wurde. Es wird im weiteren Verlauf auf die Verwendung der Kalibriekurven der NTCs verzichtet.

Jan Budnick, 15.05.2022

Beim ersten Versuch einen Flussregler zu implementieren ist aufgefallen, dass die Schwankungen der Flussmesswerte einen schnellen und präzisen Regler im Prinzip unmöglich machen. Bereits kleine P-Anteile neigen dazu, das System in Schwingung zu bringen, wenn die Pumpe nicht gleichmäßig läuft. Außerdem bedeuten ein hoher Druck im Festwasser und der geringe Widerstand des Kaffees, dass besonders am Anfang die Pumpe an und ausgeht, was zu starken Schwankungen führt (es gibt nur 0 oder 300+ U/min).

Um diese Schwankungen zu eliminieren, wurde bisher versucht den Mittelwert mit mehr Werten zu bilden. Um eine größtenteils Schwingungsfreie Regelung zu ermöglichen ist zurzeit 20er Messwertmittelung notwendig. Die Implikation dessen ist, dass bei 1 ml/s ein Messwert im Prinzip um 0,5 Sekunden verzögert ist. Gleichzeitig führt diese hohe Mittelwertbildung dazu, dass die Verstärkung nicht zu groß werden kann, da es ansonsten durch die Verzögerung zu Überschwingen kommt.

Eine Mittelwertbildung ist somit wahrscheinlich nicht zielführend, um die gewünschte Reglergeschwindigkeit und Güte zu erreichen, stattdessen sollte die Möglichkeit eines digitalen Tiefpass-Filters untersucht werden.

Jan Budnick, 10.05.2022

Es wurde ein neues „main.py“ für die Messwerterfassung und Vorverarbeitung geschrieben. Außerdem wurden verschiedene Messungen durchgeführt. Die Ergebnisse dessen werden im Folgenden zusammengefasst:

Neues „main.py“

Basis der neuen Messwertaufnahme ist eine Mittelwertbildung der Messwerte, die Verwendung eines Prescalers und die "Filterung" des Flusswertes. Es werden die Messwerte in einer Liste (zz. Länge 10) kontinuierlich überschrieben. Jedes xte mal, dass der Timer aufgerufen wird (x ist der Prescaler zz. 2) wird der Mittelwert gebildet und die Messwerte werden an die GUI übertragen.

Der Flusswert hat zum derzeitigen Zeitpunkt einen Mittelwert bestehend aus den letzten 5 Messwerten. Dieser Wert wurde so gewählt, damit die Rückkehr zu null Fluss nicht zu lang dauert, da dies nur über den Timer geht.

Zur weiteren Filterung soll ein Wert verworfen werden, wenn er eine gewisse Relative und absolute Toleranz überschreitet. Da dies jedoch auch bei gewünschten Flussänderungen eintritt muss dieser Wert hoch angesetzt werden, sodass der Filterweniger effektiv ist. Außerdem wird eine Ausnahme für den Fluss bei 0 ml/s gemacht, da bei Ventilöffnung der Fluss schlagartig ansteigt. Bei 0 ml/s wird der gemessene Flusswert in den ganzen Puffer geschrieben.

Außerdem wird der Wert des neuen Temperatursensors ebenfalls übertragen.

Flussauswertung extern über NI-Messkarte vs. Mikrocontroller

Da die über den Mikrocontroller aufgenommenen Flusswerte stark schwanken und vereinzelt starke Spitzen auftreten, wurde das Spannungssignal außerdem über eine NI-Messkarte aufgenommen und anschließend in MATLAB® ausgewertet.

Ergebnis dessen: Die Messwerte schwanken in einem ähnlichen Bereich bei beiden Messmethoden und auch die Durchflussmenge ist über beide Methoden gleich. Einzig die vereinzelten Messwertspitzen konnten über die NI-Messkarte nicht beobachtet werden. Dies liegt entweder daran, dass die Messungen nicht lang genug durchgeführt wurden, oder werden durch den Mikrokontroller verursacht.

Beispielhaft wurde der Fluss ohne Drosselung bei 1000 mV vergleicht. Dabei hat sich ein nomineller Fluss von 4,6 ml/s eingestellt. Ohne Filterungen lagen die Schwankungen hier im Bereich von etwa einem ml/s (Fehlerbreite). Durch die Anwendung eines Tiefpassfilters in MATLAB® konnte diese Schwankung auf im Normalfall etwa 0,1 ml/s reduziert werden, diese erhöht sich jedoch ab und an auf 0,4 ml/s.

Außerdem wurde die Flussmessung von hinter der Pumpe im Kaltwasserstrang kurzeitig hinter den Mischer ins Warmwasser verlegt, um zu schauen, ob dies zu geringeren Schwankungen führt. Es erscheint tatsächlich etwas weniger zu schwanken, dies ist jedoch nicht signifikant genug um den Informationsverlust, etwa für Säuberungsprogramme zu kompensieren.

Temperaturuntersuchungen

Es wurden Erstuntersuchungen getätigt, um die Temperaturschwankungen im Mischwasser besser zu verstehen. Dabei wurde kurz der Einfluss des Drosselventils, der Durchflussmenge, der Heizung und der Orientierung des Temperatursensors untersucht. Dies führte zu folgendem Ergebnis: Die Orientierung des Temperatursensors hat keinen merklichen Einfluss auf die Temperaturschwankung. Höhere Flussraten führen zu stabileren Messwerten und zu geringeren Temperaturen. Die Heizung hat einen vernachlässigbaren Einfluss auf die Schwankung. Wenn das Dosierventil geschlossen ist, sind die Temperaturschwankungen wesentlich geringer (Bsp. 1 °C vs. 0,1 °C). Es ist somit denkbar, dass ein signifikanter Anteil der Temperaturschwankung durch unzureichende Mischung entsteht.

Um die Schwankung auszugleichen wird empfohlen, entweder einen Temperatursensor mit Oberflächenmessung oder einen trägeren Sensor zu verwenden. Auf Grund Präferenz und Verfügbarkeit wird vorerst ein trägerer Sensor ausprobiert.

Jan Budnick, 09.04.2022

Aufgrund Schwankungen der Messwerte ist auf der MCU der Quelltext so abzuändern, dass die Messwerte in erhöhtem Takt abgefragt, gefiltert und geglättet werden. Werte könnten verworfen werden, wenn diese zu stark von dem aktuellen Mittelwert um einen relativen (für hohe Werte) und absoluten Wert (für niedrige Werte) abweichen. Anschließend können jeweils z.B. 10 Werte zu einem Mittelwert zusammengefasst werden und an die MCU übermittelt werden.

Es wurde entschieden, dass das Flowmeter keinen Interrupt mehr in der GUI auslöst. Stattdessen werden die Interrupts vom STM32 abgearbeitet und in eine Flowrate und einen Flowcount/Interruptcount umgewandelt. Diese Entscheidung wurde getroffen, da bei hoher Durchflussrate sehr viele Interrupts ausgelöst werden, in dem jeweils viele Zeichen übertragen werden, da mit Mikrosekunden seit Start gearbeitet wird. Dies würde die Zyklusrate stark beeinträchtigen.

Dafür wird folgender Quelltext in ,,main.py abgelegt:

def messwerte(timer):
   global flowcount1
   global flowrate1

   if flowcount1 == 0: #Sichergehen, dass wenn keine Interrupts ausgelöst werden die Flowrate 0 wird

       flowrate=0

   print('M!',T_Boiler.read(),T_Eingang.read(), T_Mischer.read(), P_Boiler_Alt.read(),Leitwert.read(),Fuell_1.value(),flowrate1,flowcount1)

   flowcount1=0

def flow1_callback(Pin):
   global start
   global flowrate1
   global flowcount1

   flowrate1=round(1000000/(39.9*utime.ticks_diff(utime.ticks_us(),start)),2)

   start=utime.ticks_us()

   flowcount1=flowcount1+1 

Edit: Abgesehen vom Durchfluss wird auf der MCU noch keine Berechnungen durchgeführt. Es werden lediglich ADC-Werte Ausgelesen und an die GUI übermittelt, die Umwandlung der ADC-Messwerte in tatsächliche Messwerte geschieht in der GUI.

Die Übertragung von Funktionsdefinitionen aus ,,main.py in die GUI stellt sich als herausfordernd dar, da die Formatierung über ,,writeline schwierig ist. Dennoch können einfache Funktionsdefinitionen ohne If-Statements durch mehrere ,,writeline" erstellt werden. Diese können dann durch dreifaches senden von ,,newLine abgeschlossen werden.

Jan Budnick, 02.04.2022

Wie zuvor erwähnt ist die eingebaute Spannungsmesskarte mit hoher Wahrscheinlichkeit kaputt. Aus diesem Grund wurde die Messkarte durch eine neue ersetzt. Dies war die letzte unbenutzte. Die dafür durchgeführte Lötarbeit hat teilweise suboptimale Qualität. Die Lötkontakte wurde alle auf Funktion überprüft, sollte es jedoch in der Zukunft Probleme geben, sollten die Lötstellen überprüft werden.

Nach eingehender Prüfung der Messplatine ist diese eingesetzt worden. Abgesehen von In4 (wird z.Z. nicht gebraucht und wurde dementsprechend nicht getestet) wurden alle Eingänge getestet und für funktionsfähig erklärt.

Zur Kalibrierung wurden anschließend an den Eingängen IN1-3 Spannungen durch ein Spannungsreferenzgerät angelegt und die sich daraus ergebenden ADC-Werte in der GUI ausgelesen. Die App hat dabei 20 Messwerte abgetastet und 2 Mal die Sekunde, mit den letzten 4 Messwerten, einen Mittelwert gebildet. Das Vorgehen wird im Folgenden erläutert:

   GUI öffnen und verbinden.
   Referenzspannungsgerät auf 0V DC einstellen.
   Referenz-GND mit Maschinen-GND verbinden und Referenz-Pluspol mit IN1 verbinden.
   ADC-Wert in der GUI ablesen und notieren, bei schwankendem Wert kann ein Mittelwert gebildet werden.
   Schritt 4 mit folgenden weiteren Spannungen wiederholen: 100, 200, 300, 500, 700, 1000, 1500, 2000, 2500, 3000, 4000, 4400 (mV).
   Schritte 2 bis 5 für IN2 und IN3 wiederholen.

4400 mV wurde als Obergrenze gewählt, da IN1 nur bis 4500mV ausliest und es einen Puffer geben sollte.

Nachdem die Messwerte aufgenommen wurden, konnte eine Ausgleichsgerade für die Inputs ermittelt werden und somit eine Anpassung (y=mx+c) in der GUI durchgeführt werden.

Die Kalibrierung kann als Erfolg gewertet werden, da ein linearer Zusammenhang mit geringer Streuung und geringer absoluter Abweichung (<30 mV Drift zwischen 0 und 4400mV) ersichtlich wurde. Dennoch muss gesagt werden, dass diese geringe Streuung nicht repräsentativ für den ADC ist, da bereits eine Mittelwertbildung durchgeführt wurde.

Da nun sowohl Spannungswerte und NTCs ausgewertet werden können, können alle angeschlossenen Sensoren ausgelesen werden und sind zumindest vorläufig kalibriert.

Jan Budnick, 26.03.2022

Bei der Zuordnung und Kalibrierung der Sensoren kam es zu verschiedenen Problemen. Eine vorläufige Kalibrierung der NTC Sensoren konnte jedoch erzielt werden.

1. An der Spannungsmesskarte fehlten 5V und 24V Versorgung, nach vorsichtiger Prüfung der Schaltpläne wurden diese über J4 angeschlossen. 24V wurden von X2-11 bezogen und 5V von der PWM-Leiste.

2. Trotz verschiedener Prüfungen konnte nur eine Spannungswandlung durch die Spannungsmesskarte beobachtet werden (beim Anlegen einer Spannung an den Leitwert Pin). Da die Spannungsmesskarte in der Vergangenheit mehrfach Spiegelverkehrt eingebaut wurde, ist es möglich, dass diese beschädigt wurde. Es wird demnach eine Ersatzkarte ausprobiert.

3. Es wurde eine Kalibrierung der beiden NTCs (AVS und OMRON) versucht. Dabei wurde folgendermaßen vorgegangen:

   Es wird warmes Wasser bezogen und in ein Gefäß gefüllt (Tasse). Anschließend wird die Temperatur des Wassers weiter angehoben und das Gefäß aufgewärmt durch Verwendung einer Dampflanze.
   Der zu testende Sensor und eine Referenz (PT100 Thermometer ausgelesen über MATLAB®) werden durch Klemmen nah aneinander im Gefäß platziert, sodass die Wände nicht berührt werden.
   Unter konstanten Rühren werden die beiden Sensoren auf die Temperatur des Wassers gebracht (ersichtlich durch nur noch geringe Veränderung der ausgelesenen Temperaturwerte, Tendenz sinkend).
   Unter beibehalten des Rührens werden nun immer wieder Temperaturen von beiden Sensoren ausgelesen und aufgeschrieben (Die Temperatur des Testobjektes wird über die programmierte GUI ausgelesen).
   Sobald etwa 60°C erreicht werden, kann die Abkühlung durch Hinzufügen von kaltem Wasser mit anschließendem Rühren und Warten beschleunigt werden.
   Am Ende wird die Temperatur von Wasser direkt aus dem Hahn abgeglichen.
   Diese Schritte sind mindestens einmal zu wiederholen.

Beobachtungen

Während der Kalibrierung des AVS-Sensors ist aufgefallen, dass er das Wasser leicht erwärmt hat, sodass wenn das Rühren ausgesetzt wurde (und kaltes Wasser verwendet wird) die gemessene Temperatur langsam ansteigt. Generell ist eine Kalibrierung schwierig, da sich der Sensor in einem Rohrstück befindet, eine Durchströmung ist somit erschwert . Die Wiederholungsungenauigkeit wird auf etwa 0,5 °C für den AVS Sensor geschätzt, dabei werden etwa 0,2 °C durch die Schwankung des Ablesewertes hervorgerufen. Der OMRON Sensor wiederum ist frei zugänglich und hat eine höhere thermale Masse, sodass eine bessere Wiederholungsungenauigkeit von etwa 0,3 °C erreicht wird.

Ergebnis

Beide Sensoren zeigen bei 25 °C fast keine Abweichung, entwickeln aber bei zunehmender Temperatur eine steigende Abweichung. Der AVS Sensor misst bei 90 °C etwa 4 °C zu wenig der OMRON Sensor etwa 2 °C. Die Abweichung in Abhängigkeit der Temperatur scheint für den AVS Sensor leicht quadratisch, für den OMRON eher linear. Da beide Sensoren vom Typ NTC sind, wird sich für ein einheitliches Vorgehen entschieden: Lineare Regression (y=mx+c). Dies bedeutet für den AVS Sensor nur geringe Regressionseinbuße.

4. Die Pinbelegung bei jetziger Verkabelung hat sich folgendermaßen geändert: T_Mischer = PA5, T_Boiler=PA7

Jan Budnick, 22,03.2022

Es wurde Code entwickelt um alle angeschlossenen Sensoren zyklisch auszulesen. Dies geschieht durch einen auf der MCU implementierten Timer. Der Präfix "M!" wird dabei als eindeutiger Erkennungsschlüssel verwendet, sodass die Werte in der GUI erkannt werden. Zusätzlich zu dem Messwerttimer löst das Flowmeter einen Interrupt auf der MCU aus, welcher dann den Zeitstempel mit dem eindeutigen Erkennungsschlüssel "F!" übermittelt. Dafür wird folgender Code auf die MCU platziert:

def messwerte(timer):

   print('M!',T_Boiler.read(),T_Eingang.read(), T_Mischer.read(), P_Boiler_Alt.read(),Leitwert.read(),Fuell_1.value())

 
def flow1_callback(Pin) :
       print( 'F!',utime.ticks_ms())

Um die Übertragungsmenge und Interruptmenge für die GUI zu reduzieren wurde sich darauf geeinigt stattdessen das Flowmeter auf der MCU zu verarbeiten und die Fließrate zusammen mit den anderen Messwerten zu übergeben.

Nachdem die Messwerte an die GUI übergeben wurden lösen diese einen Interrupt in der GUI aus. Dieser Interrupt wird verwendet um die Messwerte umzuwandeln und anzuzeigen, sowie Regler und Funktionen aufzurufen.

Bei der Implementierung der Messwertauslesung kam es zu Schwierigkeiten mit der Laufzeit. Frequenzen über 8 führten zu Überlastung von MATLAB® und die Messwerte aktualisierten sich nicht mehr. Der Grund für diese Trägheit konnte nicht gefunden werden hat aber wie im Taskmanager zu sehen, dazu geführt, dass MATLAB® voll ausgelastet war. Die GUI wurde anschließend neu strukturiert, überflüssiger Code wurde entfernt und möglich alles in Funktionen ausgelagert, sodass deren Ausführung nicht abgebrochen wird. Danach war eine Frequenz von 20-30 gut möglich. MATLAB® schien erst an seine Belastungsgrenze bei einer Frequenz von etwa 100 zu kommen. Es ist jedoch unklar ob eine Frequenz von 100 auch wirklich erreicht wurde oder ob der Funktionsaufruf hier teilweise durch einen Neuaufruf unterbrochen wird.

Außerdem ist aufgefallen, dass manchmal Befehle nicht ordentlich übertragen werden. Dies scheint immer dann ein Problem zu sein, wenn gleichzeitig eine Antwort der MCU kommt und versucht wird ein Befehl über die REPL zu schicken. Aus diesem Grund wurde der Timer deinit in die Reglerroutine eingebunden sodass der Befehl erst geschickt wird nachdem der Timer bereits gefeuert hat.

Jan Budnick, 21.02.2022

Sensoren (Leitfähigkeit, Temperatur, Druck, Fluss) in der GUI implementieren bzw. Anzeigen.