fa8a65f687
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>
217 lines
8.6 KiB
Plaintext
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
|