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
|
. 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.