Files
AR-Autopilot/tools/spice/4_nmea2000_can.cir
T
alro65 fa8a65f687 feat: LTspice SPICE netlists for all hardware subcircuits
Four .cir behavioral simulations ready to open in LTspice via File→Open:
  1_buck_chain.cir      — dual MP2338 12V→5V→3.3V, verifies Rfb math + soft-start
  2_output_stage.cir    — PC817 + IRLML6344 isolated output (inverted logic confirmed)
  3_analog_input.cir    — analog input conditioning; flags ADC overvoltage on IN-BAT/WATER/OILP
  4_nmea2000_can.cir    — MCP2562T CAN transceiver, two-node NMEA2000 bus, T-line model

CRITICAL finding in 3_analog_input.cir: R_high=10K + R_low=15K gives 4.3V
at ESP32 ADC when measuring a 12V battery — exceeds 3.3V limit. Fix: use
R_high=100K (same as IN-RPM, which is correctly designed at 3.06V @ 14.4V).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 09:59:50 -04:00

217 lines
8.6 KiB
Plaintext

* =======================================================================
* AR-Autopilot — Interfaz NMEA 2000 / CAN Bus
* Archivo: 4_nmea2000_can.cir
* Tarjetas: Ambas (Modulo ESP32+CAN+RS485 y Modulo compacto)
*
* CIRCUITO:
*
* ESP32 GPIO23 (TXD) ──── MCP2562T TXD ───┐
* ESP32 GPIO21 (RXD) ──── MCP2562T RXD ───┤
* 3.3V ────────────────── MCP2562T VIO ───┤ (nivel logico 3.3V)
* 3.3V ────────────────── MCP2562T VDD ───┤ (alimentacion)
* GND ─────────────────── MCP2562T GND ───┤
* GND/3.3V ────────────── MCP2562T STBY ──┤ (0=activo, 1=standby)
* │
* MCP2562T CANH ──[R24=120Ω/2]──┬── CANH BUS (NMEA2000)
* MCP2562T CANL ──[R24=120Ω/2]──┴── CANL BUS (NMEA2000)
* │
* [SP0502BAHTG] (proteccion ESD)
* │
* RELAY K1/K2 ── selecciona si es nodo terminal
*
* NMEA 2000 = CAN 2.0B a 250 kbps, maximo 50 nodos, longitud max 200m
*
* COMO USAR EN LTSPICE:
* Ver: V(canh) y V(canl) → formas de onda diferencial del bus CAN
* V(can_diff) = V(canh)-V(canl) → tension diferencial
* V(rxd_esp32) → senal recibida por el ESP32
* =======================================================================
.title AR-Autopilot NMEA2000 CAN Interface MCP2562T
* -----------------------------------------------------------------------
* ALIMENTACION
* -----------------------------------------------------------------------
V33 V33 GND 3.3V
* -----------------------------------------------------------------------
* ESP32 TRANSMISOR (GPIO23 generando tramas CAN)
* -----------------------------------------------------------------------
* Simulamos 3 bits CAN: dominante(0) y recesivo(1)
* CAN 250kbps → bit time = 4us
* Secuencia: idle(1) → start_bit(0) → data(1,0,1) → idle(1)
Vtxd TXD_ESP GND PWL(
+ 0 3.3
+ 4u 3.3
+ 4.1u 0
+ 8u 0
+ 8.1u 3.3
+ 12u 3.3
+ 12.1u 0
+ 16u 0
+ 16.1u 3.3
+ 20u 3.3
+ 20.1u 3.3
+ 40u 3.3)
* -----------------------------------------------------------------------
* MCP2562T-E_MF — CAN FD TRANSCEIVER (modelo comportamental)
* -----------------------------------------------------------------------
* Especificaciones clave:
* VIO: 1.8V a 5.5V (compatible 3.3V del ESP32) ✓
* VDD: 5V (puede usar 3.3V con limitaciones de velocidad)
* CANH dominant: VDD - 1.2V (con VDD=3.3V: CANH=2.1V)
* CANL dominant: 0.9V
* CANH recessive: VDD/2 = 1.65V (bus flotante en recesivo)
* Velocidad: hasta 8 Mbps (CAN FD) — usamos 250kbps para NMEA2000
*
* MODO DOMINANTE (TXD=0): CANH=3.5V, CANL=1.5V, Vdiff=2.0V
* MODO RECESIVO (TXD=1): CANH=CANL=2.5V, Vdiff=0V
*
* Fuentes behaviorales que modelan el driver de salida:
* CANH driver: en dominante sube a ~3.5V, en recesivo va a 2.5V (resistencia de pullup)
Ecanh CANH_DRV GND VALUE={
+ IF(V(TXD_ESP) < 1.65,
+ 3.5,
+ 2.5) }
* CANL driver: en dominante baja a ~1.5V, en recesivo va a 2.5V
Ecanl CANL_DRV GND VALUE={
+ IF(V(TXD_ESP) < 1.65,
+ 1.5,
+ 2.5) }
* Resistencia de salida del driver (impedancia de salida del transceptor)
Rout_h CANH_DRV CANH_IC 50
Rout_l CANL_DRV CANL_IC 50
* -----------------------------------------------------------------------
* CONDENSADORES DE DESACOPLO (C18=4.7uF, C20=100nF, C21=4.7uF en tu esquema)
* -----------------------------------------------------------------------
C18 V33 GND 4.7u
C20 V33 GND 100n
C21 V33 GND 4.7u
* -----------------------------------------------------------------------
* PROTECCION ESD — SP0502BAHTG (Dual Rail-to-Rail ESD)
* -----------------------------------------------------------------------
* Dos diodos TVS de baja capacidad en cada linea CAN
* Vclamping tipico: 9V a 1A, capacidad: 0.5pF (no afecta senal CAN) ✓
.model SP0502 D(BV=6 IBV=1m Rs=0.5 Cjo=0.5p Vj=0.5)
Desd_h1 CANH_IC GND SP0502 ; CANH a GND
Desd_h2 V33 CANH_IC SP0502 ; CANH a VCC
Desd_l1 CANL_IC GND SP0502 ; CANL a GND
Desd_l2 V33 CANL_IC SP0502 ; CANL a VCC
* -----------------------------------------------------------------------
* FILTRO DE MODO COMUN (C19=10nF en tu esquema)
* -----------------------------------------------------------------------
* Filtro entre lineas CAN: reduce EMI de modo comun
* (En tu esquema aparece C19=10nF entre las dos lineas o a GND)
Ccm CANH_IC CANL_IC 10n
* -----------------------------------------------------------------------
* TERMINACION DEL BUS — R24=120Ω con RELAY K1/K2
* -----------------------------------------------------------------------
* La terminacion de 120Ω se activa cuando el nodo es el EXTREMO del bus.
* En tu esquema usas un relay (76740-3) para conmutar la terminacion.
* Esto es muy inteligente: permite cambiar la topologia sin resoldar.
*
* Estado K1/K2 = CERRADO (nodo terminal, terminacion activa):
Rterm CANH_BUS CANL_BUS 120 ; terminacion nominal NMEA2000
* Si K1/K2 = ABIERTO (nodo intermedio):
* Descomenta para simular sin terminacion (nodo medio del bus):
* Rterm_open CANH_BUS CANL_BUS 100Meg ; sin terminacion
* -----------------------------------------------------------------------
* CABLE DEL BUS NMEA 2000 (impedancia de linea 120Ω, longitud 5m tipica)
* -----------------------------------------------------------------------
* Modelo de linea de transmision (T-line)
* Impedancia caracteristica: 120Ω (especificacion NMEA 2000)
* Velocidad de propagacion: ~200 m/us para cable par trenzado
* Retardo para 5m: td = 5m / (200m/us) = 25ns
T1 CANH_IC CANL_IC CANH_BUS CANL_BUS Zo=120 Td=25n
* -----------------------------------------------------------------------
* SEGUNDO NODO CAN EN EL BUS (simula otro instrumento NMEA2000)
* -----------------------------------------------------------------------
* Generador de tramas del segundo nodo (simula un GPS o compass NMEA2000)
Vtxd2 TXD2 GND PWL(
+ 0 3.3
+ 20u 3.3
+ 20.1u 0
+ 24u 0
+ 24.1u 3.3
+ 28u 3.3
+ 28.1u 0
+ 32u 0
+ 32.1u 3.3
+ 40u 3.3)
Ecanh2 CANH2_DRV GND VALUE={IF(V(TXD2) < 1.65, 3.5, 2.5)}
Ecanl2 CANL2_DRV GND VALUE={IF(V(TXD2) < 1.65, 1.5, 2.5)}
Rout_h2 CANH2_DRV CANH_BUS 50
Rout_l2 CANL2_DRV CANL_BUS 50
* -----------------------------------------------------------------------
* RECEPTOR (MCP2562T → ESP32 RXD)
* -----------------------------------------------------------------------
* El receptor compara CANH-CANL:
* Vdiff > 0.9V → dominante → RXD = 0 (LOW al ESP32)
* Vdiff < 0.5V → recesivo → RXD = 1 (HIGH al ESP32)
* Histeresis: 200mV
Erxd RXD_ESP GND VALUE={
+ IF(V(CANH_BUS) - V(CANL_BUS) > 0.9,
+ 0,
+ 3.3) }
* -----------------------------------------------------------------------
* ANALISIS DE TENSION DIFERENCIAL
* -----------------------------------------------------------------------
* Tension diferencial del bus para visualizar en graficas:
Ediff CAN_DIFF GND VALUE={V(CANH_BUS) - V(CANL_BUS)}
* -----------------------------------------------------------------------
* MEDICIONES AUTOMATICAS
* -----------------------------------------------------------------------
.meas TRAN Vdiff_dom MAX V(can_diff) FROM 5u TO 10u
.meas TRAN Vdiff_rec MIN V(can_diff) FROM 10u TO 15u
.meas TRAN Vcanh_dom AVG V(canh_bus) FROM 5u TO 9u
.meas TRAN Vcanl_dom AVG V(canl_bus) FROM 5u TO 9u
* -----------------------------------------------------------------------
* DIRECTIVAS DE SIMULACION
* -----------------------------------------------------------------------
* 40us = 10 periodos de bit a 250kbps
.tran 0 40u 0 1n
.options reltol=0.001
* -----------------------------------------------------------------------
* VALORES ESPERADOS NMEA 2000 (CAN 2.0B a 250kbps)
* -----------------------------------------------------------------------
* En modo DOMINANTE (bit=0):
* V(canh_bus) = 3.5V ± 0.5V ✓ (especificacion: 2.75V min)
* V(canl_bus) = 1.5V ± 0.5V ✓ (especificacion: 2.25V max)
* V(can_diff) = 2.0V ± 0.5V ✓ (especificacion: 1.5V min)
*
* En modo RECESIVO (bit=1):
* V(canh_bus) = V(canl_bus) = 2.5V (terminado con 120Ω)
* V(can_diff) = 0V ± 50mV
*
* LONGITUD MAXIMA DEL BUS:
* A 250kbps, td_max = 5% del bit time = 200ns
* Longitud max = 200ns * 200m/us = 40m (backbone)
* Stubs maximos: 0.3m (troncal principal) → Micro-C connectors
*
* IMPEDANCIA DE TERMINACION:
* 2 terminaciones de 120Ω en paralelo = 60Ω (carga del bus)
* Con VDD=3.3V: corriente de bus en dominante = 2V / 60Ω = 33mA (OK ✓)
.backanno
.end