0
mirror of https://github.com/incutec-hw/OpenFC-Lite-Mini.git synced 2026-09-03 17:42:36 +00:00
Files
incutec-OpenFC-Lite-Mini/AGENTS.md
2026-09-01 16:42:05 +02:00

8.6 KiB

OpenFC-Lite-Mini

Open-Source RP2350 based Flight Controller (FC), 20 x 20 mm mounting pattern (FPV Drone standard). Part of OpenDrone by Incutec product lineup.

Blackbox is a microSD slot, analog OSD generated on PIO (pixel OSD)

Repo

Maintainer @Just4Stan (Discord: juststan_)
Status See the status-* topic on the repo.
Designed in KiCad 10
KiCad project hardware/OpenFC.kicad_pro
Root schematic hardware/OpenFC.kicad_sch plus sub-sheets rp2350a, power, imu, osd, blackbox, pads
Board hardware/OpenFC.kicad_pcb, 6 layers, 1.6 mm
Local library hardware/lib.kicad_sym, hardware/lib.pretty/, hardware/lib.3dshapes/, nickname lib
Shared library hardware/KiCad-Library/, pinned submodule of OpenDrone-hw/KiCad-Library, nickname OpenDrone; 3D models and exact component datasheets resolve through OPENDRONE_LIB
Design rules hardware/OpenFC.kicad_dru, canonical block, no board-specific rules
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 called OpenFC in both this repo and OpenFC-Lite. Check which repo you are in before importing a part or running an export: a part imported into the wrong one looks exactly like a broken import.

Sheets (to copy from OpenFC-Lite)

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.
  • 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

# schematic and board checks
kicad-cli sch erc hardware/OpenFC.kicad_sch
kicad-cli pcb drc --schematic-parity --refill-zones hardware/OpenFC.kicad_pcb

# netlist, for scripted analysis
kicad-cli sch export netlist --format kicadsexpr -o /tmp/OpenFC.net hardware/OpenFC.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

An RP2354A runs Betaflight against a custom target (rp2350 sheet: MCU, USB-C, 12 MHz crystal, boot button, buzzer and LED-strip FETs). The IMU sits on SPI1 (imu) with its own interrupt line and its own 1.8 V analog supply, kept separate from the 3.3 V logic rail so gyro noise is not shared with the digital side. Blackbox logging goes to a microSD card on SPI0 (blackbox). Analog OSD is generated by the MCU through PIO and mixed into the composite video path by a discrete front end (osd), which is why there is no dedicated OSD chip.

Motor control is signal only: M1 to M4 leave as DShot on the 8-pin ESC connector (Betaflight Standard Connector), alongside battery voltage sense, ESC current sense and an ESC telemetry UART. Everything that drives current lives on the ESC.

Serial capacity is three UARTs, two hardware and one synthesised with PIO.

Key parts

Function Ref Part LCSC Note
MCU U10 RP2354A, QFN-60 C41378174 12 MHz crystal X1, 3.3 uH buck
IMU U9 BMI270 C2836813 multi-source land pattern, note below
10 V buck U3 LMR51430YFDDCR C5219261 3 A, switched rail
5 V buck U4 LMR51430YFDDCR C5219261 3 A, always on
3.3 V LDO U7 LP5912-3.3DRVR C524780 500 mA, fed from +4v5
1.8 V LDO U12 LP5912-1.8DRVR C2876234 IMU analog supply
Power-OR D6, D10 DSK24 C64890 +5V_BUCK and +5V_USB into +4v5
OSD video buffer U1 COS8051SOT C7463385 op-amp
OSD sync separator U2 TLV7031DPWR C2876045 comparator
OSD pixel switch U18 SN74LVC1G3157DTBR C2673087 SPDT analog switch
microSD slot Card1 TF-021B-H265 C498185 smaller footprint

The IMU land pattern is LGA-14 3.0 x 2.5 mm with pads 2 and 3 grounded and 10 and 11 unconnected, electrically safe for Bosch BMI2xx, TDK ICM-4xxxx and ST LSM6D parts alike: swapping the IMU is a not a layout change. Pad 9 (INT2 on the BMI270, CLKIN on TDK parts) dead-ends on the imu sheet, so a TDK part would run without external clock sync.

Power

+BATT (3S-6S) ─┬─► U3 10V buck +10V ─► VTX
               └─► U4 5V buck ─► +5V ─► D6 ─┐
                                            ├─► +4v5 ─┬─► U7 3.3V LDO ─► MCU IO, IMU IO, microSD, OSD
+5V_USB ────────────────────────► D10 ──────┘         └─► U12 1.8V LDO ─► IMU

+3.3V ─► RP2354 internal switcher ─► +1.1V core

The 10 V rail is gated by the MCU so a VTX can be switched off in firmware. D6 and D10 diode-OR battery and USB into +4v5 with no pass element, and the external 5 V pads hang directly on the buck output, so USB never back-feeds them. There is no reverse-polarity protection.

Connectors and I/O

Connector Ref Part Function
ESC, 8-pin JST SH P1 SM08B-SRSS-TB, C160407 1 +BATT, 2 GND, 3 current sense, 4 ESC telemetry (PIO UART RX), 5-8 M1-M4. Using betaflight standard.
VTX, 6-pin JST SH U8 SM06B-SRSS-TB, C160405 1 +10V, 2 GND, 3 UART0 TX, 4 UART0 RX, 5 GND, 6 UART1 RX
USB-C USB1 16-pin Type-C Configuration and flashing, USB full speed

Everything else issolder pads (pads sheet)

GPIO map

GPIO Function
0, 1 UART0 TX/RX, VTX connector
2, 3 PIO UART TX/RX; RX doubles as ESC telemetry on P1 pin 4
4, 5 I2C0 SDA/SCL, pulled up to 3.3 V
6, 7 UART1 TX/RX, receiver; SBUS inversion at the IO mux in firmware
8 LED strip
9 IMU interrupt
10-13 SPI1 SCK/MOSI/MISO/CS, IMU
14-16 OSD_W, OSD_EN, OSD_SYNC
17 Beeper, low-side N-FET
18-21 SPI0 SCK/MOSI/MISO/CS, microSD
22-25 Motors, descending: M4, M3, M2, M1
26 Status LED, blue
27 10V_ENABLE (PINIO)
28, 29 ADC2 ESC current through a 1 k + 100 nF RC, ADC3 battery voltage through a 100 k / 10 k divider with 100 nF

The QFN-60 exposes only four ADC channels, and the ADC0/ADC1 pins are spent on the status LED and 10V_ENABLE, so battery voltage and ESC current are the only analog inputs: the RSSI and spare ADC pads of the QFN-80 OpenFC-Lite do not exist here.

Firmware

Betaflight against a custom target: BOARD_NAME = OPENFC_LITE_MINI_RP2350A, MANUFACTURER_ID = OPFC. A prebuilt uf2 lives in firmware/. First flash: hold the boot button, plug in USB-C, and copy the uf2 onto the RP2350 UF2 mass-storage device; after that the configurator flashes over USB.

Layout rules

  • The IMU's 1.8 V analog supply is deliberately separate from the 3.3 V logic rail. Do not merge them to save a regulator.
  • RP2350 core buck placement follows the RP2350 datasheet, section 6.3.8.1: L4 and its input and output capacitors stay tight to U10, with copper pulled back under the switch node.

Revisions

Rev Change
Rev3.3 Current. Export OpenFC-Lite-Mini-rev3.3. Silkscreen rebranded OpenDrone -> incutec for export restriction reasons on flagging anything containing 'Drone'. First Incutec production run.
Rev3.2 Export OpenFC-Lite-Mini-rev3.2.
Rev3.1 TPS2116 mux replaced by the DSK24 diode-OR into +4v5.
Rev3 LDO/IMU swap, pad attribute fixes.
Rev2 Flown.
Rev1 First prototype, bench tested.