Skip to the content
2 layers89.4 × 66.9 mmE foc, the printed circuit board in 3D

hardware to be used with https://github.com/embedded-pro/e-foc

Size
89.4 × 66.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
186
Nets
128
Pads
510
Tracks, vias
1,407, 417
Pours
703
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
4 Jun 2026
Updated
21 Jun 2026

Overview

E foc is an open-source printed circuit board by embedded-pro, from the embedded-pro/e-foc-hardware repository on GitHub. It is a 2-layer board of 89.4 × 66.9 mm with 186 parts on 128 nets, routed with 1,407 tracks and 417 vias.

It is built around the SN65HVD230D, TLV9062ID and TLV9064ID, with the FAN7888M, LM5164DDA and W25Q32JVSSIQ among its other parts. Its parts include 82 resistors, 36 capacitors, 10 ICs, 9 diodes and 7 connectors. It belongs with the robots and motor control boards of this library.

Main components

12

README

README.md

e-foc — Hardware

kicad-bot KiCad License

A three-phase brushless (BLDC / PMSM) motor driver board designed to run the e-foc Field-Oriented Control firmware.

This repository contains the KiCad electrical design — schematics, project configuration and (eventually) the PCB layout — for the power and signal-chain hardware that the e-foc control software targets. The microcontroller itself lives on a pluggable module; this board provides the power stage, gate drive, current sensing, protection and peripheral connectivity around it.

Scope: this repo is the hardware. For the control algorithms (Clarke/Park transforms, Space Vector Modulation, current/velocity PID loops, auto-tuning), see the firmware repository.


Highlights

  • Three-phase inverter built from three TI CSD88537ND 60 V dual NexFET™ half-bridge power blocks (one per phase) — low RDS(on), sized for a 50 V bus at 5 A.
  • FAN7888 3-phase gate driver with bootstrap high-side supply for clean, cross-conduction-protected switching.
  • Low-side shunt current sensing (0.02 Ω) on each phase, amplified and filtered through a dedicated TLV9062 / TLV9064 analog conditioning stage for the controller's ADC.
  • Wide-input switching power supply — LM5164 100 V synchronous buck plus AMS1117 linear regulators generating the +15 V gate-drive rail, +5 V and +3.3 V logic rails, with TVS bus-clamp protection (SMCJ51A).
  • CAN connectivity via an SN65HVD230 transceiver for multi-axis / networked control.
  • Non-volatile storage — 24LC04 I²C EEPROM (calibration / parameters) and W25Q32 32-Mbit SPI flash (logs / firmware assets).
  • MCU-agnostic carrier — the controller plugs in over a 24-pin (2×12) header, matching the firmware's PlatformFactory abstraction (e.g. STM32F407 or TI Tiva TM4C1294 modules).

Board architecture

The design is organised as hierarchical schematic sheets, each a self-contained functional block:

SheetFunctionKey parts
e-foc.kicad_schTop-level sheet wiring all blocks together—
power-supplyWide-input supply: gate-drive + logic rails, protectionLM5164, AMS1117-3.3, SMCJ51A (D1 bus TVS)
driverThree-phase inverter, gate drive, phase shunts, motor terminalsFAN7888, 3× CSD88537ND, 0.02 Ω shunts
adc-conditionerCurrent/voltage sense amplification & anti-alias filteringTLV9062, TLV9064
microcontroller-connector2×12 header to the MCU module + signal break-outConn_02x12
can-busCAN field-bus interfaceSN65HVD230
serial-comSerial / debug communications—
eeprom-memI²C EEPROM for calibration & parameters24LC04
flash-memSPI NOR flash for logging / assetsW25Q32JVSS

Design requirements (spec)

These are the hard design targets the board must meet — the authoritative requirements used for design review and sign-off.

#RequirementTarget
R1Input bus voltage50 V max
R2Output current5 A max continuous (DC)
R3Motor types3-phase brushless (BLDC) / PMSM, FOC control
R4PWM switching frequency50 kHz max
R5Configuration storageEEPROM available for parameters / calibration
R6Firmware-update storageExternal flash for FW update
R7Field-busCAN @ 1 Mbps max, GND present in the connector
R8PCB stack-up2 layers is sufficient
R9Position feedbackinput for encoder OR hall sensor

As-built component capability

ParameterValue
Power topology3× half-bridge (1 dual FET per phase), low-side shunt sensing
Switching devicesTI CSD88537ND, 60 V dual N-channel NexFET™ half-bridge (Q1–Q3) — 10 V margin over the 50 V bus (R1)
Bus TVS clampD1 = SMCJ51A, 51 V standoff / 1500 W (see note below)
Gate driverFAN7888, 3-phase, bootstrap high-side
Current sense0.02 Ω low-side shunt per phase + op-amp gain stage
Logic rails+3.3 V logic + gate-drive rail (FAN7888 VDD)
ProtectionTVS bus clamp (SMCJ51A), CAN ESD array, gate clamps
CommsCAN (SN65HVD230, R7), serial / debug
StorageI²C EEPROM (24LC04, R5), SPI flash (W25Q32, 32 Mbit, R6)
ControllerExternal 24-pin MCU module (STM32 / TI Tiva, via firmware abstraction)

D1 TVS sizing. The bus is 50 V max; the CSD88537ND is a 60 V FET. A standard TVS cannot both stand off 50 V and clamp below 60 V (clamp ratio ~1.5×), so SMCJ51A (Vrwm 51 V, Vbr ≥ 56.7 V, Vc ≈ 82 V) is chosen to absorb gross load-dump / inductive transients without conducting in normal operation. The 10 V FET margin against switching ringing must be held by layout — tight commutation loop, adequate bulk capacitance, and (if needed) an RC snubber — not by the TVS. Compliance with R1–R9 is confirmed during design review and bring-up.


Repository layout

text
e-foc/
├── hardware/                            # KiCad projects — one folder per board
│   ├── e-foc/                           #   main motor-driver board
│   │   ├── e-foc.kicad_pro
│   │   ├── e-foc.kicad_sch              #     top-level (root) schematic
│   │   ├── e-foc.kicad_pcb              #     PCB layout
│   │   ├── sym-lib-table
│   │   ├── components/                  #     project symbol libs (e.g. CSD88537ND)
│   │   └── schematic/                   #     hierarchical sub-sheets
│   │       ├── power-supply.kicad_sch
│   │       ├── driver.kicad_sch
│   │       └── … adc-conditioner, can-bus, encoder, eeprom-mem,
│   │             flash-mem, microcontroller-connector, serial-com
│   └── tiva-80pin-adapter/              #   EK-TM4C1294XL ↔ e-foc adapter board
│       ├── tiva-80pin-adapter.kicad_pro
│       ├── tiva-80pin-adapter.kicad_sch
│       └── tiva-80pin-adapter.kicad_pcb
├── scripts/                            # export helpers (run per board)
│   ├── export_review.py                #   review package  -> review_exports/<board>/
│   └── export_jlcpcb.py                #   fab + assembly  -> manufacturing/<board>/
└── .github/workflows/                  # CI: kicad-bot.yml (quality gate) + release.yml

Each board is a self-contained KiCad project in its own hardware/<board>/ folder — the .kicad_pro, root schematic and board share that folder (KiCad locates them by name and path). Hierarchical sub-sheets and project symbol libs are referenced by relative path within the board folder. Generated outputs are gitignored and land under review_exports/<board>/ and manufacturing/<board>/.


Getting started

This is a KiCad 10 project.

  1. Clone the repository:
    bash
    git clone https://github.com/embedded-pro/e-foc-hw.git
    cd e-foc-hw
  2. Open hardware/e-foc/e-foc.kicad_pro (or hardware/tiva-80pin-adapter/tiva-80pin-adapter.kicad_pro) in KiCad.
  3. Open the schematic editor to browse the hierarchical sheets, or the PCB editor for the board layout.

Headless checks (the same ones CI runs)

With KiCad 8+ installed you can run electrical / design-rule checks locally:

bash
kicad-cli sch erc  --output erc.json --format json hardware/e-foc/e-foc.kicad_sch
kicad-cli pcb drc  --output drc.json --format json hardware/e-foc/e-foc.kicad_pcb

Or use the export helpers (any board): python scripts/export_review.py for the e-foc board, python scripts/export_review.py --name tiva-80pin-adapter for the adapter; scripts/export_jlcpcb.py likewise for the fab/assembly package.


Continuous integration

Every push and pull request that touches a schematic or board file is checked by kicad-bot — a CI quality gate that wraps kicad-cli, KiBot, KiCost and KiDiff to run:

  • ERC / DRC verification — electrical and design-rule checks.
  • BOM availability — distributor stock / lifecycle (end-of-life) flags.
  • Visual diffs — schematic & PCB change previews on pull requests.

The workflow lives in .github/workflows/kicad-bot.yml and uploads a kicad-bot-output/ artifact (report, metrics, raw violation data).

kicad-bot is a CI guardrail, not a substitute for design review or sign-off.

To enable distributor BOM pricing/availability, add the relevant API keys as repository secrets (MOUSER_KEY, DIGIKEY_CLIENT_ID, DIGIKEY_CLIENT_SECRET).

All third-party actions are pinned to a full commit SHA (with the version in a trailing comment) for supply-chain hardening.

Releases

Releases are automated with release-please and driven by Conventional Commits (feat:, fix:, …). The flow (.github/workflows/release.yml):

  1. Commits to main keep an open release PR with the next version bump and CHANGELOG.md entries.
  2. Merging that PR cuts a GitHub Release and tag.
  3. On release, kicad-bot re-runs ERC/DRC (gating the release on a clean design), resolves the BOM, and produces Gerbers / drill / position files. These are zipped into e-foc-hw-<version>.zip and attached to the release as a downloadable fabrication package.

Version state is tracked in .release-please-manifest.json; behaviour is configured in release-please-config.json.


License

Released under the MIT License.

Parts

186
QtyValueFootprintReferences
2210kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR33, R36, R39, R42, R43, R44, R45, R48, R61, R62, R63, R64, R65, R66, R67, R68 +6
19TestPointTestPoint:TestPoint_Pad_1.0x1.0mmTP1, TP2, TP3, TP4, TP5, TP6, TP10, TP11, TP12, TP13, TP14, TP15, TP16, TP17, TP18, TP19 +3
171kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR10, R11, R12, R13, R14, R15, R34, R35, R37, R38, R40, R41, R46, R47, R52, R53 +1
8150pF,50VCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC20, C21, C22, C23, C24, C25, C26, C27
8NetTie_3_TeeNetTie:NetTie-3_SMD_Pad0.5mmNT2, NT3, NT4, NT5, NT6, NT7, NT8, NT9
6100nF,50V,X7RCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC3, C4, C7, C9, C10, C31
6200Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR19, R20, R22, R23, R26, R27
50RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR49, R79, R80, R81, R82
40.02Resistor_SMD:R_2512_6332Metric_Pad1.40x3.35mm_HandSolderR21, R24, R25, R28
4100kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR6, R30, R31, R32
4100nF,16V,X7RCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC28, C29, C35, C36
4MountingHoleMountingHole:MountingHole_3.2mm_M3_DIN965_Pad_TopBottomH1, H2, H3, H4
310Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR16, R17, R18
3100RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR55, R56, R57
3100nF,16VCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC17, C18, C19
3100nF,50V,X7RCapacitor_SMD:C_1206_3216Metric_Pad1.33x1.80mm_HandSolderC11, C12, C13
3100pF,15VCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC32, C33, C34
31N4148WDiode_SMD:D_SOD-123D3, D4, D5
32kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR58, R59, R60
3470RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR74, R76, R78
34K7Resistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR7, R8, R9
3BC847Package_TO_SOT_SMD:SOT-23W_HandsolderingQ4, Q5, Q6
3CSD88537NDPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmQ1, Q2, Q3
3LEDLED_SMD:LED_0805_2012Metric_Pad1.15x1.40mm_HandSolderD7, D8, D9
2100uF/100VCapacitor_SMD:CP_Elec_10x10.5C14, C15
22.2nF,50V,X7RCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC2, C6
260RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR50, R51
1100 uHInductor_SMD:L_7.3x7.3_H4.5L1
1100nF,100VCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC16
1124kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1
11SMB5945BT3GDiode_SMD:D_SMBD2
12.2uF,100V,X7RCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC1
122RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR69
124LC04Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU9
1280kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR2
12MResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR29
133kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR5
14.7nFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC30
14.7uF,50V,X7RCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC8
147pF,50V,X7RCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC5
150kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR4
1576kResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR3
174LVC14Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU8
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U3
1Conn_01x03Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ5
1Conn_01x05_PinConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ4
1Conn_02x06_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x06_P2.54mm_VerticalJ7
1Conn_02x12_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x12_P2.54mm_VerticalJ6
1FAN7888Package_SO:SOIC-20W_7.5x12.8mm_P1.27mmU4
1FuseFuse:Fuse_1812_4532MetricF1
1LM317_SOT-223Package_TO_SOT_SMD:SOT-223-3_TabPin2U2
1LM5164DDAPackage_SO:HSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.1mmU1
1NUP2105LPackage_TO_SOT_SMD:SOT-23W_HandsolderingD6
1NetTie_2NetTie:NetTie-2_SMD_Pad2.0mmNT1
1SMCJ51ADiode_SMD:D_SMCD1
1SN65HVD230Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU7
1SW_DIP_x03Button_Switch_SMD:SW_DIP_SPSTx03_Slide_6.7x9.18mm_W8.61mm_P2.54mm_LowProfileSW1
1Screw_Terminal_01x02TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-02_1x02_P5.08mm_HorizontalJ1
1Screw_Terminal_01x03TerminalBlock_CUI:TerminalBlock_CUI_TB007-508-03_1x03_P5.08mm_HorizontalJ2
1Screw_Terminal_01x03TerminalBlock:TerminalBlock_Xinya_XY308-2.54-3P_1x03_P2.54mm_HorizontalJ3
1TLV9062Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU6
1TLV9064Package_SO:SOIC-14_3.9x8.7mm_P1.27mmU5
1VaristorFuse:Fuse_1812_4532MetricRV1
1W25Q32JVSSPackage_SO:SOIC-8_5.3x5.3mm_P1.27mmU10

More from embedded-pro/e-foc-hardware

1
  • 2 layers104.7 × 66.7 mmTiva-80pin adapter, the printed circuit board in 3D

    Tiva-80pin adapter

    embedded-pro/e-foc-hardware

    hardware to be used with https://github.com/embedded-pro/e-foc

    55 parts

Similar boards

  • 4 layers60 × 60 mm数控buck, the printed circuit board in 3D

    数控buck

    JasonClock/CNC_Buck

    78 parts1
  • 2 layers65 × 35 mmEsc v1, the printed circuit board in 3D

    Esc v1

    savob/esc

    My custom ESC project

    44 parts4CERN-OHL-W-2.0
  • 2 layersDrone ESC, the printed circuit board in 3D

    Drone ESC

    Arpit192005/Drone-ESC

    A custom 3-phase Brushless DC (BLDC) Electronic Speed Controller (ESC) designed in KiCad, intended for drone and robotics applications.

    31 parts1
  • 4 layers100 × 100 mmPower feed, the printed circuit board in 3D

    Power feed

    liorknafo/power-feed-manual-mill

    DIY stepper power feed for a SIEG X3.5D mill: electromagnetic clutch, RP2040 controller PCB, Rust firmware, build123d CAD

    195 parts
  • 2 layers67.5 × 62 mmPower2, the printed circuit board in 3D

    Power2

    Yaotinx/power-supply

    A dual-output switch-mode power supply designed in KiCad for AC-DC conversion operating at a 55kHz switching frequency.

    46 parts
  • 4 layers75 × 46.4 mmSTEP MOTO, the printed circuit board in 3D

    STEP MOTO

    YIN0622/STEP_MOTO_PCB

    83 parts
  • 2 layers63.2 × 40.7 mmLED Board, the printed circuit board in 3D

    LED Board

    CornellMarsRover/KiCad

    This folder serves as the central repository for all KiCad PCB designs across multiple years. Each subfolder corresponds to a specific design cycle and contains all associated board files, schematics, and documentation.

    74 parts

Questions

How big is the E foc PCB?

It measures 89.4 × 66.9 mm and has 2 copper layers, 1.6 mm thick.

What parts does the E foc use?

186 parts, built around the SN65HVD230D, TLV9062ID, TLV9064ID and FAN7888M. 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 E foc KiCad files?

From the embedded-pro/e-foc-hardware repository on GitHub, at the commit this page was made from: the board is hardware/e-foc/e-foc.kicad_pcb and its schematic hardware/e-foc/e-foc.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the E foc design in my own project?

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