Skip to content

NMEA2000 CAN Interface

Circuit Overview

This circuit provides a galvanically isolated NMEA2000 CAN interface between the ESP32-S3 microcontroller and the vessel's NMEA2000 backbone. Isolation matters on marine networks: every NMEA2000 device shares a single bus, and devices powered from different battery banks can have several volts of ground offset between their local ground rails. Without isolation those ground offsets push current through the CAN transceiver's GND pin, distorting the differential signal and shortening transceiver life.

Two galvanic boundaries are present in the design, and it is important not to confuse them:

Domain Ground reference Power source
Main board logic side GND (regulator-internal ground, common with battery negative through the INA228 Kelvin path) 3.3 V from TLV62569
Boat-side CAN domain ISOLGND_CAN (vessel NMEA2000 backbone ground) 5 V from MPM3610 buck, fed by BOAT_12V (NMEA2000 connector power)

The only galvanic isolation in the circuit is across the ISO1050DUB transceiver (2.5 kVRMS). The MPM3610 buck converter is non-isolated — its input ground (PGND pins 12/13/14) and output ground (AGND pin 3) are both tied to ISOLGND_CAN. The "ISOL" in ISOLGND_CAN refers to the fact that this ground node is isolated from main board GND by the ISO1050, not by anything the MPM3610 is doing. The MPM3610 simply steps boat 12 V down to 5 V, on the boat-ground side of the barrier.


Power Supply Section

Input Path

Component Function Notes
BOAT_12V (J2 / NMEA2000 connector pin 2) Raw vessel 12 V from NMEA2000 backbone Nominal 9–16 V operating
D16 — 1N5819WS (40 V, 1 A Schottky, SOD-323) Series reverse-polarity protection Vf ≈ 0.3 V at typical 20–30 mA
D17 — SMBJ16CA (bidirectional TVS, SMB) Transient surge clamp Working voltage 16 V, breakdown 17.8 V min, clamp ≈ 26 V @ 1 A. Connected from MPM3610 IN to ISOLGND_CAN.
C7 — 10 µF (0603) MPM3610 input bulk filter Located close to U11 IN pin

D17 is placed after D16 (between D16 cathode and ISOLGND_CAN), so the TVS protects the MPM3610 input from network-side transients. Placing the TVS before D16 would expose D16 to high reverse voltage during a negative surge.

Why MPM3610 (and why not LMR36510 again)

The board already uses an LMR36510 buck on the battery side to make the 5 V system rail. A second LMR36510 could in principle have replaced the MPM3610 here — both are TI-grade, wide-Vin step-down regulators. The MPM3610 was selected because:

  1. Integrated inductor. The MPM3610 is a power module with the inductor sealed inside the QFN-20 package, eliminating one passive and one critical layout loop. On a board this dense, that is a meaningful PCB savings.
  2. Lower Vin maximum (21 V) is fine here. The CAN power input is the NMEA2000 12 V backbone, never the alternator B+ rail. The wider-Vin LMR36510 would be wasted headroom.
  3. 2 MHz switching frequency vs. the LMR36510's 400 kHz lets the MPM3610 hit similar efficiency with a much smaller output capacitor.

MPM3610 (U11) Configuration

Parameter Value Source
Manufacturer Monolithic Power Systems (MPS) datasheet
Family MPM3610A — synchronous buck module with integrated inductor datasheet
Package QFN-20, 3 × 5 × 1.6 mm datasheet
Vin range 4.5 V – 21 V datasheet
Max output current 1.2 A continuous datasheet
Switching frequency 2 MHz typical datasheet
Vfb (internal reference) 0.798 V typical (786–810 mV at 25 °C) datasheet
Topology Non-isolated synchronous buck datasheet

Output Voltage Setting

Feedback divider:

  • R41 = 100 kΩ 1% (FB to OUT)
  • R49 = 19.1 kΩ 1% (FB to ISOLGND_CAN)

VOUT = VFB × (1 + R41 / R49) = 0.798 × (1 + 100 / 19.1) = 4.97 V (nominal 5 V on the isolated rail).

Worst-case Vref tolerance (±1.5%) and ±1% on both divider resistors give Vout window ≈ 4.83 V – 5.11 V, all within the ISO1050 VCC2 rated range (3 V – 5.5 V).

Output Stage and Local Decoupling

Component Function
C36 — 22 µF, 16 V Bulk output cap at MPM3610 OUT (pins 7/8/9/20)
C35 — 1 µF High-frequency bypass close to OUT
ISOLGND_CAN Output ground = boat-side ground reference for the ISO1050 secondary

Enable Path

The MPM3610 EN pin (U11 pin 17) is driven through R40 = 100 kΩ from the MPM3610 input net (D16 cathode). This forms a passive enable — whenever input power is present, EN is pulled up and the buck runs. No host control of EN is required, which is correct for a network-side power supply that must come up whenever the vessel powers the NMEA2000 bus.

Note: the original NMEA2K documentation referenced "FB_MPM divider R40 / R17" — that was wrong. R17 is part of the AIN1 (alternator current) divider on the main analog ground, completely unrelated to the MPM3610. The actual feedback network is R41 / R49 on the FB_MPM net. Updated 2026-05-23.


CAN Transceiver — ISO1050DUB

Why an isolated transceiver

A non-isolated CAN transceiver (e.g., TJA1051) is electrically simpler and cheaper, but it requires the CAN ground and the host-MCU ground to be at the same potential. On a boat that assumption is broken: the bow-thruster battery may sit 200 mV below the house bank ground, and that 200 mV is now common-mode at the transceiver. ISO1050 places a 2.5 kVRMS capacitive barrier between primary and secondary, decoupling those ground domains while still passing the digital TX/RX data.

Pin Configuration

Pin Name Net Function
1 VCC1 3V3 Logic-side supply
2 RXD GPIO16 (ESP32) Receive data to MCU
3 TXD GPIO17 (ESP32) Transmit data from MCU
4 GND1 GND (main board) Logic-side ground
5 GND2 ISOLGND_CAN Bus-side ground
6 CANL CANN Differential low
7 CANH CANP Differential high
8 VCC2 5 V from MPM3610 Bus-side supply

Pins 1–4 reference main board GND. Pins 5–8 reference ISOLGND_CAN. The barrier between them sustains 2.5 kVRMS for 60 seconds (datasheet) and provides 50 kV/µs minimum CMTI (common-mode transient immunity).

Why the GPIO assignment matters

The ESP32-S3 has a flexible IO matrix — almost any GPIO can host UART/CAN peripherals. GPIO16 and GPIO17 were chosen because they fall in the bottom block of pins on the WROOM-1 module, physically adjacent to the ISO1050 placement on the PCB. This keeps the digital traces between the MCU and the transceiver short, which matters for CAN signal integrity at higher bit rates (250 kbps for NMEA2000).


CAN Bus Physical Interface

Connector (U18)

The NMEA2000 micro-C connector is broken out at U18 as a 5-pin field interface:

Pin Signal Net
1 Shield ISOLGND_CAN
2 NET_S (+12 V) BOAT_12V
3 NET_C (GND) ISOLGND_CAN
4 NET_H CANP
5 NET_L CANN

Shield and NET_C both terminate to ISOLGND_CAN — this is conventional NMEA2000 practice. The shield carries no signal current; it is bonded only at one point to drain ESD.

Termination

NMEA2000 specifies 120 Ω termination at both ends of the backbone. The board carries a single 120 Ω resistor (R37) plus a jumper (J15) to enable it. Install the J15 jumper only if this device is physically at one end of the bus. In a typical installation, the backbone is already terminated at both ends by the NMEA2000 terminator plugs, and this board joins the middle of the backbone via a T-piece — in that case leave J15 open.


Power Consumption

Standby (CAN idle, no traffic)

Component Current at boat-12V side
MPM3610 quiescent (VFB=1V, VAAM=0.5V) 200 µA (datasheet typical)
ISO1050 (both sides idle) ~3 mA from VCC1 + ~5 mA from VCC2 → ~25 mA-equivalent reflected to boat 12 V
Total at 12 V ~20–25 mA

The dominant current is the ISO1050 itself, not the buck converter. Putting the ISO1050 into shutdown via its EN pin would save ~80% of this — currently unimplemented (see Future Plans).

Active (250 kbps NMEA2000 traffic)

ISO1050 VCC2 supply current rises to 20–25 mA during dominant bit transmission. Buck draws an additional 10–15 mA at boat 12 V. Total boat-side draw ≈ 30 mA.

Sleep

The MPM3610 EN pin is currently tied to its own input through R40, so the buck cannot be shut down by software. To enable a deep-sleep mode for the CAN interface, EN would have to be re-routed to an ESP32 GPIO; this requires a board respin.


Circuit Operation

Power Conversion Flow

  1. BOAT_12V (from NMEA2000 connector pin 2) → D16 reverse-polarity diode
  2. → D17 TVS clamp to ISOLGND_CAN
  3. → MPM3610 IN with C7 input cap
  4. MPM3610 generates 5 V on its OUT pins, referenced to ISOLGND_CAN
  5. C35 + C36 filter the 5 V rail
  6. 5 V powers ISO1050 VCC2

The buck does not provide isolation. ISOLGND_CAN connects directly back through the buck to BOAT_12V's negative terminal at U18 pin 3 (NET_C).

CAN Data Flow

  1. Transmit: ESP32 GPIO17 → ISO1050 TXD (pin 3) → barrier → CANH/CANL drivers → NMEA2000 bus
  2. Receive: NMEA2000 bus → CANH/CANL receiver → barrier → RXD (pin 2) → ESP32 GPIO16

The barrier is bidirectional and crossed once per direction. Propagation delay is ~150 ns through the ISO1050 — far less than a single 4 µs CAN bit at 250 kbps.

Ground Domains

  • Main board GND: referenced to regulator battery negative through the INA228 Kelvin path
  • ISOLGND_CAN: referenced to vessel NMEA2000 backbone NET_C
  • Isolation barrier: inside the ISO1050 only

Even in a worst-case ground fault that places ISOLGND_CAN several volts away from main GND, the ISO1050 absorbs the common-mode shift and the digital RX/TX signaling to the ESP32 is unaffected.


Key Specifications

Parameter Value
Input voltage 9–16 V nominal from NMEA2000 backbone
Isolation rating 2.5 kVRMS per ISO1050DUB datasheet
CAN standard NMEA2000 (CAN 2.0 B at 250 kbps)
Connector Micro-C / DeviceNet style at U18
Termination Selectable 120 Ω via J15
Idle current at 12 V ~20–25 mA
Active current at 12 V ~30 mA

Component Summary

Designator Part Function
U7 ISO1050DUB Galvanically isolated CAN transceiver (2.5 kVRMS)
U11 MPM3610AGQV-P Non-isolated 2 MHz buck module, 12 V → 5 V on boat-ground side
U18 Micro-C connector breakout NMEA2000 backbone interface
D16 1N5819WS Reverse-polarity Schottky
D17 SMBJ16CA Bidirectional TVS (16 V working, ~26 V clamp)
R37 120 Ω Selectable bus termination
R40 100 kΩ MPM3610 EN pull-up
R41 / R49 100 kΩ / 19.1 kΩ MPM3610 FB divider (sets 5.0 V)
C7 10 µF MPM3610 input bulk
C35 / C36 1 µF / 22 µF MPM3610 output filter
J15 Jumper Termination enable

Future Plans

  • Software-controlled CAN shutdown. Re-route MPM3610 EN to an ESP32 GPIO so the entire CAN subsystem can be powered down during deep sleep, saving ~25 mA of boat-side current. Requires PCB respin.
  • Optional second termination resistor footprint. Currently only one 120 Ω termination is fitted. Some installers prefer to install both 60 Ω end terminations on the same device for short backbones. Adding a second optional resistor footprint would simplify those installations.