PowerProfiler/doc/Hardware_PowerSupply.de.md

19 KiB
Raw Permalink Blame History

Energieversorgung

Übersicht

Die Energieversorgung des Geräts besteht aus drei Hauptkomponenten:

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

Aus diesen Quellen werden mehrere interne Spannungsversorgungen erzeugt:

  • VDD ist die Hauptversorgung für den Mikrocontroller, den Sensor und den externen Flash-Speicher. Sie wird durch einen Buck-Boost-Wandler aus der externen Versorgung oder dem Li-Ion-Akku erzeugt. Der Wandler ist zur Energieeinsparung schaltbar.
  • VDDSD versorgt den MicroSD-Kartenslot. Diese Versorgung ist schaltbar, da eine SD-Karte auch im Ruhezustand einen signifikanten Stromverbrauch hat.
  • VRTC versorgt die Echtzeituhr (RTC) und den VBAT-Pin des Mikrocontrollers. Diese Spannung ist immer vorhanden, solange der Batterieschutz nicht ausgelöst hat. Die Versorgung erfolgt über einen Power-MUX, der priorisiert von VDD gespeist wird. Fällt VDD aus, erfolgt die Versorgung über einen LDO direkt vom Li-Ion-Akku (nach der Schutzschaltung).
  • VBACKUP ist die Spannung der CR1220-Zelle. Sie dient als Backup-Versorgung für die RTC, falls der Akku entfernt wird oder der Tiefentladeschutz auslöst.

Das vereinfachte Blockschaltbild sieht wie folgt aus:

graph TD;
    subgraph "Batterien"
        LIPO[(Li-Ion Akku)];
        PROTECTION[Akkuschutz];
        GAUGE[Fuel Gauge];
        CR1220[(CR1220)];
    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 --> VRTC;
    DCDC --> SDSWITCH --> VDDSD;

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

Detailbeschreibung

Externe Quellen

USB-C Port

Das Gerät verfügt über einen USB-C-Port, der sowohl der Datenübertragung als auch der Energieversorgung dient. Es kann an einem PC/Laptop sowie an gängigen Netzteilen (Handy-Ladegerät, USB-C Laptop-Netzteil etc.) geladen werden. Dabei muss der jeweils verfügbare Strom beachtet werden. Mehr dazu unter Lader.

Debug Port

Damit das Gerät auch bei ausschließlich gesteckter Debug-Verbindung funktioniert, können 5 V auf den Debug-Port eingespeist werden. Bei den meisten Debug-Adaptern ist der verfügbare Strom begrenzt, weshalb von diesem Eingang maximal 300 mA bezogen werden dürfen.

Batterien

Li-Ion-Akku

Als Akku sind zwei parallelgeschaltete 18650-Zellen vorgesehen. Diese werden mittels Nickelstreifen verschweisst, mit einem NTC-Temperatursensor versehen und eingeschrumpft. Die Verbindung zur Hauptplatine ist vierpolig (BAT+, BAT-, NTC, GND), da sich die Akkuschutzschaltung auf der Hauptplatine befindet. Diese trennt im Fehlerfall die BAT- Leitung vom Rest der Schaltung (GND). Wäre der NTC-Temperatursensor nur zwischen BAT+ und BAT- angeschlossen, hätte er nach einer Trennung kein definiertes Potenzial mehr (floating). Ein an GND referenzierter Messeingang am Lader könnte die Temperatur nicht mehr korrekt erfassen. Durch die separate GND-Verbindung für den NTC wird dieses Problem umgangen.

Akkuschutz

Als Akkuschutz habe ich zuerst an den FM2113 gedacht. Bei der Auslegung der N-FETs wurde dann aber klar, dass er nicht geeignet ist. Das Problem dabei ist, dass er RDSON zur Strommessung benutzt. Um ein Auslösen der Überstromsicherung im Worst Case kommen bei 3 A Standardkandidaten wie der AO3400A oder der MDD2302 nicht in Frage, sie sind leider nicht genügend niederohmig. Der AO3400A kann die Wärme bei 3 A nicht abführen. Der MDD2302 würde thermisch passen. Bei 2.5 V hat er einen maximalen RDSON von 35 mΩ, die Verlustleistung bei 3 A beträgt also


P = R \cdot I^2 = 35\text{ mΩ} \cdot (3\text{ A})^2 = 315\text{ mW}

was bei 100 K/W thermischen Widerstand kein Problem darstellt. Allerdings beträgt der Spannungsabfall


\Delta U = R \cdot I = 35\text{ mΩ} \cdot 3\text{ A} = 105\text{ mV}

Da in der Schutzschaltung 2 FETs in Common-Drain-Schaltung vorhanden sind ergibt das total 210 mV. Laut Datenblatt kann der FM2113 bereits bei 120 mV einen Überstrom erkennen. Bessere FETs sind selten, größer und/oder teurer. Bei meiner Suche bin ich dann über den XB4908A von XySemi gestoßen, eine LiPo-Protection-IC mit integrierten FETs. Der Baustein schützt vor Überladung, Tiefentladung und Überstrom. Die wichtigsten Daten will ich hier aufführen, da der Chip wohl nicht sehr bekannt sein dürfte:

Parameter Symbol Wert
Überladespannungsauslösung OCV 4.30 V
Überladespannungsauflösung OCRV 4.10 V
Tiefentladeauslösung ODV 2.4 V
Tiefentladeauflösung ODRV 3 V
Strombedarf im Betrieb IOPE typ. 3.3 μA
Strombedarf im Powerdown IPD typ. 1.8 μA
Widerstand RSS(on) typ. 13.5 mΩ
Überstromabschaltung entladen IIOV1 min. 6 A
Überstromabschaltung laden IROV1 min. 4 A
Thermischer Widerstand zur Umgebung θJC 100 K/W

Dieser IC ist also passend für diese Anwendung. Der RSS(on) (SS, da da zwei nFETs in Common-Drain-Schaltung drin sind, also der Widerstand zwischen den beiden Sourcen) ist leider nur als typischer Wert angegeben. Für die thermische Abschätzung gehe ich also daher von 20 mΩ aus. Damit erhalte ich


P = R \cdot I^2 = 20\text{ mΩ} \cdot (3\text{ A})^2 = 180\text{ mW} \\
\Delta T = P \cdot \Theta_{JC} = 180\text{ mW} \cdot 100\text{ K/W} = 18\text{ K}

Eine Erwärmung um 18 K bei maximalem Ladestrom sollte absolut kein Problem sein.

Fuel Gauge

Als Fuel Gauge wird der BQ27441-G1 von Texas Instruments eingesetzt. Der ursprünglich vorgesehene BQ27427 ist nur für einen Dauerstrom von 2 A ausgelegt, womit die vollen Möglichkeiten des Laders und des Li-Ion-Akkus nicht ausgenutzt werden könnten. Zur Strommessung ist ein 0.01 Ω Shunt-Widerstand vorgesehen. Hierbei ist vor allem die Temperaturstabilität maßgeblich, da der genaue Widerstandswert im BQ27441-G1 konfiguriert/kalibriert werden kann. Die Verlustleistung am Widerstand ist relativ gering:


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

Obwohl diese Verlustleistung bereits ein 0603-SMD-Widerstand verkraften würde, wird hier ein Widerstand der Bauform 1206 vorgesehen, um eine saubere 4-Leiter-Messung (Kelvin-Verbindung) zu ermöglichen. Die Konfiguration der Fuel Gauge kann über die TI-Software und einen entsprechenden Adapter erfolgen. Dazu kann der Adapter an einen externen I²C-Anschluss (z.B. OLED- oder Tasten-Controller-Anschluss) angeschlossen werden. Dabei ist sicherzustellen, dass auf dem Mikrocontroller keine Software aktiv ist, die einen I²C-Master implementiert. Da der BQ27441-G1 keine NTC-Schnittstelle besitzt, wird eine alternative Methode zur Temperaturerfassung genutzt. Im Betrieb liest der Mikrocontroller die Akkutemperatur vom Lader aus und leitet sie per I²C an die Fuel Gauge weiter. Im Ruhezustand, wenn von einer thermischen Stabilität auszugehen ist, wird auf den internen Temperatursensor der Fuel Gauge zurückgegriffen.

stateDiagram-v2
    [*] --> Betrieb
    Betrieb --> Nachlauf: Gerät schaltet aus
    Nachlauf --> Tiefschlaf: Akkutemperatur stabil oder 1h abgelaufen
    Tiefschlaf --> Betrieb: Gerät schaltet ein
note right of Nachlauf
    DC/DC wird von der RTC regelmässig gestartet um die Temperatur zu übermitteln.
end note
note left of Tiefschlaf
    DC/DC ausgeschaltet
end note

CR1220

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

Energiebilanz Li-Ion-Akku

Die Energiebilanz im Betrieb kann erst wirklich bestimmt werden, wenn die Schaltung aufgebaut ist. Um die Auslegung zu prüfen habe ich aber überschlagen, wie viel die Schaltung in einem Deep-Power-Down-Modus verbraucht. Die Strategie ist, bei unter 3V in einen sicheren Deep-Power-Down-Modus zu gehen, um eine Tiefentladung des Akkus möglichst lange zu verhindern. Sollte Entladung des Akkus erkannt werden, so wird der Lader in den Ship-Zustand geschaltet und die Fuel Gauge in den Shutdown. Der Lader wird durch das Einstecken einer externen Versorgung automatisch wieder geweckt. Die Fuel Gauge muss über den GP-Pin vom Mikrocontroller geweckt werden.

stateDiagram-v2
    [*] --> Betrieb
    Betrieb --> DeepPowerDown: Akkuspannung < 3V
    DeepPowerDown --> Aufwachen: Stecken einer externen Energiequelle
    Aufwachen --> Betrieb: Übergang durch Mikrocontroller
note right of DeepPowerDown
  Microcontroller schaltet Fuel Gauge und Lader in niedrigen Verbrauch, dadurch wird Speisung gekappt
end note
note left of Aufwachen
  Mikrocontroller muss Fuel Gauge wecken
end note

Vorgesehen sind 2×3200 mAh-18650-Zellen parallel. Zur Sicherheit rechne ich mit 2×2600 mAh, falls doch einmal kleinere Zellen eingesetzt werden.

Ausgangsdaten

Wert Kapazität
Nennkapazität 5200 mAh
Alterung, Rest 80% 4106 mAh
Restkapazität unter 3 V bis zur kritischen Spannung von 2.5 V: 10% 41 mAh

Verbrauchsrechnung

Beim Verbrauch fliessen die Worst-Case (höchsten) Angaben ein:

Verbraucher Verbrauch
Schutzschaltung XB4908A 6 μA
Fuel Gauge BQ27441-G1 (im Datenblatt steht nur der typische Verbrauch von 0.6 μA, Worst-Case geschätzt) 1 μA
Lader BQ25672 (0.7 μA laut Datenblatt, aufgerundet) 1 μA
total 8 μA

In der Worst-Case-Betrachtung haben wir also 41 mAh zur Verfügung bei einem Verbrauch von 8 μA, die Restkapazität reicht folglich für \frac{41\text{ mAh}}{8\text{ μA}} = 5125\text{ h}, bis der Akku in einen chemisch kritischen Zustand kommt. Das entspricht 213 Tagen oder fast sieben Monaten. Die Selbstentladung ist hierbei nicht eingerechnet, trotzdem ist dies ein Wert, er mir absolut keine Bauchschmerzen bereitet, vor allem, da dies ja eine absolute Worst-Case-Berechnung ist.

Energiewandlung

Lader

Als Ladechip ist der BQ25672 vorgesehen. Dieser bietet einige für das Projekt interessante Funktionen:

  • Erkennung von zwei externen Spannungsquellen und Auslösung von Interrupts bei deren Anschluss oder Trennung.
  • Einstellbarer Ladestrom von bis zu 3 A (in 10 mA-Schritten über I²C).
  • Einstellbare Eingangsstrombegrenzung (über I²C).
  • Erkennung von Sonderladegeräten (USB BC1.2 und HVDCP).
  • Hohe Effizienz dank Buck-Boost-Architektur.
  • Unterstützung der NVDC-Funktion (Narrow Voltage DC).
  • „Shipping Mode", um den Stromverbrauch auf ein absolutes Minimum zu reduzieren. Dieser Modus kann nur durch Anschließen einer externen Versorgung beendet werden.
  • Integrierte FETs.

Eine direkte Erkennung der über USB-C verfügbaren Stromstärken ist damit jedoch nicht möglich. Dies stellt jedoch kein Problem dar, da die CC-Leitungen des USB-C-Steckers über den ADC des Mikrocontrollers ausgewertet werden können. Der geplante Ablauf in der Firmware ist wie folgt:

flowchart TD
A[START] -->|Anstecken erkannt| B{CC-Leitungen messen}
B -->|größer 1.31 V| C[USB-C 3 A]
B -->|zwischen 0.71 V und 1.16 V| D[USB-C 1.5 A]
B -->|kleiner 0.61 V| E(BQ25672 auslesen)
E --> F{BQ25672 hat USB-Port bestimmt}
F -->|SDP erkannt| G(USB Enumerieren) -->H[Strombegrenzung gem. Enumerierung]
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 genutzt werden, ein Wiedereinschalten des Geräts bei niedrigem Akkustand (z.B. < 3 V) 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 Spannung des Li-Ion-Akkus von 3 V bis 4.2 V variieren kann, ist ein Buck-Boost-Wandler notwendig. Die Wahl fiel auf den TPS63020, der folgende Vorteile bietet:

  • Sehr hohe Effizienz
  • Integrierte FETs
  • Hohe Schaltfrequenz, was kleine Induktivitäten ermöglicht
  • Enable-Eingang und sehr geringer Energieverbrauch im ausgeschalteten Zustand

Der DC/DC-Wandler wird, wann immer möglich, ausgeschaltet. Weckquellen sind:

  • Einschalt-Taster
  • RTC
  • Lader (wenn eine externe Versorgung angeschlossen wird)

Da die Wecksignale aktiv-low sind, werden sie über Dioden zu einem Wired-OR-Gatter zusammengefasst. Ein nachgeschalteter N-Kanal-MOSFET invertiert das Signal für den aktiv-high Enable-Eingang des Wandlers. Diese Logik stellt zudem sicher, dass der Mikrocontroller den Wandler selbst aktiv halten kann (Latching).

SD Schalter

Eine SD-Karte kann auch im Ruhezustand einen signifikanten Strom verbrauchen. Um die Energieeffizienz zu erhöhen, wird die Versorgung des Micro-SD-Slots bei Bedarf über einen P-Kanal-MOSFET durch den Mikrocontroller geschaltet.

3.3V LDO

Der 3.3V LDO versorgt die RTC und den VBAT-Eingang des Mikrocontrollers, wenn der DC/DC-Wandler ausgeschaltet ist. Die Wahl fiel auf den XC6206P332MR-G von Torex, der einen Eigenverbrauch von lediglich 1 μA aufweist. Fällt die Akkuspannung unter 3.3 V, arbeitet er im Dropout-Bereich und die Ausgangsspannung folgt der Eingangsspannung abzüglich eines geringen Spannungsabfalls. Dies kann zu Pegel-Inkompatibilitäten bei der I²C-Kommunikation führen, da der Rest der Schaltung mit stabilen 3.3 V vom DC/DC-Wandler versorgt wird. Um dies zu verhindern, schaltet ein Power-Mux die Versorgung der RTC auf den VDD-Zweig um, sobald dieser aktiv ist. Dadurch wird ein einheitlicher Spannungspegel für die Kommunikation sichergestellt.

Power-Mux

Ein TPS2116 wird als Power-Multiplexer eingesetzt. An den Eingängen werden der DC/DC-Wandler (priorisiert) und der LDO angeschlossen. Am Ausgang stellt er die VRTC-Spannung zur Verfügung.

Dimensionierungen

Im Folgenden werden die wesentlichen Dimensionierungen behandelt.

N-FETs

An mehreren Stellen im Hauptstrompfad werden N-FETs benötigt (Charge- und Discharge-FETs beim Batterieschutz, SHIP-FET beim Lader, Input Selector beim Lader). Eine erste Überlegung galt dem AO3400A, einem gängigen Logic-Level N-FET.

Die kritischste Anwendung sind die Batterieschutz-Transistoren, da sie bei entladenem Akku die geringste Gate-Source-Spannung (VGS) erhalten. Die vom Lader angesteuerten FETs werden über eine interne Ladungspumpe mit einer ausreichend hohen Gatespannung versorgt.

Für die Worst-Case-Betrachtung wird ein tiefentladener Akku mit einer Spannung von 2.5 V angenommen. Laut Datenblatt des AO3400A beträgt der Rds(on) bei einer VGS von 2.5 V maximal 48 mΩ. Bei einem angenommenen Laststrom von 3 A würde dies zu folgenden Konsequenzen führen:

  • Spannungsabfall:
 
\begin{aligned}
 V_{drop} &= R_{ds(on)} \cdot I \\
 &= 0.048\text{ Ω} \cdot 3\text{ A} \\
 &= 0.144\text{ V}
\end{aligned}
  • Verlustleistung:
 
\begin{aligned}
 P_{loss} &= R_{ds(on)} \cdot I^2 \\
 &= 0.048\text{ Ω} \cdot (3\text{ A})^2 \\
 &= 0.432\text{ W}
\end{aligned}

Die Verlustleistung ist zu gross für das Gehäuse. Die Wahl fällt deshalb auf den HL3416 mit einem Rds(on) von typisch 18 mΩ, maximal 26 mΩ bei 2.5 V:

  • Spannungsabfall:
 
\begin{aligned}
 V_{drop} &= R_{ds(on)} \cdot I \\
 &= 0.018\text{ Ω} \cdot 3\text{ A} = 0.054\text{ V}\\
 &= 0.026\text{ Ω} \cdot 3\text{ A} = 0.078\text{ V}\\
\end{aligned}
  • Verlustleistung:
 
\begin{aligned}
 P_{loss} &= R_{ds(on)} \cdot I^2 \\
 &= 0.018\text{ Ω} \cdot (3\text{ A})^2 = 0.162\text{ W}\\
 &= 0.026\text{ Ω} \cdot (3\text{ A})^2 = 0.234\text{ W}
\end{aligned}

Die Verlustleistung beträgt also Worst Case 234 mW. Bei einem thermischen Widerstand RθJA von 96 K/W, aufgerundet auf 100 K/W, ergibt das eine Erwärmung des Gehäuses um 23.4 K bei minimaler Spannung und maximalem Strom. Dies sollte problemlos sein, insbesondere, da die Gate-Source-Spannung beim BQ25672 dank Ladungspumpen ca. 5 V beträgt. Die Worst-Case-Berechnung ist für den Batterieschutz, der aber bei der gewählten Konfiguration integrierte FETs hat.

Datenblätter

Die Datenblätter aller verwendeten Bauteile sind in diesem Repository verfügbar:

Energieversorgung

  • XB4908A - Li-Ion Protection IC mit integrierten FETs
  • BQ27441-G1 - Fuel Gauge IC von Texas Instruments
  • BQ25672 - Lader-IC mit Buck-Boost-Architektur

Spannungswandlung

  • TPS63020 - 3.3V Buck-Boost-Wandler von Texas Instruments
  • XC6206P332MR-G - 3.3V Low-Dropout-Regulator von Torex
  • TPS2116 - Power-Multiplexer von Texas Instruments

Diskrete Bauteile

  • HL3416 - N-Kanal MOSFET für Schalter und FET-Anwendungen