velxio/test/test_circuit/plan/phase_3_passives.md

22 lines
816 B
Markdown
Raw Normal View History

feat: electrical simulation via ngspice-WASM (eecircuit-engine) Adds full SPICE-accurate electrical simulation to Velxio, behind a lazy- loaded ⚡ toolbar toggle. Arduino / ESP32 / RP2040 sketches now co-simulate with real analog behaviour: correct voltages on wires, real I–V curves on LEDs, working potentiometers, NTC thermistors read by analogRead(), PWM driving RC filters, transistors, op-amps, diodes, MOSFETs, etc. Engine: eecircuit-engine (ngspice compiled to WebAssembly). Main bundle stays at 2.4 MB; the 20 MB SPICE chunk only loads when the user activates electrical mode. Disabled at build time via VITE_ELECTRICAL_SIM=false. Frontend additions: - simulation/spice/: SpiceEngine wrapper + lazy entry, NetlistBuilder with UnionFind over wires, componentToSpice mapping (24 metadataIds incl. real part numbers: 2N2222, 2N3055, BC547, IRF540, 2N7000, 1N4148, 1N4007, 1N4733, LEDs, NTC, op-amp ideal), CircuitScheduler with debounced coalescing, AVRSpiceBridge for quasi-static co-simulation. - store/useElectricalStore: Zustand slice, feature-flag aware. - components/analog-ui/: ⚡ toolbar toggle + SVG voltage overlay. - components/components-instruments/: Voltmeter, Ammeter probes. - 62 tests (spice-*, netlist-builder, component-to-spice, instruments). Sandbox (test/test_circuit/): 47-test validation sandbox that proved the approach (hand-rolled MNA baseline + ngspice pipeline) before porting to the app. Kept as reference. Docs: docs/wiki/circuit-emulation-*.md (13 engineering pages covering architecture, solvers, components, AVR bridge, gotchas, performance, integration plan, API reference, appendix) + electrical-simulation- user-guide.md (end-user facing). Reference plan: test/test_circuit/plan/phase_8_velxio_implementation.md Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 19:11:54 +07:00
# Fase 3 — Componentes pasivos
## Tests planificados
1. **Divisor de voltaje**`R1=1k, R2=2k, V=9V``V_out = 9 · 2k/(1k+2k) = 6 V`
2. **Ley de Ohm**`R=220, V=5V``I = 5/220 = 22.7 mA`
3. **Serie / paralelo** — 3 resistencias en paralelo: `R_eq = R/n`
4. **RC charging**`R=10k, C=100µF, V=5V``V(τ) = 5 · (1 1/e) ≈ 3.16 V` en `t=1s`
5. **Filtro pasa-bajos RC** — respuesta escalón
6. **Potenciómetro** — wiper al 50 % con `R_pot=10k, V=5V` → salida 2.5 V
7. **Termistor NTC (10k, β=3950)**`R(25°C)=10k`, `R(50°C)≈3.6k`, `R(0°C)≈27.3k`
## Criterios de aceptación
- Error < 0.5 % en DC
- Error < 2 % en el paso transitorio a `t = τ`
## Archivos
- `test/passive.test.js` — casos arriba
- `test/transient_rc.test.js` — respuesta RC con varios `dt`