PowerProfiler/doc/PowerSupply.de.md

9.1 KiB

Energieversorgung

Übersicht

Die Energieversorgung besteht aus 3 Komponenten:

  • Externe Energieversorgung (USB, Debug-Stecker)
  • Interner 1S LiPo/LiIon-Akku
  • Interne Knopfzelle (CR1220)

Aus diesen Quellen werden verschiedene Versorgungen erzeugt:

  • VDDist die generelle Versorgung, die den Mikrocontroller, den Sensor und das externe Flash versorgt. Sie wird duch einen Buck-Boost-Wandler aus der externen Versorgung oder dem LiIon Akku erzeugt. Der Wandler ist ein- und ausschaltbar, um Energie zu sparen.
  • VDDSD versorgt den MicroSD-Kartenslot. Sie ist schaltbar, da eine SD-Karte ziemlich viel Energie braucht, auch wenn sie nichts tut.
  • VRTC versorgt die RTC und den VBAT-Pin des Mikrocontrollers. Die Spannung ist immer vorhanden, solange der Batterieschutz nicht angesprochen hat. Die Versorgung erfolgt über einen Power-MUX, der prioritär von VDD gespiesen wird. Fällt VDD weg, so erfolgt die Speisung über einen LDO direkt ab LiIon-Akku (natürlich nach der Schutzschaltung).
  • VBACKUP ist die CR1220-Zelle. Sie dient als Backup-Versorgung für die RTC, falls der Akku entfernt wird oder der Entladeschutz anspricht.

Als vereinfachtes Blockschaltbild schaut dies so aus:

graph TD;
    subgraph "Batterien"
        LIPO[(Li-Ion Akku)];
        PROTECTION[Akkuschutz];
        GAUGE[Fuel Gauge];
        CR1220[(CR2012)];
    end
    LIPO <--> PROTECTION;
    PROTECTION <--> GAUGE;
    CR1220 --> VBACKUP;

    subgraph "Externe Quellen"
        USBC[USB-C Port];
        DEBUG[Programmier-Port];
    end

    subgraph "Energiewandlung"
        LDO[3.3V LDO];
        DCDC[3.3V Buck-Boost];
        CHARGER[Lader];
        SDSWITCH[SD Schalter];
        MUX[Power-Mux]
    end
    USBC --> CHARGER;
    DEBUG --> CHARGER;
    GAUGE <--> CHARGER;
    CHARGER --> DCDC --> VDD;
    CHARGER --> LDO;
    LDO --> MUX;
    DCDC --> MUX --> VDDRTC;
    DCDC --> SDSWITCH --> VDDSD;

    subgraph "Verfügbare Versorgungen"
        VBACKUP(VBACKUP);
        VDDRTC(VDDRTC);
        VDDSD(VDDSD);
        VDD(VDD);
    end

Externe Quellen

USB-C Port

Das Gerät soll über einen USB-C-Port verfügen. Dieser dient sowohl als Datenverbindung und als Energieversorgungsverbindung. Das Gerät soll sowohl am PC/Laptop wie auch an gängigen Netzteilen (Handy-Ladegerät, USB-C Laptop-Netzteil etc.) geladen werden können. Dabei muss natürlich der verfügbare Strom beachtet werden. Mehr dazu unter Lader.

Debug Port

Damit das Gerät auch funktioniert, wenn nur die Debug-Verbindung gesteckt ist, kann auf dem Debug-Port 5V eingespeist werden. Bei den meisten Debug-Adaptern ist dieser Strom beschränkt. Deshalb muss darauf geachtet werden, dass von diesem Eingang maximal 300mA bezogen wird.

Batterien

Li-Ion-Akku

Als Akku sind zwei parallelgeschaltete 18650-Zellen vorgesehen. Diese werden mittels Nickelstreifen verschweist, mit einem NTC versehen und Eingeschrumpft. Die Verbindung zur Schaltung ist vierpolig vorgesehen, da der Akkuschutz auf dem PCB und nicht im Akku verbaut wird. Trennt der Akkuschutz die Minus-Verbindung, so wäre der NTC floatend. Würde nun in diesem Zustand eine externe Versorgung angeschlossen, so erkennt der Lader keinen NTC, da BAT- unterbrochen ist und würde nicht laden. Die Verbindung ist also als BAT+, BAT-, NTC und GND vorgesehen.

Akkuschutz

Als Akkuschutz wird ein FM2113 verbaut. Dieser steuert zwei N-Fets (Laden und Entladen), welche in Common-Drain-Beschaltung zwischen BAT- und GND geschaltet werden. Er unterstüzt den Schutz vor Überladen, Tiefentladen und Überstrom.

Fuel Gauge

Als Fuel Gauge wird der BQ27221 von Texas Instruments eingesetzt. Der ursprünglich vorgesehene BQ27427 verträgt leider nur 2A dauerhaft. Damit würden wir nicht die vollen Möglichkeiten des Laders und des Li-Ion-Akkus ausnutzen. Zur Strommessung ist ein 0.01Ω Shunt vorgesehen. Dabei ist zu beachten, dass vor allem die Temperaturstabilität massgeblich ist, da der genaue Wert im BQ27221 eingestellt/kalibriert werden kann. Die Leistung, welche über dem Widerstand verloren geht, ist relativ gering:


\begin{align}
P &= R \cdot I^2 \\
&= 0.01\text{Ω} \cdot 3\text{A}\\
&= 0.09\text{W}
\end{align}

Diese 90mW Verlustleistung würde zwar schon ein 0603 SMD-Widerstand problemlos verkraften. damit aber eine saubere Kelvin-Verbinung möglich ist, sehe ich hier einen Widerstand in der Bauform 1206 vor. Die Konfiguration der Fuel Gauge kann über die TI-Software und den TI-Adapter stattfinden. Dazu kann der Adapter an einen externe I²C-Anschluss (OLED-Anschluss oder Tasten/Tocu-Controller-Anschluss) verbunden werden. Dabei ist sicherzustellen, dass der Mikrocontroller keine Software geladen hat, die einen I²C-Master implementiert.

CR1220

Eine CR1220 dient als Backup-Versorgung der RTC. Die Batterie wird im Normalfall für sehr lange Zeit (>10 Jahre) ausreichen, da die RTC vom Li-Ion-Akku versorgt wird, solange die Schutzschaltung nicht angesprochen hat.

Energiewandlung

Lader

Als Ladechip ist der BQ25672 vorgesehen. Dieser hat einige Funktionen, die für das Projekt ausserordentlich interessant sind:

  • Unterstützt die Erkennung von zwei externen Spannungen und kann Interrupts auslösen, wenn diese Verbunden oder getrennt werden.
  • Unterstützt einen Ladestrom von bis zu 3A, welcher in 10mA-Schritten über I²C eingestellt werden kann.
  • Unterstützt eine Eingangsstrombegrenzung, welche über I²2 eingestellt werden kann.
  • Unterstützt die Erkennung von speziellen Quellen (USB BC1.2 und HVDCP).
  • Hohe Effizienz dank Buck-Boost-Konzept.
  • Unterstützt die NVDC-Funktion.
  • Shipping Mode um die Energieversorgung auf ein absolutes Minimum zu reduzieren. Kann nur durch verbinden einer Externen Versorgung aufgehoben werden.
  • Integrierte FETs

Einzig eine Erkennung der USB-C Ladeströme ist damit nicht direkt möglich. Das ist aber kein Problem, die CC-Leitungen des USB-C-Steckers können einfach über den ADC des Mikrocotrollers ausgewertet werden. Der Ablauf in der Firmware ist so angedacht:

flowchart TD
A[START] -->|Stecken erkannt| B{CC-Leitungen Messen}
B -->|grösser 1.31V| C[USB-C 3A]
B -->|zwischen 0.71V und 1.16V| D[USB-C 1.5A]
B -->|kleiner 0.61V| E(BQ25672 auslesen)
E --> F{BQ25672 hat USB-Port bestimmt}
F -->|SDP erkannt| G(USB Enumerieren) -->H[Strombegrenzung gemäss Enumerierungs-Ergebnis]
F -->|ansonsten| I(BQ25672 A-Port-Erkennung auslesen) -->J[Strombegrenzung entsprechend setzen]

Dazu ist diese Beschaltung nötig:

graph TD;
    USBC[USB-C Port];
    MCU[Microcontroller];
    CHARGER[Lader];

    USBC -- D+, D-, VBUS --> CHARGER;
    USBC -- D+, D-, CC1, CC2 --> MCU;
    MCU <-- I²C --> CHARGER;

Der Shipping Mode kann dazu benutzt werden, um ein Wiedereinschalten des Geräts bei einem niedrigen Akkustand (zum Beispiel < 3V) zuverlässig zu Verhindern. Zudem ist ein "Lagermodus" vorgesehen, bei dem das Gerät möglichst wenig Energie aus dem Akku entnehmen soll.

3.3V Buck-Boost-Wandler (DC/DC-Wandler)

Der DC/DC-Wandler ist die Hauptenergieversorgung der Schaltung. Da die Li-Ion-Akkuspannung von 3V bis 4.2V betragen kann, ist ein Buck-Boost-Design notwendig. Die Wahl fällt dabei auf den TPS63020. Die Argumente dafür sind:

  • Sehr Effizient
  • Integrierte FETs
  • Hohe Frequenz, damit kleine Induktivität
  • Enable-Eingang, sehr kleiner Energieverbrauche im ausgeschalteten Zustand Der DC/CD-Wandler wird, wenn immer Möglich, ausgeschaltet. Weckquellen sind:
  • Einschalt-Taster
  • RTC
  • Lader (wenn erkannt wird, das eine Versorgung gesteckt wurde) Zudem wird ein GPIO des Mikrocontrollers mit dem ENABLE-Eingang verbunden, damit dieser den DC/DC-Wandler eigneschaltet lassen kann. Dabei sind die Signale zu invertieren, da sie Active Low sind. Die Signale werden über Dioden zusammengefasst und erst dann mit einem N-FET invertiert, um Transistoren zu sparen. Somit reichen zwei Doppeldioden und ein N-FET für die Beschaltung, was 3 SOT-323-Gehäuse bedeutet.

SD Schalter

Die SD-Karte hat auch im Ruhezustand einen relativ grossen Leistungsbedarf. Um eine höhere Energieeffizienz zu erreichen wird die Speisung zum Mikro-SD-Slot über einen P-FET vom Mikrocontroller nur bei bedarf eingeschaltet.

3.3V LDO

Der 3.3V LDO dient dazu, die RTC und den VBAT-Eingang des Mikrocontrollers mit Spannung zu versorgen, wenn der DC/DC-Wandler ausgeschaltet ist. Die Wahl fällt auf den XC6206P332MR-G von Torex. Er hat einen Eigenverbrauch von lediglich 1uA. Bei einer Akkuspannung unter 3.3V reicht er die Eingangsspannung einfach durch (sehr geringer Spannungsabfall). Das führt allerdings dazu, dass in diesem Fall die I²C-Kommunikation mit der RTC problematisch werden kann. Aus diesem Grund wird ein Power-MUX eingesetzt, welcher den DC/DC-Wandler bevorzugt, wenn er vorhanden ist. Damit ist sichergestellt, dass alle Geräte den gleichen Pegel verwenden, wenn I²C aktiv ist.

Power-Mux

Ein TPS2116 wird als Power-Multiplexer eingesetzt. Am Eingang werden der DC/DC-Wandler (priorisiert) und der LDO angeschlossen. Am Ausgang stellt er VRTC zur Verfügung.