Maschinensimulator
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 | 406 |
| 100 | 3740 |
| 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.