05 - Build and Test¶
Step-by-step assembly and bring-up for IceDrone V3.4. Follow the stages in order; each stage gates the next.
For the 70×30 mm perfboard prototype, use the detailed hole-by-hole guide:
10 - Perfboard V3.4 soldering and bring-up
flowchart TD
A["Stage A: print & mechanical fit"] --> B["Stage B: V3.4 motor electronics"]
B --> C["Stage C: polarity & current-limited power-up"]
C --> D["Stage D: XIAO/camera smoke test"]
D --> E["Stage E: IMU orientation"]
E --> F["Stage F: motor mapping (no props)"]
F --> G["Stage G: motor rotation"]
G --> H["Stage H: battery ADC calibration"]
H --> I["Stage I: video stress test"]
I --> J["Stage J: pre-prop checklist"]
J --> K(("Fit propellers"))
Tools and consumables¶
- soldering iron + fine/chisel tip
- thin electronics solder + flux
- hot air optional for SMD work
- multimeter with continuity, resistance, diode and DC-voltage modes
- bench power supply with adjustable current limit strongly recommended
- SOT-23 adapter boards or material for very short dead-bug wiring
- 0.6–0.8 mm tinned copper wire for VBAT/GND rails
- 28–30 AWG insulated wire for signals
- 22–24 AWG or otherwise suitably rated wire for battery/motor current
- isopropyl alcohol + brush/lint-free wipes
- heat-shrink tubing
- USB-C data cable
- permanent marker / wire labels
Stage A - print and mechanical fit¶
- Print the current Airframe V2 parts from
cad/airframe_v2/. - Test-fit all four 8520 motors before wiring.
- Verify each motor shaft is 1.0 mm.
- Test-fit one propeller for bore fit, then remove it again.
- Fit XIAO/camera and battery holders but keep the electronics accessible.
- Do not fit propellers again until Stage J is complete.
Stage B - build V3.4 motor electronics¶
Use hardware/motor_stage_netlist.csv, hardware/pinmap.csv and, for perfboard, hardware/perfboard_v34_netlist.csv.
| Channel | MOSFET | Gate resistor | Gate pulldown | Flyback diode | Position | GPIO |
|---|---|---|---|---|---|---|
| 1 | Q1 | R1 | R5 | D1 | rear-left | GPIO4 / D3 |
| 2 | Q2 | R2 | R6 | D2 | rear-right | GPIO44 / D7 |
| 3 | Q3 | R3 | R7 | D3 | front-right | GPIO6 / D5 |
| 4 | Q4 | R4 | R8 | D4 | front-left | GPIO5 / D4 |
For each channel:
- install the 100 kΩ gate pulldown;
- install the 100 Ω gate resistor;
- install the AO3400A with verified Gate/Source/Drain orientation;
- install an SS34-class ≥3 A Schottky flyback diode:
- anode = motor− / MOSFET drain
- cathode/band = VBAT / motor+
- verify source-to-GND continuity;
- verify gate-to-GND is approximately 100 kΩ;
- verify the flyback diode in diode mode;
- verify there is no drain-to-GND hard short.
After all four channels pass:
- C1 = 470 µF / 10 V low-ESR across VBAT/GND
- C2 = 100 µF / 10 V low-ESR across VBAT/GND
- R9/R10 = 100k/100k battery divider
- C3 = 100 nF from ADC midpoint to GND
- one 100 nF ceramic directly across each motor's terminals
V3.4 pin changes that must not be back-ported incorrectly¶
- M2 is GPIO44 / D7, not GPIO3.
- GPIO3 is intentionally unused.
- I2C is SDA=GPIO2/D1 and SCL=GPIO43/D6.
- firmware must call
Wire.begin(2, 43). - D1-D4 are SS34-class, not SS14.
- raw LiHV does not feed XIAO BAT/5V directly.
Stage C - power architecture and current-limited first power¶
V3.4 power path:
1S LiHV VBAT → motors + gimbal
and separately:
VBAT → off-board 1S→5V boost → D5 Schottky → XIAO 5V
With XIAO, sensors, gimbal and motors initially disconnected:
- measure VBAT-to-GND: no hard short;
- verify battery polarity;
- verify D5 orientation;
- verify there is no direct VBAT→XIAO_5V continuity;
- if available, apply about 3.7 V from a bench supply with a low initial current limit (for example 100 mA);
- if the supply immediately current-limits, disconnect and troubleshoot;
- connect the boost module and measure its regulated output before connecting the XIAO;
- only then connect the XIAO 5V/GND path.
Keep the airframe restrained and propellers removed.
Stage D - XIAO/camera smoke test¶
- With battery power disconnected, connect XIAO over USB.
- Flash
firmware/bench_test/main.cpp. - Open the serial monitor at 115200 baud.
- Confirm the startup banner appears.
- Confirm the camera initializes.
- Capture repeated JPEG frames and verify there are no resets.
- Only after USB testing passes, test the previously verified boosted 5-V supply.
The bench-test firmware uses the V3.4 motor map {GPIO4, GPIO44, GPIO6, GPIO5}.
Stage E - IMU and I2C¶
The GY-91 must be mounted rigidly.
V3.4 I2C:
- SDA = GPIO2 / D1
- SCL = GPIO43 / D6
The firmware must explicitly call:
Wire.begin(2, 43);
Check:
- stationary gyro settles close to zero after calibration;
- acceleration magnitude is near 1 g while stationary;
- roll and pitch signs match the expected frame orientation.
Do not correct wrong IMU axis signs by swapping random motor channels.
Stage F - motor mapping, no props¶
Propellers remain removed.
The bench-test command mapping is:
| command | motor | GPIO |
|---|---|---|
| 0 | rear-left | GPIO4 |
| 1 | rear-right | GPIO44 |
| 2 | front-right | GPIO6 |
| 3 | front-left | GPIO5 |
Pulse one motor at a time at low duty. If a different physical motor spins, correct the wiring/mapping before continuing.
If a motor runs as soon as power is applied, disconnect power immediately and inspect:
- AO3400A Gate/Source/Drain orientation
- gate-to-drain solder bridges
- missing/bad 100 kΩ gate pulldown
- wrong signal connection
Stage G - motor rotation¶
- identify each motor's rotation with very short low-duty pulses;
- compare against the Quad-X pattern required by the flight firmware;
- reverse a brushed motor by swapping its two motor leads;
- repeat the channel test after every swap.
Do not use wire colour alone to infer direction.
Stage H - battery ADC calibration¶
Nominal divider:
V_ADC = VBAT / 2
- measure actual VBAT with a multimeter;
- read the ADC-derived battery voltage;
- repeat at two clearly different battery voltages;
- calculate scale/offset calibration;
- store the correction in firmware.
C3 = 100 nF at the divider midpoint is intended to reduce motor-noise contamination.
Stage I - video stress test¶
Still without propellers:
- power from the normal battery/boost architecture;
- start telemetry/video;
- let the system run for at least 10 minutes;
- watch for resets, Wi-Fi loss, camera failures and excessive XIAO temperature;
- gently move the frame and verify the IMU continues to respond.
Stage J - pre-prop checklist¶
- [ ] V3.4 wiring used; no V3.2/V3.3 solder map mixed in
- [ ] no VBAT/GND hard short
- [ ] battery polarity verified
- [ ] no raw LiHV connected directly to XIAO 5V/BAT
- [ ] boost output verified before XIAO connection
- [ ] D1-D4 are SS34-class and bands face VBAT
- [ ] C1 = 470 µF / 10 V, C2 = 100 µF / 10 V, polarity correct
- [ ] M2 uses GPIO44/D7, not GPIO3
- [ ] I2C uses GPIO2/GPIO43 and
Wire.begin(2,43) - [ ] all four motor channels map to the correct physical motors
- [ ] motor directions match the selected mixer
- [ ] camera passes the stress test
- [ ] IMU orientation verified
- [ ] battery ADC calibrated
- [ ] failsafe/arming behaviour bench-tested
- [ ] antenna and wiring cannot enter the propeller discs
- [ ] no propeller is fitted until every item above passes
Only then continue to 06 - First Flight.
← 04 - Firmware | Docs index | Next: 06 - First Flight →