0
mirror of https://github.com/incutec-hw/OpenESC-30x30.git synced 2026-08-27 17:43:51 +00:00
Files
incutec-OpenESC-30x30/AGENTS.md
JustStan 900465e308 AGENTS: point FET and driver rows at KiCad-Library ALTERNATES.md
Replaces the inline alternates note with a link, so the shared gate driver
list is not restated in three board repos. Also drops the unqualified
"drop-in successor" claim for XRS280N03C: it is 30 V VDSS and this board
is rated to 8S, 33.6 V charged.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-27 11:38:05 +02:00

10 KiB

OpenESC-30x30

Open source 4-in-1 BLDC ESC, 30.5 x 30.5 mm mounting pattern. Four fully independent channels, each with its own MCU, gate driver and six MOSFETs: the distributed-MCU AM32 topology, not a single shared MCU. Control is DShot over the standard 8-pin connector.

Repo

Maintainer @Just4Stan
Status See the status-* topic on the repo. Never written here.
Designed in KiCad 10
KiCad project hardware/4in1.kicad_pro
Root schematic hardware/4in1.kicad_sch (power, current sense, connector) plus hardware/ESC.kicad_sch, one channel instantiated 4x
Board hardware/4in1.kicad_pcb, 6 layers, 1.6 mm, 2 oz outer copper (the stackup field reads 1.69 mm; JLC ships 1.6)
Fixtures OpenDrone-Fixtures: OpenESC-30x30-QC/ press-contact QC fixture, OpenESC-30x30-Flashing/ ST-LINK pogo-pin jig, both unrouted
Production panel hardware/4in1-panel.kicad_pcb, carries this board and the OpenESC-20x20, not a panel of this board alone
Fab exports hardware/production/, Fabrication Toolkit sets named by revision
Local library hardware/components.kicad_sym, hardware/4in1ESC-30x30.pretty/, hardware/4in1ESC-30x30.3dshapes/. Frozen pre-consolidation libraries: use them, do not add to them
Shared library OpenDrone-hw/KiCad-Library, catalogue only; every library this board uses is local to the repo
Design rules hardware/4in1.kicad_dru
Fab config hardware/fabrication-toolkit-options.json
Board setup Line standard: 6 layers, 0.09 mm clearance and track, via 0.35 on 0.20 drill
License CERN-OHL-S-2.0

The project is named 4in1, not after the repo. Renaming it would break the fab archive names, the release assets and the website board art, so it stays.

Rules

Identical in every OpenDrone board repo. Do not edit here; edit the template.

  • Never text-edit .kicad_sch, .kicad_pcb or .kicad_dru. Use KiCad, or kicad-skip / the pcbnew API for scripted changes. .kicad_pro is JSON and may be edited directly for metadata.
  • Metadata yes, connections no. An agent may write BOM and documentation fields (MPN, Manufacturer, LCSC, Cost, Datasheet, text variables). An agent may not change nets, wiring, routing, placement, footprint assignment, or any value that changes the circuit.
  • Close KiCad before any write to a KiCad file. KiCad caches library tables at process start and overwrites files on save.
  • Reuse before you draw. Check KiCad-Library and its PARTS-USED.md first. If the part is there we have already sourced, footprinted and shipped it: copy the symbol and footprint into this repo's lib library and use it. Draw a new part only when the library has nothing that fits, and import it with easyeda2kicad from its LCSC number.
  • One person holds a board layout at a time. KiCad files do not merge. Say on Discord that you are taking it. See CONTRIBUTING.md.
  • ERC and DRC clean before every pull request. Commands below.

Environment

# schematic and board checks
kicad-cli sch erc --exit-code-violations hardware/4in1.kicad_sch
kicad-cli pcb drc --schematic-parity --refill-zones --exit-code-violations hardware/4in1.kicad_pcb

# netlist, for scripted analysis
kicad-cli sch export netlist --format kicadsexpr -o /tmp/4in1.net hardware/4in1.kicad_sch

--refill-zones stops stale fills inventing clearance errors. Keep --schematic-parity on, but read its output against Layout rules below: the board-only bulk bank makes parity noisy, and a real error hides easily in it.

On macOS kicad-cli is at /Applications/KiCad/KiCad.app/Contents/MacOS/kicad-cli, and pcbnew imports only under KiCad's bundled Python. Shared scripts (renders, STEP export, packaging art) live in OpenDrone-Scripts.

Architecture

Four independent channels share one power input and one connector. Per channel: an AT32F421G8U7 (Cortex-M4, QFN-28) drives an NSG2065Q three-phase half-bridge gate driver, which drives six SP40N01GHNK MOSFETs, two per phase. One channel is drawn once in ESC.kicad_sch and instantiated four times.

Current sensing is board level, not per channel: a single INA186A3IDCKR at 100 V/V sits across two 0.2 mOhm 2512 shunts in parallel, 0.1 mOhm total, in the +BATT feed. That gives 10 mV/A and roughly 330 A full scale against a 3.3 V ADC, reported as /CURR.

Rev3.2 adds a matched input network at the amplifier: 1 k in each sense leg (R89/R90), 100 nF 50 V from each input to ground (C40/C41) and 1 uF across the inputs (C42). Through rev3.1 the bare high-side connection put both amplifier inputs on the switching bus, and the common-mode feedthrough rectified to a duty-dependent offset: measured on the 20x20 sibling 2026-08-21 (identical topology), errors from +164% to -64% across the throttle range, honest only at 100% where AM32 stops chopping. The network attenuates the common-mode at the pins ~300x and the mismatch-converted differential to 2.8 mVpp worst case (SPICE, 1% R / 10% C opposed); scale is unchanged at 10 mV/A. Not yet verified on hardware: the acceptance test is the ESC-04 mid-throttle i_a-versus-clamp sweep on a rev3.2 board. Evidence for the rev3.1 fault: OpenESC-20x20 AGENTS.md and OpenDrone-Testing/Logs/esc-04-20x20-20260821T150430Z/.

There is no input protection. The three clamp diodes (D1-D3) that earlier revisions carried are gone: their 24 V standoff sits below the 33.6 V an 8S pack reaches, so they were removing themselves. 2S-8S is qualified by bench and flight testing, not by a clamp. The practical envelope is set by the MOSFET (40 V VDSS), the buck (36 V rated, 45 V absolute maximum) and the current-sense full scale.

Key parts

Function Ref Part LCSC Note
Motor MCU, x4 U2, U5, U7, U9 AT32F421G8U7, QFN-28 C2765098 One per channel
Gate driver, x4 U4, U6, U8, U10 NSG2065Q, QFN-24 C41414478 FD6288Q compatible, integrated bootstrap diodes. Second sources: KiCad-Library ALTERNATES.md, "Three-phase gate driver, QFN-24 4x4"
Power MOSFET, x24 Q1-Q24 SP40N01GHNK, PDFN-8L 5x6 C22385416 6 per channel. Second sources, none fitted: KiCad-Library ALTERNATES.md, "Power MOSFET, DFN 5x6"
Current sense amp U12 INA186A3IDCKR, SC-70-6 C2058245 100 V/V, board level high side
Current shunt, x2 parallel Rsense1, Rsense2 0.2 mOhm 2512 C695806 0.1 mOhm combined
Buck U13 LMR54406DBVR, SOT-23-6 C5219316 1.1 MHz, 0.6 A; FB 115k/10k against 0.8 V for 10.0 V out
Buck inductor U14 FTC160808S4R7MBCA C46594347 4.7 uH
LDO U15 TLV76733DRVR, WSON-6 C2848334 +10 V to +3V3
Connector J1 SM08B-SRSS-TB, JST SH 8-pin C160407 Also broken out as solder pads (U3)
Bulk electrolytic, supplied n/a 470 uF Shipped with the board, not fitted to it. The user solders it across the battery terminals. Standard pairing of on-board ceramics with a pack-side elco; it dominates the bus capacitance once installed

Power

+BATT ─┬─► MOSFET drains, motor phases
       ├─► shunt pair ─► INA186A3 (U12) ─► /CURR
       └─► LMR54406DBVR buck (U13) + 4.7uH (U14) ─► +10V ─┬─► gate drivers U4/U6/U8/U10
                                                          └─► TLV76733DRVR (U15) ─► +3V3 ─► 4x MCU, INA186

Connectors and I/O

8-pin JST SM08B-SRSS-TB (J1). The same eight signals are broken out as solder pads (U3). Connector ground returns on pads P1 and P2.

Pin Net Function
1 +BATT Battery positive
2 GND Ground
3 /CURR Current sense telemetry, INA186 output
4 unconnected See below
5 /M1 DShot, channel 1
6 /M2 DShot, channel 2
7 /M3 DShot, channel 3
8 /M4 DShot, channel 4

Pin 4 is the dedicated telemetry pin in the Betaflight 8-pin standard and is intentionally left unconnected: ESC to FC telemetry rides the motor signal lines over bidirectional extended DShot instead.

Firmware

AM32, one independent target per channel. Boards ship with the AM32 bootloader pre-loaded; firmware is flashed and configured in-browser at am32.ca. The AT32F421 plus NSG2065Q per-channel topology is the standard AM32 hardware target for this board class, so it works with Betaflight and any other DShot-capable flight controller.

Layout rules

Bulk decoupling on +BATT and GND exists on the PCB without matching schematic symbols. That is a deliberate board-only bank, and it is why DRC parity reports are noisy here. Do not run update-from-schematic without checking what it would delete.

The board outline follows the scalloped pad edges of the solder-pad breakout footprint (U3). The extent past the 30.5 mm mounting square is real outline geometry, not scratch: do not tidy it away.

Revisions

Rev Date Change
Rev3.3 2026-08-25 Export OpenESC-30x30-rev3.3, current. Silkscreen rebranded OpenDrone -> incutec (incl. back silk text); rev text pipeline-synced. Bulk bank moved from 52 x 10 uF (Samsung CL31B106KBHNNNE) to 52 x 4.7 uF 50 V X7R 1206 (CCTC TCC1206X7R475K500HT, C380366; was FH C29823 until 2026-08-26, swapped for LCSC retail price after the move off JLCPCB assembly). Via count 1702 (was 1453), 909 in-pad, after the final stitching pass.
Rev3.2 2026-08-22 Export OpenESC-30x30-rev3.2. Matched input network at the current-sense amplifier (R89/R90 1k, C40/C41 100n 50V, C42 1u) against the high-side common-mode feedthrough measured on the 20x20 sibling. Scale unchanged, 10 mV/A.
Rev3.1 2026-08-14 Export 30x30-Rev3.1, current. Bulk bank: 52 x 10 uF 1206 on +BATT/GND, 49 of them PCB-only (only C2, C3, C6 are in the schematic; 24 added since rev3). Board setup on the line standard.
Rev3 2026-08-11 Input clamp diodes D1-D3 removed, C2 and C3 doubled.
Rev1 2026-06-05 Validated build. Fab sets Rev1-30x30 and Rev1-30x3020x20, the latter combined with OpenESC-20x20.
V0.4 2026-05-29 Combined export V0.4-20x20-30x30.
V0.3 2026-05-06 Export V0.3; combined V0.3-20x20-30x30 on 2026-05-12.
V0.2 2026-05-05 Export V0.2.
V0.1 2026-03-18 First production export.