T350 – ADS1220 Universal-ADC Sensor – Benutzerhandbuch

Device-Typ: 350
Chip: Texas Instruments ADS1220 (24-Bit Sigma-Delta ADC)
Schnittstelle: SDI-12
Firmware: 0350_ADS1220.c
Copyright: joembedded@gmail.com – joembedded.de


1. Überblick

Der T350 ist ein hochpräziser, universeller analoger Datenerfassungsknoten auf Basis des ADS1220. Er unterstützt bis zu 8 physikalische Messkanäle (Betriebsarten), die über das Array ad_physkan[] im Firmware-Source fest konfiguriert sind.

Typische Anwendungen: - Hochpräzise PT100-Temperaturmessung (–70 … +120 °C, Genauigkeit < 0,1 °C) - 0/4–20-mA-Strommessung - Brückensensoren (Last-/Druckzellen) - (Solar-)Strahlungssensoren - Allgemeine differential- und single-ended Spannungsmessung

Hardwareanschluss (SPI-Signale)

Signal Pin Farbe (Kabel) Richtung am AD
SCLK IX_SCL gelb IN
DIN (MOSI) IX_SDA grün IN
DO / #DRDY IX_X0 weiß OUT
#DRDY IX_X1 blau OUT
#Vcc (Pwr) IX_X2 LOW = EIN

Hinweis: Der ADS1220 wird mit dauerhaft LOW gezogenem #CS betrieben. SPI-Mode 1 (CPOL=0, CPHA=1). Nach PowerOff zieht IX_X2 die SPI-Leitungen via 2 × 15 kΩ auf GND.


2. Physikalische Kanäle (ad_physkan[])

Die Firmware kennt 8 physikalische Kanäle (Indices 0–7). Jeder Kanal hat eine fest konfigurierte Betriebsart (typ), ADS1220-Registerkonfiguration, Mittelwertbildung und Einheit.

2.1 Betriebsarten (typ)

typ Konstante Beschreibung
1 P_TYP_ITEMP Interne Chiptemperatur des ADS1220
2 P_TYP_PT100_A PT100 via 2 kΩ Referenz + IDAC 1 mA + Polynom-Linearisierung
3 P_TYP_STD Standard-AD (single-ended oder differential), Ergebnis in mV oder Counts

2.2 Kanalübersicht

Idx SDI-12-Cmd Typ Konfiguration SPS Mittelwert Kalibrierung Einheit Messzeit
0 M2 1 Interne Temperatur 45 nein oC_int ~22 ms
1 M3 2 PT100 (ext. Ref, IDAC) 45 ja oC_PT100 ~453 ms
2 M4 3 Single-Ended AIN0 45 ja mV_S0 ~275 ms
3 M5 3 Single-Ended AIN1 45 ja mV_S1 ~275 ms
4 M6 3 Single-Ended AIN2 45 ja mV_S2 ~275 ms
5 M7 3 Single-Ended AIN3 45 ja mV_S2 ~275 ms
6 M8 3 Differentiell AIN0–AIN1 45 ja mV_D01 ~453 ms
7 M9 3 Differentiell AIN2–AIN3 45 ja mV_D23 ~453 ms

Kalibrierung (Kali-Flag): Wenn aktiv, wird vor der eigentlichen Messung automatisch ein Offset-Nullpunkt durch internes Kurzschließen der Eingänge (AIN_p/n auf AVDD/2) ermittelt und subtrahiert. Dies verdoppelt näherungsweise die Messzeit.

2.3 Technische Details der Betriebsarten

Typ 1 – Interne Temperatur (oC_int)

Typ 2 – PT100 (oC_PT100)

T = c0 + c1 ⋅ x + c2 ⋅ x2

mit c0 = −2, 457390 × 102, c1 = 7, 022650 × 10−5, c2 = 8, 966090 × 10−13

Typ 3 – Standard-AD (mV_…)


3. SDI-12 Messbefehle

Das Gerät antwortet auf die SDI-12-Standardbefehle aM!, aM1!aM9!.

3.1 Befehlsübersicht

Befehl Kanäle Beschreibung
aM! Alle aktiven Kanäle Misst alle Kanäle, deren Bit im m0_mask-Register gesetzt ist
aM1! Alle aktiven + VSup Wie M, zusätzlich Versorgungsspannung (VSup) als letzter Kanal
aM2! Kanal 0 (intern Temp) Nur interne Chiptemperatur (oC_int)
aM3! Kanal 1 (PT100) Nur PT100-Temperatur (oC_PT100)
aM4! Kanal 2 (SE AIN0) Nur Single-Ended-Kanal AIN0 (mV_S0)
aM5! Kanal 3 (SE AIN1) Nur Single-Ended-Kanal AIN1 (mV_S1)
aM6! Kanal 4 (SE AIN2) Nur Single-Ended-Kanal AIN2 (mV_S2)
aM7! Kanal 5 (SE AIN3) Nur Single-Ended-Kanal AIN3 (mV_S2)
aM8! Kanal 6 (DE AIN0–AIN1) Nur Differentiell AIN0–AIN1 (mV_D01)
aM9! Kanal 7 (DE AIN2–AIN3) Nur Differentiell AIN2–AIN3 (mV_D23)

a = SDI-12-Adresse des Sensors (Standard: 0)

Fehlerwerte im Messergebnis:

Wert Bedeutung
–99 PT100: Außerhalb Messbereich / Bruch
–9998 AD-Initialisierungsfehler
–9999 Allgemeiner Messfehler

4. SDI-12 Erweiterte Befehle (X-Kommandos)

Alle Konfigurationsbefehle beginnen mit aX gefolgt vom jeweiligen Befehlsbuchstaben. Zum Lesen wird kein =-Zeichen verwendet, zum Schreiben mit =Wert. Jeder Befehl wird mit ! abgeschlossen.

Änderungen an Parametern sind flüchtig (RAM). Erst XWrite! speichert dauerhaft im NVM (Flash).


4.1 Koeffizienten (K) – Individuelle Skalierung pro Kanal

Jeder physikalische Kanal hat 2 Koeffizienten: Multi (Index gerade) und Offset (Index ungerade).

Anwendungsreihenfolge:

Ergebnis = (AD-Rohwert × Kanal-Multi) × Kn_Multi − Kn_Offset

Koeffizienten-Tabelle:

Nr. Name Default
K0 Temp_int.Multi 1,0
K1 Temp_int.Offset 0,0
K2 Temp_PT100.Multi 1,0
K3 Temp_PT100.Offset 0,0
K4 SEnd_0.Multi 1,0
K5 SEnd_0.Offset 0,0
K6 SEnd_1.Multi 1,0
K7 SEnd_1.Offset 0,0
K8 SEnd_2.Multi 1,0
K9 SEnd_2.Offset 0,0
K10 SEnd_3.Multi 1,0
K11 SEnd_3.Offset 0,0
K12 Diff_01.Multi 1,0
K13 Diff_01.Offset 0,0
K14 Diff_23.Multi 1,0
K15 Diff_23.Offset 0,0

Syntax:

Befehl Funktion Beispiel
aXKn! Koeffizient n lesen 0XK2!
aXKn=Wert! Koeffizient n setzen 0XK3=0.5!

Antwort: aKn=Wert (z. B. 0K3=0.500000)


4.2 Kanalmaske (B) – Aktive Kanäle bei M / M1

Die Bitmaske m0_mask (1 Byte) steuert, welche Kanäle bei M und M1 gemessen werden.
Bit 0 → Kanal 0 (iTemp), Bit 1 → Kanal 1 (PT100), … , Bit 7 → Kanal 7 (DE23).

Beispiel: m0_mask = 0x4F = 0b01001111 → Kanäle 0, 1, 2, 3, 6 aktiv

Befehl Funktion Beispiel
aXB! Aktuelle Maske lesen 0XB!
aXB=Wert! Maske setzen (1–255, dezimal) 0XB=3! (nur iTemp + PT100)

Antwort: aB=Wert (z. B. 0B=79)


4.3 Individuelle Einheit (U) – Kanalbezeichnung überschreiben

Jeder Kanal hat eine Standard-Einheit aus ad_physkan[] (z. B. oC_PT100). Diese kann pro Kanal überschrieben werden (max. 8 Zeichen). Bei leerem String wird die Standard-Einheit verwendet.

Befehl Funktion Beispiel
aXUn! Einheit von Kanal n lesen 0XU1!
aXUn=Text! Einheit von Kanal n setzen 0XU1=degC!
aXUn=! Einheit von Kanal n zurücksetzen 0XU1=!

Antwort: aUn='Text' (z. B. 0U1='degC')


4.4 Ausgabegenauigkeit (P) – Nachkommastellen

Legt die Anzahl der Nachkommastellen für die SDI-12-Ausgabe fest (0–9).
Sonderwert 7, 8, 9: Standardformat %+f (printf-default).

Formatcodes:

P-Wert Format Beispiel-Ausgabe
0 %+.0f +23
1 %+.1f +23.4
2 %+.2f +23.45
3 %+.3f +23.450
4–6
7–9 %+f printf-default
Befehl Funktion Beispiel
aXPn! Präzision von Kanal n lesen 0XP1!
aXPn=Wert! Präzision von Kanal n setzen (0–9) 0XP1=3!

Antwort: aPn=Wert (z. B. 0P1=3)


4.5 Parameter speichern / Sensor identifizieren

Befehl Funktion
aXWrite! Alle Parameter (SDI-Adresse, Koeffizienten, Maske, Einheiten, Präzision) dauerhaft im Flash speichern
aXSensor! Sensortyp abfragen → Antwort: aADS1220!

5. Kommandozeilen-Befehle (TB-UART / Debug-Terminal)

Diese Befehle sind über die serielle Debugschnittstelle (tb_tools UART) verfügbar.

5.1 Gerätebefehle (device_type_cmdline)

Befehl Funktion
k Alle Koeffizienten (K0–K15) mit Namen, aktuellem Wert, Einheit, Präzision und Aktivstatus (ON/Bitnummer) ausgeben
p (Reserviert, ohne Funktion)

Beispielausgabe k:

K0: 1.000000 Temp_int.Multi(f) (Def: 1.0) Unit:'oC_int' Prec:2 ON(1)
K1: 0.000000 Temp_int.Offset(f) (Def: 0.0)
K2: 1.000000 Temp_PT100.Multi(f) (Def: 1.0) Unit:'oC_PT100' Prec:3 ON(2)
K3: 0.000000 Temp_PT100.Offset(f) (Def: 0.0)
...

5.2 Debug-Befehle (nur wenn #define DEBUG aktiv)

Befehl Funktion
a<n> Kanal n (0–7) in Dauerschleife messen und Rohwert, Laufzeit und physikalisches Ergebnis ausgeben. Beenden mit beliebiger Taste.

Beispielausgabe a1 (PT100):

Val:1
AD-Reset: 0
Res:3456789 (P:470/Real:463 msec) => +21.456 oC_PT100
Res:3456901 (P:470/Real:461 msec) => +21.458 oC_PT100
...
AD-Deepsleep

6. Parameterspeicherung (NVM)

Alle veränderbaren Betriebsparameter werden im internen Flash des Prozessors gespeichert:

Parameter Inhalt
param.koeff[] 16 Float-Koeffizienten (K0–K15)
param.m0_mask Kanalmaske für M / M1
param.precision[] Ausgabepräzision pro Kanal (0–9)
param.ind_unit[] Individuelle Einheiten pro Kanal
param.ble_advname BLE-Advertising-Name
SDI-12-Adresse Gespeichert unter ID_INTMEM_SDIADR

Speichern nur durch explizites aXWrite!-Kommando.


7. Gerätekennzeichnung

Die Sensor-ID hat folgendes Format:

TT_A24_A_0350_OSX<MAC_Low_HEX>

Beispiel: TT_A24_A_0350_OSX1A2B3C4D


8. Standardkonfiguration ab Werk

Parameter Standardwert
SDI-12-Adresse 0
m0_mask 0x4F (Kanäle 0, 1, 2, 3, 6 aktiv)
Präzision K0:2, K1:3, K2–K7:9 (printf-default)
Alle Koeffizienten Multi=1,0, Offset=0,0
Individuelle Einheiten leer (Kanalstandard)

9. Schnellreferenz SDI-12-Befehle

aM!           Alle aktiven Kanäle messen
aM1!          Alle aktiven Kanäle + Versorgungsspannung
aM2! – aM9!   Einzelkanal 0–7 messen

aXKn!         Koeffizient n lesen
aXKn=val!     Koeffizient n setzen
aXB!          Kanalmaske lesen
aXB=val!      Kanalmaske setzen
aXUn!         Einheit Kanal n lesen
aXUn=str!     Einheit Kanal n setzen
aXPn!         Präzision Kanal n lesen
aXPn=val!     Präzision Kanal n setzen (0–9)
aXWrite!      Parameter in Flash speichern
aXSensor!     Sensortyp abfragen