diff --git a/doc/PowerSupply.de.md b/doc/PowerSupply.de.md index 3ae69cf..44b9f31 100644 --- a/doc/PowerSupply.de.md +++ b/doc/PowerSupply.de.md @@ -1,25 +1,25 @@ # Energieversorgung ## Übersicht -Die Energieversorgung besteht aus 3 Komponenten: +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 verschiedene Versorgungen erzeugt: -- ```VDD```ist 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. +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. -Als vereinfachtes Blockschaltbild schaut dies so aus: +Das vereinfachte Blockschaltbild sieht wie folgt aus: ```mermaid graph TD; subgraph "Batterien" LIPO[(Li-Ion Akku)]; PROTECTION[Akkuschutz]; GAUGE[Fuel Gauge]; - CR1220[(CR2012)]; + CR1220[(CR1220)]; end LIPO <--> PROTECTION; PROTECTION <--> GAUGE; @@ -43,12 +43,12 @@ graph TD; CHARGER --> DCDC --> VDD; CHARGER --> LDO; LDO --> MUX; - DCDC --> MUX --> VDDRTC; + DCDC --> MUX --> VRTC; DCDC --> SDSWITCH --> VDDSD; subgraph "Verfügbare Versorgungen" VBACKUP(VBACKUP); - VDDRTC(VDDRTC); + VRTC(VRTC); VDDSD(VDDSD); VDD(VDD); end @@ -56,58 +56,57 @@ graph TD; ## 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](#lader). +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](#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. +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 verschweist, mit einem NTC versehen und Eingeschrumpft. Die Verbindung zur Schaltung ist vierpolig vorgesehen, da der [Akkuschutz](#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](#lader) keinen NTC, da ```BAT-``` unterbrochen ist und würde nicht laden. Die Verbindung ist also als ```BAT+```, ```BAT-```, ```NTC``` und ```GND``` vorgesehen. +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](#akkuschutz) 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](#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-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*. +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 **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](#lader) und des [Li-Ion-Akkus](#li-ion-akku) 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: +Als Fuel Gauge wird der **BQ27221** 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](#lader) und des [Li-Ion-Akkus](#li-ion-akku) 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}\\ +&= 0.01\text{Ω} \cdot (3\text{A})^2 \\ &= 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. +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. ### 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](#li-ion-akku) versorgt wird, solange die Schutzschaltung nicht angesprochen hat. +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](#li-ion-akku) versorgt wird, solange die Schutzschaltung nicht ausgelöst 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 +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. -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: +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: ```mermaid flowchart TD -A[START] -->|Stecken erkannt| B{CC-Leitungen Messen} -B -->|grösser 1.31V| C[USB-C 3A] +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äss Enumerierungs-Ergebnis] +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: @@ -121,25 +120,27 @@ graph TD; 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. +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 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 +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 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: +- 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 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. +- 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 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. +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](#3-3v-buck-boost-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](#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. +Der 3.3V LDO dient dazu, die RTC und den `VBAT`-Eingang des Mikrocontrollers mit Spannung zu versorgen, wenn der [DC/DC-Wandler](#3-3v-buck-boost-wandler-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](#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. Am Eingang werden der DC/DC-Wandler (priorisiert) und der LDO angeschlossen. Am Ausgang stellt er ```VRTC``` zur Verfügung. \ No newline at end of file +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.