LD-EDU-002  ·  v2.4.6  ·  published  ·  2026-03-30  ·  CC BY-SA 4.0
docs  /  education  /  libdrone — Electronics and Systems Engineering Reference

About

The Electronics & Systems Engineering Reference is a technical deep-dive into every electronic system on the drone. Written for someone who builds and understands hardware but wants to understand why each engineering decision exists and what is actually happening inside each component. Covers power architecture, flight controller, IMU, PID control, ESC, video system, GPS, and the sensor payload.

Table of Contents

  1. Power Architecture
  2. Flight Controller — Matek H7A3-SLIM
  3. Inertial Measurement & Sensor Fusion
  4. PID Control Theory
  5. Motor Control & ESC — Pilotix 75A AM32
  6. Brushless Motor Physics — BrotherHobby Avenger 2507
  7. Digital FPV — HDZero Freestyle V2
  8. GPS & Navigation — Matek M10Q-5883
  9. Radio Link — ELRS & RadioMaster RP2
  10. Serial Protocols: UART, SPI, I2C, DShot
  11. Payload Electrical Architecture — Dual GX12-7
  12. Sensor Payload — SEN66 & ESP32-S3
  13. Frame Materials & Structural Engineering
  14. Thermal Management
  15. EMC & Signal Integrity

1. Power Architecture

1.1 The 6S LiPo Cell

A lithium-polymer cell is an electrochemical device. The "6S" designation means six cells connected in series. Each cell has a nominal voltage of 3.7V, a fully charged voltage of 4.2V, and a minimum safe discharge voltage of 3.5V (3.3V hard cutoff).

Fully charged:  6 × 4.20V = 25.2V
Nominal:        6 × 3.70V = 22.2V
Storage:        6 × 3.80V = 22.8V
Minimum:        6 × 3.50V = 21.0V

The "150C" rating on the Tattu R-Line means the cell can theoretically discharge at 150 times its capacity. For a 1800mAh cell: 150 × 1.8A = 270A continuous. In practice, the internal resistance limits you well before this — it's a marketing ceiling, not a real operating point. In flight you draw 20–60A depending on throttle.

Why 6S for this build: The 2507 1750KV motor at 6S spins at roughly 1750 × 22.2 = 38,850 RPM unloaded. Under prop load it's lower — around 30,000–34,000 RPM. This is the correct RPM range for a 6-inch propeller to be efficient. Going to 4S would give only ~26,000 RPM — too slow for good thrust efficiency. Going to 8S would give ~52,000 RPM — faster than the motor bearings want to run at this stator size.

1.2 Power Rails

The drone has three distinct power domains:

6S battery (2125V) ─┬─ ESC main power bus (direct, no conversion)
                        Motors draw directly from here
                     
                     ├─ FC 5V BEC (internal to H7A3-SLIM)
                        Powers: FC itself, RX (RP2), GPS, buzzer, fan, GX12 5V rail
                        Current: ~1A continuous, 2A peak
                     
                     └─ VTX power via XL4015 buck converter (912V stepped down from 6S)
                         The HDZero VTX accepts 725V input directly
                         Buck converter provides voltage stability against battery sag

1.3 The Capacitor's Role

The 1000µF 35V capacitor (Panasonic, low-ESR) is placed as close to the ESC power input pads as physically possible. It is not there for bulk energy storage — at 1000µF and 22V it stores only 0.24 joules, which is trivial versus the battery.

Its job is to suppress voltage spikes. When a motor rapidly decelerates (e.g. during fast directional changes or prop braking in BiDi mode), the BLDC motor briefly acts as a generator, pushing current back through the ESC into the power bus. This causes a voltage spike that can exceed the ESC MOSFETs' drain-source breakdown voltage (Vds).

The capacitor absorbs that spike, holding the bus voltage below the MOSFET breakdown threshold. The TVS diode integrated into the Pilotix ESC provides the same protection on a faster timescale (nanoseconds vs microseconds for the cap) — they work in complementary frequency bands.

The correct capacitor here is low-ESR electrolytic or polymer, not a general-purpose type. ESR (Equivalent Series Resistance) determines how fast the cap can respond to a spike. A Panasonic FM or low-Z series has ESR <0.1Ω at 100kHz — generic electrolytics can be 10× worse and will fail to clamp fast spikes.

1.4 Power Sequencing

On battery plug-in: 1. ESC power bus charges instantly (battery → XT60 → ESC) 2. FC powers on ~100ms later via BEC (startup capacitors charge first) 3. Betaflight initialises, gyro calibrates (DO NOT MOVE during first 3 seconds) 4. ELRS receiver connects to transmitter (~500ms) 5. GPS acquires fix (30–90 seconds cold start, 5–15 seconds warm) 6. FC arms when pilot enables arm switch

2. Flight Controller — Matek H7A3-SLIM

2.1 The STM32H7A3 Processor

The H7A3 is a 32-bit ARM Cortex-M7 running at 280 MHz. The Cortex-M7 is a dual-issue superscalar pipeline with a hardware floating-point unit (FPU) that handles 32-bit IEEE 754 single-precision floats in a single cycle. This matters because every PID calculation involves dozens of floating-point multiply-accumulate operations.

At 280 MHz with a 6-stage pipeline, the processor executes roughly 560 million instructions per second in ideal conditions. The PID loop running at 8kHz uses perhaps 2–3% of this. The remaining headroom runs the scheduler, GPS parser, OSD generator, logging, and all UART communication simultaneously without interruption.

The "H7" designation (vs F4, F7) matters for two reasons: the double-precision FPU handles filter coefficient calculations without precision loss, and the DMA2D controller can move sensor data from peripheral registers to RAM without CPU involvement at all.

2.2 DMA — Why It Matters

DMA (Direct Memory Access) is a hardware block that moves data between peripherals and RAM without involving the CPU. On the H7A3, the gyro communicates over SPI at ~10 MHz. Without DMA, the CPU would have to sit in a busy-wait loop during every SPI transfer — burning cycles doing nothing useful.

With DMA, the SPI peripheral raises a DMA request, the DMA controller reads the gyro data and writes it to a pre-allocated RAM buffer, then raises an interrupt. The CPU only gets involved at the end to process the data. This is how Betaflight achieves a 32kHz gyro read rate while simultaneously running the 8kHz PID loop, decoding CRSF packets on UART3, and building the OSD frame for the VTX.

2.3 The 6 UARTs and Their Assignment

Each UART is a dedicated hardware block — not a shared bus. All 6 can run simultaneously at different baud rates without any multiplexing overhead:

UART Device Baud Rate Protocol Direction
1 HDZero VTX 115200 MSP/DisplayPort Bidirectional
2 Matek M10Q GPS 57600 UBX/NMEA FC reads GPS
3 RadioMaster RP2 420000 CRSF Bidirectional
4 Connector A (payload) configurable MSP Bidirectional
5 Connector B (payload) configurable custom Bidirectional
6 Spare

CRSF at 420000 baud means the RP2 sends a 64-byte packet in ~1.5ms. GPS at 57600 means a full UBX position packet (~100 bytes) takes ~14ms — which is why the M10Q update rate is 10Hz (every 100ms), not faster.

2.4 ADC Channels

The H7A3 has onboard 16-bit ADCs. Betaflight uses these for: - Battery voltage monitoring: a resistor divider scales 25.2V down to the 3.3V ADC reference range. The FC reads raw ADC counts and applies a calibration factor. Resolution: ~0.4mV per count → more than sufficient for cell voltage monitoring. - Current sensing: the ESC sends an analogue signal (typically 100–133 mV/A) representing current draw. The FC integrates this over time for mAh consumed. - RSSI (optional): some receivers output analogue RSSI on a dedicated pin.

3. Inertial Measurement & Sensor Fusion

3.1 The IMU — What a Gyroscope Actually Measures

The H7A3-SLIM uses an ICM-42688-P MEMS gyroscope (6-axis: 3-axis gyro + 3-axis accelerometer). A MEMS gyroscope works by Coriolis force. Inside the chip, a microscopic proof mass is driven to oscillate at a precise resonance frequency by electrostatic actuation. When the chip rotates, the Coriolis force deflects the oscillating mass perpendicular to both the oscillation direction and the rotation axis. A capacitive sense element measures this deflection. The deflection magnitude is proportional to the rotation rate (degrees/second).

The ICM-42688-P ODR (Output Data Rate) is configured to 3200 or 6400 Hz in Betaflight. This means a new gyro reading every 156–312 µs. The raw data arrives over SPI, 16 bits per axis, at the configured rate. At 6400 Hz, the gyro pushes ~192 bytes/second into the DMA buffer.

3.2 Noise Sources and Why Filtering Exists

Raw gyro data from a quadcopter is contaminated by several noise sources:

Motor vibration: Every motor generates mechanical vibration at harmonics of its electrical commutation frequency. At 30,000 RPM, the fundamental is 500 Hz. With 14 pole magnets (7 pole pairs), the electrical frequency is 3500 Hz. These appear in the gyro signal as distinct frequency peaks — not random noise, but narrow-band sinusoids superimposed on the actual attitude signal.

Propeller imbalance: Any mass asymmetry in a prop creates a once-per-revolution vibration — one impulse per motor rotation. At 30,000 RPM this is 500 Hz.

Frame resonance: The physical airframe has structural resonance frequencies. A 3D-printed frame typically resonates in the 100–300 Hz range depending on stiffness.

Electronic noise: Switching noise from ESC MOSFETs couples onto power and ground planes, inducing small voltages in gyro supply rails, shifting the zero-rate output.

The flight controller must separate the real attitude signal (0–100 Hz for any realistic flight manoeuvre) from all this noise before feeding it to the PID loop. If you don't filter, the derivative term (D-term) amplifies all the high-frequency noise and causes prop wash oscillation or motor heat.

3.3 RPM Filter — The Key Innovation

Betaflight's RPM filter (introduced ~4.1) is the reason modern FPV drones are tunable at all. Instead of using fixed-frequency notch filters (which waste filter bandwidth on frequencies that change with throttle), the RPM filter uses BiDi DShot telemetry to know the exact current RPM of every motor. It then places notch filters precisely at the motor fundamental and its harmonics (1×, 2×, 3× RPM frequency), tracking them in real time as throttle changes.

Motor at 24,000 RPM → fundamental = 400 Hz
                       2nd harmonic = 800 Hz
                       3rd harmonic = 1200 Hz
→ Three notch filters placed at exactly 400, 800, 1200 Hz
→ These move continuously as throttle changes

Without RPM filtering, you need high D-term lowpass cutoffs to avoid amplifying motor noise, which reduces responsiveness. With RPM filtering, the motor noise is removed surgically, and you can run much higher D-term cutoffs for better prop wash handling.

On the H7A3 at 8kHz PID loop rate, Betaflight runs 4 motors × 3 harmonics = 12 notch filters per axis × 3 axes = 36 notch filters, all updated in real time. This is the reason for needing an H7-class processor — the F4 couldn't do this without overloading.

3.4 Dynamic Notch Filter

In addition to the RPM filter, Betaflight runs a dynamic notch filter that analyses the gyro spectrum in real time using a Biquad filter bank, identifies the highest-amplitude noise peaks, and places additional notch filters there. This catches noise sources not related to motor RPM — frame resonances, propeller aerodynamic noise, etc.

3.5 Accelerometer and Angle Mode

The accelerometer measures specific force (acceleration minus gravity). In hover, it reads ~1G pointing down (Earth's gravity), which tells the FC which way is "down." This allows Angle mode (self-levelling), GPS Rescue, and position hold.

For acrobatic flight (manual/rate mode), the accelerometer is largely irrelevant — the FC integrates gyro rate to track attitude. The accelerometer is needed only for GPS-assisted modes because it provides the absolute gravity reference that prevents accumulated gyro drift from giving a wrong "down" direction over time.

4. PID Control Theory

4.1 What the Loop is Controlling

The PID loop runs at 8kHz (every 125 µs). At each step: 1. Setpoint: the desired rotation rate (from pilot sticks, in degrees/second) 2. Process variable: the actual rotation rate (from filtered gyro, in degrees/second) 3. Error: setpoint minus process variable 4. Output: throttle correction per motor (added/subtracted from base throttle)

For a quadcopter there are three separate PID loops running simultaneously: roll axis, pitch axis, and yaw axis. Each produces a correction value. The final motor command mixes all three corrections onto the four motors:

Motor 1 (FL) = base_throttle + roll_correction - pitch_correction + yaw_correction
Motor 2 (FR) = base_throttle - roll_correction - pitch_correction - yaw_correction
Motor 3 (RL) = base_throttle + roll_correction + pitch_correction - yaw_correction
Motor 4 (RR) = base_throttle - roll_correction + pitch_correction + yaw_correction

4.2 P Term — Proportional

The P term is proportional to the current error. If the drone is rolling right when it should be level, P produces a correction proportional to how far off it is.

Too low: drone feels sluggish, slow to respond, oscillates slowly (under-damped) Too high: drone oscillates rapidly at high frequency (over-damped → unstable) Correct: crisp response, settles quickly, no visible oscillation

P is the primary "stiffness" of the flight controller. For a mapping drone like libdrone, P is tuned conservatively — snappy enough for wind rejection, not so aggressive that it fights itself during slow survey transects.

4.3 I Term — Integral

The I term accumulates error over time. If a steady-state error persists (e.g. the drone consistently drifts right due to a slightly heavier left side), the integral builds up and applies a permanent correction offset. Without I, the drone would need constant stick input to maintain level flight in the presence of any imbalance.

The I term also prevents motor drift in long-duration hover — critical for air quality mapping at a fixed position. It accumulates the offset needed to hold altitude against slow battery sag or wind drift.

Too high: "I-term windup" — large turns cause the accumulated integral to kick the drone unpredictably when it returns to level.

4.4 D Term — Derivative

The D term acts on the rate of change of the error — it is the "brake." When the drone is approaching the setpoint rapidly, D applies a braking force to prevent overshoot. It's essentially predictive: "the error is decreasing fast, slow down the correction before you overshoot."

D is the most noise-sensitive term. Because it operates on the derivative of the signal, any high-frequency noise is amplified (differentiation amplifies high frequencies by definition). This is exactly why the RPM filter and dynamic notch filter are so critical — they remove high-frequency motor noise before the D term gets to it.

D is also the term most responsible for handling prop wash — the turbulent air that hits the props after a fast manoeuvre. A well-tuned D term damps out the resulting oscillation quickly.

4.5 Feed-Forward

Modern Betaflight also implements feed-forward (FF), which acts directly on the setpoint derivative rather than the error. When you move the sticks, FF immediately generates a proportional motor correction before the drone starts moving — it's anticipatory rather than reactive. This dramatically improves stick responsiveness without increasing P (and risking oscillation).

For libdrone's mapping missions, FF is set conservatively — the drone is commanded via GPS Rescue and position modes rather than rapid manual inputs.

5. Motor Control & ESC — Pilotix 75A AM32

5.1 What an ESC Does Electrically

The ESC is a 3-phase bridge inverter. It takes DC from the battery and converts it to 3-phase AC to drive the motor. Inside, there are 6 N-channel MOSFETs arranged as a full H-bridge (two per phase):

Battery+ ─── HI_A ─┬─ LO_A ─── Battery-
                   Phase A
Battery+ ─── HI_B ─┬─ LO_B ─── Battery-
                   Phase B
Battery+ ─── HI_C ─┬─ LO_C ─── Battery-
                   Phase C

At any moment, exactly one high-side and one low-side MOSFET are active, connecting two of the three motor windings to battery+ and battery- respectively. The third winding is floating. This creates a magnetic field in the stator that attracts the permanent magnets in the rotor, causing it to turn. The ESC continuously switches this pattern to keep the rotor chasing the rotating magnetic field.

5.2 AM32 — Open-Source ESC Firmware

AM32 is open-source 32-bit ESC firmware (vs proprietary BLHeli_32). On the Pilotix, it runs on an STM32F051 arm processor inside the ESC. AM32 uses 48kHz PWM switching frequency — each MOSFET switches on/off 48,000 times per second. Higher switching frequency means smoother motor current (less ripple), cooler motor windings, but slightly hotter MOSFETs (switching losses increase with frequency).

AM32 supports both trapezoidal commutation (6-step, simpler, slightly coarser) and sinusoidal commutation (smoother). For FPV use, trapezoidal at 48kHz is standard.

5.3 DShot600 Protocol

DShot is a digital protocol between FC and ESC — replacing the old analogue PWM (50Hz, 1000–2000µs pulse width) with a 600 kBit/s serial frame:

DShot600 frame (16 bits total):
[11 bits throttle] [1 bit telemetry request] [4 bits CRC]

The 11-bit throttle value gives 2048 distinct speed levels (vs ~1000 for PWM). The CRC (cyclic redundancy check) detects corruption — a corrupted DShot packet is discarded, preventing a glitch from causing a motor spike.

"600" refers to 600 kBit/s. At 8kHz loop rate, the FC sends a DShot packet every 125µs. A 16-bit packet at 600 kBit/s takes ~26µs to transmit — well within the window. DShot300 or DShot150 are also available for noisier electrical environments.

5.4 Bidirectional DShot (BiDi) and RPM Telemetry

In BiDi mode, the ESC responds to each DShot packet with an eRPM (electrical RPM) value using the same wire, in the gap between FC transmissions. The eRPM is related to mechanical RPM by the number of motor pole pairs:

eRPM = mechanical_RPM × pole_pairs
For 2507 motor (14 poles = 7 pole pairs):
mechanical_RPM = eRPM / 7

This eRPM value is what Betaflight's RPM filter uses to track motor frequency in real time. The latency is approximately one PID loop cycle (125µs at 8kHz) — fast enough that the filter always knows the correct motor speed within one measurement.

5.5 "Props In" Configuration

AM32 is configured for "Props In" — meaning all four motors spin inward toward the centre of the drone when viewed from above (front-left and rear-right spin clockwise, front-right and rear-left spin counter-clockwise). This is the standard FPV racing configuration and it changes the yaw authority compared to "Props Out."

Props In also slightly reduces the gyroscopic precession effects during aggressive manoeuvres because the angular momenta of adjacent motors partially cancel. For a mapping drone this is a minor consideration.

6. Brushless Motor Physics — BrotherHobby Avenger 2507

6.1 Stator Nomenclature

"2507" means: 25mm stator diameter, 7mm stator height. The stator is the stationary copper winding inside the bell. The rotor (bell) with permanent magnets spins around it.

A larger stator diameter means a larger moment arm for the magnetic force → more torque. A taller stator means more copper in the winding → higher current capacity, more power. The 2507 is a "wide, short" design — optimised for torque over RPM, suitable for 6" props. A 2306 (23mm × 6mm) is narrower and taller — optimised for RPM, suitable for 5" props.

6.2 KV Rating and Winding

"1750KV" means the motor spins 1750 RPM per volt at no load. KV is determined entirely by the winding — specifically the number of turns of copper wire per stator tooth. Fewer turns = higher KV (faster, less torque). More turns = lower KV (slower, more torque).

No-load RPM at 6S nominal (22.2V): 1750 × 22.2 = 38,850 RPM
No-load RPM at 6S charged (25.2V): 1750 × 25.2 = 44,100 RPM
Under-load RPM (typical hover):     ~28,00032,000 RPM

The under-load RPM is lower because of back-EMF. As the motor spins, it generates a counter-voltage (back-EMF) proportional to RPM. Effective voltage driving current = battery voltage minus back-EMF. Equilibrium is reached when back-EMF equals the applied voltage minus the resistive drop across the winding.

6.3 Pole Count and Commutation

The 2507 has 14 permanent magnets (7 pole pairs). The stator has 12 teeth (12 coils). This 14-pole / 12-tooth (14N12P) configuration is standard for efficiency at medium RPM.

Electrical frequency = mechanical RPM × pole pairs / 60 (Hz) At 30,000 RPM: electrical frequency = 30,000 × 7 / 60 = 3,500 Hz

This means the ESC must commutate (switch the active phase) 3,500 times per second. At 48kHz switching frequency, there are 48,000 / 3,500 ≈ 14 switching cycles per electrical commutation — more than enough for smooth phase transitions.

6.4 Thrust Curve and the 2400–2600g Peak

The BrotherHobby Avenger 2507 1750KV on 6S with HQ 6 × 3×3 props produces approximately 2400–2600g thrust per motor at peak (40–55A draw). This is at roughly 80–90% throttle.

The thrust-to-current relationship is nonlinear: - At 0% throttle: 0g, 0A - At 50% throttle: ~900–1000g, ~15–18A - At 75% throttle: ~1800–2000g, ~28–32A - At 100% throttle: ~2400–2600g, ~40–55A

This nonlinearity (thrust ∝ RPM$^2$, current ∝ RPM$^3$ approximately) means the last 20% of throttle delivers proportionally less thrust per amp drawn. For a mapping drone spending most of its time at 28–35% hover throttle, efficiency is excellent.

6.5 Floating Motor Mount — Why It Exists

The motor mount is not rigid — it uses silicone O-rings between the motor base and the PETG arm head. This is vibration isolation. The motor generates vibration at its rotation frequency and harmonics. If this transmits rigidly to the arm and frame, it reaches the IMU and contaminates the gyro signal.

The silicone O-rings have a natural frequency well below the motor's operating range, acting as a mechanical low-pass filter. Vibration above the resonance frequency is attenuated by 12–20 dB per octave. This is the mechanical equivalent of the software RPM filter — both address the same problem at different levels of the signal chain.

7. Digital FPV — HDZero Freestyle V2

7.1 Why Digital FPV Exists

Analogue FPV transmits composite video on a 5.8GHz carrier. The video signal is a continuous 50Hz interlaced frame at 576i or 480i resolution. Latency is the time to capture one video line plus RF propagation — typically 10–20ms total. However, when signal degrades, analogue shows "snow" — you still see a degraded image.

Digital FPV encodes the video frame, compresses it, transmits a packet, receives it, decodes, and displays. The HDZero system achieves approximately 0–2ms encoding latency (hardware H.265 encoder, not software) plus RF propagation plus 0–2ms decoding. Total: typically 4–8ms. This is perceptually instantaneous.

When digital signal degrades, it either delivers a perfect frame or nothing — "cliff edge" failure. This is why diversity antenna systems matter for digital FPV.

7.2 MIPI CSI-2 — The Camera Interface

MIPI (Mobile Industry Processor Interface) CSI-2 (Camera Serial Interface 2) is the physical layer connecting the HDZero camera to the VTX. It uses differential signalling: each data bit is sent as a pair of complementary voltage levels (one wire goes high, the other low simultaneously). The receiver measures the difference — this cancels out any common-mode noise induced by nearby wires.

On libdrone, the 225mm MIPI cable runs nose-to-tail in a dedicated 16mm × 1.5mm channel in the Platform. The channel shields it from motor wires on both sides and maintains the tight radius constraints the MIPI standard requires. Exceeding the minimum bend radius of the flat cable causes differential impedance changes that create signal reflections — corrupting the video signal at high pixel clocks.

7.3 MSP DisplayPort

MSP (MultiWii Serial Protocol) is the protocol between the FC and the VTX for On-Screen Display (OSD). The FC collects telemetry data (battery voltage, current, GPS coordinates, flight mode, RSSI, altitude) and encodes it as MSP packets sent over UART1. The VTX decodes these and overlays them on the video frame.

DisplayPort in this context is not the VESA standard — it's HDZero's protocol for sending character-based OSD data (like a terminal emulator) rather than raw bitmap. This is efficient because the FC sends only text strings and position coordinates, not full pixel data.

8. GPS & Navigation — Matek M10Q-5883

8.1 GNSS Constellations

The M10Q is a u-blox M10 GNSS receiver. It can simultaneously track multiple satellite constellations:

Constellation Origin Satellites Frequency
GPS USA 31 operational L1 C/A (1575.42 MHz)
Galileo EU 28 operational E1 B/C (1575.42 MHz)
BeiDou China 45 operational B1C (1575.42 MHz)
GLONASS Russia 24 operational L1 OF (1602 MHz offset)

libdrone is configured for GPS + Galileo + BeiDou only — GLONASS disabled. The reason: near eastern borders of the Czech Republic, GLONASS jamming has been observed (originating from the east). GLONASS satellites at those signal levels can corrupt the receiver's position solution even when not providing a valid fix. Disabling the constellation entirely removes the attack vector.

With 3 constellations in a good sky view, you typically see 18–26 satellites — more than enough for an accurate position fix. GPS Rescue minimum is 8 satellites.

8.2 EGNOS — SBAS Augmentation

EGNOS (European Geostationary Navigation Overlay Service) is the European SBAS (Satellite-Based Augmentation System). It uses geostationary satellites to broadcast correction data — atmospheric ionospheric delay corrections, satellite clock corrections, and satellite ephemeris corrections — computed from a network of precisely surveyed ground stations across Europe.

Enabling EGNOS reduces horizontal position error from the standard 2–5m CEP (Circular Error Probable) down to approximately 0.5–1.5m CEP. For air quality mapping where you're correlating sensor readings with GPS coordinates, this matters — a 1m position accuracy means your pollution map aligns correctly with streets and buildings.

8.3 GPS Rescue Mode

Betaflight's GPS Rescue is a failsafe behaviour: if the RC link is lost for longer than a configured timeout, the FC switches to GPS-guided return-to-home. It uses:

  1. Current GPS position and home position (recorded at arm time) to compute bearing and distance to home.
  2. Altitude hold using barometer (if present) or GPS altitude.
  3. Magnetometer (compass) for heading — the M10Q-5883's "-5883" suffix indicates the integrated QMC5883 compass chip.

The compass is mounted at the nose — maximum physical separation from the ESC, battery leads, and motor wires, all of which carry high AC currents that generate magnetic fields strong enough to saturate or deflect the compass reading.

8.4 10Hz Update Rate and Why It's Enough

The M10Q sends position updates at 10Hz (every 100ms). GPS Rescue interpolates between updates. For a drone moving at 10 m/s, the position changes 1m between updates — acceptable for the proportional navigation algorithm Betaflight uses.

Faster update rates (up to 25Hz on the M10) would require higher baud rates that stress the UART2 connection and increase processing load on the FC. 10Hz is the sweet spot for this application.

9.1 ExpressLRS Physical Layer

ELRS (ExpressLRS) is an open-source RC link protocol. The RP2 receiver uses the SX1280 2.4GHz LoRa transceiver. LoRa (Long Range) uses chirp spread spectrum (CSS) — the carrier frequency chirps linearly from low to high (or high to low) within a fixed bandwidth. The receiver correlates the received signal against a known chirp template, achieving processing gain that allows decoding at signal levels well below the noise floor.

This gives ELRS exceptional range and interference resistance compared to traditional 2.4GHz FHSS systems (like FrSky), at the cost of slightly higher latency (because longer chirps encode more spread spectrum gain).

9.2 250Hz LBT Mode

libdrone uses ELRS 250Hz LBT (Listen Before Talk). At 250Hz, the link sends 250 RC packets per second — one every 4ms. Latency from stick movement to FC command is ~4ms plus processing time: approximately 6–8ms total.

LBT is a regulatory requirement in some EU countries — the transmitter checks if the channel is occupied before transmitting. LBT mode operates in the full 2.4GHz band under CE regulations.

9.3 CRSF Protocol

CRSF (Crossfire Serial Format) is the serial protocol between the RP2 receiver and the FC. It runs at 420,000 baud over UART3. A CRSF packet is 64 bytes: - 8 channels at 11-bit resolution (2048 values per channel) - Link statistics (RSSI, SNR, packet loss rate) - Bidirectional: FC can send MSP commands back to the receiver

The 11-bit channel resolution gives fine stick control — the pilot can command any angular rate from 0 to 1800°/s in increments of ~0.88°/s.

10. Serial Protocols: UART, SPI, I2C, DShot

10.1 UART (Universal Asynchronous Receiver-Transmitter)

UART is point-to-point (one device per wire pair), asynchronous (no shared clock — both ends agree on baud rate beforehand), full-duplex (TX and RX are separate wires). A UART byte is: 1 start bit + 8 data bits + 1 stop bit = 10 bit-times. At 57600 baud: one byte takes 10/57600 = 173µs. A 100-byte GPS packet takes 17.3ms.

UARTs are ideal for devices that send periodic data bursts with processing time between bursts — GPS, VTX control, radio receivers.

10.2 SPI (Serial Peripheral Interface)

SPI is synchronous (shared clock), full-duplex, master-slave. The master drives the clock (SCK), sends data (MOSI), receives data (MISO), and selects devices (CS). SPI can run at 10–50 MHz on an STM32 — orders of magnitude faster than UART.

The ICM-42688-P gyro uses SPI at ~10 MHz, allowing a 16-byte sensor readout in ~13µs — fast enough for 32kHz gyro sampling. SPI is used when speed matters and you have few devices (no addressing overhead).

10.3 I2C (Inter-Integrated Circuit)

I2C is synchronous (shared clock), half-duplex, multi-master/multi-slave on two wires (SDA + SCL). Each device has a 7-bit address. Devices pull the bus low (open-drain) — both lines are pulled high by resistors when idle.

Speed: 100kHz (Standard), 400kHz (Fast Mode), 1MHz (Fast Plus). libdrone uses 400kHz Fast Mode for the SEN66 sensor payload.

At 400kHz, sending one byte (start + 7-bit address + R/W + ack + 8 data bits + ack = 18 bit-times) takes 45µs. The SEN66 returns a full measurement frame in ~250µs.

I2C is used when you have multiple low-bandwidth devices on a shared bus and wiring simplicity matters — two wires can serve many devices.

10.4 DShot — Digital Motor Protocol

Covered in §5.3. Key distinction: DShot is one-way by default (FC → ESC) in standard mode, and two-way in BiDi mode, using the same physical wire but time-multiplexed. The ESC's eRPM response is sent in the inter-frame gap (the quiet period between FC transmissions). The FC must open its UART in receive mode during this window — a tight timing constraint met by DMA.

11. Payload Electrical Architecture — Dual GX12-7

11.1 Why Two Connectors Instead of One

GX12 is a 12mm diameter aviation-style circular connector series. The series supports 2, 3, 4, 5, 6, and 7 pin variants — maximum 7 pins. A single GX12-12 (12-pin) does not exist in practice. libdrone's 12-signal interface is therefore split across two GX12-7 connectors with one spare pin each.

11.2 Connector A — Power and Primary Comms (Left, X=−25mm)

PIN Signal Purpose Wire AWG
1 5V (FC BEC) Payload power — 2A continuous 24
2 GND primary Power return — star ground 24
3 UART4 TX FC → payload commands (MSP) 28
4 UART4 RX Payload → FC telemetry (OSD) 28
5 I2C SCL 400kHz sensor bus clock 28
6 I2C SDA 400kHz sensor bus data 28
7 SPARE Reserved

Wire exit: LEFT-facing slot, routes into signal channel at X=−20mm. I2C SCL/SDA are twisted together — reduces common-mode noise on the differential pair.

11.3 Connector B — Secondary Comms and Aux (Right, X=+25mm)

PIN Signal Purpose Wire AWG
1 GND shield Signal ground reference 28
2 GPS TX tap Read-only GPS feed via 1MΩ 28
3 UART5 TX FC → payload secondary 28
4 UART5 RX Payload → FC secondary 28
5 AUX GPIO 1 Radio switch 1 → payload enable 28
6 AUX GPIO 2 Radio switch 2 → camera control 28
7 SPARE Reserved

Wire exit: RIGHT-facing slot, routes into power channel at X=+20mm.

11.4 The 1MΩ GPS Tap

Connector B PIN 2 is a read-only tap of the M10Q GPS UART TX line. The 1MΩ resistor is critical. Without it: - The payload's ESP32-S3 UART RX input looks like ~50kΩ to 3.3V (internal pull-up) - This would load the GPS TX line and shift its logic levels - The FC would receive corrupted GPS data

With 1MΩ in series: the loading on the GPS TX line is 1MΩ >> 50kΩ → negligible. The ESP32-S3 still sees valid logic levels because the 1MΩ and 50kΩ form a voltage divider: V_payload = 3.3V × 50k / (1000k + 50k) = 3.3 × 0.048 = 0.157V from the pullup, PLUS the driven level from the GPS. When the GPS drives high (3.3V), the payload sees ≈3.3 × (50/1050) + 3.3 × (1000/1050) ≈ 3.14V — a valid logic high. When driven low (0V), payload sees ≈3.3 × (50/1050) ≈ 0.16V — a valid logic low. The signal integrity is marginal but workable at 57600 baud.

11.5 AUX GPIO — Radio Switch to Payload

The pilot can control the payload via radio switches. The FC maps a switch channel to an AUX GPIO output pin. When the switch is activated, the FC drives the pin high (3.3V), which Connector B PIN 5 or 6 delivers to the payload.

This enables: - Radio switch 1: payload master enable (start/stop logging) - Radio switch 2: camera control (trigger Insta360, change mode)

The payload's power MOSFET (IRLML6344) gates the 5V supply to the sensor based on this GPIO OR the physical master switch on the payload board.

12. Sensor Payload — SEN66 & ESP32-S3

12.1 The SEN66 Measurement Principles

The Sensirion SEN66 integrates five sensing technologies in one 55.5mm module:

Particulate Matter (PM1/2.5/4/10): An internal fan draws air through a laser scattering cell. A laser illuminates particles in the flow — larger particles scatter more light to specific angles (Mie scattering theory). A photodetector at a fixed angle measures the scattered intensity, from which particle counts and estimated mass concentration are derived by Sensirion's built-in algorithm.

Temperature and Humidity: A capacitive humidity sensor — a polymer film changes dielectric constant with moisture absorption. The 25fF capacitance change per %RH is measured against a reference capacitor. Temperature from a bandgap reference. Note: at flight, self-heating from the internal fan and electronics causes +2–5°C offset in temperature reading — not suitable for absolute temperature measurement.

VOC Index (1–500): A metal-oxide semiconductor sensor (MOx). The sensing material is a thin film of SnO₂ or similar that changes electrical resistance when exposed to reducing gases (VOCs). Sensirion's VOC algorithm normalises the raw resistance reading against a learned baseline, outputting a 1–500 index where 100 = typical indoor air.

NOx Index: A separate MOx cell optimised for oxidising gases. The NOx algorithm similarly normalises against baseline.

CO₂ (NDIR): Non-Dispersive Infrared absorption. A 4.26µm IR source illuminates a gas cell. CO₂ absorbs strongly at this wavelength — the detector measures how much IR passes through. Lambert-Beer law relates absorption to concentration. The "400–32768 ppm" range reflects the minimum detectable concentration (~400ppm = atmospheric background) to the saturated maximum.

12.2 Why the Mast Height Matters

In quadrotor hover, the induced velocity through the rotor disk is:

$$v_{induced} = \sqrt{\frac{T}{2 \rho A}}$$
where $T$ = thrust, $\rho$ = air density (~1.225 kg/m$^3$), $A$ = rotor disk area

For libdrone at ~860g AUW: v_induced ≈ sqrt(8.6N / (2 × 1.225 × $\pi$ × 0.0762$^2$)) ≈ 3.4 m/s

This downwash creates a toroidal recirculation — air drawn down through the props, spreading outward, then rising back up around the drone perimeter. The recirculation height above the drone top surface is roughly 1–1.5× the rotor radius (~75–115mm).

The SEN66 mast raises the sensor to approximately 80–120mm above the rotor plane — placing it just above the recirculation zone. Below this height, the sensor would sample air that has already circulated through the rotor wake. Above it, you sample undisturbed ambient air.

12.3 ESP32-S3 Logger Architecture

The ESP32-S3 is a dual-core Xtensa LX7 processor at 240MHz with integrated WiFi (802.11 b/g/n 2.4GHz), Bluetooth 5 LE, and 8MB PSRAM. MicroPython runs on one core; the second core handles the WiFi stack.

Logging loop on the payload:

Every 1 second:
  1. Read SEN66 over I2C (all 9 parameters in one burst read)
  2. Read GPS UART (parse NMEA sentence for lat/lon/alt)
  3. Build JSON line with timestamp + GPS + all sensor data
  4. Write to SD card (SPI, Class 10 = 10MB/s  1 JSON line ~200 bytes = trivial)
  5. Sleep remaining time until next 1-second interval

At 1Hz logging, an 8GB SD card holds ~11 years of data. Practical limit is battery life (~45 minutes per 1S LiPo, or continuous while powered via GX12).

12.4 WiFi Sync Protocol

On boot (or on landing), the ESP32 connects to a predefined WiFi network and performs HTTP PUT requests to the Synology NAS running a Docker container. The log files accumulate on the SD card between sync events and are marked as synced after successful upload. This is a store-and-forward architecture — the drone never depends on WiFi being available during flight.

13. Frame Materials & Structural Engineering

13.1 Why PCCF for the Structural Layers

Polycarbonate-Carbon Fibre composite (PCCF) has: - Tensile strength: ~80–120 MPa (vs PETG at ~40–50 MPa) - Stiffness (Young's modulus): ~8–12 GPa (vs PETG at ~1.5–2 GPa) - Impact strength: high (polycarbonate matrix absorbs energy before fracture) - Printability: requires >280°C nozzle, enclosed printer, slow cooling

The T-slot geometry in the PCCF layers creates an interlocking mechanical joint with the arm tabs. The T-profile means the arm tab cannot pull out laterally — it must either break or slide along the slot direction. This is the same principle as a dovetail joint in woodworking.

13.2 Why PETG for Arms

PETG arms fail deliberately in a crash — they are the sacrificial fuse element. This is intentional. The arm is designed to fracture at the shaft before the force reaches the tab (which is locked into the expensive PCCF structure) or the motor mount (which would require replacing the motor). PETG at 0.20mm layers printed vertically has controlled crack propagation — it breaks cleanly, not explosively.

Printing vertically maximises the layer bond strength in the direction perpendicular to the crash force (longitudinal to the arm). The arm experiences bending loads in crashes — the highest stress is at the outer fibre, perpendicular to the print direction. Vertical printing means the perimeters (strongest part) are on the outside exactly where the stress concentration is highest.

13.3 Carbon Fibre Rods — Pre-tension and Box Girder

Four 2mm CF rods pass continuously through all five sandwich layers. The rods are a deliberate interference fit in the PETG bottom and top layers (2.1mm hole for 2.0mm rod), and a clearance fit in the PCCF layers (2.2mm hole). On assembly, the rods must be pressed through the PETG holes — this creates a pre-tension in the rod and a corresponding compression in the PETG layer.

This pre-tension acts like a guitar string: it adds stiffness without adding mass. The structural effect is to convert what would be a bending-dominated beam into a compression-dominated structure. Compression resistance in continuous fibre is very high — CF has compressive strength of ~600–800 MPa.

The four-rod arrangement creates a box girder cross-section. Box girders resist torsion far better than I-beams or open sections — the enclosed section has high torsional stiffness (Saint-Venant's principle). This is why aircraft and bridge designs prefer closed-section beams.

13.4 Three-Layer Architecture (Sandwich / Platform / Backplane)

The design separates structural and service functions:

  • Sandwich: pure structure. Never touched after assembly. Carbon-reinforced.
  • Platform: all services. Complex PETG. Can theoretically be reprinted if damaged.
  • Backplane: crash protection and payload interface. Sacrificial lattice.

This separation means a crash that damages the Backplane (likely) does not damage the electronics (on the Platform underneath). A crash that damages a Platform feature (unlikely but possible) does not compromise the structural sandwich. Field serviceability is maximised.

The diamond/hexagonal lattice geometry of the Backplane is not random. At 65% open area and 1.5mm thickness, it provides crash load spreading without significant mass. The diagonal members carry loads in tension and compression — efficient for a planar structure. Straight horizontal/vertical members would create stress concentrations at joints; diagonals distribute load paths more evenly.

14. Thermal Management

14.1 Heat Sources and Budget

Component Idle power loss Peak power loss Primary mechanism
ESC (4 FETs) ~1W ~5–8W MOSFET Rds(on) × I$^2$
Motors × 4 ~1W total ~20W total Winding resistance × I$^2$
FC H7A3 ~0.5W ~1W CPU + LDO
VTX ~1.5W ~5W (800mW RF) PA efficiency ~40%

The ESC and motors are the dominant heat sources during flight. With natural airflow from forward motion and downwash, the ESC stays within limits. In slow hover or aggressive static manoeuvres, the Gdstime 3010 cooling fan provides forced convection across the ESC stack.

14.2 Fan Placement and Airflow Path

The 30 × 30 × 10mm fan is at Y=−138mm to Y=−148mm (rear of Platform), exhausting rearward. In forward flight, ram air supplements the fan. In hover, the fan alone provides ~0.15–0.25 m$^3$/min airflow across the electronics.

The ESC and FC stack at Y=−44mm to Y=−99mm is upstream of the fan. Convection draws air from the nose end of the Platform, across the components, and out the fan slot at the tail. The MIPI cable channel and wire channels are oriented to not obstruct this airflow path.

15. EMC & Signal Integrity

15.1 Noise Sources in a Drone

The drone contains several broadband electromagnetic noise sources: - ESC switching at 48kHz: generates harmonics up to several hundred MHz - Motor windings: unshielded inductors switching hundreds of volts per microsecond - Battery leads: carrying 40A+ with fast edges - USB/UART switching: minor but present

15.2 Segregated Wire Routing

libdrone's Platform separates signals into three routing zones:

Zone X position Contents
Signal channel X = −20mm (LEFT) UART, I2C, GPS, RC signal wires
Centreline X = 0mm MIPI cable channel
Power channel X = +20mm (RIGHT) ESC power, motor wires, battery leads

Physical separation is the most effective EMC measure. At 20mm separation, the mutual inductance between a signal wire and a power wire decreases by ~6 dB compared to adjacent routing. The platform walls between channels provide additional shielding (though PETG is not conductive — it simply impedes the direct line of sight for near-field coupling).

15.3 GX12 Wire Pair Assignment and Noise Coupling

The decision to route Connector A (power + I2C + UART4) through the signal channel and Connector B (GPS tap + UART5 + GPIO) through the power channel is not arbitrary.

Connector A carries the I2C bus for the SEN66. I2C is sensitive to capacitive loading (which slows edge rise times, causing data corruption). Routing I2C in the signal channel minimises parasitic capacitance from adjacent wires.

Connector B carries the GPS tap — a read-only wire that runs from the FC GPS UART to the payload. The 1MΩ series resistor already decouples it from the GPS receiver. The GPIO lines are driven outputs (low impedance) and tolerant of some noise.

15.4 Three EMC Geometry Gates

The Onshape Cookbook requires three EMC geometry features before any Platform part proceeds to print: 1. Signal channel wall height ≥ 3mm (provides near-field shielding between signal and power zones) 2. MIPI cable channel fully enclosed (prevents direct radiation from MIPI high-frequency clock) 3. GX12 chimney wall thickness ≥ 3mm (prevents the chimney bore from acting as a waveguide that couples noise from electronics zone to payload connector)

These are pre-print gates — checking geometry in CAD is faster and cheaper than discovering EMC problems after assembly.

Summary: How All Signals Flow on libdrone V2.4.6

PILOT
   250Hz radio (2.4GHz ELRS)
  
RP2 RECEIVER  ──CRSF 420kbaud──▶  H7A3 FLIGHT CONTROLLER
                                          
                          ┌───────────────┼────────────────────┐
                                                             
              GPS UART2◄──┤    8kHz PID       DShot600 ──▶  PILOTIX ESC
              57600 baud      loop           600kHz          
              (M10Q-5883)                                     3-phase AC
                            Gyro SPI  ◄──┤ 32kHz             
              VTX UART1 ◄─┤  6400Hz                  MOTORS ×4
              115200 baud                           BiDi eRPM back ──▶ RPM Filter
              (OSD/MSP)                  
                            GX12-A  ◄────┤ UART4 + I2C (signal channel)
                            GX12-B  ◄────┤ UART5 + GPS tap + GPIO
                                         
                          └───────────────┘
                                          
                               PETG PLATFORM LAYER
                               (routes all the above)
                                          
                               ┌──────────┴──────────┐
                                                    
                          GX12-A male           GX12-B male
                          (payload)             (payload)
                               └──────────┬──────────┘
                                          
                                   ESP32-S3 LOGGER
                                             
                                  SEN66    MicroSD
                              (I2C 400kHz)  (SPI)
                              PM/T/RH/VOC
                              /NOx/CO2 @ 1Hz
                                   
                              SD card log +
                              WiFi sync to Synology

Every wire has a reason. Every protocol was chosen for the bandwidth, latency, and noise immunity it provides at that position in the signal chain. The architecture is a layered system where each layer addresses concerns the layer below cannot see.

libdrone V2.4.6 — Systems Engineering Reference Cross-reference: reference/LD_-Hardware_v246.md, payloads/LD-Payload_SDK_v246.md, build/LD-_FreeCAD_Cookbook_v245_Complete.md

Appendix A — Full Dictionary

Every acronym, term, and piece of jargon used in this document, in alphabetical order.

AC — Alternating Current. Electrical current that periodically reverses direction. The three wires between an ESC and a brushless motor carry AC — the ESC synthesises a rotating three-phase AC waveform from the DC battery supply.

ADC — Analog-to-Digital Converter. A circuit that measures a continuously varying voltage and converts it to a digital number. The H7A3's ADC reads battery voltage and motor current as numbers the CPU can process. Resolution is 16-bit on the H7A3, meaning 65,536 distinct voltage levels across the measurement range.

AM32 — open-source 32-bit ESC firmware. Not an acronym — the name refers to running on a 32-bit ARM processor. Alternative to the proprietary BLHeli_32.

ARM — Advanced RISC Machine. A family of processor architectures. "RISC" (Reduced Instruction Set Computer) means the processor executes simple, fast instructions rather than complex ones. The STM32H7A3 in the flight controller uses an ARM Cortex-M7 core. ARM Ltd licenses the architecture to chip manufacturers.

AUW — All-Up Weight. Total weight of the drone including battery, payload, and everything else attached. The regulatory category (A1 or A2) is determined by AUW.

AUX — Auxiliary. Used in "AUX GPIO" — a general-purpose IO pin not assigned to a specific function. The pilot assigns an AUX pin to a radio switch channel in Betaflight Configurator.

AWG — American Wire Gauge. A standardised wire sizing system where a smaller number means a thicker wire. AWG24 is thicker than AWG28. Thicker wire carries more current with less resistance. Signal wires on libdrone use AWG28 (thin, light). Power wires use AWG12–14 (thick, for high current).

Back-EMF — Back Electromotive Force. A voltage generated by a spinning motor that opposes the supply voltage driving it. The faster the motor spins, the higher the back-EMF, and the less net voltage drives current through the windings. At maximum RPM, back-EMF equals the supply voltage and no more acceleration is possible.

Baud rate — the number of signal changes per second on a serial line. For simple binary signalling (UART), baud rate equals bits per second. At 57600 baud, 57,600 bits are transmitted per second. Named after Émile Baudot, 19th-century telegraph engineer.

BEC — Battery Eliminator Circuit. A voltage regulator built into the ESC or FC that steps down the main battery voltage (22V) to a lower regulated voltage (5V) for powering the flight controller, receiver, and other electronics. Originally named because it "eliminates" the need for a separate small battery to power these circuits.

BiDi / Bidirectional DShot — an extension of the DShot protocol where the ESC responds to each motor command with an eRPM (electrical RPM) reading on the same wire. Used by Betaflight's RPM filter to know the exact motor speed in real time.

Biquad filter — a two-pole IIR (Infinite Impulse Response) digital filter. Used in Betaflight for gyro signal filtering. The "bi" refers to two poles and two zeros in the transfer function. Biquad filters are computationally efficient — each filter stage requires 5 multiplications and 4 additions per sample.

BLDC — Brushless DC motor. A motor that uses electronic commutation (the ESC switching MOSFETs) instead of physical brushes to rotate the magnetic field. More efficient, longer-lasting, and higher power density than brushed motors.

CAD — Computer-Aided Design. Software used to design 3D parts. libdrone uses Onshape, a browser-based CAD tool.

CE — in this context, Conformité Européenne (European Conformity). CE marking indicates a product meets EU safety, health, and environmental requirements. Also used in this document for "CE regulations" governing radio transmission in Europe.

CEP — Circular Error Probable. A measure of GPS accuracy. "2m CEP" means that 50% of position fixes will be within 2m of the true position. The other 50% may be further away, but the CEP gives a practical accuracy benchmark.

CF — Carbon Fibre. High-strength, low-weight reinforcement material used in the CF rods passing through the sandwich layers and in the PCCF filament.

CO₂ — Carbon Dioxide. One of nine parameters measured by the SEN66 sensor, using NDIR (Non-Dispersive Infrared) absorption spectroscopy.

Coriolis force — an apparent force experienced by objects moving within a rotating reference frame. MEMS gyroscopes measure rotation rate by detecting the Coriolis deflection of a vibrating proof mass.

Cortex-M7 — a specific ARM processor core design used in the STM32H7A3. The M7 designation indicates a high-performance microcontroller core with a 6-stage pipeline, hardware FPU, and dual-issue superscalar execution.

CRC — Cyclic Redundancy Check. A mathematical checksum appended to a data packet to detect transmission errors. The receiver recalculates the CRC from the received data; if it doesn't match the transmitted CRC, the packet is corrupted and discarded. DShot600 uses a 4-bit CRC.

CRSF — Crossfire Serial Format. The serial communication protocol between the ELRS receiver (RadioMaster RP2) and the flight controller. Runs at 420,000 baud over UART3. Carries 8 RC channels plus link statistics bidirectionally.

CS — Chip Select. A signal line in SPI communication. The master pulls CS low to select a specific peripheral device before communicating. Multiple SPI devices can share the SCK/MOSI/MISO lines, each with its own CS pin.

CSI-2 — Camera Serial Interface 2. The MIPI-defined physical and protocol standard for connecting cameras to processors. Uses differential signalling for noise immunity. The flat cable from the HDZero camera to the VTX is a CSI-2 link.

CSS — Chirp Spread Spectrum. A radio modulation technique used by ELRS (via the SX1280 chip). The carrier frequency sweeps linearly across a bandwidth ("chirps") rather than staying fixed. This gives resistance to narrowband interference and allows decoding below the noise floor.

DC — Direct Current. Electrical current that flows in one direction only. The battery provides DC; the ESC converts it to AC for the motors.

DMA — Direct Memory Access. A hardware mechanism allowing peripherals to transfer data to/from RAM without CPU involvement. The CPU sets up the transfer, the DMA controller executes it autonomously, then interrupts the CPU when done. Critical for achieving 32kHz gyro sampling without starving other processes.

DShot — Digital Shot. A digital protocol for sending motor speed commands from the flight controller to the ESC. Replaced analogue PWM. Numbers (DShot150, 300, 600) indicate the bit rate in kbits/s. libdrone uses DShot600.

EASA — European Union Aviation Safety Agency. The EU body that sets drone regulations including the Open category (A1/A2/A3) classification system.

EGNOS — European Geostationary Navigation Overlay Service. The European satellite-based augmentation system that broadcasts GPS correction data, improving position accuracy from ~3m CEP to ~1m CEP over Europe.

ELRS — ExpressLRS. An open-source RC link protocol and ecosystem. Uses the SX1280 2.4GHz LoRa chip for long range and interference resistance. The RadioMaster RP2 receiver on libdrone uses ELRS.

EMC — Electromagnetic Compatibility. The ability of electronic equipment to function correctly in its electromagnetic environment without causing or suffering interference. In drone design, EMC engineering separates noisy power wires from sensitive signal wires.

EMF — Electromotive Force. Voltage generated by a source (battery, generator, or motor). Back-EMF is the voltage generated by a spinning motor opposing its supply.

eRPM — Electrical RPM. The rotation rate measured in electrical cycles per minute, not mechanical. For a 14-pole motor (7 pole pairs): eRPM = mechanical RPM × 7. BiDi DShot reports eRPM; Betaflight divides by pole pairs to get mechanical RPM.

ESC — Electronic Speed Controller. The circuit that converts the flight controller's digital speed commands into three-phase power for the brushless motor. The Pilotix 75A AM32 is a 4-in-1 ESC — four separate ESC channels on one board.

ESR — Equivalent Series Resistance. The parasitic resistance of a capacitor in series with its ideal capacitance. Low-ESR capacitors respond faster to voltage spikes. Critical for the bulk capacitor on the ESC power input.

FC — Flight Controller. The main processing board that runs the stabilisation software (Betaflight), reads sensors, and commands the ESCs. The H7A3-SLIM is libdrone's FC.

FHSS — Frequency-Hopping Spread Spectrum. A radio technique where the transmitter and receiver rapidly switch between frequency channels in a pre-agreed sequence, avoiding interference on any single channel. Traditional 2.4GHz RC links (FrSky, Spektrum) use FHSS.

FF — Feed-Forward. A control term that responds to the rate of change of the pilot's stick input, rather than to the error between commanded and actual state. Anticipatory — makes the drone begin responding before it has measurably moved.

FPU — Floating-Point Unit. A hardware block in a processor dedicated to arithmetic on floating-point numbers (numbers with decimal points, stored in IEEE 754 format). Without an FPU, floating-point math must be emulated in software — 10–100× slower. The Cortex-M7 FPU executes single-precision operations in one clock cycle.

FPV — First Person View. Flying a drone while watching a live video feed from an onboard camera, typically displayed in goggles. libdrone uses the HDZero digital FPV system.

Galileo — the European Union's satellite navigation system, operated by EASA. 28 operational satellites as of 2025. Shares the 1575.42 MHz L1 frequency with GPS, allowing combined receiver designs.

GLONASS — GLObal NAvigation Satellite System. Russia's GPS equivalent. Disabled on libdrone due to observed jamming risk near eastern European borders.

GNSS — Global Navigation Satellite System. The generic term covering all satellite navigation constellations: GPS (USA), GLONASS (Russia), Galileo (EU), BeiDou (China). The Matek M10Q is a multi-constellation GNSS receiver.

GPIO — General Purpose Input/Output. A digital pin on a processor that can be configured as either an input (read a signal) or an output (drive a signal). AUX GPIO pins on the FC are used to send radio switch states to the payload.

GPS — Global Positioning System. The USA's satellite navigation constellation, operated by the US Space Force. 31 operational satellites. The term is often used loosely to mean any GNSS system.

GX12 — a series of circular waterproof aviation-style connectors with a 12mm body diameter. The "GX" prefix refers to the connector family. Available in 2–7 pin variants. libdrone uses two GX12-7 connectors as the payload interface.

H.265 / HEVC — High Efficiency Video Coding. A video compression standard used by the HDZero system for encoding camera frames before RF transmission. H.265 achieves roughly 2× the compression efficiency of H.264 at the same quality.

HDZero — a digital FPV video system. "HD" for high-definition (1080p60). "Zero" refers to near-zero latency (4–8ms) compared to competing digital systems (DJI O3, Walksnail) which have 20–40ms latency. Used for the camera and VTX.

HTTP — Hypertext Transfer Protocol. The application-layer protocol used for web communication. The ESP32-S3 uses HTTP PUT requests to upload sensor log files to the Synology NAS over WiFi.

I2C — Inter-Integrated Circuit. A two-wire serial bus (SDA + SCL) supporting multiple devices with individual addresses. Used for the SEN66 sensor connection (payload Connector A pins 5/6) at 400kHz Fast Mode.

ICM-42688-P — the specific IMU chip on the Matek H7A3-SLIM. A 6-axis (3-axis gyro + 3-axis accelerometer) MEMS sensor from TDK InvenSense. ODR up to 32kHz. Connected via SPI.

IEEE 754 — the international standard defining how floating-point numbers are stored and processed in binary. Single-precision (32-bit) format: 1 sign bit, 8 exponent bits, 23 mantissa bits. The H7A3's FPU implements this standard in hardware.

IIR — Infinite Impulse Response. A class of digital filter that uses feedback (previous output values) in its calculation. Biquad filters are IIR filters. Efficient but can become numerically unstable if coefficients are poorly chosen.

IMU — Inertial Measurement Unit. The combination of gyroscope and accelerometer that measures the drone's rotation rates and linear accelerations. On libdrone this is the ICM-42688-P chip on the FC board.

IP65 — Ingress Protection rating 65. "6" = fully dustproof. "5" = protected against water jets from any direction. The GX12-7 connectors are rated IP65 when the screw ring is locked — suitable for rain and wet grass landings.

IR — Infrared. Electromagnetic radiation with wavelengths longer than visible light (~700nm–1mm). The SEN66's CO₂ sensor uses IR absorption at 4.26µm.

JSON — JavaScript Object Notation. A human-readable text format for structured data. The sensor payload logs each measurement as a JSON line, e.g. {"ts":"...","lat":49.18,"pm2_5":5.1,...}.

JSONL — JSON Lines. A variant of JSON where each line is a complete, independent JSON object. Allows streaming reads and appending without loading the entire file. The sensor log format uses JSONL.

KV (motor) — the RPM-per-volt constant of a brushless motor. Not "kilovolts." The "V" is for volts. A 1750KV motor spins 1750 RPM per volt of applied voltage (no load). Determined by the number of winding turns.

LBT — Listen Before Talk. A regulatory requirement in some radio bands where the transmitter checks if a channel is idle before transmitting. ELRS 250Hz LBT mode complies with EU CE radio regulations.

LDO — Low-Dropout Regulator. A linear voltage regulator that can maintain regulation with very little difference between input and output voltages ("dropout" = minimum input minus output). The payload uses an LDO to convert 5V (from GX12) to 3.3V for the ESP32-S3 and SEN66.

LiPo — Lithium Polymer battery. A rechargeable battery using a lithium-based chemistry with a polymer electrolyte. Higher energy density than earlier Li-ion cylindrical cells. Requires careful charging and storage voltage management. The main 6S pack and (in earlier payload design) the 1S sensor pack are LiPo.

LoRa — Long Range. A proprietary radio modulation technique (owned by Semtech) using chirp spread spectrum. The SX1280 chip in the ELRS receiver uses LoRa at 2.4GHz.

MEMS — Micro-Electro-Mechanical System. A microscopic mechanical structure fabricated on a silicon chip using semiconductor manufacturing processes. The gyroscope in the ICM-42688-P is a MEMS device — a vibrating proof mass etched into silicon, a few hundred micrometres across.

MicroPython — a lean implementation of the Python 3 programming language for microcontrollers. Runs on the ESP32-S3 sensor payload board. Slower than C but sufficient for 1Hz sensor logging, and much faster to develop with.

Mie scattering — the scattering of electromagnetic radiation by a spherical particle whose diameter is comparable to the wavelength of the light. The SEN66 uses Mie scattering to detect particles: different particle sizes scatter laser light at different intensities and angles, allowing PM1/2.5/4/10 estimation.

MIPI — Mobile Industry Processor Interface. An industry consortium that defines hardware interfaces for mobile devices. The CSI-2 camera interface on libdrone is a MIPI standard. The flat cable between camera and VTX is a MIPI cable.

MISO — Master In Slave Out. One of the four SPI signal lines. The slave device (e.g. gyro chip) sends data to the master (FC) on this wire.

MOSFETs — Metal-Oxide-Semiconductor Field-Effect Transistors. The electronic switches inside the ESC that connect and disconnect the motor windings to the battery. Six MOSFETs per ESC channel (two per motor phase). The Pilotix uses N-channel MOSFETs with low Rds(on) (on-resistance) to minimise heat at high current.

MOSI — Master Out Slave In. One of the four SPI signal lines. The master (FC) sends data to the slave device (e.g. gyro) on this wire.

MOx — Metal-Oxide semiconductor gas sensor. A sensing element whose electrical resistance changes in the presence of certain gases. The SEN66 uses MOx cells for VOC index and NOx index measurement.

MSP — MultiWii Serial Protocol. The original protocol for configuring and monitoring flight controllers (originated with the MultiWii project, an early FC firmware). Now used by Betaflight for FC ↔ configurator communication, OSD data transmission to the VTX, and FC ↔ payload communication via UART4.

NAS — Network Attached Storage. A dedicated storage device on a local network. libdrone uses a Synology NAS to receive WiFi-synced sensor log files from the ESP32-S3.

NDIR — Non-Dispersive Infrared. A gas measurement technique where infrared light passes through a sample of gas. Certain gases (CO₂, CH₄, CO) absorb IR at specific wavelengths. The detector measures how much light passes through; less transmission = higher gas concentration. "Non-dispersive" means a filter selects one wavelength rather than a prism dispersing all wavelengths.

NMEA — National Marine Electronics Association. An organisation that defined a standard serial data format (NMEA 0183) for GPS and navigation equipment. NMEA sentences like $GPGGA carry position, altitude, and fix quality. The M10Q can output NMEA or UBX format — Betaflight uses UBX.

NOx — Nitrogen Oxides (NO + NO₂). Pollutants produced by combustion. One of nine parameters measured by the SEN66, reported as a 1–500 index.

ODR — Output Data Rate. The rate at which a sensor produces new measurements. The ICM-42688-P gyro has an ODR of up to 32,000Hz — 32,000 new readings per second. Betaflight typically configures it at 3200 or 6400Hz.

OSD — On-Screen Display. Telemetry data (battery voltage, GPS coordinates, flight mode, etc.) overlaid on the FPV video image. Generated by the FC and sent to the VTX over UART1 using MSP DisplayPort protocol.

PA — Power Amplifier. The RF stage in the VTX that amplifies the modulated video signal to the transmit power level (25mW to 1W). PA efficiency is roughly 40% — the rest becomes heat. At 800mW RF output, the PA dissipates ~1.2W as heat.

PCCF — Polycarbonate Carbon Fibre composite. The filament used for the three structural middle layers of the sandwich. The polycarbonate matrix provides toughness and impact resistance; the chopped carbon fibre reinforcement provides stiffness. Requires a hardened nozzle due to the abrasive carbon fibre.

PETG — Polyethylene Terephthalate Glycol-modified. A 3D printing filament. The "-G" (glycol modification) improves printability vs plain PET. Good layer adhesion, reasonable flexibility, lower print temperature than PCCF. Used for arms (deliberately sacrificial), Platform, Backplane, and top layer.

PID — Proportional-Integral-Derivative. A control algorithm with three terms: P acts on current error, I acts on accumulated past error, D acts on the rate of change of error. Together they stabilise the drone — see §4 for full detail.

PM1 / PM2.5 / PM4 / PM10 — Particulate Matter with aerodynamic diameter less than 1 / 2.5 / 4 / 10 micrometres respectively. Air quality metrics defined by WHO and used for pollution monitoring. Measured by the SEN66's laser scattering cell.

PSRAM — Pseudo-Static RAM. A type of dynamic RAM (DRAM) with a built-in refresh circuit that makes it behave like static RAM (SRAM) from the user's perspective. The ESP32-S3 has 8MB of PSRAM for storing large data structures (sensor buffers, WiFi frames) that wouldn't fit in its 512KB of internal SRAM.

PUT (HTTP PUT) — an HTTP method that uploads data to a server at a specified URL. The ESP32-S3 uses HTTP PUT to upload sensor log files to the Synology NAS.

PWM — Pulse Width Modulation. A technique for encoding a value as the duty cycle of a digital signal. Old ESC protocol: a 1000–2000 µs pulse repeated at 50Hz encoded 0–100% throttle. Replaced by DShot on modern drones.

RC — Radio Control. The radio link between the pilot's transmitter and the drone's receiver. Also used as a prefix for components in that signal path.

RF — Radio Frequency. Electromagnetic waves used for wireless communication. In this document: the 5.8GHz FPV video link, the 2.4GHz ELRS RC link, and the 2.4GHz WiFi sync link on the payload.

RH — Relative Humidity. The ratio of water vapour in the air to the maximum possible at that temperature, expressed as a percentage. Measured by the SEN66.

Rds(on) — the on-state drain-source resistance of a MOSFET when fully switched on. Lower Rds(on) means less voltage drop and less heat at a given current. The Pilotix 75A ESC uses MOSFETs selected for low Rds(on) to handle high motor currents.

RPM — Revolutions Per Minute. Motor rotation speed. At hover, libdrone's motors spin at approximately 28,000–32,000 RPM. The RPM filter in Betaflight uses this value to track and remove motor vibration noise from the gyro signal.

RSSI — Received Signal Strength Indicator. A measurement of the RF signal power at the receiver. Used to assess link quality. CRSF packets from the RP2 include RSSI data displayed on the OSD.

RX — Receive / Receiver. In UART context: the receive wire (incoming data). In RC context: the radio receiver (RadioMaster RP2 on libdrone).

SBAS — Satellite-Based Augmentation System. A system that improves GPS accuracy by broadcasting correction data from geostationary satellites. EGNOS is the European SBAS. The M10Q supports SBAS reception.

SCK — Serial Clock. The clock signal in SPI communication, generated by the master. All SPI devices on the same bus share this signal.

SCL — Serial CLock. The clock signal in I2C communication. Unlike SPI, I2C devices can stretch the clock (hold it low) to signal that they need more time.

SD card — Secure Digital card. A small removable flash memory card. The payload uses an SD card (via SPI interface) to log sensor data to JSONL files.

SDA — Serial DAta. The bidirectional data line in I2C communication. Both master and slave drive this line in an open-drain fashion.

SEN66 — Sensirion's all-in-one air quality sensor module measuring PM1/2.5/4/10, temperature, humidity, VOC index, NOx index, and CO₂. Used on the libdrone sensor payload mast.

SNR — Signal-to-Noise Ratio. The ratio of desired signal power to background noise power, usually expressed in decibels (dB). CRSF packets include SNR data from the ELRS link — higher SNR = better signal quality.

SPI — Serial Peripheral Interface. A synchronous serial bus with four wires (SCK, MOSI, MISO, CS). Fast (10–50MHz), full-duplex. Used for the gyro connection and the SD card on the payload. See §10.2.

STM32 — a family of 32-bit ARM Cortex microcontrollers made by STMicroelectronics. The H7A3-SLIM FC uses the STM32H7A3, and the Pilotix ESC internally uses an STM32F051.

SX1280 — Semtech's 2.4GHz LoRa transceiver chip. The radio IC inside the RadioMaster RP2 receiver and the ELRS-compatible transmitter module.

TVS — Transient Voltage Suppressor. A semiconductor device that clamps voltage spikes. The Pilotix ESC has an integrated TVS diode that conducts (shorts) when the voltage exceeds its rated threshold, protecting the MOSFETs from spikes caused by motor back-EMF during fast deceleration.

TX — Transmit / Transmitter. In UART context: the transmit wire (outgoing data). In RC context: the radio transmitter (the pilot's handheld controller, TX16S MKII).

UART — Universal Asynchronous Receiver-Transmitter. A serial communication interface, asynchronous (no shared clock), point-to-point. See §10.1 for full detail. The H7A3 has six UART ports.

UBX — u-blox proprietary binary protocol. The native data format of u-blox GPS chips (including the M10Q). More compact and faster to parse than NMEA text. Betaflight uses UBX for GPS communication.

USB — Universal Serial Bus. The standard connector and protocol for wired computer peripherals. Used on the H7A3-SLIM for connecting to Betaflight Configurator on a laptop for configuration and firmware updates.

VESA — Video Electronics Standards Association. The organisation that defines the DisplayPort video standard (used in monitors). The "DisplayPort" in HDZero is unrelated — it's HDZero's own OSD protocol that reuses the name.

VOC — Volatile Organic Compound. Carbon-based chemicals that evaporate easily at room temperature — solvents, fuels, cleaning agents, cooking fumes. Reported by the SEN66 as a 1–500 index, where 100 = clean reference air.

VTX — Video Transmitter. The component that encodes the camera signal and transmits it as an RF signal to the pilot's goggles. On libdrone: the HDZero Freestyle V2, which also handles the OSD overlay and recording.

WiFi — Wireless Fidelity (informal). The IEEE 802.11 family of wireless networking standards. The ESP32-S3 on the sensor payload uses 2.4GHz 802.11n WiFi to sync log files to the Synology NAS after landing.

XL4015 — a step-down (buck) DC-DC converter IC. Used on libdrone to power the HDZero VTX at a stable 9–12V from the 22V battery supply. Buck converters are more efficient than LDOs for large voltage differences — an LDO would waste the excess 10V as heat; the XL4015 switches at high frequency and achieves ~85–90% efficiency.

XT60 — a high-current battery connector standard. "XT" from the manufacturer Amass, "60" for 60A continuous rating. Gold-plated bullet contacts. libdrone uses XT60H-M (male, with housing/guard) on the ESC side.

End of Dictionary

Appendix B — Physical Anatomy: What You Are Looking At

A board-by-board, component-by-component visual guide. For each item: what it looks like, what every visible feature does, and why it is built that way.

The goal is that when you hold a component in your hand, you know what every chip, pad, trace, and connector is doing — not to design them, but because understanding what you see changes how you handle, solder, and troubleshoot.

B.1 Matek H7A3-SLIM — The Flight Controller

Physical form: A rectangular PCB approximately 36 × 36mm, 1.6mm thick. Four mounting holes at 30.5mm diagonal — the "30.5mm stack pattern" that has been the FPV standard for a decade. Two rows of through-hole solder pads around the perimeter. A dense cluster of surface-mount components on both faces.

The large black rectangle in the centre (top face): This is the STM32H7A3 microcontroller in an LQFP-144 package — 144 pins, 0.5mm pitch, 20 × 20mm. The "LQFP" (Low-profile Quad Flat Package) has legs on all four sides bent outward like gull wings. You can count the legs if you look closely — 36 per side. The tiny dot or triangle in one corner marks pin 1. This single chip contains the 280MHz CPU, all six UARTs, the SPI controllers, ADCs, DMA engine, and FPU.

The small square chip near the centre, separate from the STM32: This is the ICM-42688-P IMU (gyroscope + accelerometer) in a 3 × 3mm LGA package — Land Grid Array, meaning the solder connections are flat pads on the bottom, invisible once soldered. The chip is physically isolated from the PCB mounting holes by a small "moat" — a slot cut into the PCB around it. This moat prevents frame vibration transmitted through the mounting screws from reaching the gyro chip directly, acting as mechanical decoupling. You will notice this slot if you look carefully.

The row of small, uniform rectangular components along the edges: These are 0402 or 0603 sized passive components — resistors and capacitors. "0402" means 0.4mm × 0.2mm. They are soldered by machine using reflow soldering (solder paste + oven). Each one is about the size of a grain of sand. You cannot read their values without a microscope and a datasheets reference. These form the decoupling network (small capacitors filtering noise on every power pin of every chip), pull-up resistors on I2C lines, voltage dividers for the ADCs, and series resistors on UART lines.

The small 8-pin chip near the edge: Likely a flash memory chip (serial NOR flash, W25Q series) storing Betaflight firmware and configuration. 8-pin SOIC package, about 5 × 4mm. When you flash firmware, you are erasing and rewriting this chip.

The USB-C connector: A small metal-shelled connector on one edge. Inside you can see the 24-pin receptacle contacts (though only a subset are used for USB 2.0 full-speed — the protocol Betaflight uses for configurator connection). The metal shell is soldered to ground pads for mechanical strength and EMC shielding.

The large solder pads around the perimeter: Through-hole pads for wiring. These are labelled on the silkscreen (the white printed text): G (ground), 5V, M1–M4 (motor outputs), Rx/Tx for each UART, ADC, LED, BUZZ, and others. The pads are tinned (pre-coated with solder) from the factory for easy soldering. The ground pads are connected to a large copper pour (flood fill) visible as the solid copper area on the PCB — this is the ground plane, reducing impedance for return currents from every component.

The small crystal (metal can, rectangular): A quartz crystal oscillator providing the precise clock reference for the STM32. The processor's internal oscillator is not accurate enough for UART timing (baud rate depends on precise frequency). The crystal is typically 8MHz or 16MHz; the STM32 PLL multiplies this up to 280MHz.

The two small inductors (wire-wound, dark grey rectangular): Part of the BEC (5V regulator) circuit. Inductors in a buck regulator store energy during the on-phase and release it during the off-phase, smoothing the output voltage. You can identify them by their slightly larger size (1210 or 1812 package) and sometimes visible wire winding under a ferrite coating.

The white silkscreen markings: Printed text and symbols indicating pad labels, component references (R1, C23, U3), board version, and orientation markers. Not functional — purely informational.

The four mounting holes: Brass-coloured, 3mm diameter, on the 30.5mm pattern. These pass M3 standoff screws that stack the FC above the ESC. The holes are electrically isolated (no copper ring) — important because grounding the frame through mounting hardware can introduce noise loops.

B.2 Pilotix 75A AM32 — The ESC

Physical form: A square PCB approximately 40 × 40mm with large copper pour areas visible on both sides. Much of the board surface is copper — this is intentional, as copper conducts heat from the MOSFETs to the air. An aluminium heat spreader or thermal pad may be present on the bottom face.

The six large identical chips arranged in pairs: These are the power MOSFETs. On a 4-in-1 ESC there are 4 motor channels × 6 MOSFETs = 24 total, though some designs use 3 MOSFETs per channel on the high side only. Each MOSFET is in a DFN or similar low-profile power package (typically 3 × 3mm or 5 × 6mm) with a large exposed pad on the bottom for heat dissipation. The three pairs per channel correspond to the three motor phases (A, B, C). The large copper areas around them are the thermal spreading pads — the circuit board itself is a heatsink.

The small 8-pin chip in the corner: The STM32F051 microcontroller running AM32 firmware. Much smaller than the H7A3 (it only runs motor commutation logic, not flight stabilisation). Approximately 5 × 5mm TSSOP or LQFP package. This chip reads the DShot signal, executes the commutation algorithm, drives the MOSFET gate drivers, and sends back eRPM telemetry.

The four large rectangular components near the power input: Current sensing resistors (shunts). Very low resistance — typically 0.001–0.005Ω. The voltage drop across them is proportional to current (V=IR). The controller reads this voltage to measure motor current. You can identify them by the thick copper traces running to both ends, and sometimes a "0m5" or "1m0" label (0.5mΩ, 1mΩ).

The TVS diode: A small two-terminal component near the power input pads. May look like a small SOD-123 diode package. This is the transient voltage suppressor that clamps voltage spikes from motor back-EMF.

The four sets of three solder pads on the edges: Motor phase outputs (A, B, C) for each of the four motor channels. Heavy copper, pre-tinned. Each motor wire (three wires per motor) solders here. The pad area is large because it must carry 20–50A continuously.

The two large pads or through-holes at one edge: Battery positive (+) and negative (–) input. Extremely heavy copper traces — you can see the trace width is several millimetres compared to signal traces, which are 0.1–0.3mm.

The small signal pads on one edge: DShot input from FC (one per motor), ESC telemetry output (eRPM), and possibly a separate current sensor analogue output to the FC. Fine pitch, small pads — these carry low current and are more delicate.

The copper pour areas: Most of the visible PCB surface is copper flood fills. The top copper is connected to motor phase outputs; the bottom copper is the ground plane. More copper = lower resistance = less heat. This is why power ESCs look like they have almost no empty PCB space — every mm$^2$ of copper is doing work.

The motor connection marks: Usually "A, B, C" or "1, 2, 3" next to the three motor phase pads. Motor rotation direction can be reversed by swapping any two of these three wires — or by changing direction in AM32 configuration via BLHeliSuite.

B.3 BrotherHobby Avenger V2 2507 — The Motor

Physical form: A cylindrical "bell" motor approximately 30mm outer diameter, ~30mm tall including the shaft. The outer rotating bell is aluminium, typically anodised in a colour (black, red, gold). Four M3 mounting holes on the bottom face on a ~±6mm pattern from centre. A 5mm shaft protrudes from the top, threaded M5 for the propeller nut.

The bottom face (stator, stationary): The stator base plate is what mounts to the arm. It has a hollow centre for the shaft bearing. The electrical connections emerge from this face — three wires (motor phases A, B, C) in the cable bundle exiting through the strain relief port.

The rotating bell (top and sides): The aluminium cup that spins. If you look inside from the top (before propeller is installed), you see the permanent magnets — 14 of them, alternating N-S-N-S... around the inner circumference. They are rectangular neodymium magnets glued into machined slots. They appear dark grey/black with slightly reflective surfaces. Count them: 14 magnets = 7 pole pairs = "1400KV" suffix convention (though KV doesn't directly equal pole count).

The stator teeth (visible from the bottom with bell removed): 12 teeth arranged in a star pattern, each wound with copper wire. Each tooth has multiple turns of magnet wire (very fine enamel-coated copper). The windings follow a specific pattern (typically LRK or DLRK winding) that determines the motor's KV and torque characteristics. You can see the colour of the winding insulation — typically red or brown enamel, with visible copper at the solder joints where the three-phase wires attach.

The two bearings: One at the top (inside the bell), one at the bottom (in the stator base). These are precision steel ball bearings, typically 9 × 4×4mm (9mm outer diameter, 4mm inner). They are the wear item of a brushless motor — a failing bearing first announces itself as a slight roughness when spinning the shaft by hand, then as a buzzing or grinding sound at certain RPMs. With the motor unmounted, spin the shaft by hand: it should rotate perfectly smoothly and silently.

The sticker on the bell: Shows model name, KV rating, and sometimes a QR code to the product page. Underneath is the ventilation pattern — small holes or slots allow airflow through the motor for cooling. The motor is not sealed — water and debris can enter through these vents (relevant for wet grass landings).

The three motor wires: Typically 18–22AWG, ~200mm long including the crimped MR30 connector. The wire colours are arbitrary — the motor will run in either direction depending on which two phases you swap, so colour doesn't indicate polarity. What does matter is that all four motors have consistent phase assignments relative to their rotation direction (Props In configuration on libdrone).

The MR30 connector at the wire end: A 3-pin gold-plated connector. MR30 = the Amass MR30 series rated for 30A. The male (pins out) end is on the motor; the female (socket) end is soldered to the ESC. The connector body is often colour-coded by motor position (M1/M2/M3/M4) with heatshrink labels during assembly.

B.4 HDZero Freestyle V2 — The Video Transmitter

Physical form: A rectangular PCB approximately 29 × 30mm, 14mm tall (including the RF shielding cans). Much taller than the FC or ESC because of the RF circuitry height. Power input pads, MIPI connector, UART pads, and antenna connector visible around the perimeter.

The metal boxes (RF shielding cans): Two or three silver-coloured metal enclosures soldered directly to the PCB, covering roughly half the board area. These are EMC shields — aluminium or tin-plated steel walls that prevent RF energy from the transmitter leaking into other circuits, and prevent external interference from reaching the sensitive RF receiver chain. Inside each can (not visible without desoldering) are the RF circuits: the video encoder, PA (power amplifier), and frequency synthesiser.

The U.FL or MMCX connector: A tiny coaxial connector, approximately 2mm diameter, on the edge or top surface of the board. This is the antenna connection point. U.FL connectors are rated for approximately 30 mating cycles — they can wear out. Handle with care; pull from the connector body, never from the cable. This connector carries the 5.8GHz RF signal from the PA to the antenna.

The small rectangular chip visible outside the shields: The video processor — likely an FPGA or ASIC handling H.265 compression and DisplayPort OSD processing. In an LQFP or BGA package. BGA (Ball Grid Array) packages have solder balls on the bottom — completely invisible after soldering — which is why you cannot tell by looking whether a BGA is properly soldered (X-ray is the professional method).

The MIPI connector: A small ZIF (Zero Insertion Force) connector, typically a 30-pin FFC/FPC socket. "ZIF" means a lever locks and releases the cable — never force a MIPI cable in or out without flipping the latch. The thin gold contacts inside are fragile. The MIPI cable (225mm, flat) plugs in here. On the other end of the cable is the camera.

The power input pads: Two or three pads labelled "+" and "G" (ground). The HDZero VTX accepts a wide input range (7–25V), powered via the XL4015 buck converter on the Platform. The pads often have a diode-or-capacitor footprint near them for input protection.

The UART pads: Small pads labelled "TX" and "RX" — the MSP DisplayPort connection to the FC (UART1). Only TX from VTX to FC is typically used for OSD; the FC sends OSD data to the VTX, not the other way.

The SD card slot (if present on this VTX variant): A spring-loaded microSD socket. The VTX records video locally at 1080p60 for post-processing (Gyroflow stabilisation using the Blackbox IMU data).

B.5 HDZero Camera

Physical form: A small module approximately 19 × 19mm PCB with a lens assembly protruding from the front face. The PCB mounts to the bracket. The lens is a miniature glass-and-plastic assembly in a threaded metal housing — you can see the focusing thread. The lens aperture is approximately 3–4mm diameter.

The image sensor (CMOS chip behind the lens): Not directly visible — it sits behind the lens in a light-tight enclosure. The sensor is a 1/3" or 1/2" CMOS chip (the fraction refers to the legacy "vidicon tube" size equivalent). CMOS image sensors work by measuring charge accumulated by photodiodes during each frame exposure. The 1080p60 sensor has 1920 × 1080 = ~2 million pixels, each a few micrometres across.

The flat cable (FFC) socket: Where the MIPI cable attaches — same ZIF mechanism as on the VTX end. The MIPI clock frequency running through this cable at 1080p60 is approximately 600–900 MHz, which is why bend radius and routing matter.

The lens: Fixed focus for FPV use (set to focus at 1–5m, infinity). You can adjust focus by rotating the lens housing against the thread (use a rubber band for grip), then securing with a small spot of threadlock. At wider apertures, depth of field is shallow — objects at the wrong distance will be blurry in the FPV feed.

The IR cut filter: A thin coloured glass disc inside the lens assembly, not visible externally. Blocks infrared light (>700nm) from reaching the sensor. Without it, IR from sunlight and motor heat would make the image look washed-out and give incorrect colour rendition. Some FPV cameras have switchable IR cut filters for night flying — the HDZero camera uses a fixed filter.

B.6 Matek M10Q-5883 — GPS + Compass

Physical form: A small circular or octagonal PCB, approximately 38mm diameter, with a ceramic patch antenna dominating the top face. A smaller secondary PCB or component cluster for the compass is on the same board or nearby. A cable with JST connector exits the bottom.

The ceramic patch antenna (the large square or rectangular white/cream block on top): This is a passive patch antenna — a square of ceramic with a copper patch on top and a ground plane below. It resonates at 1575.42 MHz (GPS L1 / Galileo E1 / BeiDou B1C) due to the patch dimensions and ceramic dielectric constant. The patch is typically 25 × 25mm or 18 × 18mm. Larger patches have more gain (better sensitivity) but are heavier.

You can see the patch is elevated slightly above the PCB — there is a ceramic or foam spacer below it. This spacer sets the antenna height for impedance matching. The tiny solder point in the centre of the patch is the feed point — where the RF signal from the patch is coupled to the coaxial feedline going to the receiver chip.

Why the antenna must face upward, unobstructed: The patch antenna radiates (and receives) best from directly above — the gain pattern is a hemisphere pointing skyward. Placing anything metallic within ~20mm of the patch detunes it. This is why the GPS is on the nose bracket above everything else, and why the Insta360 GO3S video payload is noted to degrade GPS signal when placed nearby.

The u-blox M10 GNSS chip (on the underside or visible as a small square): The receiver IC in a tiny LCC or module package. Contains a complete RF frontend, baseband processor, and navigation computer. The GNSS RF frontend amplifies the −130dBm satellite signals (about 10 trillion times weaker than a mobile phone signal), filters them, and downconverts to baseband for digital processing.

The QMC5883 compass chip: A small 3 × 3mm chip (usually on the same PCB). Contains a three-axis Hall effect sensor measuring the Earth's magnetic field in three dimensions. The chip is extremely sensitive to nearby magnetic fields from motor wires and battery currents — this is why physical separation from the power domain is so critical. Even a single motor wire passing 30mm away at 20A creates a field of approximately 130 µT at the chip location — comparable to the Earth's field (~50 µT). The FC applies a software calibration to compensate for any residual fixed offsets.

The LED indicator: A small SMD LED (usually red or blue) that blinks to indicate GPS fix status: slow blink = searching, fast blink = 3D fix acquired, solid = not applicable. Visible through the top face of the module.

The cable and connector: A JST-GH 6-pin connector carrying 5V, GND, UART TX, UART RX, I2C SCL, I2C SDA. The GPS uses UART (TX/RX) for position data. The compass uses I2C (SCL/SDA). Both are on the same physical cable, connecting to the FC's UART2 and I2C bus respectively.

B.7 RadioMaster RP2 ELRS — The Receiver

Physical form: A very small PCB, approximately 28 × 12 × 5mm — roughly the size of a USB stick but thinner. A ceramic chip antenna protrudes from one end, or a wire antenna extends from the board.

The SX1280 chip (the main IC): A 6 × 6mm QFN (Quad Flat No-lead) package. Contains the complete 2.4GHz LoRa transceiver: RF frontend, frequency synthesiser, LoRa modem, and SPI interface to the host microcontroller. You can identify it as the largest chip on the board. The SX1280 is remarkable because it receives signals as weak as −100dBm — this is 10 picowatts of RF power.

The RF matching network (small components between the SX1280 and antenna): A cluster of inductors and capacitors forming an impedance-matching circuit. The SX1280 RF output is 50Ω; the antenna is also nominally 50Ω. The matching network ensures maximum power transfer and correct impedance at 2.4GHz. These components are typically 0201 size (0.2mm × 0.1mm) — barely visible to the naked eye.

The MCU (smaller chip alongside the SX1280): A small STM32 or similar microcontroller running the ELRS receiver firmware. It manages SPI communication to the SX1280, decodes received packets, outputs CRSF over UART, and handles failsafe logic.

The ceramic chip antenna (at the end of the board): A small rectangular block of ceramic approximately 8 × 2mm, printed with copper traces forming a miniature antenna. The ceramic dielectric (high permittivity) allows a physically small antenna to resonate at 2.4GHz — a full quarter-wave at 2.4GHz would be ~31mm long; the ceramic shrinks this to ~8mm with acceptable efficiency loss.

The CRSF pads: Two small solder pads labelled "T" and "R" (Transmit, Receive) on the bottom edge. These carry the 420kbaud CRSF serial signal to the FC's UART3. The pads are small because CRSF is a logic-level signal (~3.3V, <1mA).

The 5V and GND pads: Power supply from the FC's BEC. The RP2 draws approximately 50mA at 5V in normal operation, rising briefly during transmit.

The binding button: A small tactile switch on the board surface. Pressing it during power-on enters binding mode (pairs the receiver to the transmitter). After initial binding, you never need to press it again unless re-pairing.

B.8 The 1000µF Capacitor

Physical form: A cylindrical aluminium electrolytic capacitor, approximately 10mm diameter, 20mm tall. The body is blue or black sleeving with a white band on one side — the white band with a "–" symbol indicates the negative terminal. The shorter lead is also negative; the longer lead is positive.

The aluminium can: The outer shell is the negative terminal. Inside is a rolled construction: two strips of aluminium foil (the plates), separated by a paper or polymer separator soaked in electrolyte, rolled into a cylinder. The oxide layer on one aluminium strip is the dielectric — it is approximately 0.01µm thick, which is why electrolytic capacitors achieve high capacitance in a small volume.

The pressure relief vent (on the top): A scored "K" or "+" pattern on the top face of the capacitor. If the capacitor is overloaded (overvoltage, reverse polarity, or excessive ripple current) it can generate gas internally, building pressure. The vent allows the gas to escape rather than causing the can to rupture explosively. A bulging or vented capacitor is a sign of failure — replace immediately.

Why it lives as close as possible to the ESC: This capacitor's job is to absorb voltage transients from motor back-EMF (explained in §1.3). Every millimetre of trace between the capacitor and the ESC power pads adds inductance (~1nH/mm), which reduces how effectively the capacitor can clamp a fast spike. At 1nH per mm and a 50A/µs current transient: V = L × di/dt = 1nH × 50 = 50mV per mm of trace. Move it 10mm further away and the spike clamp voltage increases by 500mV — the difference between safe and damaging for the MOSFETs.

B.9 GX12-7 Connectors — Drone Side (Female)

Physical form: A cylindrical metal-bodied connector approximately 18mm outer diameter (with the mounting flange), 25–30mm body length. The face shows 7 circular socket contacts arranged in a circular pattern with one in the centre. A knurled locking ring surrounds the body.

The contacts: Gold-plated phosphor-bronze pins, approximately 1mm diameter. The female (drone) side has recessed sockets — the pins are inside the body, protected when uncapped. This is deliberate: if the male connector is accidentally touched during handling, no short circuit can occur. The 24 AWG power pins (PIN 1 and 2) are larger diameter than the 28 AWG signal pins (3–7) — you can see this difference if you look closely.

The locking ring: A threaded aluminium ring that engages the threads on the mating male connector housing. "Finger tight is sufficient" means approximately 0.5 N·m — enough to fully engage the thread and compress the IP65 O-ring seal, but not enough to gall the aluminium threads.

The IP65 O-ring: A thin rubber ring visible around the connector body just behind the contact face. When the male connector is locked onto the female, this O-ring compresses against the mating surface, sealing against water jets. Without the locking ring engaged, the O-ring is not compressed and IP65 protection is not active.

The chimney (PETG printed housing): The GX12 body sits inside a printed chimney that extends 25mm downward into the electronics zone. The chimney is printed into the Platform as one piece — no separate bracket. The Ø12mm bore matches the connector body. The Ø14mm boss on the Platform surface provides a flat bearing face for the panel nut. The wire exit slot at the chimney base (6 × 4mm) allows the pigtail wires to route into the signal or power channel without a sharp bend at the connector base.

The dust cap: A rubber or plastic plug protecting the socket contacts when no payload is connected. Mandatory after every flight where the payload is removed. Exposed socket pins in a crash can be shorted to the frame or contaminated with debris, causing signal corruption or corrosion.

B.10 The XL4015 Buck Converter (on Platform)

Physical form: A small PCB module (approximately 20 × 11mm) or discrete component layout on the Platform. Contains a handful of components: the XL4015 IC, an inductor, input and output capacitors, and feedback resistors.

The XL4015 IC: A small 8-pin SOP package, about 5 × 4mm. The control chip. Contains the PWM oscillator (~180kHz switching frequency), error amplifier, and gate driver for the external switch.

The inductor (the most visually distinctive component): A wire-wound component with a ferrite or powdered iron core, typically 22µH–100µH. Looks like a small transformer or coil — you can sometimes see the wire winding. It is larger than any other component on the module because it stores magnetic energy during each switching cycle. The inductor is the energy transfer element: during the "on" phase, current builds in the inductor; during the "off" phase, it delivers that energy to the output.

The feedback resistors: Two small resistors forming a voltage divider that sets the output voltage. The ratio of these two resistors programs the XL4015's output. Changing either resistor changes the output voltage — which is why you do not substitute components on this module without recalculating.

Why a buck converter instead of an LDO for the VTX: At 6S (22V input) and 12V output, an LDO would drop 10V at whatever current the VTX draws (~300–400mA at full power). Power dissipated = V_drop × I = 10V × 0.4A = 4W — enough to need a heatsink and cause significant localised heating. The XL4015 at ~90% efficiency dissipates only ~0.5W at the same operating point. The tradeoff is EMC: the 180kHz switching frequency generates harmonics that must not reach sensitive signal lines.

B.11 Sensirion SEN66 — The Air Quality Sensor

Physical form: A rectangular plastic module, 55.5 × 25.6 × 21.5mm. One face has an air inlet grill (for the internal fan intake). The opposite face has an air outlet. An I2C connector (JST-SH 4-pin) exits one end. The body is sealed plastic with no user-serviceable internal components.

The internal fan (audible, not visible): A miniature centrifugal fan that draws air through the sensor body at a controlled flow rate. You can hear it as a faint whirring when the SEN66 is powered. The fan ensures consistent air flow across the sensing elements regardless of drone speed or orientation — passive ram-air designs give variable readings with airspeed. On power-up, the fan runs at a higher speed for ~10 seconds for cleaning/purging, then settles to operating speed.

The laser aperture (tiny hole in the flow path): A miniature laser diode (typically 650nm red, <1mW) and photodetector aimed across the air stream at a precise angle. You cannot see the laser operating (it may be IR). The laser and detector are aligned with micron precision at the factory — this is why you do not open the SEN66 or attempt to clean the optics with anything other than dry compressed air at the inlet.

The MOx sensing elements (inside, not visible): Two heated metal-oxide semiconductor chips for VOC and NOx. They operate at elevated temperature (200–400°C at the sensing surface) to accelerate the oxidation reactions that change resistance. This self-heating is why the SEN66 draws 200mA peak on startup — mostly for heating the MOx elements to operating temperature. The ~60 second warm-up time recommended before flight is for MOx thermal stabilisation.

The NDIR optical bench (inside, not visible): An IR source, a gas cell, and an IR detector with a narrow 4.26µm bandpass filter. The gas cell is a few millimetres long — long enough for measurable CO₂ absorption at atmospheric concentrations (~420ppm background). The NDIR measurement is temperature-compensated internally — CO₂ absorption changes with temperature, and the SEN66 corrects for this.

The I2C interface connector: A 4-pin JST-SH connector (1mm pitch, very fine). Pinout: VDD, GND, SCL, SDA. The SEN66 has a fixed I2C address of 0x6B — you cannot change it, which means you cannot put two SEN66s on the same I2C bus without an I2C multiplexer.

B.12 ESP32-S3 Mini Development Board

Physical form: A small development board approximately 25 × 20mm. The ESP32-S3 chip itself is on a module (the metal-shielded square block in the centre), with the rest of the PCB providing breakout pins, a USB connector, and support components.

The metal shielded module (the silver rectangle, ~18 × 18mm): This is the ESP32-S3 module (such as the WROOM-2 or MINI-1). The metal shield is an EMC enclosure over the WiFi radio circuitry. Inside the shield (not visible) is: the ESP32-S3 chip itself, a 26MHz crystal oscillator, a PCB trace antenna or an external antenna connector, and power supply decoupling capacitors.

The ESP32-S3 chip (inside the module, not visible externally): A 7 × 7mm LGA package containing the dual-core Xtensa LX7 processor, WiFi and Bluetooth radios, 8MB PSRAM, USB controller, and all peripherals. One of the most powerful microcontrollers available in this physical size class.

The PCB trace antenna or U.FL connector: Some module variants have a PCB trace antenna — a serpentine copper track on the module PCB edge that resonates at 2.4GHz. Others have a U.FL connector for an external antenna. For the payload application (WiFi sync on the ground, not in flight), a PCB trace antenna is sufficient.

The USB-C or Micro-USB connector: Used only for programming (flashing MicroPython firmware and uploading logger scripts via Thonny). Not used during flight.

The reset and boot buttons: Two small tactile switches on the board. To enter firmware flash mode: hold BOOT, press RESET, release both. This puts the ESP32-S3 in bootloader mode so the USB port accepts new firmware. Understood by feel rather than by sight — they are tiny SMD buttons.

The SPI pads for the SD card module: Breakout pins for MOSI, MISO, SCK, CS connecting to the microSD module. SPI traces are kept short to minimise capacitive loading at the ~10–40MHz SPI clock frequency.

B.13 Antennas — Visual Identification and Function

VTX 5.8GHz Antenna: A whip or cloverleaf/pagoda style antenna, 50–100mm long. The 5.8GHz wavelength is $\lambda$ = c/f = 300/5800 = 51.7mm. A quarter-wave whip is ~13mm. The larger "cloverleaf" or "pagoda" designs achieve circular polarisation — the RF field rotates as it propagates. Circular polarisation is preferred for FPV because it rejects multipath reflections (reflections reverse the polarisation sense) and works regardless of antenna orientation relative to the receiving goggles. The antenna connects to the VTX via U.FL or MMCX. It mounts to the Backplane or a dedicated antenna mast, away from the metal motor mounts.

ELRS 2.4GHz Antenna (on RP2 receiver): Either a ceramic chip antenna (built into the receiver PCB) or a thin coaxial cable (RG-1.13 or similar, ~150mm) terminating in a 31mm wire monopole. The 2.4GHz quarter wave is 31mm — the wire length is not coincidental. For a 6-inch drone, this antenna is typically zip-tied to the frame at 90° relative to the video antenna to minimise polarisation mismatch. The RP2 has two diversity antennas — the firmware selects whichever is receiving the stronger signal packet-by-packet.

GPS Patch Antenna (on M10Q): Already described in B.6. To add: the patch antenna is right-hand circularly polarised (RHCP) — it receives the RHCP signals from GPS/Galileo/BeiDou satellites preferentially, rejecting multipath reflections from the ground (which become LHCP after reflection). This is why a GPS patch antenna mounted upside-down gives dramatically worse performance — RHCP mounted face-down receives LHCP, which is exactly the wrong polarisation.

Why antenna placement matters for the whole system: All three antennas (VTX 5.8GHz, ELRS 2.4GHz, GPS 1.575GHz) operate in different frequency bands but they still interact physically. A 5.8GHz VTX running at 800mW generates harmonics at 11.6GHz, 17.4GHz — these are far from the ELRS band and GPS band, so direct interference is minimal. The bigger risk is the VTX's switching power supply generating broadband noise that couples onto the GPS antenna via the PCB ground plane if they share power rails — which is why VTX power comes from the dedicated XL4015 and not directly from the FC BEC that also powers the GPS.

End of Physical Anatomy Appendix


Revision History

Version Date Author Summary
3.3.0 2026-03-27 JS Cross-references updated to LD_ naming and FreeCAD Cookbook.
3.3.0 2026-03 JS Initial electronics reference.