0
mirror of https://github.com/incutec-hw/OpenESC_20X20.git synced 2026-09-13 05:39:03 +00:00
Files
incutec-OpenESC_20X20/AGENTS.md
2026-09-01 16:42:01 +02:00

152 lines
7.7 KiB
Markdown

# OpenESC-20x20
Open-Source 4-in-1 sensorless BLDC motor Electronic Speed Controller (ESC), 20 x
20 mm mounting pattern (FPV Drone standard). Part of OpenDrone by Incutec
product lineup.
## Repo
| Maintainer | @Just4Stan (Discord juststan_) |
|---|---|
| Status | See the `status-*` topic on the repo. |
| Designed in | KiCad 10 |
| KiCad project | `hardware/4in1-mini.kicad_pro` |
| Root schematic | `hardware/4in1-mini.kicad_sch` (power, current sense, connector) plus `hardware/ESC.kicad_sch`, one channel instantiated 4x |
| Board | `hardware/4in1-mini.kicad_pcb`, 6 layers, 1.6 mm, 2 oz outer copper, 1 oz inner copper. |
| Fixtures | [OpenDrone-Fixtures](https://github.com/OpenDrone-hw/OpenDrone-Fixtures): `OpenESC-20x20-QC/` press-contact QC fixture, `OpenESC-20x20-Flashing/` ST-LINK pogo-pin jig used by the flash script |
| Local library | `hardware/components.kicad_sym`, `hardware/4in1ESC.pretty/`, `hardware/4in1ESC.3dshapes/`. Frozen pre-consolidation libraries: use them, do not add to them |
| Shared library | `hardware/KiCad-Library/`, pinned submodule of [OpenDrone-hw/KiCad-Library](https://github.com/OpenDrone-hw/KiCad-Library), nickname `OpenDrone`; 3D models and exact component datasheets resolve through `OPENDRONE_LIB` |
| Design rules | `hardware/4in1-mini.kicad_dru` |
| Fab config | `hardware/fabrication-toolkit-options.json` |
| Board setup | 6 layers, 0.09 mm clearance and track, 0.16mm on outer layers (2 oz), via 0.35 on 0.20 drill |
| License | CERN-OHL-S-2.0 |
The project is named `4in1-mini`, not after the repo. Renaming it would break
the fab archive names, the release assets and the website board art.
## 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 the `OpenDrone` library and its
`PARTS-USED.md` first. If the part is there we have already sourced,
footprinted and shipped it, and its symbol links to the exact committed
datasheet: place it from `OpenDrone`. Draw a new part only when the catalogue
has nothing that fits, and import it with `easyeda2kicad` from its LCSC
number. Pulling a newer catalogue is a deliberate, reviewed submodule commit.
- **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](CONTRIBUTING.md).
- **Run ERC and DRC before every pull request.** Existing approved findings
may remain; a new type or increased count must be reviewed before merge.
Commands below.
## Environment
```sh
# schematic and board checks
kicad-cli sch erc hardware/4in1-mini.kicad_sch
kicad-cli pcb drc --schematic-parity --refill-zones hardware/4in1-mini.kicad_pcb
# netlist, for scripted analysis
kicad-cli sch export netlist --format kicadsexpr -o /tmp/4in1-mini.net hardware/4in1-mini.kicad_sch
```
Reusable scripts (renders, STEP export, packaging art) come from Incutec
hardware tooling; the OpenDrone release standard lives in
`OpenDrone-hw/.github/RELEASES.md`;
board-specific scripts live in `hardware/tools/`.
## 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 **DOY180N03T** MOSFETs, two per phase.
One channel is drawn once in `ESC.kicad_sch` and instantiated four times.
Current sensing is **board level, not per motor**: an INA186A3IDCKR at 100 V/V
across a single 0.2 mOhm 2512 shunt in the +BATT feed. That gives 20 mV/A and
165 A full scale against a 3.3 V ADC, reported as `/CURR`. The 30x30 sibling
uses two shunts in parallel and reads twice the current at half the sensitivity.
## Key parts
| Function | Ref | Part | LCSC | Note |
|---|---|---|---|---|
| Motor MCU, x4 | U2, U6, U8, U10 | AT32F421G8U7, QFN-28 | C2765098 | One per channel. |
| Gate driver, x4 | U3, U7, U9, U11 | NSG2065Q, QFN-24 | C41414478 | Standard footprint, many alternatives exist. |
| Power MOSFET, x24 | Q1-Q24 | DOY180N03T, PowerDI3333-8 | C49441966 | 30 V, 6 per channel. Standard 3x3 DFN footprint, many alternatives exist. |
| Current sense amp | U12 | INA186A3IDCKR, SC-70-6 | C2058245 | 100 V/V, board level high side |
| Current shunt | Rsense1 | 0.2 mOhm 2512 | C695806 | Single, in the +BATT feed |
| Buck | U13 | LMR54406DBVR, SOT-23-6 | C5219316 | 36 V in, 0.6 A; FB 115k/10k against 0.8 V, 10.0 V out |
| Buck inductor | U5 | FTC160808S4R7MBCA | C46594347 | 4.7 uH |
| LDO | U1 | TLV76733DRVR, WSON-6 | C2848334 | +10 V to +3V3 |
| Connector | J1 | SM08B-SRSS-TB, JST SH 8-pin | C160407 | Also broken out as solder pads. |
| Bulk electrolytic. | / | 470 uF 35V | / | To be installed on the battery connector by the user. |
| Bulk ceramic | See PCB | 4.7 uF 1206, X7R 50 V | C380366 | 22 fitted |
## Power
```
Battery + (2S-6S) ─► 0.2mOhm shunt ─► +BATT
+BATT ─┬─► MOSFET drains, motor phases
└─► LMR54406DBVR buck ─► +10V ─┬─► 4x gate driver
└─► TLV76733DRVR ─► +3V3 ─► 4x MCU, INA186
```
## Connectors and I/O
Betaflight Standard:
| 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: telemetry rides the motor signal lines over
bidirectional extended DShot instead.
## Firmware
[AM32 first needs a boatloader loaded using an ST-LINK
(AM32_F421_BOOTLOADER_PB4_V19.hex)
](https://github.com/am32-firmware/AM32) firmware is flashed and configured
in-browser at [am32.ca](https://am32.ca). 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. Do not run
update-from-schematic without checking what it would delete.
## Revisions
| Rev | Date | Change |
|---|---|---|
| Rev3.3 | 2026-08-25 | Export OpenESC-20x20-rev3.3. Silkscreen rebranded OpenDrone -> incutec for export restriction reasons on flagging anything containing 'Drone'. First Incutec production run. |
| Rev3.2 | 2026-08-22 | Export OpenESC-20x20-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. |
| Rev3.1 | 2026-08-14 | Export `20x20_ESC_Rev3.1`. Bulk bank: 22 x 10 uF 1206 on +BATT/GND, 21 of them PCB-only (19 CL refs absent from the schematic, CL50/CL51 doubled). Board setup moved to the line standard. |
| Rev3 | 2026-08-11 | Input clamp diodes D1-D3 removed, TVS diodes offer no protection when rail voltage is this close to the MOSFET Vds. |
| Rev2-20x20 | 2026-06-05 | Validated build. 15 pieces ordered by Incutec. |
| V2 | 2026-05-04 | Export `V2`. |
| V1 | 2026-03-18 | Export `V1`. A NextPCB variant export `V1_nextpcb` preceded it on 2026-03-14. |
| v0.3 | 2025-11-13 | Export `v0.3`. |
| v0.2 | 2025-11-13 | Export `v0.2`. |
| v0.1 | 2025-11-10 | First production export. |