docs: design note for a 48 V (13s) BMU variant
CI / firmware-native (push) Successful in 1m14s
qa-cicd-environments / qa-kxkm-s3-memory-budget (push) Successful in 5m44s
qa-cicd-environments / qa-sim-host (push) Successful in 1m43s
qa-cicd-environments / qa-kxkm-s3-build (push) Successful in 19m8s

Context: the fleet includes 13s Li-ion scooter packs (46.8 V nominal,
54.6 V full charge) worth paralleling; the INA237 measurement chain
already accepts up to 85 V of common mode, so the voltage ceiling
comes from the switching sub-board and the Manual ON buck.

Approach: component-level review of what survives 54.6 V as-is and
what must change, grounded in the actual schematics and firmware
(hard-coded threshold bounds located in the BLE service and the
display steppers).

Changes:
- Add docs/superpowers/specs/2026-07-05-bmu-48v-13s-variant-design.md:
  drop-in 48 V MOSFET sub-board (80-100 V P-FETs, mandatory VGS zener
  clamp, 300 V command BJT), motherboard v2.1 (100 V buck + input
  caps + DRC class), firmware variant (Kconfig defaults, BLE and UI
  validation bounds, SOC/SOH recalibration), system risks (scaled
  circulating currents, precharge, pack-internal BMS behaviour) and
  a bench validation plan

Impact: documented path to parallel 13s packs while staying in SELV
(54.6 V < 60 V DC), with the pack-internal BMS behaviour identified
as the main open risk.
This commit is contained in:
L'électron rare
2026-07-05 15:22:29 +02:00
parent b3f7b98a77
commit c763fa64d6
@@ -0,0 +1,115 @@
# Design note — Variante BMU 48 V (packs Li-ion 13s)
> Statut : étude préliminaire (draft)
> Date : 2026-07-05
> Portée : adapter la BMU v2 à des packs 13s type trottinette (46,8 V nominal)
> Référence pack : Ninebot NFKF4825B — 13INR22/71-5, 46,8 V, 24,5 Ah / 1147 Wh,
> BMS interne HD4825-BMS-A05 (noyé silicone, ports B+/C+/P+ distincts)
## 1. Objectif
Réutiliser l'architecture BMU (mesure INA237 par voie + coupure MOSFET
bidirectionnelle + bus I2C isolé en RJ45) pour mettre en parallèle des packs
**13s Li-ion INR** récupérés de trottinettes, en plus des packs 7s actuels.
Fenêtre électrique cible :
| Grandeur | 7s (actuel) | 13s (cible) |
|---|---|---|
| Tension nominale | 25,9 V | 46,8 V |
| Coupure basse (3,0 V/cellule) | 21,0 V | 39,0 V |
| Pleine charge (4,2 V/cellule) | 29,4 V | **54,6 V** |
54,6 V < 60 V DC : le système reste en très basse tension de sécurité
(ES1 / IEC 62368-1) — pas de changement de classe de sécurité.
## 2. Ce qui tient déjà (sans modification)
| Bloc | Verdict | Détail |
|---|---|---|
| Chaîne de mesure INA237 | ✅ | Mode commun jusqu'à +85 V ; VBUS 3,125 mV/LSB (>100 V lisibles) ; alertes BOVL/BUVL 16 bits OK à 54,6 V |
| Shunt HOVB4026 2 mΩ 5 W | ✅ | Pleine échelle ±82 A ; 1,8 W à 30 A (36 % du budget) |
| Isolation ISO1540 + alim transfo | ✅ | Isolation renforcée >> 55 V ; chaque carte flotte au potentiel de son pack |
| TCA9535, LEDs, adressage, RJ45 | ✅ | Domaine logique 3,3 V isolé, indépendant de la tension pack |
| Unités firmware | ✅ | mV en u16/i32 partout : 54 600 mV tient dans un u16 (config BLE 4×u16) |
| Sous-carte enfichable | ✅ | C'est le point de design qui rend la variante possible : on remplace la sous-carte, pas la carte mère |
| Connectique | ✅ | Anderson SB50 (600 V), cosses M5, embases 10 contacts — OK |
## 3. Hardware à modifier
### 3.1 Sous-carte MOSFET « 48 V » (respin drop-in, 38 × 85,5 mm)
| Élément | v2 actuel | Problème à 54,6 V | Remplacement proposé |
|---|---|---|---|
| Q2Q5, Q7Q10 | IRF4905, P-ch **55 V**, 74 A | Marge nulle (transitoires) | P-MOSFET **80100 V** TO-263, R_DS(on) ≤ 15 mΩ — ex. Vishay SUM110P08-11L (80 V, 11 mΩ), *à valider en sourcing* ; sinon variante N-ch high-side + driver charge-pump |
| V_GS | non clampé (déjà 24/30 V > ±20 V abs max) | 54,6 V : destructif immédiat | **Zener 12 V grille-source** par groupe + R série grille (≈100 Ω) + pull-up 10 k conservé — corrige aussi le point de vigilance v2 |
| Q1, Q11 (commande) | BC337/BC847, **45 V** | V_CE ≈ V_bus à l'état OFF | NPN haute tension **MMBTA42** (300 V, SOT-23) |
La commande 3 points (+3,3 V / CMD / GND) et le brochage des embases restent
identiques : la sous-carte 48 V est interchangeable avec la 30 V.
⚠ Marquer les sous-cartes (sérigraphie couleur) pour éviter tout panachage.
### 3.2 Carte mère (v2.1 mineure)
| Élément | v2 actuel | Problème | Remplacement |
|---|---|---|---|
| Buck Manual ON | MCP16331, **Vin max 50 V** | 54,6 V hors spec | **LM5164** (100 V, synchrone) ou module isolé 975 V ; feedback à recalculer (sortie ~5 V inchangée) |
| C12/C13 entrée buck | 10 µF **50 V** | sous-dimensionnés | 10 µF **100 V** |
| DRC | classe 30 V | isolement 54,6 V | repasser le DRC avec clearance puissance ≥ 0,5 mm (IPC-2221) — les zones v2 semblent déjà larges, à confirmer |
| Fusible par branche | dimensionné 7s/18 Ah | pack 24,5 Ah | recalculer (I_max voie + I_circ toléré) |
Le reste de la carte mère (INA, TCA, jumpers, RJ45, LEDs, bornes) est inchangé.
## 4. Firmware à modifier (variante Kconfig « 13S »)
Trois points durs identifiés dans le code + deux calibrations :
1. `bmu_config/Kconfig` — defaults : `BMU_MIN_VOLTAGE_MV` 24000 → 41000,
`BMU_MAX_VOLTAGE_MV` 30000 → 54600 (proposition à affiner).
2. `bmu_ble/bmu_ble_control_svc.cpp:233-234` — bornes de validation codées en
dur (2030 V / 2535 V) → à dériver du Kconfig (plage 13s : 3648 V /
4556 V) plutôt que de nouvelles constantes magiques.
3. `bmu_display/bmu_ui_config.cpp:188-189` — mêmes bornes dans les steppers
de l'écran → même traitement.
4. **Seuil de déséquilibre** : 1 V @7s ≈ 1,9 V @13s à iso-déséquilibre par
cellule (×13/7). Garder le paramètre en absolu mais adapter le défaut de
la variante (~2000 mV).
5. **SOC/VRM et SOH** : mapping SOC linéaire 24,028,8 V → profil 13s
(39,054,6 V) ; le modèle SOH FPNN est entraîné sur les packs 7s terrain
→ recalibration nécessaire pour la chimie INR 13s (advisory only, les
protections restent autoritaires).
## 5. Points système à instruire au banc
- **Courants de circulation** : ΔV pack plus grand à iso-déséquilibre
cellule ; ordre de grandeur 13s : ΔV 3 V / ΣR ≈ 150 mΩ → ≈ 20 A.
Le seuil « max 1 A de déséquilibre » de l'intake est à retraduire pour 48 V.
- **Précharge / inrush** : bus 48 V avec charges capacitives (onduleurs) —
prévoir un séquencement de fermeture des voies (la machine d'états le
permet : fermer une voie, temporiser, fermer les suivantes) ou une
résistance de précharge sur la première voie.
- **BMS internes des packs** : les packs trottinette ont des FETs de sortie
et une logique d'activation propres (ports C+/P+ séparés, wake possible).
À caractériser : acceptation du backfeed sur P+, comportement en parallèle,
besoin d'un signal d'enable. **Risque principal du scénario.**
- **Thermique** : FET 80 V à R_DS(on) plus élevée que l'IRF4905 → vérifier
la dissipation à I_max voie (4 FETs en parallèle par direction aident).
## 6. Plan de validation proposé (banc)
1. Deux packs 13s, ΔV imposé par alim/charge — mesurer I_circ vs modèle,
valider les seuils et la coupure.
2. Commutation sous charge : V_GS réel à l'oscillo (clamp), thermique
FET/shunt à I_max.
3. Backfeed/enable des BMS Ninebot : parallélisme de 2 packs réels,
observation des coupures internes.
4. Endurance : duty-cycling balancer + reconnexions sur 24 h.
## 7. Effort estimé
| Lot | Contenu | Ampleur |
|---|---|---|
| Sous-carte 48 V | respin 2 couches, même contour/connectique | petit (schéma 1 feuille, ~20 composants) |
| Carte mère v2.1 | buck 100 V + condos + DRC | petit |
| Firmware | variante Kconfig + 3 fichiers + profils SOC | petit |
| Banc | protocole §6, dont caractérisation BMS packs | **le vrai travail** |