Ein Bluetooth-Modul kann im Schlaf Mikroampere verbrauchen oder beim Senden Dutzende Milliampere — und die Lücke zwischen diesen Zahlen entscheidet über die Batterielaufzeit. Die meisten teams tun die Funkanpassung und vergessen die Leistungs-Zustandsmaschine, dabei werden hier Monate Laufzeit gewonnen oder verloren. Dieser Artikel legt ein praktisches Low-Power-Scheduling-Modell dar: welche Zustände es gibt, was das Teil weckt und wie man den Mittelstrom berechnet, den ein Design wirklich zieht.
Die Leistungs-Zustandsmaschine
Stellen Sie sich das Bluetooth-Modul in vier Zuständen statt zwei:
| Zustand | Typischer Strom | Was lebt |
|---|---|---|
| Aktiv / TX-RX | 5-20 mA | Radio, CPU, Flash |
| Sleep (CPU idle) | 1-3 mA | CPU-Takt gegated, RAM gehalten |
| Deep Sleep | 10-200 µA | RTC, nur RAM gehalten |
| Hibernate | 1-5 µA | GPIO-Wake, RTC, sonst nichts |
Die Kunst ist, möglichst viel Zeit in Deep Sleep oder Hibernate zu verbringen und dabei die Latenz zu erfüllen, die die App braucht. Ein Türsensor, der einmal täglich meldet, lebt in Hibernate; ein Wearable, das Puls streamt, muss in Sleep bleiben.
Wake-Quellen
Ein Bluetooth-Modul wacht nicht von selbst auf — etwas muss es aus dem Schlaf holen:
- GPIO-Interrupt: Flanke von Taste, PIR oder Reed. Am schnellsten (µs) und günstigsten.
- RTC / Timer: für periodische Beacons oder Polling. Vorhersehbar, fixiert aber den Takt.
- UART RX: Host-Bytes treffen ein, die fallende Flanke weckt das Teil. RX-Pin muss biasiert bleiben.
- BLE-Event: Advertising-Fenster oder Verbindungs-Event vom Stack geplant.
- Radio-Wake-Timer: die Link-Layer weckt sich selbst fürs nächste Intervall.
Für einen Batteriesensor ist GPIO + RTC die Kombination, die das Teil 99% der Zeit schlafen lässt.
Duty-Cycle-Mathematik
Der Mittelstrom ist die zeitgewichtete Summe jedes Zustands:
I_avg = I_active * (t_active / T) + I_sleep * (1 – t_active / T)
Wenn ein Bluetooth-Modul 5 ms jede 1 s bei 15 mA sendet und sonst bei 50 µA schläft:
I_avg = 0.015 * 0.005 + 0.00005 * 0.995 ≈ 0.000125 A = 125 µA
Eine CR2032 (220 mAh) hält dann rund 220 / 0.125 ≈ 1760 Stunden, etwa 73 Tage. Auf 10 s Intervall gestreckt sind es über zwei Jahre. Das Intervall, nicht die Sendeleistung, dominiert.
PMIC- und Reglerwahl
Der Regler, der das Bluetooth-Modul speist, zählt so sehr wie das Modul. Ein lineares LDO ist einfach und leise, verschwendet aber die Differenz von Batterie auf 1.8 V als Wärme. Ein Buck (schaltend) erreicht 85-95% Wirkungsgrad und kann die Laufzeit an einer 3.6-V-Li-Zelle verdoppeln. Faustregel: bei >200 mV Abfall und mehr als wenigen mA, Buck nutzen.
Achten Sie auch auf den Quiescent-Strom des PMIC: ein Buck, der im Sleep 25 µA zieht, kann ein Bluetooth-Modul im Hibernate bei 5 µA überlagern. Wählen Sie ein PMIC, dessen Iq weit unter Ihrem Sleep-Zielstrom liegt.
Sleep-Eintritts-Handshake
Trennen Sie einem Bluetooth-Modul niemals mitten in einem Flash die Energie. Nutzen Sie einen expliziten Handshake:
1. Host sendet Sleep-Befehl (z.B. AT+SLEEP) und wartet auf OK.
2. Modul beendet die Operation, fluscht die UART und assertet die HOST_WAKE/CTS-Leitung („ich schlafe“).
3. Host kann die Radio-Versorgung kappen oder das PMIC idle lassen.
Beim Aufwachen deassertet der Host die Leitung; das Modul bootet den Stack in Zehnergrößen ms und zieht HOST_WAKE wieder hoch als Bereit-Signal.
Wake-Latenz-Abwägung
Schnelleres Aufwachen kostet Strom. Ein Modul mit laufendem Low-Freq-Oszillator wacht in 2 ms auf, verbraucht aber mehr im Sleep; eines, das alles gated, braucht 20-50 ms und vollen Re-Init. Wählen Sie je App: Tastatur will <10 ms, Temperatur-Beacon verträgt Sekunden.
Real messen
Das Modell ist nur so gut wie seine Zahlen. Nutzen Sie einen DC-Power-Analyzer (kein Multimeter), um die Stromspur zu erfassen, und summieren Sie die Fläche unter der Kurve:
Ladung_pro_Zyklus = ∫ I(t) dt (in µA·s)
Mittelstrom = Ladung_pro_Zyklus / T
Das erfasst die echten Kosten von Flash-Schreiben, Kristallstart und Regler-Ringing, die die einfache Formel verbirgt.
Ein gut architekturiertes Bluetooth-Modul verbringt das meiste Leben im Deep Sleep, wacht über eine saubere Quelle auf und nutzt einen Buck, dessen Quiescent-Strom ein Bruchteil des Sleep-Floors ist — so verwandeln Sie Wochen Laufzeit in Jahre.