
Bldc-75v
schto173/FormulaLAM
Racing Team's Exchange for Shell EcoMarathon @Lycée des Arts et Métiers

Racing Team's Exchange for Shell EcoMarathon @Lycée des Arts et Métiers
Bldc-75v is an open-source printed circuit board by schto173, from the schto173/FormulaLAM repository on GitHub, published under the MIT licence. It is a 4-layer board of 140 × 105.3 mm with 125 parts on 125 nets, routed with 746 tracks and 165 vias.
It is built around the TJA1051T/3, LM5164DDA and TPD4S010DQAR, with the CSD19532Q5B, 1N5819WS and DFLS1100 among its other parts. Its parts include 49 capacitors, 39 resistors, 8 diodes, 6 transistors and 6 connectors. It belongs with the robots and motor control boards of this library.
Motor controller for the car: a 4-layer HAT that plugs onto a NUCLEO-G474RE and drives the hub motor with SimpleFOC (6-PWM, low-side current sensing, hall sensors).
| Battery | 58 V max (fuse holder for an ATO blade fuse, 58 V rated) |
| Phase current | 15–30 A |
| Gate driver | TI DRV8353RS (SPI, 3 current-sense amplifiers, integrated buck) |
| Power stage | 6× TI CSD19532Q5B (100 V), 2 mΩ shunts, Kelvin sensing |
| Logic supply | LM5164 buck → 5 V (Nucleo via E5V), Nucleo LDO → 3.3 V |
| Protections | Bus TVS (SMCJ60A), fuse, ESD on voltage-sense (TPD4S010) and CAN (PESD1CAN), clamp diodes on hall inputs, DRV8353 VDS/OCP/UVLO |
| Extras | FET temperature NTC, motor temperature input, UART telemetry, CAN bus |
Open bldc-75v.kicad_pro with KiCad 10. All libraries are in this folder and referenced with
${KIPRJMOD}, so nothing needs to be installed.
| Ref | Connector | Pins |
|---|---|---|
| J5 | Battery, solder pads for 4 mm² wire | BAT+ / BAT− (use an XT90-S anti-spark plug in the cable) |
| J6 | Motor phases, solder pads for 4 mm² wire | PHASE C / B / A (left → right) |
| J8 | Hall sensors + motor temperature, JST-XH 6-pin | 1 +5V, 2 GND, 3 A, 4 B, 5 C, 6 TEMP (as on the silkscreen) |
| J7 | Throttle / driver button, JST-XH 3-pin | 3V3, SIG, GND |
| J9 | UART telemetry, JST-XH 4-pin | 1 = 5V, 2 = TX, 3 = RX, 4 = GND (3.3 V logic, 330 Ω series) |
| J10 | CAN bus, JST-XH 3-pin | 1 = CAN_H, 2 = CAN_L, 3 = GND |
CAN: TJA1051T/3 transceiver (bus pins survive ±58 V). The ESC is meant to sit at one end of the bus, so the 120 Ω termination is on (solder jumper JP1 is bridged). Cut the bridge between the JP1 pads if the board ever sits in the middle of the bus. On the housings: M12 A-coded, CiA 303-1 pinout (2 = V+, 3 = GND, 4 = CAN_H, 5 = CAN_L).
UART to a Raspberry Pi: connect only GND, TX and RX (cross TX↔RX). The 5 V pin on J9 is for small modules only – the 5 V rail is 1 A in total and also feeds the Nucleo and the hall sensors.
| Function | Pins |
|---|---|
| 6-PWM (A_H, A_L, B_H, B_L, C_H, C_L) + enable | BLDCDriver6PWM(PA10, PB15, PA9, PB14, PA8, PB13, PA11) |
| DRV8353 SPI | SCK PB3, MISO PB4 (SDO), MOSI PB5 (SDI), CS PB11 |
| DRV8353 nFAULT | PB10 |
| Current sense SOA / SOB / SOC | PA4 / PA1 / PA0 (all on ADC2; SOA is on PA4, SOC on PA0) |
| Voltage sense A / B / C / bus | PB0 / PC0 / PC2 / PC3 (divider 383 k / 9.76 k) |
| Halls A / B / C | PB2 / PB1 / PC4 |
| Throttle | PC1 |
| FET temperature (NTC 10 k B3380, 10 k pull-up to 3.3 V) | PA6 (ADC2_IN3) |
| Motor temperature (J8 pin 6, 2.2 k pull-up, 1 k series, 100 nF) | PA7 (ADC2_IN4) |
| UART telemetry (UART4) | TX PC10, RX PC11 → HardwareSerial Serial3(PC11, PC10) |
| CAN (FDCAN2) | TX PB6, RX PB12 |
| Status LED | PB7 |
| USB to the Pi | Nucleo ST-LINK virtual COM port (LPUART1, PA2/PA3 = Serial) – no extra hardware |
Before the first power-up:
VDS_LVL for the CSD19532Q5B and pick the
current-sense amplifier gain.firmware/ is a PlatformIO project (VS Code + PlatformIO) for the first power-up with SimpleFOC, split
into five steps: DRV8353 check → hall test → open loop → closed loop → FOC with current sensing.
It also writes the DRV8353 settings (gate drive, overcurrent threshold, CSA gain).
See firmware/README.md.
Status: V1.2 ordered at JLCPCB (files generated 2026-09-30); see CLAUDE.md for the full status,
design decisions and the to-do list.
Everything for the order is in jlcpcb/: bldc-75v_gerbers.zip, bldc-75v_bom_jlc.csv,
bldc-75v_cpl_jlc.csv (rotations already corrected to JLC's footprints).
Order settings: 4 layers · ENIG · 2 oz outer / 1 oz inner copper · via covering "Epoxy Filled & Capped" · confirm production file and parts placement · top-side assembly.
Not assembled on purpose: the Nucleo (plugs in), battery and motor wire pads (solder the wires), JP1 (it is only a copper bridge).
tools/ regenerates the JLC files and runs extra manufacturing checks (run with KiCad's Python):
gen_jlc.py (BOM + pick-and-place with JLC rotation corrections), overlay.py (checks a footprint's rotation
against JLC's own footprint), dfm_checks.py (silkscreen, rings, mask, GND islands, stitching).
| Qty | Value | Footprint | References |
|---|---|---|---|
| 7 | 100nF | Capacitor_SMD:C_0603_1608Metric | C28, C34, C50, C64, C65, C66, C67 |
| 6 | 1nF | Capacitor_SMD:C_0603_1608Metric | C22, C23, C25, C47, C48, C49 |
| 6 | 4.7uF 100V | Capacitor_SMD:C_1210_3225Metric | C58, C59, C60, C61, C62, C63 |
| 6 | CSD19532Q5B | Package_TO_SOT_SMD:TDSON-8-1 | Q1, Q2, Q3, Q4, Q5, Q6 |
| 4 | 1uF 100V | Capacitor_SMD:C_1206_3216Metric | C18, C19, C20, C33 |
| 4 | 330 | Resistor_SMD:R_0603_1608Metric | R40, R41, R70, R71 |
| 4 | 383k | Resistor_SMD:R_1206_3216Metric | R1, R2, R3, R13 |
| 4 | 47nF | Capacitor_SMD:C_0603_1608Metric | C4, C12, C13, C17 |
| 4 | 9,76k | Resistor_SMD:R_0603_1608Metric | R7, R11, R12, R17 |
| 4 | M3 | MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 3 | 10k | Resistor_SMD:R_0603_1608Metric | R33, R58, R69 |
| 3 | 1N5819WS | Diode_SMD:D_SOD-323 | D5, D6, D7 |
| 3 | 2200pF | Capacitor_SMD:C_0603_1608Metric | C44, C45, C46 |
| 3 | 2m | Resistor_SMD:R_2512_6332Metric | R14, R15, R16 |
| 3 | 4.7k | Resistor_SMD:R_0603_1608Metric | R59, R60, R61 |
| 3 | 56 | Resistor_SMD:R_0603_1608Metric | R55, R56, R57 |
| 3 | NetTie_2 | NetTie:NetTie-2_SMD_Pad0.5mm | NT1, NT2, NT3 |
| 2 | 1k | Resistor_SMD:R_0603_1608Metric | R25, R74 |
| 2 | 1uF 16V | Capacitor_SMD:C_0603_1608Metric | C31, C32 |
| 2 | 2.2uF 100V | Capacitor_SMD:C_1210_3225Metric | C51, C52 |
| 2 | 22uF 16V | Capacitor_SMD:C_1206_3216Metric | C54, C55 |
| 2 | 330uF 100v | Capacitor_THT:CP_Radial_D16.0mm_P7.50mm | C11, C21 |
| 1 | 0,1uF | Capacitor_SMD:C_0603_1608Metric | C26 |
| 1 | 100k | Resistor_SMD:R_1206_3216Metric | R37 |
| 1 | 100k | Resistor_SMD:R_0603_1608Metric | R62 |
| 1 | 100nF 100V | Capacitor_SMD:C_0805_2012Metric | C35 |
| 1 | 107k | Resistor_SMD:R_0603_1608Metric | R36 |
| 1 | 10k B3380 | Resistor_SMD:R_0402_1005Metric | TH1 |
| 1 | 10nF | Capacitor_SMD:C_0603_1608Metric | C37 |
| 1 | 120 | Resistor_SMD:R_0603_1608Metric | R72 |
| 1 | 158k | Resistor_SMD:R_0603_1608Metric | R66 |
| 1 | 180pF C0G | Capacitor_SMD:C_0603_1608Metric | C57 |
| 1 | 1M | Resistor_SMD:R_1206_3216Metric | R63 |
| 1 | 1uF 25V | Capacitor_SMD:C_0603_1608Metric | C29 |
| 1 | 1uF 50V | Capacitor_SMD:C_0603_1608Metric | C27 |
| 1 | 2.2k | Resistor_SMD:R_0603_1608Metric | R73 |
| 1 | 2.2nF 50V | Capacitor_SMD:C_0603_1608Metric | C53 |
| 1 | 2.61k | Resistor_SMD:R_0603_1608Metric | R29 |
| 1 | 220uH | Inductor_SMD:L_Bourns_SRR1260 | L1 |
| 1 | 226k | Resistor_SMD:R_1206_3216Metric | R68 |
| 1 | 22uF 25V | Capacitor_SMD:C_0805_2012Metric | C24 |
| 1 | 274k | Resistor_SMD:R_1206_3216Metric | R34 |
| 1 | 3.3nF | Capacitor_SMD:C_0603_1608Metric | C56 |
| 1 | 4.7nF | Capacitor_SMD:C_0603_1608Metric | C36 |
| 1 | 41.2k | Resistor_SMD:R_0603_1608Metric | R65 |
| 1 | 47nF 100V | Capacitor_SMD:C_0603_1608Metric | C30 |
| 1 | 47uH | Inductor_SMD:L_Bourns_SRR1260 | L2 |
| 1 | 49.9k | Resistor_SMD:R_0603_1608Metric | R67 |
| 1 | 90.9k | Resistor_SMD:R_0603_1608Metric | R64 |
| 1 | ATO 30A 58VDC | Fuse:FuseHolder_Blade_ATO_Littelfuse_FLR_178.6165 | F1 |
| 1 | Battery (anti-spark in cable) | Connector_Wire:SolderWire-4sqmm_1x02_P12mm_D3mm_OD6mm | J5 |
| 1 | CAN | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J10 |
| 1 | DFLS1100 | Diode_SMD:D_PowerDI-123 | D2 |
| 1 | DRV8353RSRGZT | DRV8353RSRGZT:QFN50P700X700X100-49N | U1 |
| 1 | Green | LED_SMD:LED_0603_1608Metric | D3 |
| 1 | Hall | Connector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_Vertical | J8 |
| 1 | LM5164DDA | Package_SO:HSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.41x3.1mm_ThermalVias | U4 |
| 1 | Motor-Phases | bldc-hat:SolderWire-4sqmm_1x03_P18mm_D3mm_OD6mm | J6 |
| 1 | NUCLEO-G474RE | bldc-hat:Nucleo64_Morpho_HAT | U2 |
| 1 | PESD1CAN | Package_TO_SOT_SMD:SOT-23 | D9 |
| 1 | SMCJ60A | Diode_SMD:D_SMC | D8 |
| 1 | TERM | Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm | JP1 |
| 1 | TJA1051T/3 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U5 |
| 1 | TPD4S010DQAR | TPD4S010DQAR:IC_TPD4S010DQAR | U3 |
| 1 | Throttle | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J7 |
| 1 | UART | Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | J9 |
| 1 | Yellow | LED_SMD:LED_0603_1608Metric | D4 |

schto173/FormulaLAM
Racing Team's Exchange for Shell EcoMarathon @Lycée des Arts et Métiers


oxidecomputer/hw-gimletlet-nic
Daughterboard for the Gimletlet 2 which uses a KSZ8463 to break out two ethernet (RJ-45) connectors. In active use for Hubris development.


dhruxraj/stm32-can-ecu
A compact, "ECU-style" CAN node for learning and prototyping automotive-type embedded software. It has an STM32G4 MCU, a CAN transceiver with protection and switchable termination, a 6-axis IMU, a protected 8-18 V…


MiniNugen/Custom_Inverter_Hardware
PCBProjectNameREV1.PrjPCB | Source Documents | | PCBProjectNameREV1.SchDOC | | PCBProjectNameREV1.PcbDOC | | BOM | Settings | Libraries


It measures 140 × 105.3 mm and has 4 copper layers, 1.6 mm thick.
125 parts, built around the TJA1051T/3, LM5164DDA, TPD4S010DQAR and CSD19532Q5B. 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.
From the schto173/FormulaLAM repository on GitHub, at the commit this page was made from: the board is Electrical/ESC-BLDC-FORMULA1-V1_2/bldc-75v.kicad_pcb and its schematic Electrical/ESC-BLDC-FORMULA1-V1_2/bldc-75v.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).