You've already forked incutec-OpenFC-Lite-Mini
mirror of
https://github.com/incutec-hw/OpenFC-Lite-Mini.git
synced 2026-09-07 09:57:06 +00:00
185 lines
8.6 KiB
Markdown
185 lines
8.6 KiB
Markdown
# 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](https://github.com/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](https://github.com/OpenDrone-hw/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](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/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. |
|