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.
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 zulassen.
Alternativ kann man die Baudrate auf <= 230400 Bd senken.
Die Stromaufnahme ohne aktives SPI-Flash liegt bei etwa 1,7 mA. Je nach Messrate
kann diese im Mittel auf etwa 4 mA steigen. Sofern man auf die ser. Datenausgabe
und LEDs verzichten kann, kann die Grundstromaufnahme auf etwa 0,5 mA gesenkt
werden, wenn in Pausen statt 'sleep mode' auf 'stop 0 mode' gegangen wird.
Im '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:
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.0' |
. * | Ausgabe des Zeichens '*' als Echo zur Synchronisierung (Zeitmarke) |
.? | Status der Messung: 0 = STOP, 1 = LAEUFT, 2 = PAUSE |
. nnn C | Anzahl der Kanäle 1 oder 2 |
. nnn D | direkte Messwertausgabe: 0 = aus, 1 = aktiv |
. nnn N | Nachlaufzeit in s für automatisches Abschalten: 1 - 3600, 0 = kein Abschalten |
. nnn T | Timeout für Beendigung einer Messung in s: 1 - 3600*24 (1 Tag), 0 = kein Timeout |
. nnn P | Messperiode in ms: 1 - 60000 |
. 123456 S | Einstellungen in den FLASH-Speicher schreiben, Vorgabewerte bei Versorgungssannung 'EIN' |
Ein Beispiel für die Abfrage eines eingestellten Wertes (Messperiode 333 ms): | |
.P | Antwort: P333<CR> |
Das Programm ist noch nicht abschließend fertig, zeigt aber schon die Grundfunktion. 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.