mirror of
https://github.com/ArduPilot/ardupilot.git
synced 2026-10-02 10:23:25 +08:00
hwdef: ZenFC743
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
# ZenFC H743 Flight Controller
|
||||
|
||||
The _ZenFC H743_ is a flight controller designed by [Zenithra Tech](https://www.zenithratech.com/contact).
|
||||
It is built around the STM32H743 processor with dual Bosch BMI088 IMUs for sensor redundancy, an onboard barometer, and an integrated OSD.
|
||||
|
||||

|
||||
|
||||
## Features
|
||||
|
||||
- **MCU:**
|
||||
- STM32H743VIT6 (32-bit Arm® Cortex®-M7, 480 MHz)
|
||||
- **IMU:**
|
||||
- 2x Bosch BMI088 (accel + gyro, independent SPI buses for redundancy)
|
||||
- **Barometer:**
|
||||
- Bosch BMP388
|
||||
- **OSD:**
|
||||
- Onboard AT7456E OSD chip
|
||||
- **Interfaces:**
|
||||
- 7x UARTs
|
||||
- 1x CAN
|
||||
- 2x external I2C (I2C1 with GPS connector for compass and dedicated I2C2 connector)
|
||||
- 8x PWM outputs (Dshot supported)
|
||||
- microSD card slot
|
||||
- 1x USB Type-C
|
||||
- 1x SWD (Debug)
|
||||
- **Power:**
|
||||
- 2x ADC (V_BAT & current sense)
|
||||
- Battery Input range - 2S-6S
|
||||
- BEC Outputs
|
||||
- 9V 3A cont.
|
||||
- 5V 3A cont.
|
||||
|
||||
## Dimensions
|
||||
|
||||

|
||||
|
||||
- **Mounting:** 30.5 mm x 30.5 mm /Φ4mm hole
|
||||
- **Dimensions:** 35mm x 35mm x 8mm
|
||||
- **Weight:** 9g
|
||||
|
||||
## Where to Buy
|
||||
|
||||
Order from [Zenithra Tech](https://www.zenithratech.com/solutions/components).
|
||||
|
||||
## Layout
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## UART Mapping
|
||||
|
||||
The UARTs are marked RXn and TXn in the below pinouts. The RXn pin is the receive pin for UARTn. The TXn pin is the transmit pin for UARTn.
|
||||
|
||||
|Port |UART |Connector |Protocol |Notes |
|
||||
|--------|-------|-------------|-----------------|-------------------------------|
|
||||
|SERIAL0 |USB |USB-C |MAVLink2 | |
|
||||
|SERIAL1 |USART1 |GPS1 |GPS |I2C1 on same connector |
|
||||
|SERIAL2 |USART2 |TLM3 |MAVLink2 | |
|
||||
|SERIAL3 |USART3 |TLM4 |MAVLink2 | |
|
||||
|SERIAL4 |UART5 |TLM1, DJIO3 |MSP DisplayPort |RTS5/CTS5 on TLM1 only |
|
||||
|SERIAL5 |USART6 |RCIN |RCIN | |
|
||||
|SERIAL6 |UART7 |TLM2 |MAVLink2 |RTS7/CTS7 |
|
||||
|SERIAL7 |UART8 |ESC1 |ESC Telemetry |RX8 only on the ESC1 connector |
|
||||
|
||||
All UARTs are DMA capable in both directions.
|
||||
|
||||
> **Notes:**
|
||||
>
|
||||
> - The **SBUS** pin on the DJIO3 connector is internally routed to the **RX6 (RCIN)** pin.
|
||||
> - **Important:** The **TLM1** and **DJIO3** connectors share the same physical **SERIAL4 (UART5)** port. You can only use one of these connectors at a time; connecting devices to both simultaneously will cause signal conflicts.
|
||||
> - The **TLM1/DJIO3** port (SERIAL4) is configured for **MSP-DisplayPort** by default. If you require this port for MAVLink or other telemetry, you must manually adjust the `SERIAL4_PROTOCOL` parameter.
|
||||
|
||||
## Connectors & Pinout
|
||||
|
||||
Board uses JST SH connectors for all interfaces.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## RC Input
|
||||
|
||||
RC input is on the RCIN connector (UART6, SERIAL5). PPM is not supported on this board, as there is no dedicated timer-based RC input pin.
|
||||
|
||||
> **Note**: The SBUS pin on the DJIO3 connector is internally routed to RX6 and can be used as an alternative RC input for SBUS receivers. Because it is the same pin as RX6 on the RCIN connector, only one of the two may be driven at a time — a DJI air unit outputting SBUS on DJIO3 will conflict with a receiver plugged into RCIN.
|
||||
|
||||
- SBUS/DSM/SRXL connect to the RX6 pin.
|
||||
- CRSF/ELRS require both RX6 and TX6, and automatically provide telemetry.
|
||||
- FPort requires connection to TX6, with `SERIAL5_OPTIONS` set to "7".
|
||||
- SRXL2 requires connection to TX6 only, with `SERIAL5_OPTIONS` set to "4", and automatically provides telemetry.
|
||||
|
||||
See [RC Systems](https://ardupilot.org/plane/docs/common-rc-systems.html) for details on all supported receiver protocols.
|
||||
|
||||
## OSD Support
|
||||
|
||||
The ZenFC H743 has an onboard AT7456E analog OSD, enabled by default (`OSD_TYPE` = 1). Analog camera input is on the VIDEO IN connector and analog video output to a VTX is on the VIDEO OUT connector. Both carry a 9V supply pin, so be careful not to connect a camera or VTX requiring 5V to them.
|
||||
|
||||
Simultaneous DisplayPort OSD operation is also pre-configured on SERIAL4 (`OSD_TYPE2` = 5).
|
||||
|
||||
> **Note**: if `SERIAL4_PROTOCOL` is ever changed from MSP DisplayPort, `OSD_TYPE2` must be set to `0`, or a pre-arm failure will result.
|
||||
|
||||
## HD VTX Support
|
||||
|
||||
The DJIO3 connector supports a DJI O3/O4 Air Unit or other HD VTX. Protocol defaults to MSP DisplayPort on SERIAL4. Pin 1 of this connector is 9V, so be careful not to connect this to a peripheral requiring 5V.
|
||||
|
||||
## PWM Output
|
||||
|
||||
The ZenFC H743 supports up to 8 PWM outputs, all on the FMU (there is no IO co-processor). Outputs 1-4 are on the ESC1 connector, labeled M1-M4. Outputs 5-8 are on the ESC2 connector, labeled M5-M8.
|
||||
|
||||
The motor order follows the standard ArduPilot/PX4 quad-X convention:
|
||||
|
||||
- M1: Front Right
|
||||
- M2: Back Left
|
||||
- M3: Front Left
|
||||
- M4: Back Right
|
||||
|
||||
All 8 outputs support DShot and bi-directional DShot.
|
||||
|
||||
The outputs are in 3 groups:
|
||||
|
||||
- Outputs 1, 2, 3 and 4 (M1-M4) in group 1
|
||||
- Outputs 5 and 6 (M5, M6) in group 2
|
||||
- Outputs 7 and 8 (M7, M8) in group 3
|
||||
|
||||
Channels within the same group need to use the same output rate. If any channel in a group uses DShot then all channels in the group need to use DShot.
|
||||
|
||||
## Battery Monitoring
|
||||
|
||||
The voltage sensor can handle up to 6S LiPo batteries.
|
||||
|
||||
The default battery parameters are:
|
||||
|
||||
- BATT_MONITOR 4
|
||||
- BATT_VOLT_PIN 8
|
||||
- BATT_CURR_PIN 4
|
||||
- BATT_VOLT_MULT 10.09
|
||||
- BATT_AMP_PERVLT 40
|
||||
|
||||
> **Note**: `BATT_AMP_PERVLT` will need to be adjusted to match the current sensor on your ESC, since the current sense input (the `BAT I` pin on the ESC1 connector) comes from an external sensor rather than from the board.
|
||||
|
||||
## Compass
|
||||
|
||||
The ZenFC H743 does not have a builtin compass, but you can attach an external compass using I2C. The I2C1 SCL and SDA pins are on the GPS1 connector for use with a GPS/Compass combination unit, and a second I2C bus is available on the I2C2 connector.
|
||||
|
||||
## CAN Port
|
||||
|
||||
The ZenFC H743 includes a CAN transceiver and a dedicated CAN connector. This port is enabled by default (CAN_P1_DRIVER = 1) to support DroneCAN peripherals such as GPS, Compasses, and ESCs.
|
||||
|
||||
## GPIOs
|
||||
|
||||
All 8 PWM outputs can be used as GPIOs (relays, buttons, RPM etc). To use them you need to set the output's `SERVOx_FUNCTION` to -1.
|
||||
|
||||
|PWM Output |GPIO Number |
|
||||
|-----------|------------|
|
||||
|PWM1 (M1) | 50 |
|
||||
|PWM2 (M2) | 51 |
|
||||
|PWM3 (M3) | 52 |
|
||||
|PWM4 (M4) | 53 |
|
||||
|PWM5 (M5) | 54 |
|
||||
|PWM6 (M6) | 55 |
|
||||
|PWM7 (M7) | 56 |
|
||||
|PWM8 (M8) | 57 |
|
||||
|
||||
## Firmware
|
||||
|
||||
ArduPilot firmware for the ZenFC H743 can be found at the [ArduPilot Firmware Server](https://firmware.ardupilot.org) under the **ZenFC743** target.
|
||||
|
||||
### Loading Firmware
|
||||
|
||||
The method used to load ArduPilot depends on the firmware currently installed on the board:
|
||||
|
||||
- **Boards shipped with ArduPilot:** These units come with the ArduPilot bootloader (AP_Bootloader) pre-installed. You can flash `*.apj` firmware files directly from any ArduPilot-compatible ground station (Mission Planner, QGroundControl, etc.). No separate first-time installation step is required.
|
||||
- **Boards shipped with other firmware:** If your board was supplied with PX4 or another firmware, the ArduPilot bootloader is not yet present. You must follow the **First-time Installation (DFU)** procedure below once to "migrate" the board to ArduPilot.
|
||||
|
||||
### First-time Installation / Recovery (DFU)
|
||||
|
||||
DFU mode is required to install ArduPilot for the first time on boards shipped with non-ArduPilot firmware, or to recover a board if the bootloader becomes corrupted.
|
||||
|
||||
1. Locate the **BOOT** button next to the USB-C connector (see `zenfc_h743_layout_back.png` in the **Layout** section).
|
||||
2. Connect the flight controller to your computer via USB while holding the **BOOT** button down.
|
||||
3. Use [STM32CubeProgrammer](https://www.st.com/en/development-tools/stm32cubeprog.html) to flash the firmware. See [Loading Firmware onto ChibiOS boards](https://ardupilot.org/copter/docs/common-loading-firmware-onto-chibios-only-boards.html#upload-the-firmware-to-autopilot) for a detailed walkthrough.
|
||||
4. **Important:** Select the firmware file ending in **`_with_bl.hex`**. This file contains both the ArduPilot bootloader and the firmware itself.
|
||||
|
||||
Once this process is complete, the board will have the ArduPilot bootloader installed, and all future updates can be done normally via your Ground Control Station using `*.apj` files.
|
||||
@@ -0,0 +1,5 @@
|
||||
#enable second OSD type
|
||||
OSD_TYPE2 = 5
|
||||
|
||||
#enable CAN port by default
|
||||
CAN_P1_DRIVER = 1
|
||||
@@ -0,0 +1,47 @@
|
||||
# hw definition file for processing by chibios_hwdef.py
|
||||
# bootloader for the ZenFC H743 hardware
|
||||
|
||||
# MCU class and specific type
|
||||
MCU STM32H7xx STM32H743xx
|
||||
|
||||
# board ID. See Tools/AP_Bootloader/board_types.txt
|
||||
APJ_BOARD_ID AP_HW_ZenFC_H743
|
||||
|
||||
# crystal frequency
|
||||
OSCILLATOR_HZ 16000000
|
||||
|
||||
# flash size
|
||||
FLASH_SIZE_KB 2048
|
||||
|
||||
# bootloader is installed at zero offset
|
||||
FLASH_RESERVE_START_KB 0
|
||||
|
||||
# the location where the bootloader will put the firmware
|
||||
FLASH_BOOTLOADER_LOAD_KB 128
|
||||
|
||||
# order of UARTs (and USB).
|
||||
SERIAL_ORDER OTG1 USART1
|
||||
|
||||
# USB
|
||||
PA11 OTG_FS_DM OTG1
|
||||
PA12 OTG_FS_DP OTG1
|
||||
|
||||
# USART1 - Serial 1
|
||||
PA10 USART1_RX USART1
|
||||
PB6 USART1_TX USART1
|
||||
|
||||
# pins for SWD debugging
|
||||
PA13 JTMS-SWDIO SWD
|
||||
PA14 JTCK-SWCLK SWD
|
||||
|
||||
# CS pins - held deasserted during bootloader
|
||||
PC14 BMI088_1_GYRO_CS CS
|
||||
PC15 BMI088_1_ACCEL_CS CS
|
||||
PD4 AT7456E_CS CS
|
||||
PA15 BMI088_2_GYRO_CS CS
|
||||
PC13 BMI088_2_ACCEL_CS CS
|
||||
|
||||
# LEDs (per src/hw_config.h BOARD_PIN_LED_ACTIVITY/BOOTLOADER, active low)
|
||||
PD11 LED_ACTIVITY OUTPUT LOW #blue
|
||||
PB9 LED_BOOTLOADER OUTPUT LOW #green
|
||||
define HAL_LED_ON 0
|
||||
@@ -0,0 +1,192 @@
|
||||
# hw definition file for processing by chibios_hwdef.py
|
||||
# for the ZenFC H743 hardware
|
||||
#
|
||||
# Pin/peripheral map derived from the verified PX4 port at
|
||||
# boards/zenfc/h743 (board_config.h, nuttx-config/include/board.h,
|
||||
# src/spi.cpp, src/i2c.cpp, src/timer_config.cpp).
|
||||
|
||||
# MCU class and specific type
|
||||
MCU STM32H7xx STM32H743xx
|
||||
|
||||
# board ID. See Tools/AP_Bootloader/board_types.txt
|
||||
# matches the PX4 board_id (firmware.prototype) 5740
|
||||
APJ_BOARD_ID AP_HW_ZenFC_H743
|
||||
|
||||
# crystal frequency
|
||||
OSCILLATOR_HZ 16000000
|
||||
|
||||
# flash size
|
||||
FLASH_SIZE_KB 2048
|
||||
# matches PX4 APP_LOAD_ADDRESS 0x08020000 (128KB offset)
|
||||
FLASH_RESERVE_START_KB 128
|
||||
|
||||
define HAL_STORAGE_SIZE 32768
|
||||
STORAGE_FLASH_PAGE 14
|
||||
|
||||
# default to all pins low to avoid ESD issues
|
||||
DEFAULTGPIO OUTPUT LOW PULLDOWN
|
||||
|
||||
# order of UARTs (and USB).
|
||||
SERIAL_ORDER OTG1 USART1 USART2 USART3 UART5 USART6 UART7 UART8
|
||||
|
||||
# USB
|
||||
PA11 OTG_FS_DM OTG1
|
||||
PA12 OTG_FS_DP OTG1
|
||||
|
||||
# USART1 - Serial 1
|
||||
PA10 USART1_RX USART1
|
||||
PB6 USART1_TX USART1
|
||||
|
||||
# USART2 - Serial 2
|
||||
PA3 USART2_RX USART2
|
||||
PD5 USART2_TX USART2
|
||||
|
||||
# USART3 - Serial 3
|
||||
PD9 USART3_RX USART3
|
||||
PD8 USART3_TX USART3
|
||||
|
||||
# UART5 - Serial 4
|
||||
PD2 UART5_RX UART5
|
||||
PC12 UART5_TX UART5
|
||||
PC9 UART5_CTS UART5
|
||||
PC8 UART5_RTS UART5
|
||||
|
||||
# USART6 - Serial 5
|
||||
PC7 USART6_RX USART6
|
||||
PC6 USART6_TX USART6
|
||||
|
||||
# UART7 - Serial 6
|
||||
PE7 UART7_RX UART7
|
||||
PE8 UART7_TX UART7
|
||||
PE10 UART7_CTS UART7
|
||||
PE9 UART7_RTS UART7
|
||||
|
||||
# UART8 - Serial 7
|
||||
PE0 UART8_RX UART8
|
||||
PE1 UART8_TX UART8
|
||||
|
||||
# SWD
|
||||
PA13 JTMS-SWDIO SWD
|
||||
PA14 JTCK-SWCLK SWD
|
||||
|
||||
# CAN
|
||||
PD0 CAN1_RX CAN1
|
||||
PD1 CAN1_TX CAN1
|
||||
|
||||
# I2C busses.
|
||||
I2C_ORDER I2C4 I2C2 I2C1
|
||||
|
||||
# I2C4 - internal, BMP388 baro
|
||||
PD12 I2C4_SCL I2C4
|
||||
PD13 I2C4_SDA I2C4
|
||||
|
||||
# I2C2 - external connector
|
||||
PB10 I2C2_SCL I2C2
|
||||
PB11 I2C2_SDA I2C2
|
||||
|
||||
# I2C1 - external connector
|
||||
PB8 I2C1_SCL I2C1
|
||||
PB7 I2C1_SDA I2C1
|
||||
|
||||
# PWM output pins (TIM1/TIM2/TIM4, order matches src/timer_config.cpp)
|
||||
# all channels DShot/BDShot capable
|
||||
PE14 TIM1_CH4 TIM1 PWM(1) GPIO(50)
|
||||
PE13 TIM1_CH3 TIM1 PWM(2) GPIO(51) BIDIR
|
||||
PE11 TIM1_CH2 TIM1 PWM(3) GPIO(52)
|
||||
PA8 TIM1_CH1 TIM1 PWM(4) GPIO(53) BIDIR
|
||||
PA1 TIM2_CH2 TIM2 PWM(5) GPIO(54)
|
||||
PA0 TIM2_CH1 TIM2 PWM(6) GPIO(55) BIDIR
|
||||
PD15 TIM4_CH4 TIM4 PWM(7) GPIO(56)
|
||||
PD14 TIM4_CH3 TIM4 PWM(8) GPIO(57) BIDIR
|
||||
|
||||
# LEDs (active low, per src/led.c phy_set_led drive-low-to-enable)
|
||||
PD10 LED_RED OUTPUT LOW GPIO(0)
|
||||
PB9 LED_GREEN OUTPUT LOW GPIO(1)
|
||||
PD11 LED_BLUE OUTPUT LOW GPIO(2)
|
||||
|
||||
define AP_NOTIFY_GPIO_LED_RGB_RED_PIN 0
|
||||
define AP_NOTIFY_GPIO_LED_RGB_GREEN_PIN 1
|
||||
define AP_NOTIFY_GPIO_LED_RGB_BLUE_PIN 2
|
||||
|
||||
define AP_NOTIFY_GPIO_LED_RGB_ENABLED 1
|
||||
|
||||
# ADC for Power (PC4 = ADC12_INP4, PC5 = ADC12_INP8, per board_config.h)
|
||||
PC4 BATT_CURRENT_SENS ADC1 SCALE(1)
|
||||
PC5 BATT_VOLTAGE_SENS ADC1 SCALE(1)
|
||||
|
||||
# setup for battery
|
||||
define HAL_BATT_MONITOR_DEFAULT 4
|
||||
define HAL_BATT_VOLT_PIN 8
|
||||
define HAL_BATT_CURR_PIN 4
|
||||
define HAL_BATT_VOLT_SCALE 10.09
|
||||
define HAL_BATT_CURR_SCALE 40
|
||||
|
||||
# compass
|
||||
define AP_COMPASS_IST8310_INTERNAL_BUS_PROBING_ENABLED 0
|
||||
define AP_COMPASS_PROBING_ENABLED 1
|
||||
|
||||
# barometer - internal, on I2C4
|
||||
BARO BMP388 I2C:0:0x77
|
||||
|
||||
# microSD support - SDMMC2 (4-bit), per board.h
|
||||
PD6 SDMMC2_CK SDMMC2
|
||||
PD7 SDMMC2_CMD SDMMC2
|
||||
PB14 SDMMC2_D0 SDMMC2
|
||||
PB15 SDMMC2_D1 SDMMC2
|
||||
PB3 SDMMC2_D2 SDMMC2
|
||||
PB4 SDMMC2_D3 SDMMC2
|
||||
define FATFS_HAL_DEVICE SDCD2
|
||||
|
||||
# SPI1 - IMU 1 (BMI088)
|
||||
PA5 SPI1_SCK SPI1
|
||||
PA6 SPI1_MISO SPI1
|
||||
PA7 SPI1_MOSI SPI1
|
||||
PC14 BMI088_1_GYRO_CS CS
|
||||
PC15 BMI088_1_ACCEL_CS CS
|
||||
|
||||
# SPI2 - onboard OSD (AT7456E-compatible)
|
||||
PD3 SPI2_SCK SPI2
|
||||
PC2 SPI2_MISO SPI2
|
||||
PC3 SPI2_MOSI SPI2
|
||||
PD4 AT7456E_CS CS
|
||||
|
||||
# SPI3 - IMU 2 (BMI088)
|
||||
PC10 SPI3_SCK SPI3
|
||||
PC11 SPI3_MISO SPI3
|
||||
PB5 SPI3_MOSI SPI3
|
||||
PA15 BMI088_2_GYRO_CS CS
|
||||
PC13 BMI088_2_ACCEL_CS CS
|
||||
|
||||
# SPI devices
|
||||
SPIDEV bmi088_1_g SPI1 DEVID1 BMI088_1_GYRO_CS MODE3 10*MHZ 10*MHZ
|
||||
SPIDEV bmi088_1_a SPI1 DEVID2 BMI088_1_ACCEL_CS MODE3 10*MHZ 10*MHZ
|
||||
SPIDEV bmi088_2_g SPI3 DEVID3 BMI088_2_GYRO_CS MODE3 10*MHZ 10*MHZ
|
||||
SPIDEV bmi088_2_a SPI3 DEVID4 BMI088_2_ACCEL_CS MODE3 10*MHZ 10*MHZ
|
||||
SPIDEV osd SPI2 DEVID5 AT7456E_CS MODE0 10*MHZ 10*MHZ
|
||||
|
||||
# DMA Priority
|
||||
DMA_NOSHARE SPI1* SPI3*
|
||||
|
||||
# 2 IMUs. PX4's rc.board_sensors used "-R 0" for both instances, but on
|
||||
# real hardware ArduPilot read the board upside down at ROTATION_NONE -
|
||||
# PX4's BMI088 driver evidently normalises the accel/gyro dies to its
|
||||
# own native frame before applying the board rotation, which doesn't
|
||||
# match ArduPilot's BMI088 backend. ROTATION_ROLL_180 corrects this.
|
||||
IMU BMI088 SPI:bmi088_1_a SPI:bmi088_1_g ROTATION_ROLL_180
|
||||
IMU BMI088 SPI:bmi088_2_a SPI:bmi088_2_g ROTATION_ROLL_180
|
||||
|
||||
# enable FAT filesystem support (needs a microSD defined via SDMMC)
|
||||
define HAL_OS_FATFS_IO 1
|
||||
|
||||
# setup for serial ports
|
||||
define DEFAULT_SERIAL1_PROTOCOL SerialProtocol_GPS
|
||||
define DEFAULT_SERIAL3_PROTOCOL SerialProtocol_MAVLink2
|
||||
define DEFAULT_SERIAL4_PROTOCOL SerialProtocol_MSP_DisplayPort
|
||||
define DEFAULT_SERIAL5_PROTOCOL SerialProtocol_RCIN
|
||||
define DEFAULT_SERIAL6_PROTOCOL SerialProtocol_MAVLink2
|
||||
define DEFAULT_SERIAL7_PROTOCOL SerialProtocol_ESCTelemetry
|
||||
|
||||
# setup for onboard analog OSD (AT7456E/MAX7456-compatible)
|
||||
define OSD_ENABLED 1
|
||||
define HAL_OSD_TYPE_DEFAULT 1
|
||||
ROMFS_WILDCARD libraries/AP_OSD/fonts/font*.bin
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 699 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 288 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 740 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 854 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.1 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 765 KiB |
Reference in New Issue
Block a user