|
|
Überlegungen zur Grundschaltung 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.
Version 1 mit WeAct-Modul G031 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.
Messparameter mit ser. Befehlen einstellen:
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):
Stand 2026-04-03:
| .V | Anfrage der Version, Ausgabe 'mino G031-Logger V1.8 2026-04-03' |
| . * | 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 |
Der Wert von 'D' ergibt sich aus der Summe der einzelnen Werte (Bit 0
... 4), denen eine Ausgabefunktion zugeordnet ist. Beispiel: .25D (= 16+8+1) gibt die Anzahl der Tage, die aktuelle Uhrzeit und den aktuellen Wert aus. Für stromsparenden Betrieb während einer Messung sollte keine Ausgabe stattfinden: .24D |
| . n F | Funktionsauswahl: 0 = Spannungsmessung, 1 = PT1000 Auswertung, 2 = KTY81 |
| . K | Kopfdaten/Messparamter ausgeben siehe Quelltext in 'G031_logger_sub.c' Aktuell: Datum, Tageszeit, Kanalanzahl, Messperiode, Mittelwertanzahl, Skalierung1, Skalierung2, Anzahl gespeicherter Werte im Flash (ohne offene Daten im RAM!) |
| . nK | 1 = Ausgabe mit Kopfdaten in 1. Zeile beginnen, Messwerte
ab 2. Zeile 0 = keine Ausgabe der Kopfdaten |
| . nnn L | Zeit in s wielange die Status-LEDs nach Tastendruck aktiv bleiben; Bereich: 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, wenn
Messung fertig: Bereich: 100 ... 3600, 0 = kein Abschalten |
| . nnn P | Messperiode in ms; Bereich: 1 ... 60000 |
| . nnn S | .123S = Konfiguration in den FLASH-Speicher schreiben, .321S = zuletzt gespeicherte Konfiguration laden; passiert auch bei Anlegen der Versorgungsspanung |
| . nnn T | Timeout für Beendigung einer Messung in s; Bereich: 100 ... 3600*2400 (= 100 Tage), 0 = kein Timeout |
| .hh:mm:ssH | Eingabe der Tageszeit in hh:mm:ss; Abfrage der aktuellen Zeit mit .H |
| .yy:mm:ddY | Eingabe des Datums in YY:MM:DD; Abrage mit .Y; Ausgabeformat YY-MM-DD |
| Ein Beispiel für die Abfrage eines eingestellten Wertes (Messperiode 333 ms): | |
| .P | Antwort: P333<CR> |
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.
2025-02-13: Zeitstempel bei der Datenausgabe
Zusätzlich zur Ausgabe der Messwerte, können auch die Zeitpunkte
der Werte in ganzen Sekunden relativ zum Start der Messung ausgegeben werden.
Einmal im Format 'hh:mm:ss', wobei die Stunden auch >= 24 sein können.
Für täglich wiederkehrende Ereignisse, kann die Stundenausgabe auf
0-23 begrenzt werden, ohne die Tage zu berücksichtigen. Als letzte Option
werden auch noch die Tage separat ausgegeben und per ',' getrennt vor die Zeitangabe
gestellt.
Beispiele:
.5D gibt die Messwerte bei der Messung und beim Senden mit vorausgehendem Zeitstempel
an. Die Stunden sind auf 0-23 begrenzt.
.8D keine Messwertausgabe bei der Messung aber beim Senden der Daten mit separaten
Tagen im Format: d,hh:mm:ss
Das Programm
ist soweit fertig und kann immer noch noch in einigen Punkten ergänzt werden,
ohne dass die Versionsnummer geändert wird. Im Zwiefelsfall einfach das
Datum des Quellcodes beachten! Das ursprüngliche Projekt 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.
Ferner gibt es hier
auch 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.
Ab Version 1.3; Entladekurve eines Akkus mit Zeitangabe; Spannungswerte in mV;
am Ende der Entladung sinkt die Ausgangsspannung mit 2 x Neustartversuchen
2026-02-02:
Am Eingang "5V_EXT" kann ein Signal angelegt werden, wodurch die RX/TX-Pegel
nicht mehr invertiert werden. Das ist bei einem separaten USB-RS232 Modul sinnvoll,
welches ohne Inverter arbeitet. Als Umschaltsignal kann die USB-VCC Versorgung
verwendet werden, ggf. durch eine Diode entkoppelt.
Beim Empfang eines Zeichens per RS232 wird mit dem Startbit der Controller eingeschaltet, wie dies auch mit Tastendruck möglich ist. Da das 1. Zeichen nicht erkannt wird, empfiehlt es sich, vor dem ersten Befehl einen zusätzlichen '.' auszugeben.
Version 2 mit STM32G031 im 32-pol. TQFP 2026-04-05:
Das zuvor verwendete Modul mit 20-pol. STM32G031 war gut für eine erste
Schaltung, schränkte wegen der wenigen Pins die Funktionen etwas ein. Bei
der neuen Schaltung wird nun ein Controller mit 32-pol. TQFP Gehäuse verwendet,
wodurch mehr analoge Eingangskanäle möglich sind. Ein RS232 Schnittstellenwandler
wurde nicht mehr vorgesehen dafür jedoch der direkte Anschluß von
USB-UART Modulen, wobei die RxD/TxD-Signale je nach Betriebsart RS232 bzw. USB
invertiert oder nicht invertiert werden: Anschluß 5VEXT. Die beiden LEDs
werden nun gegen GND geschaltet, damit der µC deren Strom nicht aus seiner
Versorgungsspannung ansteuern muß, die ja auch als analoge Referenzspannung
dient.
'PTx-out' liefert die gepulste Referenzspannung für PT1000/KTY81 Sensoren.
Als Signaleingänge werden nun GPIO-Pins verwendet, die einen erweiterten
Eigangsspannungbereich von VCC+4 V aufweisen. Bleiben die zu messenden Spannung
im Bereich 0 - 7 V, kann man die Schutzdioden (SD1, SD2) weglassen, wodurch
Leckströme bei höheren Temperaturen reduziert werden. Mit den optinalen
Widerständen R3, R4, R15 und R16 können Eingangsspannungsteiler gebildet
werden.
Derzeit noch nicht implementiert: Der Anschluß 'Powerbank' ist optional
dafür vorgesehen, periodisch (1 - 2 Wochen) eine externe Powerbank mit
einem Laststrom von ca. 200 mA für ca. 1 s aufzuwecken, um damit den lokalen
Akku nachzuladen und sehr lange Laufzeiten zu erzielen. Der Aufweckzeitpunkt
kann über einen 'ALARM' der internen RTC ausgelöst werden. Das Abschalten
der Powerbank erfolgt automatisch, wenn der Akku aufgeladen ist.

Dazu noch die Bestückung der Leiterplatte mit identischer Größe zur Version 1 und ebenfalls mit Lochrasterfeld für ergänzende Bauteile. Je nach zulässiger Bauhöhe können die beiden LEDs und Taster als THT- oder SMD-Audführung bestückt werden:
Zu diesem Projekt gibt es die Fertigungsdateien
für die Leiterplatte. Auf dem Foto ist die Fläche mit dem Lötpunken
abgeschnitten. Wenn auf manuelle Bedienung (Taster, LEDs) verzichtet wird, kann
auch die zugehörige Fläche entfernt werden, um kleinste Abmessung
zu erhalten.
Für eigene Anpassungen gibt es die Projektdatei
für IAR-IDE und die Projektdatei
für die Segger-IDE, dies sich noch etwas ändern können. Im
Zweifelsfall bitte das Datum des Quellcodes beachten!