Messwerte erfassen Multi-MCU
Armin Rohnen, 13.08.2023
Die Erfassung der Messwerte erfolgt in den Funktionen "mwp_verarbeitung" und "bas_verarbeitung". Die Übermittlung erfolgt zeilenweise. Je übermittelter Datenzeile wird ein kompletter Messwertsatz je Platine übermittelt. Die Messwerte werden, soweit nicht auf der Platine erfolgt, in der Verarbeitungsfunktion durch Umrechnung mit Kalibrierfaktoren auf den jeweiligen physikalischen Wert gebracht, in die zugehörigen Anzeigeflächen der GUI eingetragen und im Messwertpuffer abgelegt. Für jede Platine existier ein eigener Messwetpuffer als spaltenorientierte Matrix. Der Messwertpuffer wird in der Länge auf den Eingabewert "Messwertpuffer" begrenzt. Zusätzlich existiert jeweils ein Vektor mit Zeitstempel. Die Zeitstempel werden in den Verarbeitungsfunktionen der MATLAB®-GUI erstellt und es wird dadurch abtastsynchronität der zugehörigen Messwerte suggeriert, was allerdings nicht korrekt ist. Die Zeitpukte der tatsächlichen Datenerfassung der einzelnen Messwerte liegt nahe beieinander, jedoch nicht parallel. Der berechnete Zeitstempel gibt den Gültigkeitszeitunkt des Messwertsatzes an.
Basis - Platine
Die Basisplatine übermittelt die Messwerte:
- Durchflussrate in ml/s bzw. g/s
- Anzahl der Impulse seit letzter Übermittlung
- Boilerfüllstand als 0/1 Signal (1 Boiler gefüllt)
In der Datensicherung werden die Messpunktbeschreibungen unter "meta.bas_messpunkt(<x>)" abgelegt. "messdaten.bas_data" ist die Messwertmatrix und "messdaten.bas_time" der Vektor mit den zugehörigen Zeitstempel in Sekunden.
Über die MATLAB-Anweisungen
- messdaten.bas_data(end, <x>) wird auf den aktuell gültigen Messwert aus den Basisplatinen-Messwerten zugegriffen.
- messdaten.bas_time(end,1) lautet die Zugriffsanweisung auf den zugehörigen Zeitstempel.
Alternativ können die Messwerte aus den zugehörigen Darstellungsfeldern der MATLAB-GUI entnommen werden.
Ist der Schalter "Füllstandsregler" auf "On" gestellt, erfolgt die Ansteuerung des Füllstandsreglers.
Messwert - Platine
Die Messwert-Platine übermittelt eine Datenzeile mit 8 Messwerten. In der Datenablage werden noch weitere Daten aus den Eingabefeldern beigefügt:
- Boilertemperatur in °C
- Mischwassertemperatur in °C
- NTC3, die Messkanal ist aktuell frei
- Brühgruppentemperatur in °C
- Brühgruppendruck in bar
- Boilerdruck in mbar
- Leitungsdruck in bar
- Frischwassertemperatur in °C
- Eingabewert Pumpensteuerspannung in mV
- Bypass-Stellung in 1/2-Schritte
- Dosierventilstellung in 1/2-Schritte
- Brühgruppendrossel in 1/2-Schritte
- Heizleistung in % der maximalen Heizleistung
In der Datensicherung werden die Messpunktbeschreibungen unter "meta.mwp_messpunkt(<x>)" abgelegt. "messdaten.mwp_data" ist die Messwertmatrix und "messdaten.mwp_time" der Vektor mit den zugehörigen Zeitstempel in Sekunden.
Die automatische Datensicherung während des Maschinenbetriebs wird durch die Funktion "mwp_verarbeitung" ausgelöst. Ebenso stößt die Verarbeitung der Messwerte der Messwert-Platine die Reglerprogramme und Funktionssteuerungen an.
Armin Rohnen, 16.06.2023
Zwischen der Messwerterfassung der STM32-Elektronik und der Multi-MCU-Elektronik gibt es wesentliche Unterschiede. In der STM32-Elektronik werden die NTC mit 3,3 V gespeist und am aktiven Tiefpassfilter nicht verstärkt. Bei der Multi-MCU-Elektronik wurde dies anders gelöst. Hier werden die NTCs über einen Präzisionsspannungsregler mit 4096 mV gespeist und die Tiefpassfilter verstärken das Messsignal im Faktor 2. Der verwendete 16Bit-ADC ist für den Messbereich 4096 mV konfiguriert. Das führt zu einem Klipping des oberen Spannungsbereichs, was jedoch keine Auswirkungen auf den nutzbaren Bereich der Messwerte hat. Bei den NTC-Temperatursensoren sind dies die niedrigen Temepraturen, bei den AVS-Römer bzw. SEEED Drucksendoren die hohen Druckbereiche, welche allesamt außerhalb des Nutzungsbereichs der Maschine liegen.
Als Messwerte werden die Spannungsmesswerte in 1/10 mV Auflösung im Wertebereich 0 bis 40960 aller ADC-Messkanäle an die MATLAB®-GUI übermittelt.
Die Umrechnungskurven für die Temperatursensoren liegen für eine Auflösung von 0,1 mV vor. Dies ergibt einen Vektor mit 50001 Elementen. Damit ist der übermittelte !/10 mV Spannungswert der Index des Vektors mit der Übertragungskurve.
Datei:20230616 NTC-Berechnungen.zip
Armin Rohnen, 06.05.2023
Für die Neuprogrammierung der MATLAB®-GUI wurde in Verbindung mit der Multi-MCU-Messwertplatine eine simulierte Messdatenübermittlung erforderlich.
Benötigt wird das MicroPython-Skript:
def messwerte(timer): from random import randint # Die Messwerte der Espressomaschine werden als Zufallswerte generiert T_Boiler = randint(0, 50000)/1000 T_Eingang = randint(0, 50000)/1000 T_Mischer = randint(0, 50000)/1000 P_Boiler = randint(0, 50000)/1000 Leitwert = randint(0, 50000)/1000 Fuellstand = randint(0, 1) Durchfluss = randint(0, 500)/100 Pulse = int(Durchfluss * 39.9 * 0.1) T_Bruehgruppe = randint(1, 50000)/1000 P_Bruehgruppe = randint(1, 50000)/1000 #Messwerte an die GUI Übergeben inkl. des Identifiers M! print('M!',T_Boiler, T_Eingang, T_Mischer, P_Boiler, Leitwert, Fuellstand , Durchfluss, Pulse, T_Bruehgruppe, P_Bruehgruppe) #Messwerte übergeben
Darin werden über den Zufallszahlengenerator Messwerte simuliert und ausgegeben.
Durch die Aneisungen:
from machine import Timer from messwerte import messwerte messwert_timer = Timer(mode=Timer.PERIODIC, freq=1, callback=messwerte)
wird die simulierte Messdatenerfassung gestartet.
Über
messwert_timer.deinit()
wird diese wieder beendet.
Durch Ändern von freq = 1 auf einen anderen Wert wird die Übermittlungsrate in Übermittlungen je Sekunde eingestellt.
Armin Rohnen, 16.02.2023
Die für die STM32-Elektronik realisierte Messdatenerfassung der MATLAB®-GUI ist gleichwertig mit korrektem Zeitstempel für die Multi-MCU-Elektronik zu realisieren.