# TerraHawk flight parameters: HKUST NxtPX4v2 (MicoAir), firmware target NxtPX4v2 (in ArduPilot at 4c98c92). # Was the first-flight board from 2026-10-04 until the Lumenier LUX F765 replaced it the same day (Ryan: # board-luxf765.parm, which has one CAN bus). Kept as a checked alternative: two IMUs, no CAN. # Load after terrahawk-common.parm, then the airframe file. Do NOT load lift-4in1.parm with this board: it is # written for the 6C's IO co-processor, and its SERIAL6 is this board's RC input. This board has no CAN, so it # can only fly the 4-in-1; the 4-in-1 settings are in this file. # Pinout: ArduPilot's hwdef/NxtPX4v2 (hwdef.dat, README.md). What it cannot do: DroneCAN anything (airspeed, # charge node, rangefinder node, pod ESCs), so no dock charging on this board. # Mounting: face up, the silkscreen arrow (toward the 8-pin ESC connector's edge) forward, on th-blender's Avionics # Plate (NxtPX4v2), 31824ff. Both IMUs' hwdef rotation is the board-frame correction, so nothing else is needed. AHRS_ORIENTATION 0 # No safety button. BRD_SAFETY_DEFLT 0 # Two IMUs (BMI088 x 2), two EKF3 lanes. EK3_IMU_MASK 3 # IMU offset from the design CG, kit (0, 270, -5.6), in body axes (X forward, Y right, Z down); these replace the # common file's 6C values. Both BMI088s (6.5 mm apart) at their midpoint, assembly (-7.90, 295.69, 21.61): 25.7 mm aft, # 7.9 mm to starboard (assembly -X), from the open KiCad board placed on the plate (th-blender 31824ff). Z rests on # an ESTIMATE of 5 mm for the board's soft-mount grommets, plate top to PCB underside: measure it on the bench. Each # mm taller makes Z 0.001 more negative. One soft stage only: the kit's FC Mount dampeners stay rigid PETG. INS_POS1_X -0.0257 INS_POS1_Y 0.0079 INS_POS1_Z -0.0272 INS_POS2_X -0.0257 INS_POS2_Y 0.0079 INS_POS2_Z -0.0272 # --- Outputs: 8, all on the H743. Timer groups 1-4 (TIM1), 5-6 (TIM2), 7-8 (TIM3); every output in a group # --- uses the same protocol, so no servo shares a group with a DShot motor. # Lift motors 1-4 on the 4-in-1 (TBS Lucid 60A 3-8S, AM32), DShot300, bidirectional DShot for RPM (the board's README: # all channels support it). Check on the bench that all four RPM values arrive before the first hover. # Output n drives the Lucid's ESC channel n (a straight cable); the functions put each channel on the motor its # pads face. Fuselage C v2.4B (th-blender W36, 2026-10-14): the 4-in-1 stands on edge ahead of the Spar Box, # component side aft, battery tabs to STARBOARD, so the board's x = 42 edge is the UPPER one. TBS manual p. 97 # (vendor/esc/NOTES.md frame): channels 1 and 2 on the x = 42 edge, 3 and 4 on the x = 0 edge, 1 and 3 at the tab # end. So channels 1 and 3 (pad groups x1 y17, x0 y17) leave by the starboard channel mouth, 2 and 4 (x1 y38.5, # x0 y38.5) by the port one. Front or rear is chosen beyond the mouth: the UPPER edge's triple goes to the FRONT pod. # ArduPilot quad X: motor 1 front starboard, 2 rear port, 3 front port, 4 rear starboard. From the drawing, not the # board itself: check the silkscreen, then the motor test (A front starboard, B rear starboard, C rear port, D front # port) before props. Was 35, 34, 33, 36 for the Lucid flat in the belly (2026-10-05), which on edge would drive # two motors from the wrong side. SERVO1_FUNCTION 33 # ESC ch1, pads x1 y17, upper edge, starboard end: front starboard SERVO2_FUNCTION 35 # ESC ch2, pads x1 y38.5, upper edge, port end: front port SERVO3_FUNCTION 36 # ESC ch3, pads x0 y17, lower edge, starboard end: rear starboard SERVO4_FUNCTION 34 # ESC ch4, pads x0 y38.5, lower edge, port end: rear port Q_M_PWM_TYPE 5 SERVO_DSHOT_ESC 1 SERVO_BLH_BDMASK 15 SERVO_BLH_POLES 14 # Elevons on 5 and 6 (TIM2, servos only). Reversal and endpoints on the bench, kept in the airframe file. SERVO5_FUNCTION 77 SERVO6_FUNCTION 78 # 7: pusher ESC (PWM); 8: Survey3W trigger (TIM3, both PWM at the servo rate). SERVO7_FUNCTION 70 # Pusher ESC: DYS Aria 70A 3-6S AM32 (Ryan, 2026-10-04; cart row 5): 70 A continuous, 80 A burst, no BEC, PWM input # on this output (its timer group stays PWM). Before it flies, set in the AM32 configurator # (esc-configurator.com, through a USB linker on the signal wire or the flight controller's ESC pass-through): # Brake on stop: off. The fixed APC 10x7E freewheels at zero throttle; SITL will fly its windmill curve. # Low voltage cutoff: off. The battery failsafes in the common file are the only low-voltage action. # Motor direction: so the pusher blows aft; motor poles: 14 (check the ECO II's count). # Servo low and high thresholds: 1000 and 2000 us, to match SERVO7_MIN and SERVO7_MAX. # Temperature limit: disabled. Above it AM32 cuts the duty to about a quarter at once (main.c), a pusher loss. # Bench: the motor is still at 1000 us and starts just above it. AM32's defaults are brake off and cutoff off, but read # them back in the configurator: do not trust the defaults. SERVO7_MIN 1000 SERVO7_MAX 2000 SERVO7_TRIM 1000 SERVO8_FUNCTION 10 # Survey3W, as on the 6C (docs/survey3.md). The exposure feedback goes on the AUX2 pad, GPIO 82 (PC1). CAM1_TYPE 1 CAM1_SERVO_ON 2000 # Idle pulse: never 1500, which puts the camera into USB transfer mode. CAM1_SERVO_OFF 1000 CAM1_DURATION 0.1 CAM1_INTRVAL_MIN 1.6 CAM1_FEEDBAK_PIN 82 # value-ok: GPIO(82) is PC1, the AUX2 pad (both sources agree), in hwdef/NxtPX4v2 CAM1_FEEDBAK_POL 1 # The video switch's "ON" input on PA4, GPIO 81: the AUX3 pad, J12 pin 1 (the board's design nets and MicoAir's # sheet; ArduPilot's README calls it AUX1, which is wrong; th-blender, 2026-10-04). J12 has no power pin. On at boot. RELAY2_FUNCTION 1 RELAY2_PIN 81 # value-ok: GPIO(81) is PA4, the AUX3 pad, in hwdef/NxtPX4v2 RELAY2_DEFAULT 1 # No output is left for the cargo-door servo on this board. # --- Serial ports (SERIAL_ORDER OTG1 USART2 UART4 USART1 USART3 UART7 UART5 UART8) --- # SERIAL1 (UART2): SiK radio, MAVLink 2. SERIAL1_PROTOCOL 2 SERIAL1_BAUD 57 # SERIAL2 (UART4, J5: 5 V, TX, RX): ELRS receiver, CRSF. Not the RC connector J7: it has UART5 TX and an SBUS pin # that reaches RX5 through an inverter, so CRSF (non-inverted, both directions) would arrive inverted there. # The board's README itself suggests UART2, 4 or 8 for a serial receiver. SERIAL2_PROTOCOL 23 # The CRSF driver sets its own 416 kBaud; 115 is the conventional value here. SERIAL2_BAUD 115 # RC from CRSF only (bit 9). The default 1 also accepts RADIO_RC_CHANNELS from the LoRa link (MAVRadio, bit 16; # compiled in on boards with more than 1 MB of flash). Without RC_OPTIONS bit 10 the first protocol to arrive is # kept for the whole boot (AP_RCProtocol::should_search), so an mLRS receiver that sends RC channels before the # ELRS link is up (transmitter off at power-up, the dock's mLRS transmitter on) would become the RC source and # CRSF would be ignored until a reboot (th-telemetry, 2026-10-06). RC_PROTOCOLS 512 # SERIAL3 (UART1): Waveshare Q43 NEO-F9P on J3, which carries the UART, 5 V and the only external I2C (I2C4, # pull-ups to 3.3 V), so the Q43's compass rides its own cable. The board has no internal compass. SERIAL3_PROTOCOL 5 SERIAL3_BAUD 230 GPS1_TYPE 2 # SERIAL4 (UART3): the HD VTX connector, MSP DisplayPort OSD. Its pin 1 is 12 V. SERIAL4_PROTOCOL 42 SERIAL4_BAUD 115 OSD_TYPE 5 # SERIAL5 (UART7): the 4-in-1's serial telemetry (voltage, current, temperature, RPM per channel). SERIAL5_PROTOCOL 16 SERIAL5_BAUD 115 # SERIAL6 (UART5, J7): not used. The board's default puts RC here; it is switched off so only SERIAL2 decodes RC. SERIAL6_PROTOCOL -1 # SERIAL7 (UART8): spare (a serial rangefinder later). SERIAL7_PROTOCOL -1 # --- Airspeed: an I2C sensor sharing J3's I2C4 with the Q43's compass, through the Y lead, row 9f (bus index 1 in # --- I2C_ORDER I2C1 I2C4) --- ARSPD_BUS 1 # MS4525DO (I2C, address 0x28): the sensor Ryan has for first flights (chip marked "4525DO", 2026-10-04). ARSPD_TYPE 1 # --- Power: the board's own pack-voltage sensing, and the PM02 V3's current signal on the ESC connector's # --- current input. The hwdef's defaults (10.2, 20.4) suit MicoAir's ESC; the current scale is the PM02 V3's # --- 36.36 A/V (as the Pixhawk6C hwdef). The PM02 measures the whole pack current, the pusher included. BATT_MONITOR 4 BATT_AMP_PERVLT 36.36 # Cross-check only: the sum of the 4-in-1's reported current (its serial telemetry). BATT2_MONITOR 9