Messwerte erfassen Multi-MCU

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

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:

  1. Durchflussrate in ml/s bzw. g/s
  2. Anzahl der Impulse seit letzter Übermittlung
  3. 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:

  1. Boilertemperatur in °C
  2. Mischwassertemperatur in °C
  3. NTC3, die Messkanal ist aktuell frei
  4. Brühgruppentemperatur in °C
  5. Brühgruppendruck in bar
  6. Boilerdruck in mbar
  7. Leitungsdruck in bar
  8. Frischwassertemperatur in °C
  9. Eingabewert Pumpensteuerspannung in mV
  10. Bypass-Stellung in 1/2-Schritte
  11. Dosierventilstellung in 1/2-Schritte
  12. Brühgruppendrossel in 1/2-Schritte
  13. 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.