Maschinensimulator: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 5: | Zeile 5: | ||
[[Datei:20260520 Maschinensimulator.png|thumb|1000px|gerahmt|zentriert|]] | [[Datei:20260520 Maschinensimulator.png|thumb|1000px|gerahmt|zentriert|]] | ||
Um mit die Wartungs-App betreiben zu können und um mit dem Maschinensimulator arbeiten zu können, muss die MCU des Maschinensimulators via USB angeschlossen sein. Über den Button erfolgt der Verbindungsaufbau mit der Maschinensimulator MCU. Dieser Verbindungsaufbau ist bislang lediglich für das Betriebssystem UNIX /macOS realisiert. Für andere Betriebssysteme muss dies noch erfolgen. In der Initialisierung der Maschinensimulator MCU erfolgt auch nur jener Teil, welcher für die Bestimmung der Digitalwert-Kennlinien erforderlich ist. Insbesondere erfolgt noch nicht die UART-initialisierung und ebenso keine Weiterleitung der Token. | |||
Wenn der Maschinensimulator verbunden ist, wird der Verbindungsaufbau zu einer Messplatine freigegeben und es ist möglich eine MCU-Verbindung mit einer Messplatine aus der Multi-MCU-Baureihe aufzubauen. Ist die Verbindung aufgebaut kann über den Button "Messwerte erfassen" Messwertdatensätze für die jeweils 8 Messkanäle erfasst und verarbeitet werden. Um diese Art der Messwerterfassung durchführen zu können ist auf der MCU der Messplatine das Python-Programm mwp_chanMesswerte.py erforderlich, was sich in der ZIP-Datei 20260516_Simulator_Wartungs_APP.zip auf der Wiki-Seite des [http://www.institut-fuer-kaffeetechnologie.de/Intern/index.php?title=Programmcode Programmcodes] befindet. Bei jedem erfassten Messdatensatz wird aus den ermittelten Spannungswerten über die logische phys. Umrechnung oder über die erforderliche Kennlinie aus dem Spannungswert auf den phys. Wert umgerechnet. Die Werte werden in der Messwerttabelle (rechte Tabelle) als Spannungswert in [mV] und im jeweiligen phys. Messwert ausgegeben. In der linken Tabelle kann der jeweilige Simulationswert eingegeben werden. Entweder als Digitalwert oder als phys. Wert. Im falle der phys. Werteeingabe wird über die ermittelte Kennlinie auf den erforderlichen Digitalwert umgerechnet und dieser wird dann auf dem Maschinensimulator eingestellt. Da die Digitalpotentiometer lediglich über eine 8-Bit-Auflösung verfügen, ist diese Einstellung recht grob und der gemessene Wert weicht vom gewünschten Einstellwert oft ab. | |||
Die Kennlinienermittlung läuft automatisiert ab und dauert ca. 15 Min. Damit diese nicht versehentlich ausgelöst wird, ist sie über einen Switch zusätzlich verriegelt. | |||
Für den Kommunikation mit dem Maschinensimulator und der Messwertplatine ist ein jeweils 4zeiliges Statusfeld angelegt. Hier werden die zugehörigen Statusmeldungen angezeigt. | |||
= Philipp Schiebel, 02.02.2026 - Simulation von Temperatur- und Druckwerten = | = Philipp Schiebel, 02.02.2026 - Simulation von Temperatur- und Druckwerten = | ||
Aktuelle Version vom 20. Mai 2026, 18:50 Uhr
Armin Rohnen, 20.05.2026
Aufgrund der nichtlinearität der digitalen Potis und der Auswirkung der Schaltungstoleranzen auf den Platinen sind Kennlinien für die Übersetzung von phys. Wert der eingestellt werden soll zu Digitalwert für die Einstellung des jeweiligen Potis erforderlich. Die Ermittlung dieser Kennlinien erfordert den gelichzeitigen Betrieb von mindestens zwei MCUs an einem PC. Das ist mit Thonny nicht darstellbar. Da sich die gleiche Situation für die spätere Nutzung des Maschinensimulators ebenso ergeben wird und eine einfache Bedienung ermöglicht werden soll, ist die Entscheidung getroffen worden, dass der Maschinensimulator integraler Bestandteil der Wartungs-App wird.
Zum Zeitpunkt der Kennlinienermittlung lag noch kein Progarmmgerüst der Wartungs-App vor. Um jedoch nicht in weiteren Zeitverzug zu geraten, wurde im Zuge der Kennlinienermittlung für den Maschinensimulator das Programmgerüst für die Wartungs-App erstellt.
Um mit die Wartungs-App betreiben zu können und um mit dem Maschinensimulator arbeiten zu können, muss die MCU des Maschinensimulators via USB angeschlossen sein. Über den Button erfolgt der Verbindungsaufbau mit der Maschinensimulator MCU. Dieser Verbindungsaufbau ist bislang lediglich für das Betriebssystem UNIX /macOS realisiert. Für andere Betriebssysteme muss dies noch erfolgen. In der Initialisierung der Maschinensimulator MCU erfolgt auch nur jener Teil, welcher für die Bestimmung der Digitalwert-Kennlinien erforderlich ist. Insbesondere erfolgt noch nicht die UART-initialisierung und ebenso keine Weiterleitung der Token.
Wenn der Maschinensimulator verbunden ist, wird der Verbindungsaufbau zu einer Messplatine freigegeben und es ist möglich eine MCU-Verbindung mit einer Messplatine aus der Multi-MCU-Baureihe aufzubauen. Ist die Verbindung aufgebaut kann über den Button "Messwerte erfassen" Messwertdatensätze für die jeweils 8 Messkanäle erfasst und verarbeitet werden. Um diese Art der Messwerterfassung durchführen zu können ist auf der MCU der Messplatine das Python-Programm mwp_chanMesswerte.py erforderlich, was sich in der ZIP-Datei 20260516_Simulator_Wartungs_APP.zip auf der Wiki-Seite des Programmcodes befindet. Bei jedem erfassten Messdatensatz wird aus den ermittelten Spannungswerten über die logische phys. Umrechnung oder über die erforderliche Kennlinie aus dem Spannungswert auf den phys. Wert umgerechnet. Die Werte werden in der Messwerttabelle (rechte Tabelle) als Spannungswert in [mV] und im jeweiligen phys. Messwert ausgegeben. In der linken Tabelle kann der jeweilige Simulationswert eingegeben werden. Entweder als Digitalwert oder als phys. Wert. Im falle der phys. Werteeingabe wird über die ermittelte Kennlinie auf den erforderlichen Digitalwert umgerechnet und dieser wird dann auf dem Maschinensimulator eingestellt. Da die Digitalpotentiometer lediglich über eine 8-Bit-Auflösung verfügen, ist diese Einstellung recht grob und der gemessene Wert weicht vom gewünschten Einstellwert oft ab.
Die Kennlinienermittlung läuft automatisiert ab und dauert ca. 15 Min. Damit diese nicht versehentlich ausgelöst wird, ist sie über einen Switch zusätzlich verriegelt.
Für den Kommunikation mit dem Maschinensimulator und der Messwertplatine ist ein jeweils 4zeiliges Statusfeld angelegt. Hier werden die zugehörigen Statusmeldungen angezeigt.
Philipp Schiebel, 02.02.2026 - Simulation von Temperatur- und Druckwerten
Einleitung und Zielsetzung
Ziel ist die Simulation physikalischer Größen (Temperatur, Druck) gegenüber einer zu testenden Steuerungselektronik. Die physikalischen Sollwerte werden dabei in elektrische Signale umgewandelt, die von der Hardware (Digital-Potentiometer MCP4151) ausgegeben werden.
Problemstellung und Lösungsansatz
Die eingesetzten Digital-Potentiometer (MCP4151) zeigen in der realen Beschaltung ein nicht-lineares Übertragungsverhalten Zudem variieren die Kennlinien der in der Kaffeemaschine verbauten Sensoren je nach Einsatzort (unterschiedliche Druckbereiche, verschiedene NTC-Beta-Werte). Des Weiteren besteht bei der Spannungssimulation (Kanäle 4–7) die Gefahr von Kurzschlüssen in den Randbereichen der Potentiometerstellung.
Um eine präzise Simulation physikalischer Werte zu ermöglichen, wurde ein Software-Modell implementiert, das folgende Komponenten umfasst:
Konfigurierbare physikalische Modellierung: Abstraktion verschiedener Sensortypen durch hinterlegte Kennlinien-Profile (z. B. 4 bar vs. 16 bar Sensoren).
Linearisierung: Kompensation der Hardware-Nichtlinearität des Potentiometers durch empirisch ermittelte Stützstellen.
Sicherheitslogik: Automatische Begrenzung der elektrischen Ausgabewerte zum Schutz der Hardware vor Kurzschlüssen.
Implementierungsdetails
Simulation der Temperatursensoren (NTC)
Die Simulation von NTC-Sensoren erfolgt auf den Kanälen 0 bis 3. Um unterschiedliche Sensortypen an verschiedenen Kanälen simulieren zu können, wurde eine dynamische Zuordnung implementiert. Die Umrechnung der Temperatur T (in °C) in den Widerstand R erfolgt mittels der vereinfachten Steinhart-Hart-Gleichung (Beta-Parameter-Gleichung):
Aktuell implementierte Sensortypen:
Standard-NTC (Typ 1): 𝑅25 = 10𝑘Ω ,𝐵 = 3977K
Tabellen-basierter NTC (Typ 2): Für Sensoren, deren Kennlinie nur tabellarisch vorlag, wurde ein optimierter Beta-Wert von B = 3964K errechnet. Dieser Wert erlaubt die Nutzung der Exponentialgleichung anstelle eines Lookup-Tables.
Der berechnete Widerstandswert wird anschließend durch die Interpolationsfunktion in den korrekten Digitalwert für den MCP4151 übersetzt.
Linearisierung durch Interpolation
Da keine geschlossene mathematische Funktion für das Verhalten der beschalteten Potentiometer vorliegt, wird eine Look-Up Table (LUT) mit linearer Interpolation verwendet.
Der Algorithmus prüft, zwischen welchen zwei Stützstellen (P1 , P2 ) der angeforderte physikalische Wert (Ptarget) liegt und berechnet den zugehörigen digitalen Steuerwert (Dout):
Diese Logik ist in der internen Funktion _interpolate() implementiert.
Die Stützstellen basieren auf Messreihen des realen Aufbaus.
Widerstandssimulation (NTC): 6 Stützstellen im Bereich 96 Ω bis 9180 Ω
Spannungssimulation: 5 Stützstellen im Bereich 144 mV bis 4060 mV
Simulation analoger Spannungssensoren
Für Drucksensoren (Kanäle 4–7) wird der MCP4151 als Spannungsteiler betrieben.
Die Umrechnung von Druck p (bar) in Spannung U (Volt) berücksichtigt den sensorspezifischen Maximaldruck p𝑚𝑎𝑥.
Der digitale Stellwert darf den Bereich [50, 250] nicht verlassen, um Kurzschlüsse gegen 5V oder GND zu vermeiden. Dies wird durch die Kalibrierungstabelle TABLE_VOLT sichergestellt, die nur Werte in diesem sicheren Fenster definiert. Anforderungen außerhalb dieses Bereichs werden durch die Interpolationslogik automatisch auf die definierten Grenzwerte (ca. 0,14 V bis 4,06 V) begrenzt.
Robustheit (Defensive Programmierung)
Zur Vermeidung von Laufzeitfehlern auf dem Mikrocontroller wird der finale Ausgabewert vor der Übergabe an das SPI-Interface auf den gültigen Byte-Wertebereich begrenzt:
value = max(0, min(255, int(value)))
Dies verhindert, dass Berechnungsfehler oder Überläufe einen Programmabsturz verursachen könnten.
Funktionsnutzung
Über die folgenden Funktionen sollen Druck und Temperatur simuliert werden:
- set_temperature(ch, temp_celsius)
- Beschreibung: Simuliert einen NTC-Sensor am angegebenen Kanal. Die Funktion ermittelt anhand der Konfiguration (SENSOR_ASSIGNMENT), welcher Sensortyp (B-Wert, Nennwiderstand) für diesen Kanal verwendet werden soll.
- Parameter: ch (Kanal 0-3), temp_celsius (Zieltemperatur in Celsius).
- Rückgabe: Berechneter Widerstand in Ohm (für Debugging).
- set_pressure(ch, pressure_bar)
- Beschreibung: Simuliert einen Drucksensor. Die Funktion lädt die Kennlinie (z. B. 4 bar oder 16 bar Max-Druck) für den gewählten Kanal, berechnet die analoge Zielspannung und setzt das Potentiometer entsprechend. Beinhaltet automatische Begrenzung auf den sicheren Hardwarebereich.
- Parameter: ch (Kanal 4-7), pressure_bar (Zieldruck in bar).
- Rückgabe: Berechnete Zielspannung in Volt (für Debugging).
- set_poti(ch, value)
- Beschreibung: Low-Level Zugriff zum direkten Setzen des Digitalwertes (0- 255). Umgeht die physikalischen Modelle. Sollte nur für Debugging-Zwecke genutzt werden.
Weiteres Vorgehen
Als nächsten Schritt müssen die simulierten Temperatur- und Druckwerte validiert werden und bei Bedarf die Berechnung weiter verfeinert werden. Zusätzlich muss überprüft werden, ob die Widerstände zum Schalten der Füllstände ausreichen.
Armin Rohnen, 29.10.2025 - Funktionstest MCP4151 (digitaler Widerstand)
Über den Programmcode
def set_poti(ch, value):
if not 0 <= ch < len(cs):
raise ValueError('Ungültiger Kanal (0–7)')
if not 0 <= value <= 255:
raise ValueError('Wert muss zwischen 0 und 255 liegen')
cs[ch].value(0)
spi.write(bytearray([CMD_WRITE << 4, value]))
cs[ch].value(1)
spi = SPI(0, baudrate=400000, sck=Pin(2), mosi=Pin(3), miso=Pin(4))
cs = [Pin(pin, Pin.OUT, value=1) for pin in (5, 6, 7, 8, 9, 10, 11, 12)]
werden die Widerstandswerte für die einzelnen simulierten Sensoren eingestellt. Konkret führt die Anweisung
set_poti(ch, value)
zur Verstellung des Widerstandswertes im MCP4151. Darin ist ch die Kanalnummer (0 bis 7) und value der Digitalwet ( 0 bis 255).
Für die Kanäle 0 bis 3 wird über den Widerstandswert jeweils ein NTC simuliert. Die Abhängigkeit ist jedoch nicht linear.
| Digitalwert | Widerstand in Ohm |
|---|---|
| 0 | 96 |
| 50 | 1550 |
| 100 | 3740 |
| 150 | 5490 |
| 200 | 7240 |
| 255 | 9180 |
Der Zusammenhang zwischen Digitalwert und simulierte Temperatur muss noch ermittelt werden.
Für die Kanäle 4 bis 7 wird der MCP4151 als Spannungsteiler mit einer Speisespannung von 5 V eingesetzt. Dies simuliert einen analogen Sensorwert in einem Spannungsbereich von 0 bis 5 V. Allerdings darf der Spannungsendwert 5 V nicht angesteuert werden, dies würde u. U. zu einem Kurzschluss führen. Der Nutzbare digitale Wertebereich liegt hier zwischen 50 und 250. Damit bleibt auf jeder Seite des Spannungsteilers immer ein Restwiderstand, welcher den Stromfluss hinreichend begrenzt.
Aufgrund des nichtlinearen Widerstandsverlaufs ergibt sich ein ebenso nichtlinearer Spannungsverlauf.
| Digitalwert | Spannung in mV |
|---|---|
| 50 | 4060 |
| 100 | 3740 |
| 150 | 2102 |
| 200 | 1122 |
| 255 | 144 |
Der Zusammenhang zwischen Digitalwert und dem zu simulierenden Sensorwert muss noch ermittelt werden.
Armin Rohnen, 29.10.2025 - Schaltungsaufbau
Der Schaltplan für den Maschinensimulator ist soweit erstellt. Inhaltlich fehlt die Transistorfolgeschaltung für die Simulation des Flowmetersignals.
Aktuell wird die Funktionalität des MCP4151-103E/P getestet. Dabei stellt sich heraus, dass sich der Widerstandswert nicht linear zum Einstellwert verhällt. Im Weiteren wurde festgestellt, dass auf dem Breadboard das erforderliche Durchschleifen der SPI-Schnittstelle nicht funktioniert. Damit ist bereits für die schnelle Übergangslösung eine gelötete Platine erforderlich.
Armin Rohnen, 19.10.2025 - Konzept des Maschinensimulators
Für die Steuerungselektronik besteht die Siebträger Espressomaschine aus Messwerten. Dies sind in der aktuellen Form
- 4 NTC Temperatursensoren mit 10 kOhm
- 2 Druckmesswerte im Spannungsbereich 0,5 bis 4,5 V
- Leitwert und Temperatur des zufließenden Wassers im Spannungsbereich 0 bis 5 V
- Flowmeter mit 39,9 Impulsen je ccm
- 4 Füllstandssensoren über Kurzschlussdetektion
Angedacht ist eine Hardware herzustellen, welche diese Messwerte simuliert.
Bei dem Bauelement MCP4151-103E/P handelt es sich um ein digitales 10 kOhm Potentiometer welches als Spannungsteiler eingesetzt werden kann und über SPI programmiert wird. Dieses Bauelement soll dazu dienen den Wiederstandswert der NTCs zu simmulieren und als Spannungsteiler die Druckmesswerte, Leitwert und Wassereingangstemperatur zu generieren.
Der Kurzschluss für die Füllstandssensoren soll über das Bauelement DG 411 DJZ und das Flowmeter über eine Transistorschaltung erzeugt werden.
Als Steuerung ist eine Raspberry Pi Pico MCU vorgesenen die u.U. mit einer übergeordneten MATLAB-GUI bedient werden kann. Für die Widerstandsabhängigen Sensorsimulationen wird eine SPI-Schnittstelle und insgesamt 8 PINs für CS benötigt. Die Kurzschlusserzeugung der Füllstandssensoren erfordert 4 PINs digital I/O und das Flowmetersignal einen PIN mit PWM-Signal.
Es ist zu überlegen, ob der Simulator mit in den Kommunikations-Ring des Systems eingebunden wird.
Der Maschinensimulator wird zunächst auf einem Breadboard realisiert um nach erfolgreichem Test die Schaltung in ein Platinenlayout zu überführen.