Magic Grid 4: Solution Domain, livello di sottosistema (Alimentazione)
📍 Fase: Modellazione SysML v2 — qui si costruisce il modello (requisiti, architettura, verifica). La parte tecnica di dettaglio (schematico KiCad, firmware) è nella serie tutorial ESP32/Nordic.
Con la LSA completa, ogni sottosistema può essere sviluppato in dettaglio, idealmente da un team diverso in parallelo. Il Book of Knowledge stesso, nel suo caso di studio, ne sceglie uno solo (il Cooling System) come esempio completo. Facciamo lo stesso: Alimentazione, il sottosistema più critico per l’autonomia (MOE-01) e con il gap più evidente emerso nell’articolo precedente.
1. Subsystem Requirements
I requisiti di sistema (SR1, SR2) si specializzano in requisiti più precisi, allocati esplicitamente al sottosistema Alimentazione.
package SubsystemRequirements {
private import SystemRequirements::*;
private import ConceptualSubsystems::SottosistemaAlimentazione;
requirement def <PWR1> CorrenteSleepComponenti specializes SR1 {
subject alimentazione : SottosistemaAlimentazione;
attribute correnteMassimaMicroA : Real = 35;
doc /* La somma delle correnti di riposo di PMIC, regolatore e fuel gauge
shall restare sotto 35 microA (margine sui 50 microA di SR1). */
}
requirement def <PWR2> RegolazioneTensione specializes SR2 {
subject alimentazione : SottosistemaAlimentazione;
doc /* Il regolatore shall mantenere 3.3V +/-5% durante il picco di
corrente del refresh e-paper. */
}
requirement def <PWR3> StimaBatteria {
subject alimentazione : SottosistemaAlimentazione;
doc /* Il fuel gauge shall stimare il livello di carica residua con
errore entro il 5%, per soddisfare SN4 (avviso batteria scarica). */
}
}
2. Subsystem Structure
Si apre il blocco Alimentazione della LSA e se ne modellano i componenti interni.
package SubsystemStructure {
part def PMIC {
attribute correnteRiposoMicroA : Real = 12;
}
part def RegolatoreTensione {
attribute correnteRiposoMicroA : Real = 8;
}
part def BatteriaLiPo {
attribute capacitaMAh : Real = 2000;
}
part def FuelGauge {
attribute correnteRiposoMicroA : Real = 5;
}
part def SottosistemaAlimentazioneLSSA :> ConceptualSubsystems::SottosistemaAlimentazione {
part pmic : PMIC;
part batteria : BatteriaLiPo;
part regolatore : RegolatoreTensione;
part fuelGauge : FuelGauge;
connect pmic to batteria;
connect batteria to regolatore;
connect batteria to fuelGauge;
}
}

12 + 8 + 5 = 25 µA di corrente di riposo sommando i tre componenti attivi in deep sleep — già sotto il budget di 35 µA di PWR1. È il primo numero reale, non più un limite prudenziale preso a prestito dal requisito.
3. Subsystem Behavior
Gli stati del sottosistema Alimentazione, con le transizioni innescate da eventi (carica, soglie di batteria).
package SubsystemBehavior {
state def StatoAlimentazione {
state scaricaDeepSleep;
state scaricaAttivo;
state batteriaBassa;
state inCarica;
transition first scaricaDeepSleep accept wakeUp then scaricaAttivo;
transition first scaricaAttivo accept cicloCompletato then scaricaDeepSleep;
transition first scaricaDeepSleep accept livelloSottoSoglia then batteriaBassa;
transition first scaricaAttivo accept livelloSottoSoglia then batteriaBassa;
transition first batteriaBassa accept ciclo then scaricaDeepSleep;
transition first scaricaDeepSleep accept usbCollegato then inCarica;
transition first inCarica accept caricaCompletata then scaricaDeepSleep;
}
}

Il codice sopra è la versione compatta del diagramma: gli stessi cinque stati, le stesse transizioni, scritte come testo invece che disegnate a mano.
4. Subsystem Parameters
Ora possiamo ricalcolare il consumo con numeri reali invece che con il limite massimo del requisito.
| Componente | Corrente di riposo |
|---|---|
| PMIC | 12 µA |
| Regolatore di tensione | 8 µA |
| Fuel gauge | 5 µA |
| Totale sottosistema Alimentazione | 25 µA |
A questo si aggiunge la corrente di riposo di MCU, sensori e display (gli altri blocchi, alimentati ma non attivi) — nell’ordine di altri 10 µA complessivi secondo i datasheet dei componenti scelti nella serie ESP32 già pubblicata. Corrente di sleep totale realistica: ≈ 35 µA, non i 50 µA prudenziali usati nel calcolo di sistema. È questo il numero che porteremo nel prossimo articolo, a livello di configurazione integrata, per ricalcolare l’autonomia con dati reali.
Cosa segue
Un solo sottosistema modellato in dettaglio (gli altri quattro seguirebbero lo stesso schema, in parallelo, con team diversi). L’ultimo passo del Solution Domain è integrare tutto: la configurazione di sistema, dove verifichiamo la compatibilità delle interfacce, il comportamento end-to-end, e ricalcoliamo l’autonomia con i numeri reali appena trovati. Si chiude con Magic Grid 5: System Configuration.
