Skip to content

Hardware Standards

The rules every OpenSkyhawk board follows. These aren't preferences — they're the constraints that keep boards buildable, inspectable, and interchangeable across the cockpit. This page is the hub; the detail lives on the pages it links.

Component packages — must be inspectable

Every package must be visually inspectable after reflow. A T962 reflow oven handles the soldering; the limit is inspection, not soldering. So bottom-terminated parts are out.

Acceptable Not acceptable
SOIC, SSOP, TSSOP, HTSSOP QFN, DFN, WSON
LQFP BGA, LGA
SOT-23, SOT-223 any fully bottom-terminated package
Through-hole

HTSSOP is fine — its side leads are the critical joints; the exposed thermal pad is verified by continuity check.

MCU

  • CAN nodes: STM32F103 (LQFP48). All boards default to the STM32F103C8 (64 KB) — both PanelGroup nodes and PanelBridge (which carries the DCS-BIOS input map but still compiles to ~26 KB flash). The STM32F103CB (128 KB) is a drop-in fallback on the same footprint, needed by no board currently.
  • Requires an external 8 MHz crystal — the internal RC oscillator isn't accurate enough for 500 kbps CAN.
  • PA11/PA12 are shared between USB and CAN; pick one at init (CAN, in production).
  • HID controls: RP2040 off-the-shelf modules (flight stick, throttle, pedals, button boxes). No custom PCB.

Power

A PC ATX supply distributes 12 V and 5 V on the main bus; each board makes its own 3.3 V locally with an AMS1117-3.3. Local decoupling (100 nF + 10 µF per rail) is required on every board. Full detail — rails, budgets, the switching buck for high-current boards — is on the Power Architecture page.

CAN transceiver

SN65HVD230 (SOIC-8, 3.3 V), one per STM32 board, on PA11 (RX) / PA12 (TX). 120 Ω termination across CANH/CANL at the two end nodes only. See CAN Bus Protocol for the protocol side.

LED backlighting

Confirmed by bench testing: 5-LED series strings, MOSFET-switched per zone, one current-limiting resistor per string.

  • 5 × 5050 red LEDs in series per string (~10 V at 12 V supply, ~2 V resistor headroom)
  • One resistor per string — 120 Ω default (≈18 mA); 100 Ω for bright panels, 180 Ω for dim/night zones. (47 Ω was rejected — the resistor overheated.)
  • One IRLML2502 N-channel MOSFET per zone, low-side, gate driven directly by STM32 3.3 V PWM (no gate driver). PWM duty sets average brightness.
  • LEDs on the front face; resistors, MOSFETs, and everything else on the back.

The other reference pages

MCP23017 GPA7 / GPB7 — output only

A confirmed silicon bug means GPA7 and GPB7 must never be configured as inputs — the SDA signal can be corrupted if the pin voltage changes mid-transmission. That leaves 14 input pins per chip (GPA0–GPA6, GPB0–GPB6). GPA7/GPB7 may drive LEDs or other outputs freely.