12 KiB
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:
VDDist 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.VDDSDversorgt den MicroSD-Kartenslot. Diese Versorgung ist schaltbar, da eine SD-Karte auch im Ruhezustand einen signifikanten Stromverbrauch hat.VRTCversorgt die Echtzeituhr (RTC) und denVBAT-Pin des Mikrocontrollers. Diese Spannung ist immer vorhanden, solange der Batterieschutz nicht ausgelöst hat. Die Versorgung erfolgt über einen Power-MUX, der priorisiert vonVDDgespeist wird. FälltVDDaus, erfolgt die Versorgung über einen LDO direkt vom Li-Ion-Akku (nach der Schutzschaltung).VBACKUPist 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. Das Gerät kann sowohl an einem PC/Laptop als auch 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 5V auf den Debug-Port eingespeist werden. Bei den meisten Debug-Adaptern ist der verfügbare Strom begrenzt, weshalb von diesem Eingang maximal 300mA bezogen werden dürfen.
Batterien
Li-Ion-Akku
Als Akku sind zwei parallelgeschaltete 18650-Zellen vorgesehen. Diese werden mittels Nickelstreifen verschweißt, mit einem NTC-Temperatursensor versehen und eingeschrumpft. Die Verbindung zur Schaltung ist vierpolig ausgeführt, da die Akkuschutzschaltung auf der Hauptplatine (PCB) und nicht im Akku selbst integriert ist. Würde die Schutzschaltung die Minus-Verbindung trennen, wäre der NTC ohne definiertes Potenzial (floatend). Wenn in diesem Zustand eine externe Versorgung angeschlossen wird, würde der Lader den NTC nicht erkennen und den Ladevorgang verweigern. Die Verbindung ist daher als BAT+, BAT-, NTC und GND ausgeführt.
Akkuschutz
Als Akkuschutz wird ein FM2113 verbaut. Dieser steuert zwei N-Kanal-MOSFETs (für Laden und Entladen), die in einer Common-Drain-Schaltung zwischen BAT- und GND platziert sind. Der Baustein schützt vor Überladung, Tiefentladung und Überstrom.
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 2A 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 BQ27221 konfiguriert/kalibriert werden kann.
Die Verlustleistung am Widerstand ist relativ gering:
\begin{align}
P &= R \cdot I^2 \\
&= 0.01\text{Ω} \cdot (3\text{A})^2 \\
&= 0.09\text{W}
\end{align}
Obwohl diese Verlustleistung von 90mW 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. Dieser IC bietet nicht die Möglichkeit, die Temperatur über einen NTC zu messen, er kann nur die interne Temperatur messen oder die Temperatur über I²C erhalten. Deshalb wird die Temperatur während des Betriebs und einer gewissen Nachlaufzeit vom Mikrocontroller beim Ladechip abgefragt und dann an die Gauge weitergeleitet. Wenn das System ausgeschaltet ist und der Akku thermisch stabil, dann wird auf die interne Messung umgeschaltet. Die Temperatur der Gauge und des Akkus sollten dann nicht allzu sehr voneinander abweichen.
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 right 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.
Energiewandlung
Lader
Als Ladechip ist der BQ25672 vorgesehen. Dieser bietet einige Funktionen, die für das Projekt besonders interessant sind:
- Erkennung von zwei externen Spannungsquellen und Auslösung von Interrupts bei deren Anschluss oder Trennung.
- Einstellbarer Ladestrom von bis zu 3A (in 10mA-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. Das ist aber kein Problem, da die CC-Leitungen des USB-C-Steckers einfach ü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.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. 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. < 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 Spannung des Li-Ion-Akkus von 3V bis 4.2V variieren kann, ist ein Buck-Boost-Design notwendig. Die Wahl fällt dabei auf den TPS63020. Die Argumente dafür sind:
- 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)
Zusätzlich wird ein GPIO des Mikrocontrollers mit dem ENABLE-Eingang verbunden, damit dieser den DC/DC-Wandler eingeschaltet lassen kann. Dabei müssen die Signale invertiert werden, da sie active-low sind. Die Signale werden über Dioden zusammengefasst und anschließend mit einem N-Kanal-MOSFET invertiert, um Bauteile zu sparen. Somit reichen zwei Doppel-Dioden und ein N-FET, was 3 SOT-323-Gehäusen entspricht.
SD Schalter
Die SD-Karte hat auch im Ruhezustand einen relativ hohen Stromverbrauch. Um die Energieeffizienz zu erhöhen, wird die Versorgung des Micro-SD-Slots bei Bedarf über einen P-Kanal-MOSFET durch den Mikrocontroller 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, der einen Eigenverbrauch von lediglich 1µA aufweist. Bei einer Akkuspannung unter 3.3V leitet er die Eingangsspannung direkt durch (mit sehr geringem Spannungsabfall). Dies könnte jedoch dazu führen, dass die I²C-Kommunikation mit der RTC problematisch wird. Aus diesem Grund wird ein Power-MUX eingesetzt, der die Versorgung vom DC/DC-Wandler priorisiert, wenn diese aktiv ist. Damit ist sichergestellt, dass alle Geräte den gleichen Spannungspegel verwenden, wenn I²C aktiv ist.
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 werden im Hauptstrompfad N-FETs benötigt (Charge- und Discharge-FETs beim Batterieschutz, SHIP-FET beim Lader, Input Selector beim Lader). Ich habe zuerst zum AO3400A tendiert, ein Basic-Part bei jlcpcb und mein erster Gedanke, wenn ich Logic-Level-N-FET höre.
Sehen wir uns die Rahmenbedingugen an. Worst Case sind die Batterieschutz-Transistoren, denn sie kriegen die kleinste VGS ab, wenn der Li-Ion-Akku entladen ist. Die FETs, welche vom Lader angesteuert werden, erhalten ihre Gatespannung von einer Charge Pump, sie ist sicher so immer um die 5V höher als die Source-Spannung. Gehen wir also von einem tiefentladenen Akku aus. Die Spannung wird dann so um die 2.5V liegen (natürlich wird bei dieser Spannung der Lader nicht mit vollem Strom laden, für eine Worst-Case-Betrachtung ist das aber ideal, da Rds für 2.5V im Datenblatt des AO3400A angegeben ist). Rds bei VGS von 2.5V ist laut Datenblatt <48m