G92-Grad + E-Korrektur
This commit is contained in:
86
EmergencyStopButton/EmergencyStopButton.md
Normal file
86
EmergencyStopButton/EmergencyStopButton.md
Normal file
@@ -0,0 +1,86 @@
|
||||
# Emergency Stop Button — Erkenntnisse & Entscheidungen
|
||||
|
||||
## Hardware-Wahl
|
||||
|
||||
### ESP32-C3 Super Mini — abgelehnt
|
||||
Das kompakte Board hat **keinen Laderegler** (kein TP4056/MCP73831, kein JST-Akku-Anschluss).
|
||||
Zudem zieht eine dauerhaft leuchtende Power-LED 1–2 mA — selbst ohne WLAN-Betrieb würde ein kleiner Akku in wenigen Tagen leer sein.
|
||||
|
||||
### DFRobot FireBeetle 2 — gewählt
|
||||
- Integrierter Laderegler + JST-PH-2.0-Anschluss direkt am Board
|
||||
- Low-Power optimiert (ab Werk ~15 µA im Deep Sleep)
|
||||
- Kein Zusatz-Hardware nötig für Akkubetrieb
|
||||
|
||||
## Akku-Spezifikation für den FireBeetle 2
|
||||
|
||||
Suchbegriffe:
|
||||
- `LiPo Akku 3.7V JST PH2.0 2000mAh Schutzschaltung`
|
||||
- `Li-Po 1S 3.7V protected JST-PH 2.0mm 2000mAh`
|
||||
|
||||
Pflichtmerkmale:
|
||||
| Merkmal | Wert |
|
||||
|---|---|
|
||||
| Typ | LiPo / Li-Polymer, **1S** (1 Zelle) |
|
||||
| Spannung | **3,7 V** nominal |
|
||||
| Stecker | **JST PH, 2,0 mm Raster, 2-polig** |
|
||||
| Schutzschaltung | **Ja** (BMS/PCM) |
|
||||
| Kapazität | **2000 mAh** |
|
||||
|
||||
> **Achtung:** Polarität vor dem Einstecken mit Multimeter prüfen — JST-PH-Stecker sind nicht normiert. Sicherste Option: Akku direkt bei DFRobot kaufen.
|
||||
|
||||
## Architektur-Entscheidung: WiFi Light Sleep (Priorität: 250 ms Latenz)
|
||||
|
||||
Die **250 ms Latenz** vom Knopfdruck bis zum API-Call ist das primäre Ziel.
|
||||
|
||||
| Option | Latenz | Ø Strom | Laufzeit (2000 mAh) |
|
||||
|---|---|---|---|
|
||||
| **WiFi Light Sleep (DTIM=10)** | **150–250 ms** ✅ | ~1 mA | **~80 Tage** |
|
||||
| Deep Sleep + Reconnect | 600–1300 ms ❌ | ~0,02 mA | ~mehrere Jahre |
|
||||
|
||||
Deep Sleep scheidet aus: Der WiFi-Reconnect nach dem Aufwachen dauert 600–1300 ms — die 250-ms-Anforderung wird klar verfehlt.
|
||||
|
||||
## WiFi Light Sleep — Funktionsprinzip
|
||||
|
||||
Die CPU schläft, der WiFi-Stack bleibt aktiv. Mit DTIM=10 wacht der ESP32 alle ~1000 ms für 1–2 ms auf, um gepufferte Pakete vom Router abzuholen. Die Verbindungsassoziation bleibt erhalten.
|
||||
|
||||
Ein **GPIO-Interrupt** (Leitung auf GND) weckt den ESP32 in **1–5 ms** — der API-Call kann sofort abgesetzt werden, weil WiFi bereits verbunden ist.
|
||||
|
||||
## Latenzbudget
|
||||
|
||||
| Schritt | Zeit |
|
||||
|---|---|
|
||||
| Wakeup aus Light Sleep | 1–5 ms |
|
||||
| WiFi-Verbindung prüfen (bereits aktiv) | 0 ms |
|
||||
| HTTP-Request aufbauen | 20–50 ms |
|
||||
| TLS-Handshake (HTTPS) | 50–150 ms |
|
||||
| Server-Antwort | 20–50 ms |
|
||||
| **Gesamt** | **~100–250 ms** ✅ |
|
||||
|
||||
## Akkulaufzeit (WiFi Light Sleep, 2000 mAh)
|
||||
|
||||
```
|
||||
Durchschnittsstrom (DTIM=10, Taster selten gedrückt): ~1 mA
|
||||
Nutzbare Kapazität (80 %): 1600 mAh
|
||||
Selbstentladung LiPo: ~2 mAh/Tag
|
||||
|
||||
Laufzeit ≈ 1600 mAh / 1 mA ≈ 1600 h ≈ 67–80 Tage
|
||||
```
|
||||
|
||||
> Zum Vergleich: Mit 1000 mAh (alter Stand) waren es ~40 Tage.
|
||||
|
||||
## GPIO Wake-Up — technische Details
|
||||
|
||||
- **Pegel-Trigger** (kein Flanken-Trigger): die Leitung muss >ein paar ms auf GND bleiben.
|
||||
- **Pull-Up intern** aktivieren: im Ruhezustand HIGH, Ereignis zieht auf GND.
|
||||
- **Wake-fähige Pins** sind nur RTC/LP-GPIOs — im FireBeetle-2-Datenblatt prüfen.
|
||||
- API: `esp_sleep_enable_gpio_wakeup()` / `esp_light_sleep_start()`
|
||||
|
||||
## Vergleich: Alternative Deep-Sleep-Architektur (nicht für E-Stop geeignet)
|
||||
|
||||
Falls in einem anderen Projekt Latenz < 1 s ausreicht und Akkulaufzeit Monate betragen soll:
|
||||
|
||||
- Deep Sleep, WLAN nur 8–18 Uhr alle 30 min (20 WLAN-Verbindungen/Tag)
|
||||
- Zusätzlich GPIO-Wake für Ereignisse (innerhalb ~300 ms nach Aufwachen + Reconnect)
|
||||
- Laufzeit 2000 mAh: **~8–10 Monate** (Selbstentladung dominant)
|
||||
|
||||
Für den Emergency Stop Button ist diese Option **nicht geeignet**, da die WiFi-Reconnect-Zeit die 250-ms-Anforderung überschreitet.
|
||||
@@ -41,7 +41,7 @@ Tastendruck geweckt.
|
||||
|
||||
\begin{itemize}
|
||||
\item Latenz Knopfdruck $\rightarrow$ API-Call: \textbf{< 250\,ms}
|
||||
\item Stromversorgung: LiPo 1000\,mAh (kabellos, batteriebetrieben)
|
||||
\item Stromversorgung: LiPo 2000\,mAh (kabellos, batteriebetrieben)
|
||||
\item Möglichst lange Akkulaufzeit (Taster wird selten gedrückt, $\leq$1\,×/h)
|
||||
\item Einfache, wartungsarme Architektur
|
||||
\end{itemize}
|
||||
@@ -105,13 +105,17 @@ DTIM & Wakeup-Intervall & Ø Strom \\
|
||||
|
||||
Empfohlen: \texttt{DTIM=10} -- sparsamste Option, Verbindung bleibt stabil.
|
||||
|
||||
\subsection{Akkulaufzeit (1000 mAh LiPo)}
|
||||
\subsection{Akkulaufzeit (2000 mAh LiPo)}
|
||||
|
||||
Bei $\approx$1\,mA Durchschnittsstrom (DTIM=10, selten gedrückt):
|
||||
Bei $\approx$1\,mA Durchschnittsstrom (DTIM=10, selten gedrückt) und 80\,\% nutzbarer Kapazität:
|
||||
\[
|
||||
t = \frac{1000~\mathrm{mAh}}{1~\mathrm{mA}} \approx 40~\mathrm{Tage}
|
||||
t = \frac{1600~\mathrm{mAh}}{1~\mathrm{mA}} \approx 67\text{--}80~\mathrm{Tage}
|
||||
\]
|
||||
|
||||
Die \textbf{Latenz von 250\,ms} hat Vorrang vor maximaler Akkulaufzeit -- Deep Sleep scheidet
|
||||
daher aus (WiFi-Reconnect 600--1300\,ms). Mit 2000\,mAh und WiFi Light Sleep sind
|
||||
ca.\ 2,5 Monate Betrieb ohne Laden realistisch.
|
||||
|
||||
% -----------------------------------------------
|
||||
\section{Latenzbudget}
|
||||
|
||||
@@ -148,6 +152,27 @@ Adafruit HUZZAH32 Feather & MCP73831 & $\approx$20\,€ & gute Dokumentation \\
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\subsection{Akku-Spezifikation}
|
||||
|
||||
Für den FireBeetle\,2 wird ein \textbf{1S LiPo mit JST-PH-2,0-Stecker und BMS} benötigt:
|
||||
|
||||
\begin{center}
|
||||
\begin{tabular}{ll}
|
||||
\toprule
|
||||
Merkmal & Wert \\
|
||||
\midrule
|
||||
Typ & LiPo / Li-Polymer, 1 Zelle (1S) \\
|
||||
Nennspannung & 3{,}7\,V (voll: 4{,}2\,V) \\
|
||||
Stecker & JST PH, 2{,}0\,mm Raster, 2-polig \\
|
||||
Schutzschaltung & Ja (BMS/PCM) -- Pflicht bei Deep-Sleep-Betrieb \\
|
||||
Kapazität & 2000\,mAh \\
|
||||
\bottomrule
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
\textbf{Achtung Polarität:} JST-PH-Stecker sind nicht normiert -- Polung vor dem
|
||||
Einstecken mit Multimeter prüfen. Sicherste Quelle: Akku direkt bei DFRobot kaufen.
|
||||
|
||||
\subsection{Schaltung}
|
||||
|
||||
\begin{lstlisting}
|
||||
@@ -155,7 +180,7 @@ ESP32 Taster
|
||||
GPIO 9 ---- [Taster] ---- GND
|
||||
(interner Pull-Up aktiv: HIGH = offen, LOW = gedrueckt)
|
||||
|
||||
LiPo 1000mAh ---- BAT+ / BAT- des Boards
|
||||
LiPo 2000mAh (JST PH 2.0, mit BMS) ---- BAT+ / BAT- des Boards
|
||||
\end{lstlisting}
|
||||
|
||||
Kein weiteres Bauteil nötig -- der interne Pull-Up des ESP32 reicht.
|
||||
|
||||
Reference in New Issue
Block a user