Technische Dokumentation

Stromversorgung des Turtle-Boards

Das Turtle-Board kann mit Batterien betrieben werden (handelsübliche AAA-Batterien oder NiMH-Akkus). Alternativ lässt sich das Board auch über den Micro-USB-Port speisen. Dabei geschieht die Umschaltung von USB- und Batteriebetrieb automatisch, wobei USB immer Vorrang hat.

Turtle-Board: Pin- und Interruptbelegung

Debugger-Schnittstelle

Im Lieferumfang des Boards befindet sich auch eine 2×4 Stiftleiste für die Nutzung eines externen Debuggers. Dafür muss die Leiste eingelötet und mit einem Debugger verbunden werden. Details finden Sie auf der Seite Nucleo ST-Link Interface. Standardmäßig versucht die Turtle-Software nach dem Start eine Konsole mit dem Debugger zu verbinden UART (TX-/RX-Drähte, 230400 Baud). Wird kein Debugger-UART gefunden, versucht sie sich 30 Sekunden lang mit dem USB Virtual COM-Port zu verbinden. Ist keine der genannten Möglichkeiten verfügbar, findet keine Konsolenausgabe statt.

Hinweis:
Low-Level Absturzmeldungen werden nur auf der externen Debugger- oder der UART-Schnittstelle ausgegeben, da USB-Dienste bei einem Absturz stoppen. Alle normalen Meldungen funktionieren mit dem USB Virtual COM-Port oder einem Debugger-UART. Anstelle eines Debugger-UART kann für die Konsolenausgabe auch ein externes UART mit den RX/TX-Pins verbunden werden.

Antenne installieren

Es gibt drei Antennenoptionen:

  • Die beigelegte SMA-Antenne kann mit dem SMA-Anschluss verbunden werden
  • Es gibt einen U.FL-Anschluss für externe U.FL-Antennen
  • Ein Stück Draht kann als Antenne verwendet werden. Dafür muss der SMA-Anschluss ausgelötet und der Draht auf den mittleren Pin des SMA-Pads auf der Oberseite der Platine gelötet werden

Die Drahtantenne muss auf 8,2 cm gekürzt werden. Damit ist die Antenne auf λ/4 für 868,1 MHz angepasst.

Die genaue Formel zur Berechnung der Antennenlänge ist:
Wellenlänge = Lichtgeschwindigkeit / Frequenz

Für λ/4 muss dieser Wert noch einmal durch 4 geteilt werden.

Hinweis:
Das Turtle-Board wird mit einer bestimmten RF-Frequenz ausgeliefert (433 oder 470 MHz bzw. 868 oder 915 MHz). Um welche Frequenz es sich handelt, ist auf dem Board markiert. Die Frequenz des Boards und die Antenne müssen aufeinander abgestimmt sein, andernfalls funktioniert das Board nicht einwandfrei.

Spannung „VDD-SW“ für externe Verbraucher einschalten/ausschalten

Ein interner Spannungsschalter erlaubt es, externe Stromverbraucher ein- bzw. auszuschalten, damit diese nicht permanent Strom verbrauchen. Der IO-Pin „EXT_POWER_SW“ ist in der Datei „xPinMap.h“ der RadioShuttle-Software zum Schalten definiert. Er kann entweder auf „EXT_POWER_ON“oder „EXT_POWER_OFF“ geschaltet werden. An der „VDD-EXT“-Leitung hängt die Messung der Batteriespannung, welche über den „BAT_POWER_ADC“ ADC-Pins gemessen wird. Damit das Board möglichst wenig Strom benötigt, ist die „VDD-EXT“ im Regelfall abgeschaltet.

Batteriespannung messen

Zum Messen der VDD-Versorgungsspannung (ca. 3,3 Volt über USB, ca. 3,0 Volt im Batteriebetrieb) befindet sich eine Messeinrichtung auf dem Board. Die Batteriespannung wird mit einer Genauigkeit von ungefähr 100 mV angezeigt. Die Spannungsmessung erfolgt beim Booten oder Zurücksetzen. Die Funktion BatteryVoltage() in der Datei „RTCUtil.cpp“ misst den Spannungswert und gibt ihn zurück.

Turtle „deepsleep“ und Wake-up

Die Beispielsoftware für das Board hat eine Hauptschleife, in der es Verarbeitungsaufgaben bearbeitet und in die Mbed-Funktion sleep() geht, d. h. in den „deepsleep“-Energiesparmodus.

Hinweis:
Bei der Verwendung einer USB-Konsole kann sleep() nicht aufgerufen werden, da die Verbindung zur USB-Konsole ansonsten unterbrochen würde. Das Board kann ebenfalls nicht in den „deepsleep“-Modus gehen, wenn Timer-Funktionen registriert sind. Stattdessen kann die „LowPowerTimer“-Funktion der MCU, welche „deepsleep“ unterstützt, verwendet werden.

Jede registrierte Interrupt-, RTC- oder „LowPowerTimer“-Routine, weckt die MCU aus dem „deepsleep“ und setzt die Verarbeitung unverzüglich fort. Nachdem die Verarbeitung abgeschlossen ist, wird die Funktion sleep() ferneut aufgerufen und geht in den „deepsleep“-Modus. Befindet sich die MCU im „sleep“- oder „deepsleep“-Modus, ist die grüne LED aus.

Hinweis zum Anlegen von Interrupt-Routinen

Grundsätzlich sollten Interrupt-Routinen so kurz wie möglich gehalten werden und niemals auf weitere Signale warten müssen, um Deadlocks zu vermeiden. In Interrupt-Routinen funktioniert die Ausgabe an eine USB-Konsole nicht, die Ausgabe an ein UART ist ebenfalls mit Einschränkungen verbunden.

Der Beispielcode für das Turtle-Board hat eine großartige Lösung dafür: Die Interrupt-Routine sendet ein Event, die Hauptschleife nimmt dieses Event auf und führt die Verarbeitung auf User-Level-Code durch (Non-Interrupt). Dies ermöglicht die Konsolenausgabe, das Warten auf weitere Signale sowie eine einfache Verarbeitung:

  • Fügen Sie der Datei „main.h“ neuen, eindeutigen Interrupt-Code hinzu, z. B. MY_INT = 0x20
  • Senden Sie das Event in der Interrupt-Funktion über InterruptMSG(MY_INT);
  • Prüfen Sie in der Hauptschleife über if (pendirqs & MY_INT) Ihre Interrupt-Events

Dadurch wird die Programmierung erleichtert und ermöglicht das Debugging der Ausgabe mit dprintf(). Ein Beispiel dafür liefert die Funktion timerUpdate() in der Datei „main.cpp“.

Temperatur- und Feuchtigkeitssensor (optional)

Der Sensor bietet die Möglichkeit, die genaue Temperatur sowie die Luftfeuchtigkeit sehr stromsparend zu messen. Der weiße Filz auf dem Sensor darf nicht entfernt werden, da dieser eine Schutzfunktion hat, damit der Sensor einwandfrei funktioniert. Genutzt wird der „Si7021-A20-GM1“ der Firma Silicon Labs, der Treiber ist in der RadioShuttle-Software enthalten.

Anschließen des Sensors

Der Sensor wird per I2C-Bus angeschlossen und benötigt vier Leitungen (GND, VDD, SCL, SDA). Folgende einfache Möglichkeiten der Installation gibt es:

  • Sensor oben mit der Platine verbinden
  • Sensor oben von der Unterseite mit der Platine verbinden
  • Sensor kann per Verlängerungskabel (nicht enthalten) extern installiert werden, z.⁥ B. außerhalb des Gehäuses oder direkt an einer Heizung usw.

Hierbei muss auf die Reihenfolge der Pins geachtet werden („GND“ ist außen), da der Sensor zwei Anschlussseiten besitzt und je nach Installation (oben oder unten) gedreht werden kann.

Hinweis:
Auf dem Sensor sind zwei Bauteile (optionale Widerstände) mit Absicht nicht bestückt, es handelt sich um I2C Pull-up-Widerstände, welche als 10-kΩ-Widerstände bereits auf der Hauptplatine enthalten sind. Bei einem externen Sensor mit langen Leitungen kann es sinnvoll sein, zwei 1-kΩ-Widerstände aufzulöten (sind im Lieferumfang enthalten), um stabile Signale zu erhalten. Eine zusätzliche Option ist es, die I2C-Geschwindigkeit zu reduzieren. Wir werden unsere Erfahrungswerte später hier teilen.

Softwareverwendung des Sensors

Wenn angeschlossen, ist der Sensor permanent aktiv, benötigt aber nur ca. 1 μA Strom solange keine Sensorwerte gelesen werden. Beim Einschalten des Turtle-Boards (Stromversorgung an, bzw. Reset durchgeführt) wird der Sensor nur einmalig initialisiert und die Temperatur mit den Startmeldungen ausgegeben. Die Sensorwerte werden beim Start des Boards automatisch gemessen und angezeigt. Der Code hierfür findet sich in der Datei „Turtle_RadioShuttle/Utils/utils.cpp“:

if (sensorSI7021->hasSensor()) {
    dprintf("%s: Rev(%d)  %.2f°C  Humidity: %.2f%%", sensorSI7021->getModelName(), sensorSI7021->getRevision(), sensorSI7021->readTemperature(), sensorSI7021->readHumidity());
}

Hinweis:
Dafür muss das Feature „FEATURE_SI7021“ in der Datei „xPinMap.h“ definiert sein.

Es empfiehlt sich, den Sensor nicht unnötigerweise permanent auszulesen, da jedes Auslesen der Werte Zeit in Anspruch nimmt und während dieser Zeit Strom verbraucht. Das Auslesen der Temperatur benötigt ca. 13 ms, das der Luftfeuchtigkeit ca. 20 ms. Während dieser Zeit ist die NUCLEOL432 MCU aktiv.

Batteriebetrieb

Das Turtle-Board kann mit Batteriespannungen von 2,1 V bis 3,6 V betrieben werden. Anwender verwenden für gewöhnlich 2 Batterien (AAA), die neu zusammen 3 V zur Verfügung stellen oder 2 NiMH-Akkus, die – voll geladen – 2,4 V bereitstellen. Der AAA-Batteriehalter lässt sich auch gegen einen für AA-Batterien austauschen, da die Anschlüsse kompatibel sind.

In kälteren Betriebsumgebungen funktionieren Batterien und NiMH-Akkus nicht besonders gut. Deshalb sollten Sie in solch einem Fall qualitativ hochwertige Lithium-Batterien (2 x 1,5 V) verwenden.

Nur Batterien, die in den Batteriehalter eingelegt sind (+/- Pins), können das Board über mehrere Jahre im Standby-Betrieb (normale LoRa RadioShuttle-Meldungen) effizient versorgen.

Wird das Board über USB oder VIN mit Strom versorgt, kommt ein LDO (Low-Dropout Regulator) zum Einsatz, der die Eingangsspannung auf 3,3 V reduziert. Der LDO verbraucht permanent einen kleinen Teil Energie, was bei einer Stromversorgung über USB nicht weiter ins Gewicht fällt, jedoch keinen lang anhaltenden Batteriebetrieb erlaubt.

Hinweis:
Lithium-Ionen oder Lithium-Polymer-Akkus sind für eine Stromversorgung des Boards über den Batterieeingang nicht geignet, da ihre Spannung höher als 3,6 V ist und damit sowohl die MCU als auch die LoRa-Chips auf dem Board zerstören würde. Über VIN können Lithium-Ionen oder Lithium-Polymer-Akkus zur Stromversorgung des Boards jedoch problemlos verwendet werden.

Das Turtle-Board verfügt über keinen eingebauten Batterielader, da die Boards über Jahre betriebsbereit sind und ein Batteriewechsel schnell gemacht ist.