Skip to the content
PCBKitNew board
6 layers46 × 46 mmTercio B1, the printed circuit board in 3D

Tercio B1 brushless FOC driver (planning)

Size
46 × 46 mm
Copper layers
6
Thickness
1.6 mm
Parts
163
Nets
116
Pads
581
Tracks, vias
1,237, 340
Pours
30
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
12 Oct 2026
Updated
18 Oct 2026

Overview

Tercio B1 is an open-source printed circuit board by Kerol-Dev, from the Kerol-Dev/Tercio-B1 repository on GitHub, published under the Apache-2.0 licence. It is a 6-layer board of 46 × 46 mm with 163 parts on 116 nets, routed with 1,237 tracks and 340 vias.

It is built around the STM32G431CBT6, MT6835GT-STD-R and TLV75533PDBVR-MS, with the BSC030N08NS5, M2.5 and RLP25FEGR001 among its other parts. Its parts include 58 capacitors, 53 resistors, 8 diodes, 8 connectors and 6 transistors. It belongs with the robots and motor control boards and the STM32 boards of this library.

Main components

12

README

README.md
Tercio B1 rev A, top side

Tercio B1

Brushless FOC on the Tercio bus.

A 46 × 46 mm field-oriented-control driver for gimbal, quasi-direct-drive and hobby brushless motors.
10–52 V, a 21-bit encoder on board, and the same bus, browser panel and libraries as the Tercio S1.

Rev A is designed and 100 % routed, and its firmware runs on a simulated motor. Nothing has run on real hardware yet:
every rating on this page is a design target until the bench tests confirm it.

Hardware · Firmware · Simulator · Spec vs moteus · Plan

MCU Driver Encoder Bus Board Licence


Why

A Tercio machine can already put closed-loop steppers and an IMU on one CAN bus, set up from a browser. Some joints want a brushless motor instead: gimbals that must be smooth at a crawl, legs and arms on quasi-direct-drive actuators, anything that needs torque control rather than position alone.

Good brushless controllers exist, but each comes with its own adapter, its own tools and its own library. The Tercio B1 joins the bus you already have. It speaks Tercio protocol v2 as device class 2, appears in Tercio Control next to your S1 drivers and IMUs, and is driven from the same Python and Arduino libraries. It aims at the mjbots moteus-x1 and moteus-n1 on that ecosystem and on value: a target of $99–119.

Highlights (design targets)

On the Tercio busProtocol v2, device class 2. Discovery, node IDs, parameters, telemetry and fault events work as on the S1, through the same Tercio FD adapter.
21-bit encoder on boardAn MT6835 sits on the shaft axis under the board. The aux port takes an output-side encoder (SPI, I²C or quadrature), step/dir, RC PWM and a motor NTC.
10–52 V, 80 V FETsA DRV8353RS 100 V-class gate driver with drain-source over-current protection, six 80 V / 3 mΩ BSC030N08NS5, 1 mΩ Kelvin shunts, and a regen clamp in firmware from day one.
Fast loopsPWM at 15–40 kHz (30 kHz by default), the current loop at the PWM rate, the position or velocity loop every second tick.
Calibrates itselfMeasures current-sense offsets, resistance, inductance, pole pairs, direction, encoder offset and flux linkage. In simulation, R, L and flux linkage come out within 1 % on the 5010 and 2204 test motors; the gimbal's resistance reads 3.5 % high.
Both bus speeds500 k / 2.5 Mbit/s and 1 M / 5 Mbit/s bus profiles from the first release.
Generated by codeSchematic, placement, copper and routing are all Python that writes KiCad 10 files, authored by AI, and checked by KiCad itself: ERC 0, DRC 0, 0 schematic-parity issues.

Rev A board

Tercio B1 rev A, top and bottom
  • 46 × 46 mm, 6 layers: 2 oz outer and 1 oz inner copper, 1.6 mm, matte black ENIG, filled and capped vias in pads.
  • Top: the XT30 on the left edge; three half-bridges across the lower half, each low-side FET with its Kelvin shunt; phase pads A/B/C on the bottom edge; the DRV8353RS above them with its 5 V buck; CAN-in, aux and CAN-out connectors on the edges; status LEDs.
  • Bottom (faces the motor, ≤ 2.3 mm parts): the MT6835 on the shaft axis, the STM32G431 beside the gate driver, the CAN transceiver between the connectors, SWD pads and a named test point for every rail and phase.
  • Numbers: 163 footprints, 1,237 tracks, 340 vias, 100 % routed. BOM: 54 lines, every part in stock at JLCPCB when checked on 2026-10-13, $26.08 per board at 10 and $22.44 at 100 (components).
  • Fabrication: hardware/tools/jlc_fab.py writes the gerbers, BOM and placement file for JLCPCB assembly.

How it works

mermaid
flowchart LR
    BUS["CAN FD bus<br/>Tercio protocol v2"] --- CAN["MCP2562FD"]
    CAN --- MCU["STM32G431<br/>FOC at 30 kHz"]
    ENC["MT6835<br/>21-bit encoder"] -- "SPI" --> MCU
    MCU -- "6 × PWM" --> DRV["DRV8353RS<br/>gate driver + 3 current amps"]
    DRV --> FET["3 half-bridges<br/>6 × BSC030N08NS5"]
    PWR["XT30<br/>10–52 V"] --> FET
    FET --> MOT(("Motor"))
    FET -. "1 mΩ Kelvin shunts" .-> DRV
    DRV -- "phase currents" --> MCU
  • One call per PWM period. FocCore takes the ADC sample and returns the duties: Clarke and Park transforms, a d/q current controller with decoupling and latency compensation, space-vector PWM and per-tick protection. It is plain C++ with no HAL, so the same code runs on the MCU, in the unit tests and in the simulator.
  • The joint. Joint runs the protocol-v2 states, the position, velocity, torque and impedance modes on the S1's trajectory planner, the regen clamp, a 1 s host deadman and temperature derating.
  • Shared with the S1. The trajectory planner and the encoder tracker come from the S1 firmware; the CAN node and the wear-levelled settings will too (docs/07 §7.3), so the B1 behaves like the rest of the Tercio bus.

Simulator

Tercio B1 simulator: a QDD 5010 calibrated and moving, with the current loop on the scope

The firmware above, unchanged, runs at 30 kHz in real time against a model of the motor and the board.

  • The model: a dq motor with cogging and friction, dead time, a supply that cannot sink current, 12-bit current-sense codes, the encoder's noise and timing, and the gate driver's over-current latch.
  • The page: pick a motor, run the calibration and see what it found next to the true values, then move the joint and watch the scope at 1 kHz, or one PWM period at a time.
  • Testing: inject faults, load the shaft, or drag the rotor by hand.
bash
cd firmware
node simulator/server.mjs             # http://127.0.0.1:8770, builds the simulator first if needed

Specifications (design targets)

Supply10–52 V (3S–12S, 48 V supplies); input TVS SMCJ54A; over-voltage fault ≤ 58 V
Phase current~80 A peak by design; 15 A continuous without cooling as the target. Both are published only after measurement.
PWM and current loop15–40 kHz, 30 kHz by default
MCUSTM32G431CBT6, Arm Cortex-M4F at 170 MHz (STM32G474CBT6 as a pin-compatible alternate)
Power stageDRV8353RS, 6 × BSC030N08NS5 (80 V, 3.0 mΩ), 1 mΩ 2512 Kelvin shunts
EncoderMT6835, 21-bit absolute, on board
Aux portJST-GH 8: SPI, I²C, quadrature, step/dir, RC PWM, GPIO, motor NTC, 3.3 V (PTC-limited)
BusCAN FD, 500 k / 2.5 Mbit/s and 1 M / 5 Mbit/s, Tercio protocol v2; 2 × JST-GH 4 for daisy chaining; 120 Ω termination by solder jumper
Power connectorXT30 (right angle) and phase solder pads
Board46 × 46 mm, 6 layers, height ≤ 10 mm target, ≤ 16 g target
Host toolsTercio Control in the browser and the Python and Arduino libraries, through the Tercio FD

The comparison with moteus-x1, n1 and r4.11 is in docs/02.

Building it

Firmware

bash
cd firmware
~/.platformio/penv/bin/pio test -e native     # host tests on simulated motors

Hardware

bash
python3 hardware/build.py                      # schematic → netlist check → ERC → PDF
python3 -I hardware/verify_bom.py              # every LCSC code checked live against JLCPCB

The board scripts need KiCad 10's own Python, for pcbnew:

bash
KPY=/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/bin/python3
cd hardware
$KPY layout.py                                 # place, copper, route, fill, DRC, renders
$KPY tools/jlc_fab.py                          # build/jlc: gerbers, BOM, CPL for JLCPCB

The files in hardware/kicad/ are generated: change the code and regenerate rather than editing them in KiCad. The full flow, the router and the checks are in hardware/README.md.

Status and next steps

DonePlan and decisions; rev A schematic, board and routing, DRC clean; JLC fabrication files; firmware milestone F0 (FOC core, calibration, joint) with host tests 1–6 and the real-time simulator
NextRegen and fault-reaction tests in simulation; the CAN and protocol layer; bring-up firmware; order rev A
ScheduleRev A order around 21 December 2026, rev B after Chinese New Year, launch around June 2027 (docs/09)
GuardrailThe Tercio S1 and FD launch on 1 December 2026 comes first: no B1 changes to the other Tercio repositories before then, and a B1 freeze from 23 November to 7 December

Documents

#DocumentContents
1Requirements and the wedgeDecisions, functional requirements, positioning against moteus/ODrive, rating method
2Spec versus moteus-x1Side-by-side with x1, n1 and r4.11
3Part shortlistLive LCSC/JLCPCB stock and prices (2026-10-12), choices and alternates
4Block diagram and pin mapPower tree, STM32G431 pin map, TIM1/ADC sync, aux and CAN connectors, floor plan
5BOM cost and PCB planPlanning estimate ≈ $45/board at 10, ≈ $25.50 at 100 (landed); stackup and layout rules
6KiCad as codePython-generated schematic and board, routing, kicad-cli checks and outputs
7Firmware planS1 architecture reuse, FOC core, calibration and identification, protocol additions, bus profiles, host simulator
8Bring-up and test planEquipment, regen handling, 14 staged tests with pass criteria
9Risks and scheduleRisk register; 3 spins; launch ~June 2027; ≈ $4,000–4,500 to launch

Repository layout

text
docs/        the plan: requirements, spec, parts, architecture, BOM, KiCad as code, firmware, bring-up, risks
data/        live part data, BOM estimate, pin map
tools/       part lookup (JLCPCB + LCSC), BOM estimate, CAN bus-time budget
hardware/
├── b1/      the Tercio B1 circuit, one module per sheet; placement, copper, routing plan, silkscreen
├── gen/     the generator: KiCad file writer, symbols, footprints, board engine, router
├── tools/   JLCPCB fabrication files, routing report, XT30 3D model
├── kicad/   the generated KiCad 10 project (open tercio-b1.kicad_pro to review)
└── lib/     IBM Plex fonts for the silkscreen (project footprints and symbols are in kicad/lib/)
firmware/
├── src/     foc/, control/, app/ (MCU and host); sim/, simulator/ (host only)
├── simulator/  Node server and web UI
└── test/    host tests

Data and tools

PathWhat
tools/parts_lookup.pyLive JLCPCB + LCSC stock and price lookup (standard library only). Reads tools/candidates*.txt
tools/bom_estimate.pyBOM cost at 10/100 boards from the lookup data → data/bom-estimate.csv
tools/can_budget.pyCAN FD bus-time budget per node and rate (python3 tools/can_budget.py 1000000 5000000)
data/parts-live-2026-10-12*.csv686 rows of live part data from 2026-10-12
data/pinmap-g431cbt6.csvPin map as a table, for the generator

Re-run before any order (stock moves daily):

bash
python3 -I tools/parts_lookup.py && python3 -I tools/parts_lookup.py tools/candidates-extra.txt && python3 -I tools/bom_estimate.py

Decision log

Decided with Kerol on 2026-10-12:

TopicDecision
Power classSmaller class first → 10–52 V (DRV8353RS makes 12S/48 V possible)
Peak currentDesign for ~80 A peak; lead marketing with continuous current
Target motorsGimbal, QDD 5010/6010, small drone/hobby BLDC
Price$99–119
Size~46 × 46 mm
EncoderOnboard MT6835 (21-bit) + aux port for an output-side encoder
MCUSTM32G431CBT6 (G474CBT6 as a pin-compatible alternate)
Gate driverDRV8353RS
CAN connector2 × JST-GH 4-pin, daisy chain
Power connector1 × XT30 + motor solder pads
ExtrasMotor thermistor, PWM and step/dir input, spare GPIO/analog
USBNo (CAN only, via the FD)
Bus500k/2.5M and 1M/5M, both from the B1's first release
LicenceApache-2.0
NameTercio B1
KiCad flowCode owns everything, including routing
TimingStart the schematic now, in parallel with the launch
S1 and the 1M/5M busNo S1s are built yet: the shipping firmware carries the bus profile
RepositoryPrivate GitHub repo Kerol-Dev/Tercio-B1 (named Tercio-bldc until 2026-10-18)

Still open:

TopicNotes
Weekly time cap before launchYours to set; the schedule assumes part-time
Electrolytic on board vs on the XT30 pigtailHeight (10 mm) vs cable damping. Rev A carries a 22 µF 100 V can on board
Mounting-hole patternCheck against the 5010/6010 motors on rev A
Retail price inside $99–119, volume tiers, starter bundleAfter rev B, when the BOM and ratings are firm

Licence

Apache-2.0, see LICENSE.

Made by Tercio Labs

Parts

163
QtyValueFootprintReferences
14100nF 16VCapacitor_SMD:C_0402_1005MetricC106, C210, C214, C401, C402, C403, C405, C408, C411, C415, C501, C601, C602, C701
910µF 100VCapacitor_SMD:C_1210_3225MetricC102, C201, C204, C304, C305, C306, C307, C308, C309
8100Resistor_SMD:R_0402_1005MetricR404, R405, R406, R701, R702, R703, R704, R705
71nF 50VCapacitor_SMD:C_0402_1005MetricC103, C313, C314, C315, C412, C413, C414
60RResistor_SMD:R_0402_1005MetricR301, R302, R305, R306, R309, R310
610kResistor_SMD:R_0402_1005MetricR209, R211, R401, R407, R502, R707
61µF 25VCapacitor_SMD:C_0402_1005MetricC104, C107, C208, C209, C406, C502
6BSC030N08NS5Package_TO_SOT_SMD:TDSON-8-1Q301, Q302, Q303, Q304, Q305, Q306
4100kResistor_SMD:R_0603_1608MetricR101, R313, R315, R317
44.7kResistor_SMD:R_0402_1005MetricR205, R206, R708, R709
45.1kResistor_SMD:R_0402_1005MetricR102, R314, R316, R318
4M2.5MountingHole:MountingHole_2.7mm_M2.5H101, H102, H103, H104
3100nF 100VCapacitor_SMD:C_0805_2012MetricC310, C311, C312
310nF 50VCapacitor_SMD:C_0402_1005MetricC108, C212, C407
31mΩ 3WTercio_B1:R_2512_KelvinR303, R307, R311
31nF 100VCapacitor_SMD:C_0603_1608MetricC301, C302, C303
322Resistor_SMD:R_0402_1005MetricR408, R409, R501
34.7Resistor_SMD:R_0805_2012MetricR304, R308, R312
210Resistor_SMD:R_0603_1608MetricR201, R202
212pF 50V C0GCapacitor_SMD:C_0402_1005MetricC409, C410
21kResistor_SMD:R_0402_1005MetricR403, R706
21µF 50VCapacitor_SMD:C_0603_1608MetricC206, C207
24.7µF 16VCapacitor_SMD:C_0603_1608MetricC105, C404
260.4Resistor_SMD:R_0402_1005MetricR601, R602
2GH-4 CANConnector_JST:JST_GH_SM04B-GHS-TB_1x04-1MP_P1.25mm_HorizontalJ601, J602
2GNDTercio_B1:TestPad_D0.9mmTP102, TP106
2TPD4E05U06DQARPackage_SON:USON-10_2.5x1.0mm_P0.5mmD701, D702
1+3.3VATercio_B1:TestPad_D0.9mmTP105
1+3V3Tercio_B1:TestPad_D0.9mmTP104
1+5VTercio_B1:TestPad_D0.9mmTP103
11Resistor_SMD:R_0805_2012MetricR207
11.5kResistor_SMD:R_0402_1005MetricR210
1100kResistor_SMD:R_0402_1005MetricR208
1100nF 100VCapacitor_SMD:C_0603_1608MetricC202
1100µHInductor_SMD:L_Sunlord_SWPA6045SL201
110k B3434Resistor_SMD:R_0603_1608MetricTH301
1150kResistor_SMD:R_0603_1608MetricR204
116MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY401
11µF 100VCapacitor_SMD:C_0805_2012MetricC203
12.2kResistor_SMD:R_0402_1005MetricR402
1200kResistor_SMD:R_0603_1608MetricR203
122µF 100VCapacitor_SMD:CP_Elec_6.3x7.7C101
122µF 25VCapacitor_SMD:C_0805_2012MetricC213
14.7nF 50VCapacitor_SMD:C_0402_1005MetricC603
1470nF 25VCapacitor_SMD:C_0603_1608MetricC211
147nF 100VCapacitor_SMD:C_0603_1608MetricC205
150mAFuse:Fuse_0603_1608MetricF701
1600Ω@100MHzInductor_SMD:L_0603_1608MetricFB101
1DRV8353RSRGZRPackage_DFN_QFN:Texas_RGZ0048A_VQFN-48-1EP_7x7mm_P0.5mm_EP5.15x5.15mm_ThermalViasU201
1DRV_nFAULTTercio_B1:TestPad_D0.9mmTP208
1GH-8 AUXConnector_JST:JST_GH_SM08B-GHS-TB_1x08-1MP_P1.25mm_HorizontalJ701
1GLATercio_B1:TestPad_D0.9mmTP204
1GLBTercio_B1:TestPad_D0.9mmTP205
1GLCTercio_B1:TestPad_D0.9mmTP206
1MBR1H100SFT3GDiode_SMD:D_SOD-123FD201
1MCP2562FDT-E/SNPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU601
1MOTOR ATercio_B1:MotorPad_3.6x6mmJ301
1MOTOR BTercio_B1:MotorPad_3.6x6mmJ302
1MOTOR CTercio_B1:MotorPad_3.6x6mmJ303
1MT6835GT-STD-RPackage_SO:TSSOP-16_4.4x5mm_P0.65mmU501
1NTCJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP701
1NUP2105LT1GPackage_TO_SOT_SMD:SOT-23D601
1PESD5V0S1BADiode_SMD:D_SOD-323D501
1SMCJ54ADiode_SMD:D_SMCD101
1SOATercio_B1:TestPad_D0.9mmTP201
1SOBTercio_B1:TestPad_D0.9mmTP202
1SOCTercio_B1:TestPad_D0.9mmTP203
1STM32G431CBT6Package_QFP:LQFP-48_7x7mm_P0.5mmU401
1SWTercio_B1:TestPad_D0.9mmTP207
1SWDTercio_B1:SWD_Pads_1x05_P2.54mmJ401
1TERMJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP601
1TLV75533PDBVRPackage_TO_SOT_SMD:SOT-23-5U101
1VBUSTercio_B1:TestPad_D0.9mmTP101
1XT30PW-MConnector_AMASS:AMASS_XT30PW-M_1x02_P2.50mm_HorizontalJ101
1greenLED_SMD:LED_0805_2012MetricD401
1redLED_SMD:LED_0603_1608MetricD402

Questions

How big is the Tercio B1 PCB?

It measures 46 × 46 mm and has 6 copper layers, 1.6 mm thick.

What parts does the Tercio B1 use?

163 parts, built around the STM32G431CBT6, MT6835GT-STD-R, TLV75533PDBVR-MS and BSC030N08NS5. 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 Tercio B1 KiCad files?

From the Kerol-Dev/Tercio-B1 repository on GitHub, at the commit this page was made from: the board is hardware/kicad/tercio-b1.kicad_pcb and its schematic hardware/kicad/aux.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Tercio B1 design in my own project?

Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Similar boards

  • 4 layers99.5 × 69 mmPump controller reva, the printed circuit board in 3D

    Pump controller reva

    UWARG/pump-controller-hardware

    Hardware for Competition 2026 Water Pump Controller on Project Valkyrie

    244 parts
  • 4 layers50 × 50 mmZiteh moco moco rd501, the printed circuit board in 3D

    Ziteh moco moco rd501

    punkfab/pcb-corpus

    235 real KiCad boards from open-source hardware repositories, prepared as a placement and routing benchmark

    135 parts1
  • 4 layers80 × 50.5 mmLoeti, the printed circuit board in 3D

    Loeti

    elagil/loeti

    Soldering equipment for JBC irons

    110 parts5
  • 4 layers87.5 × 50.6 mmSide board, the printed circuit board in 3D

    Side board

    AndreiVladescu/Vector-UGV

    An 18-DOF hexapod research platform: a smart controller per leg on CAN, a Raspberry Pi CM5 carrier, camera and SDR payload, ELRS / Wi-Fi / 4G links. Built for the PCBWay 9th Project Design Contest.

    299 partsCERN-OHL-S-2.0
  • 4 layers87 × 107.4 mmSl v4, the printed circuit board in 3D

    Sl v4

    jackw01/scanlight

    A better light source for scanning color negative film

    154 parts397CERN-OHL-W-2.0
  • 4 layers50 × 42 mmCawDrive, the printed circuit board in 3D

    CawDrive

    noxrick91/caw-drive

    三相直流无刷电机驱动器硬件

    112 parts108GPL-3.0
  • 4 layersBldc, the printed circuit board in 3D

    Bldc

    maruta/Compact-SimpleFOC-Board

    Design file of Compact SimpleFOC Controller Board

    66 parts23MIT
  • 4 layers30 × 30 mmMagnetic encoder, the printed circuit board in 3D

    Magnetic encoder

    another-greg/MT6835_encoder_breakout_board

    Simple breakout board for the MT6835 magnetic rotary encoder.

    10 parts