* ======================================================================= * 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