Skip to the content
PCBKitNew board
4 layers76 × 56 mmCan node, the printed circuit board in 3D

PCB Project

Size
76 × 56 mm
Copper layers
4
Thickness
1.6 mm
Parts
64
Nets
47
Pads
198
Tracks, vias
336, 98
Pours
4
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
15 Oct 2026
Updated
15 Oct 2026

Overview

Can node is an open-source printed circuit board by twenty-seven27, from the twenty-seven27/CAN-NODE-BOARD repository on GitHub. It is a 4-layer board of 76 × 56 mm with 64 parts on 47 nets, routed with 336 tracks and 98 vias.

It is built around the STM32G431KBT6, TCAN1042VDRQ1 and AP63205WU, with the AP2112K-3.3, AO3407A and BZT52C12 among its other parts. Its parts include 20 capacitors, 15 resistors, 10 connectors, 4 ICs and 4 diodes. It belongs with the STM32 boards of this library.

Main components

7

README

README.md

CAN Node Board — rev A

One custom PCB that replaces the Arduino Mega + CAN Bus Shield stack on every node of a 4WD autonomous parking robot. The robot's three nodes (sensor, receive, motor) talk over CAN; each one now runs the same board and the same firmware image, and a single resistor tells the board which node it is.

3D render

Input6–16 V (2S/3S LiPo, 6–8 AA, 12 V bench), reverse-polarity protected, TVS clamped
Rails5 V / 2 A synchronous buck (servo, ultrasonic sensor, CAN transceiver) · 3.3 V LDO (logic)
MCUSTM32G431KBT6 — Cortex-M4F 170 MHz, FDCAN, hardware quadrature-encoder timers
CANTCAN1042V transceiver, 5 V bus side / 3.3 V logic (VIO), 500 kbit/s classic CAN
Board76 × 56 mm, 4 layers (signal / GND / 3.3 V / signal), 4 × M3 holes
I/OServo, HC-SR04 ultrasonic, 2 × wheel encoder, motor driver (PWM + DIR × 2), UART, 2 spare GPIO, SWD

The feature worth pointing out: one PCB, one firmware image, every node

PB0 (an ADC input) sits in the middle of a divider: a fixed 10 kΩ pull-up (R4) and a role resistor R5 to ground. At boot the firmware averages eight ADC samples, picks the nearest bin, and from that sets its CAN IDs, acceptance filters and which peripherals it starts.

R5 fittedV(ROLE)Role
0 Ω0.00 VSensor node (ultrasonic + servo)
3.3 kΩ0.82 VReceive node
10 kΩ1.65 VMotor node (encoders + motor driver)
33 kΩ2.53 VSpare
not fitted3.30 VSafe mode: CAN listen-only, all outputs off
  • One pin carries five roles. Bins are about 0.8 V apart, so 5 % resistors can never land in the wrong one.
  • Nothing to bump or misconfigure later, unlike a DIP switch, and it costs one 0603 part.
  • An unfitted board fails safe: it can never drive the motors by accident.
  • The same idea runs through the rest of the board: the transceiver's STB pin is pulled high, so a node stays off the bus until its firmware is ready, and CAN termination is a pair of solder jumpers (JP1 + JP2, split 2 × 60.4 Ω + 4.7 nF) closed only on the two end-of-bus boards. Every board is identical until it is configured.

The role table is printed on the back silkscreen, so the board documents itself.

Block diagram

mermaid
flowchart LR
  BUS["Bus connectors J1/J2<br/>VBAT · GND · CAN-H · CAN-L<br/>(daisy-chained)"] -->|VBAT| PG["Reverse-polarity P-FET Q1<br/>+ Zener D1, TVS D2"]
  PG -->|VIN_PROT| BUCK["5 V buck U1<br/>AP63205, 2 A"]
  BUCK -->|+5V| LDO["3.3 V LDO U2<br/>AP2112K-3.3"]
  BUCK -->|+5V| IO
  BUS <-->|CAN-H/L| XCVR["CAN transceiver U4<br/>TCAN1042V"]
  XCVR --- TERM["Split termination<br/>JP1/JP2, end nodes only"]
  XCVR <-->|TX/RX, STB| MCU["STM32G431KBT6 U3<br/>FDCAN · TIM encoders · ADC"]
  LDO -->|+3V3| MCU
  ROLE["Role select<br/>R4 + R5 → PB0"] --> MCU
  MCU --> IO["Headers: servo, ultrasonic,<br/>encoders, motor, UART, AUX"]
  SWD["SWD J10 (ST-Link)"] --- MCU

Design decisions

MCU and pins. The STM32G431 has FDCAN built in (no separate CAN controller as on the MCP2515 shield) and timers with a hardware quadrature-encoder mode for the wheel encoders. On the 32-pin package, FDCAN TX only exists on PA12, which is also USB D+, so CAN and USB cannot both be used. The board drops USB and is programmed over SWD (ST-Link or a Nucleo's built-in one), with a 3-pin UART header for serial debug. PB8 doubles as BOOT0 and is pulled low, so the board always boots from flash.

PinFunction
PA11 / PA12FDCAN1 RX / TX
PA13 / PA14SWDIO / SWCLK
PA2 / PA3USART2 TX / RX (debug)
PB0ADC1_IN15, role select
PA0TIM2_CH1 input capture (ultrasonic echo, 32-bit timer)
PA1Ultrasonic trigger
PB4TIM16_CH1 servo PWM, 50 Hz
PA8 / PA9TIM1_CH1 / CH2 motor PWM, ~20 kHz
PA4 / PA5Motor direction
PB6 / PB7TIM4 encoder mode (left)
PA6 / PA7TIM3 encoder mode (right)
PF0 / PF18 MHz crystal (HSE)
PA10Status LED
PA15Transceiver STB
PB3 / PB5Spare GPIO on the AUX header

The servo and the motors run on different timers because channels on one timer share a period: a servo needs 50 Hz, a motor driver about 20 kHz.

Clock. CAN bit timing needs a tighter clock than the internal RC oscillator gives, so an 8 MHz crystal drives the PLL. Load capacitors: C = 2 × (C_L − C_stray) = 2 × (10 − 3) pF ≈ 15 pF; match them to the crystal actually fitted.

Power. Q1 (AO3407A, −30 V, V_GS ±20 V) protects against a reversed battery with almost no voltage drop; the body diode conducts first, then the gate (pulled to ground through R1) turns the FET fully on. D1 clamps V_GS to 12 V and D2 (SMAJ18CA) clamps input transients from the motors. The buck uses the datasheet's typical-application values (10 µF in, 4.7 µH, 2 × 22 µF out, 100 nF bootstrap). C1 (47 µF) damps the input cable's inductance and C17 (220 µF) sits at the servo header to absorb stall-current spikes. VDDA is fed through a ferrite bead because the role pin is an analog measurement.

Interfaces. The HC-SR04 echo is a 5 V signal, divided to 3.33 V by R8/R9 (1 k / 2 k). Encoders are powered at 3.3 V with 10 kΩ pull-ups, which suits open-collector Hall encoders; if yours need 5 V, check that their outputs stay within the MCU's input limits. The motor header supplies 5 V for driver logic and takes 3.3 V PWM/DIR.

Layout. Four layers: In1 is an unbroken ground plane under everything, In2 is the 3.3 V plane, and the outer layers carry signals with ground pours. Every surface-mount ground and 3.3 V pad has its own via to its plane. The buck's input capacitor sits right next to its VIN and GND pins and the switch node is a short, wide copper run to the inductor. Power nets use 0.6–0.8 mm tracks, CAN-H/L 0.25 mm, signals 0.2 mm, with 0.2 mm clearance and 0.6/0.3 mm vias, all within standard 4-layer capabilities at JLCPCB and PCBWay.

Verification status

  • Schematic connectivity checked against the intended netlist (all 43 nets match); every power-input net has a driver or power flag.
  • PCB DRC (KiCad 7.0.11): 0 violations, 0 unconnected pads, 0 footprint errors.
  • Not yet fabricated or tested. Bring-up plan for the first boards:
    1. Check for shorts between VBAT, 5 V, 3.3 V and GND before applying power.
    2. Power from a current-limited bench supply (12 V, 100 mA limit) and check 5 V and 3.3 V.
    3. Flash a blink + role-readout firmware over SWD; confirm the status LED blinks the role number.
    4. Two boards on a short bus with JP1/JP2 closed at each end: send and receive frames at 500 kbit/s.
    5. Connect the servo, sensor, encoders and motor driver one at a time.

Files

PathContents
kicad/KiCad project: schematic, PCB, project symbol library (TCAN1042V)
docs/schematic.pdfSchematic, one A3 sheet
docs/render-3d.png, render-top.png, render-bottom.pngBoard renders
docs/layout-top.png, layout-bottom.pngCopper and silkscreen plots (pours hidden)
docs/can-node.step3D model of the assembled board
fab/can-node-gerbers.zipGerbers (4 layers) + Excellon drill files, origin at the board's bottom-left corner
fab/can-node-bom.csvBill of materials (part numbers are examples; R5 is fitted per role)
fab/can-node-cpl.csvPick-and-place positions for assembly

Ordering: 4 layers, 1.6 mm FR-4, 1 oz outer copper, any surface finish. Upload can-node-gerbers.zip as-is.

Designed in KiCad 7; the project opens in KiCad 8 and 9 (KiCad offers to upgrade the file format on first save).

Top Bottom

Parts

64
QtyValueFootprintReferences
8100nCapacitor_SMD:C_0603_1608MetricC3, C8, C9, C12, C13, C16, C18, C19
810kResistor_SMD:R_0603_1608MetricR1, R3, R4, R7, R10, R11, R12, R13
4M3MountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
31kResistor_SMD:R_0603_1608MetricR2, R6, R8
31uCapacitor_SMD:C_0603_1608MetricC6, C7, C11
215pCapacitor_SMD:C_0603_1608MetricC14, C15
222uCapacitor_SMD:C_1206_3216MetricC4, C5
260.4Resistor_SMD:R_0603_1608MetricR14, R15
2BUSConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ1, J2
2TERMJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP1, JP2
110uCapacitor_SMD:C_1206_3216MetricC2
1220uCapacitor_SMD:CP_Elec_6.3x7.7C17
12kResistor_SMD:R_0603_1608MetricR9
14.7nCapacitor_SMD:C_0603_1608MetricC20
14.7uInductor_SMD:L_Bourns_SRN6045TAL1
14.7uCapacitor_SMD:C_0603_1608MetricC10
147uCapacitor_SMD:CP_Elec_6.3x7.7C1
1600RInductor_SMD:L_0603_1608MetricFB1
18MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
1AO3407APackage_TO_SOT_SMD:SOT-23Q1
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U2
1AP63205WUPackage_TO_SOT_SMD:TSOT-23-6U1
1AUXConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ9
1BLUELED_SMD:LED_0603_1608MetricD4
1BZT52C12Diode_SMD:D_SOD-123D1
1ENC_LConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ5
1ENC_RConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ6
1GREENLED_SMD:LED_0603_1608MetricD3
1MOTORConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ7
1RESETButton_Switch_SMD:SW_SPST_TL3342SW1
1R_ROLEResistor_SMD:R_0603_1608MetricR5
1SERVOConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ3
1SMAJ18CADiode_SMD:D_SMAD2
1STM32G431KBT6Package_QFP:LQFP-32_7x7mm_P0.8mmU3
1SWDConnector_PinHeader_1.27mm:PinHeader_2x05_P1.27mm_Vertical_SMDJ10
1TCAN1042VDRQ1Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU4
1UARTConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ8
1ULTRASONICConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ4

Questions

How big is the Can node PCB?

It measures 76 × 56 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Can node use?

64 parts, built around the STM32G431KBT6, TCAN1042VDRQ1, AP63205WU and AP2112K-3.3. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Can node KiCad files?

From the twenty-seven27/CAN-NODE-BOARD repository on GitHub, at the commit this page was made from: the board is can-node.kicad_pcb and its schematic can-node.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Can node design in my own project?

Its repository states no licence, so its author keeps all rights: ask twenty-seven27 before reusing the design.

Similar boards

  • 6 layers40.6 × 40.5 mmFlight Controller, the printed circuit board in 3D

    Flight Controller

    desanv01/Flight-Controller-V2

    STM32H743 controller: regulated power, signal-only ESC, neutral ArduPilot firmware, manufacturing data and engineering history.

    169 partsCERN-OHL-S-2.0
  • 2 layers45.1 × 74.3 mmCobalt X Zero, the printed circuit board in 3D

    Cobalt X Zero

    RealSynarix/Cobalt-X-Zero

    Custom Gaming Mouse

    49 partsGPL-3.0
  • 2 layers76 × 45 mmFuel center, the printed circuit board in 3D

    Fuel center

    andrew-c-tran/byteshift-fuel-center

    Automotive-grade CAN module for fuel pressure, temperature and ethanol content. AEC-qualified parts, fail-safe protocol, JLCPCB-ready.

    52 partsGPL-3.0
  • 4 layers100 × 90 mmVCU CM4, the printed circuit board in 3D

    VCU CM4

    NTURacingTeam/nturt_kicad_EP7

    461 parts
  • 4 layers100 × 82 mm6S BMS, the printed circuit board in 3D

    6S BMS

    NTURacingTeam/nturt_kicad

    kicad files

    228 parts4
  • 4 layers65 × 56 mmCanary hat, the printed circuit board in 3D

    Canary hat

    danbrunski/canary

    Four 25 F cells in series for CANary-PWR's LTC3350 hold-up, on a lead (design record: docs/CANary-PWR-Spec.md §P4). The board has no active parts: four cells, an NTC, two Kelvin net ties and a Micro-Fit 2 × 5 header.

    66 parts
  • 4 layers125 × 92 mmCarradio peripheral rev03, the printed circuit board in 3D

    Carradio peripheral rev03

    gschuurman/android_vendor_gschuurman_vehicle_interfaces

    vehicle interfaces for android automotive for a custom headunit

    269 parts
  • 4 layers88.1 × 59.4 mmChromapi motherboard v1, the printed circuit board in 3D

    Chromapi motherboard v1

    Mowibox/chromapi_motherboard

    Raspberry Pi control HAT dedicated to the quadruped robot Chromapi.

    139 parts2Apache-2.0