1. 2-Kanal Datenlogger mit STM32G031 (in Entwicklung)

2024-10-11:
Die Kombination von einem STM32G031 µC und einem SPI-Flash W25Q128 ermöglich den Aufbau eines einfachen Datenloggers mit zwei analogen Eingangskanälen bis zu 1 kHz Abtastrate.
Der G031 bietet einen 12 Bit ADC, genug RAM zur Zwischenspeicherung und erledigt die Steuerung und das bei geringer Stromaufnahme. Der W25Q128 bietet Speicherplatz für 16 MB, was für 8 Millionen Einzelwerte bei 1-kanaliger und 4 Millionen Messpaare bei 2-kanaliger Betriebsweise reicht.

Die Eckdaten:

Sofern man keine fertigen Schaltungen bestehend aus STM32G031, 32,678 kHz Quarz und Spannungsregler verwendet, kann die Schaltung wie folgt aussehen:

Der STM32G031 läuft mit internem 16 MHz HSI Takt und der 32,768 kHz Quarzoszillator sorgt für genaues Timing. Die beiden analogen Eingänge werden über die Widerstände R1/R2 und die Kondensatoren C1/C2 leicht gefiltert. Sofern mit höheren Eingangsspannungen als der Versorgungsspannung (3,3 V) gerechnet werden muß, kann D1 die Eingänge des µC davor schützen. Alternativ kann mit R3/R4 jeweils ein Spannungsteiler ergänzt werden.
Zu C1/C2 ist anzumerken, daß der ADC mit Kondensatoren an den Eingangspins < 0,1 µF nicht stabil arbeitet. Bleiben R3/R4 unbestückt, so sollten diese Kondensatoren entweder entfallen oder >= 0,1 µF gewählt werden. Bei den gezeigten 10 k Widerständen in Verbindung mit 0,1 µF liegt die Grenzfrequenz bei 1 kHz.

Der W25Q128 ist per SPI angebunden und die Signale RxD/TxD sind passend zu RS232-USB-Wandler invertiert und mit Ein- bzw. Ausgangswiderstand gegen Überlast geschützt. D2 kann passend ergänzt werden. Wenn eine höhere Stromaufnahme zugelassen werden kann, kann alternativ auch ein xyz232-Treiber IC verwendet werden.
Der µC kann per SWD oder auch per eingebautem Bootloader programmiert werden.

Als Spannungsregler ist hier ein TS9011 genannt, der max. 12 V am Eingang zuläßt. Eine geeignete Spannungsversorgung ist wohl eine LiIon/LiPo-Zelle, wobei auch Spannungsregler mit <= 5 V Eingangsspannung ausreichen.

Sofern man kein eigenes Platinenlayout erstellen möchte, gibt es die Möglichkeit bestückte Platinen mit STM32G031 und auch mit dem W25Q128 zu besorgen. Ergänzt mit bedrahteten Widerständen, Kondensatoren, Tastern und LEDs kann man die Schaltung auf einer Lochrasterplatine aufbauen. Beispielhaft sei auf dieses WeAct-Modul verwiesen.

Anmerkungen:
Die Baudrate ist mit 500 kBd so vorgegeben, daß ca. 10000 Messwerte/s ausgegeben werden können und angeschlossene RS232-Treiber dies noch verarbeiten können. Alternativ kann man die Baudrate auf <= 230400 Bd senken.
Die Stromaufnahme ohne aktives SPI-Flash liegt bei etwa 0,7 mA. Je nach Messrate kann diese im Mittel auf etwa 3 mA steigen.

Ausgeschaltet ('stop 1 mode') beträgt die Stromaufnahme < 10 µA. Sofern an RxD oder IN1/IN2 Spannungen > VCC auftreten können, müssen diese mit SD1, SD2 und T1 wirksam abgeleitet werden. Andernfalls könnte VCC für den µC auf unzulässig hohe Werte ansteigen. Sofern das nicht auftreten kann, können diese Bauteile entfallen.

Die manuelle Bedienung soll letztlich wie folgt aussehen:
Normalerweise bleibt die Versongungsspannung angeschlossen und der µC befindet sich im standby-Modus. Das Drücken eines der beiden Taster aktiviert den µC. Sind keine Daten im Flash vorhanden, blitzt (10 ms) die (grüne) LED am Start-Taster mit 3 Impulsen/s und zeigt damit 'Pause' an. Wird 'Start' gedrückt blinkt die LED jede Sekunde kurz auf: 1 x bei 1-kanaliger und 2 x bei 2-kanaliger Messung. Sobald ein Messwert erfaßt wurde blitzt (1 Hz) die (rote) LED am Stopp-Taster und zeigt damit an, daß Meßwerte vorhanden sind. Durch erneutes Drücken von 'Start' wird eine Messpause eingelegt. Nochmaliges Drücken führt die Messung fort.

Beendet wird eine laufende Messung mit der Stopp-Taste. Die LED, die zuvor schon angezeigt hat, daß Messwerte vorhanden sind, blitzt weiter im Sekundentakt. Die LED zum Start-Taster geht aus. Die Messwerte liegen im Speicher und können anschließend ausgegeben oder wieder gelöscht werden.
Mit Drücken von 'Start' wird die Ausgabe über die ser. Schnittstelle gestartet. Beu 1-kanaliger Messung im Format 'ASCII-Wert'<CR> und bei zwei Kanälen im Format 'ASCII-Wert','ASCII-Wert'<CR>. Der ASCII-Wert wird ohne führende Nullen ausgegeben. Während der Datenausgabe blinkt die Stopp-LED mit 1,5 Hz.
Die Messwertausgabe kann durch Drücken einer Taste abgebrochen, aber mit 'Start' auch wiederholt werden. Zum Start einer neuen Messung müssen die bisherigen Werte gelöscht werden. Hierzu muß die Stopp-Taste >= 3 s gedrückt werden. Anschließend blitzt die Start-Led wieder 3 x pro Sekunde.

Abgeschaltet wird der µC entweder manuell durch gleichzeitiges Drücken der beiden Taster, durch eingestelltes Timeout bei einer Messung oder nach Ablauf der Nachlaufzeit, wenn keine Messung aktiv ist. Gespeicherte Daten bleiben auch bei Abschalten der Versorgungsspannung und Neustart erhalten.

Messparameter mit ser. Befehlen einstellen Stand 2024-12-06:
Jede Befehlssequenz wird mit einem '.' eingeleitet; alternativ kann auch <ESC> verwendet werden. Anschließend folgt optional eine Dezimalzahl (nnn). Die Befehlssequenz wird mit dem eigentlichen Befehl (Großbuchstabe oder Zeichen) abgeschlossen.
Die eingestellten Werte lassen sich abfragen, indem nur der '.' und der Befehl gesendet werden. Als Antwort werden der Befehl und der eingestellte Zahlenwert ausgegeben.

Befehle (Leerzeichen dienen nur der Lesbarkeit und werden nicht gesendet):

.V Anfrage der Version, Ausgabe 'mino G031-Logger V1.1 2024-12-19'
. * Ausgabe des Zeichens '*' als Echo zur Synchronisierung (Zeitmarke)
.? Status der Messung: 0 = STOP, 1 = LAEUFT, 2 = PAUSE und Anzahl der Messwerte
. n !

Befehle zur Fernbedienung

0: Status LEDs ausschalten
1: Status LEDs einschalten
2: wie Tastendruck STOP
3: wie Tastendruck START
4: wie Tastendruck PAUSE
5: wie Tastendruck SENDEN
6: wie Tastendruck LÖSCHEN

 

. nnnnn A Skalierung von Kanal 1; 10000 entspricht Faktor 1.0000
. nnnnn B Skalierung von Kanal 2; 10000 entspricht Faktor 1.0000
. nnn C Anzahl der Kanäle 1 oder 2
. nnn D direkte Messwertausgabe: 0 = aus, 1 = aktiv
. n F Funktionsauswahl: 0 = Spannungsmessung, 1 = PT1000 Auswertung, 2 = KTY81
. K Kopfdaten/Messparamter ausgeben siehe Quelltext in 'G031_logger_sub.c'
. nnn L Zeit in s wielange die Status-LEDs nach Tastendruck aktiv bleiben; 1 - 3600, typ. 600, 0 = dauernd
. nnn M Anzahl der 1 ms Einzelwerte für Mittelwertbildung zum Abtastzeitpunkt; 1 - ganze Periode
. nnn N Nachlaufzeit in s für automatisches Abschalten: 100 - 3600, 0 = kein Abschalten
. nnn P Messperiode in ms: 1 - 60000
. nnn S .123S = Einstellungen in den FLASH-Speicher schreiben,
.321S = zuletzt gespeichert Einstellungen laden; passiert auch bei Anlegen der Versorgungsspanung
. nnn T Timeout für Beendigung einer Messung in s: 100 - 3600*2400 (100 Tage), 0 = kein Timeout
   
  Ein Beispiel für die Abfrage eines eingestellten Wertes (Messperiode 333 ms):
.P Antwort: P333<CR>

2024-11-24:
Mittlerweile gibt es eine Leiterplatte (Fertigungsdateien) mit einem o.g. WeAct-Modul, welche in ein Gehäuse mit den Mindestmaßen 80 x 50 mm² und je nach verwendetem Akku mit einer Tiefe >= 25 mm. Das Schaltbild besteht aus der Grundschaltung und möglichen optionalen Erweiterungen wie RS232-Treiber oder SMD-Tastern und -LEDs für flacheren Aufbau.

Da der RS232-Treiber eine hohe Ruhestromausfnahme besitzt, kann er per T3 abgeschaltet werden. Die Schaltung um T2 kann dazu dienen, für einen externen RS232-USB-Adapter die aktiven Pegel der UART anzupassen, sobald 5V_EXT beim Einschalten erkannt wird.

2024-12-19: Temperaturmessung mit PT1000 bzw. KTY81
Derzeit wird T3 dazu verwendet bei den Messfunktionen PT1000 bzw. KTY81 während der Messphase Vref (=VCC) gepulst einzuschalten. Dazu wird Vref über je einen 1 k / 0.1 % Widerstand an den Eingang AIN1/AIN2 geschaltet und bildet mit dem Messwiderstand der zwischen Eingang und GND liegt einen Spannungsteiler. Bei 0 °C (PT1000) bzw. 25 °C (KTY81) beträgt die Ausgangsspannung des Spannungsteilers genau Vref/2 und steigt bzw. fällt gemäß der Kennlinie des Sensors mit der Temperaturänderung. Die gemessene Spannung wird anhand von Tabellen umgerechnet und zwischen den Stützpunkten linear interpoliert. Das reicht für eine Auflösung von 1 K. Um keine negativen Werte zu erhalten, werden die Temperaturwerte in Kelvin abgespeichert.
Da Vref für eine Messung nur ca. 0,2 ms aktiv ist, sollte man C1/C2 ebenso wie R3/R4 unbestückt lassen. Anderfalls würde das Ergebnis durch die Tiefpassfilterung verfälscht. Der eff. Messstrom durch die Sensoren beträgt etwa 0,3 mA bei 1000 Messungen/s. Da sich Temperaturen allein schon wegen der trägen Sensoren deutlich langsamer ändern, reicht maximal eine Messung/s, was den effektiven Messtrom auf etwa 0,3 µA senkt. Dieser Strom ist in der Gesamtbilanz vernachlässigbar und erwärmt den Sensor nicht.

Die typische Versorgungsspannung der Schaltung beträgt 3,3 V, kann aber auch niederiger sein, sofern sie stabil ist. Für die Funktion des W25Qxyz werden >= 2,7 V benötigt. Liegt die Versorgungsspannung darunter, erfolgt eine Beendigung der laufenden Messung und Abschaltung des µC. Je nach Bedarf/Verfügbarkeit können W25Q16 - W25Q128 verwendet werden.

Beim Speichern der Messwerte, was stückweise mit 256 Byte erfolgt, erhöht sich die Stromaufnahme des W25Q... von einigen 10 µA auf max. 25 mA, die vom Spannungsregler auf dem µC-Modul schnell ausgeregelt werden müssen. Dadurch kann der ADC in Größenordnung einiger Bits gestört werden. Die Störungen liegen noch im Bereich der für den ADC im Datenblatt genannten 10,2 ENOB. Bei Bedarf empfiehlt es sich, dem W25Q... noch einen separaten 3,3 V LDO-Regler vorzuschalten und seine ursprüngliche +3.3V-Leitung aufzutrennen.
Im weiter unten gezeichten Bestückungsbild ist dies IC4 zwischen den beiden Tastern. Eine Seite kann mit beiden Pins direkt an C5 angeschlossen werden: OUT und GND. Pin3 des SOT23 Gehäuses wird mit kurem Draht an +V (Pin2 vom µC-Modul) gelegt. Die ursprüngliche Versorgungsleitung liegt auf der Oberseite rechts neben IC2 und wird durchtrennt.

Das Programm ist weitgehend fertig und wird noch in kleinen Punkten ergänzt werden. Es ist mit einer IAR-IDE erstellt und kann für andere IDEs übernommen werden. Ein einfacher Weg ist die Erstellung eines neuen Projektes für den STM32G031F und das Einfügen der INC- und SRC-Verzeichnisse.

Hier die Version für die kostenlose Segger-IDE.

Zum Schluß noch ein paar Bilder vom Musteraufbau und einige aufgezeichnete Kurven.


Frontplatte 80x50 mm²; Tiefe des Gehäuses 28 mm.


Aufzeichung über 6 Tage

zurück zur Übersicht