diff --git a/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/README.md b/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/README.md new file mode 100644 index 0000000000..02e16f9139 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/README.md @@ -0,0 +1,245 @@ +# A6 Flight Controller + +The A6 flight controller is manufactured and sold by [YJUAV](http://www.yjuav.net). + +The full schematics of the board are available here: + +https://github.com/yunjiuav/Hardware/tree/main/A6 + +## Features + + - STM32H743 microcontroller + - Three IMUs: ICM42688, ICM42688 and IIM42652 + - Internal RM3100 SPI magnetometer + - Internal DPS310 SPI barometer + - Internal vibration isolation for IMUs + - Internal RGB LED + - microSD card slot port + - 2 power ports(CAN and Analog) + - 6 UARTs and USB ports + - 3 I2C and 3 CAN ports + - 14 PWM output ports + - Safety switch port + - External SPI port + - Buzzer port + - RC IN port + +## Pinout +![YJUAV_A6 Board](YJUAV_A6-pinout.jpg "YJUAV_A6") + + +## Connectors + +**ADC** + +| Pin | Signal | Volt | +| :--: | :-----: | :---: | +| 1 | VCC | +5V | +| 2 | ADC_3V3 | +3.3V | +| 3 | ADC_6V6 | +6.6V | +| 4 | GND | GND | + +**DEBUG** + +| Pin | Signal | Volt | +| :--: | :----: | :---: | +| 1 | VCC | +5V | +| 2 | TX | +3.3V | +| 3 | RX | +3.3V | +| 4 | SWDIO | +3.3V | +| 5 | SWCLK | +3.3V | +| 6 | GND | GND | + +**RSSI&SBUS** + +| Pin | Signal | Volt | +| :--: | :------: | :---: | +| 1 | VCC | +5V | +| 2 | RSSI | +3.3V | +| 3 | SBUS_OUT | +3.3V | +| 4 | GND | GND | + +**SAFETY** + +| Pin | Signal | Volt | +| :--: | :-----------: | :---: | +| 1 | 3V3_OUT | +3.3V | +| 2 | SAFETY_SW | +3.3V | +| 3 | SAFETY_SW_LED | +3.3V | +| 4 | GND | GND | + +**SPI3** + +| Pin | Signal | Volt | +| :--: | :------: | :---: | +| 1 | VCC | +5V | +| 2 | SPI_SCK | +3.3V | +| 3 | SPI_MISO | +3.3V | +| 4 | SPI_MOSI | +3.3V | +| 5 | SPI_CS | +3.3V | +| 6 | GND | GND | + +**I2C4** + +| Pin | Signal | Volt | +| :--: | :-----: | :---: | +| 1 | VCC | +5V | +| 2 | I2C_SCL | +3.3V | +| 3 | I2C_SDA | +3.3V | +| 4 | GND | GND | + +**USB EX** + +| Pin | Signal | Volt | +| :--: | :----: | :---: | +| 1 | VCC_IN | +5V | +| 2 | DM | +3.3V | +| 3 | DP | +3.3V | +| 4 | GND | GND | + +**CAN1&CAN2** + +| Pin | Signal | Volt | +| :--: | :----: | :---: | +| 1 | VCC | +5V | +| 2 | CAN_P | +3.3V | +| 3 | CAN_N | +3.3V | +| 4 | GND | GND | + +**GPS1&SAFETY** + +| Pin | Signal | Volt | +| :--: | :-----------: | :---: | +| 1 | VCC | +5V | +| 2 | UART_TX | +3.3V | +| 3 | UART_RX | +3.3V | +| 4 | I2C_SCL | +3.3V | +| 5 | I2C_SDA | +3.3V | +| 6 | SAFETY_SW | +3.3V | +| 7 | SAFETY_SW_LED | +3.3V | +| 8 | 3V3_OUT | +3.3V | +| 9 | BUZZER | +3.3V | +| 10 | GND | GND | + +**TELEM1&TELEM2** + +| Pin | Signal | Volt | +| :--: | :-----: | :---: | +| 1 | VCC | +5V | +| 2 | UART_TX | +3.3V | +| 3 | UART_RX | +3.3V | +| 4 | NC | - | +| 5 | NC | - | +| 6 | GND | GND | + +**GPS2** + +| Pin | Signal | Volt | +| :--: | :-----: | :---: | +| 1 | VCC | +5V | +| 2 | UART_TX | +3.3V | +| 3 | UART_RX | +3.3V | +| 4 | I2C_SCL | +3.3V | +| 5 | I2C_SDA | +3.3V | +| 6 | GND | GND | + +**POWER A** + +| Pin | Signal | Volt | +| :--: | :-------------: | :---: | +| 1 | VCC_IN | +5V | +| 2 | VCC_IN | +5V | +| 3 | BAT_CRRENT_ADC | +3.3V | +| 4 | BAT_VOLTAGE_ADC | +3.3V | +| 5 | GND | GND | +| 6 | GND | GND | + +**POWER C** + +| Pin | Signal | Volt | +| :--: | :----: | :---: | +| 1 | VCC_IN | +5V | +| 2 | VCC_IN | +5V | +| 3 | CAN_P | +3.3V | +| 4 | CAN_N | +3.3V | +| 5 | GND | GND | +| 6 | GND | GND | + +## UART Mapping + + - SERIAL0 -> USB(OTG1) + - SERIAL1 -> USART1(Telem1) + - SERIAL2 -> USART2 (Telem2) + - SERIAL3 -> USART3 (GPS1), NODMA + - SERIAL4 -> UART5 (GPS2), NODMA + - SERIAL5 -> UART6 (SBUS) + - SERIAL6 -> UART7 (Debug), NODMA + - SERIAL7 -> USB2(OTG2) + +## RC Input + +The remote control signal should be connected to the “RC IN” pin, at one side of the servo channels. + +This signal pin supports two types of remote control signal inputs, SBUS and PPM signals. + +## PWM Output + +The A6 supports up to 14 PWM outputs,support all PWM protocols as well as DShot. All 14 PWM outputs have GND on the bottom row, 5V on the middle row and signal on the top row. + +The 14 PWM outputs are in 4 groups: + + - PWM 1, 2, 3 and 4 in group1 + - PWM 5, 6, 7 and 8 in group2 + - PWM 9, 10, 11 and 12 in group3 + - PWM 13 and 14 group4 + +Channels 1-8 support bi-directional Dshot, channels 9-12 support Dshot, channels 13-14 support regular PWM. +Channels within the same group need to use the same output rate. If any channel in a group uses DShot, then all channels in that group need to use DShot. + +## Battery Monitoring + +The A6 flight controller has two six-pin power connectors, supporting CAN interface power supply and analog interface power supply. + +## Compass + +The A6 flight controller built-in industrial-grade electronic compass chip RM3100. + +## GPIOs + +All 14 PWM channels can be used for GPIO functions (relays, buttons, RPM etc). + +The pin numbers for these PWM channels in ArduPilot are shown below: + +| PWM Channels | Pin | PWM Channels | Pin | +| ------------ | ---- | ------------ | ---- | +| PWM1 | 50 | PWM8 | 57 | +| PWM2 | 51 | PWM9 | 58 | +| PWM3 | 52 | PWM10 | 59 | +| PWM4 | 53 | PWM11 | 60 | +| PWM5 | 54 | PWM12 | 61 | +| PWM6 | 55 | PWM13 | 62 | +| PWM7 | 56 | PWM14 | 63 | + +## Analog inputs + +The A6 flight controller has 5 analog inputs + + - ADC Pin10 -> Battery Current + - ADC Pin11 -> Battery Voltage + - ADC Pin4 -> ADC 3V3 Sense + - ADC Pin8 -> ADC 5V Sense + - ADC Pin18 -> RSSI voltage monitoring + +## Build the FC + +./waf configure --board=YJUAV_A6 +./waf copter + +The compiled firmware is located in folder **"build/YJUAV_A6/bin/arducopter.apj"**. + + + +## Loading Firmware + +The A6 flight controller comes pre-installed with an ArduPilot compatible bootloader, allowing the loading of *.apj firmware files with any ArduPilot compatible ground station. + diff --git a/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/YJUAV_A6-pinout.jpg b/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/YJUAV_A6-pinout.jpg new file mode 100644 index 0000000000..e361f30dd1 Binary files /dev/null and b/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/YJUAV_A6-pinout.jpg differ diff --git a/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/defaults.parm b/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/defaults.parm new file mode 100644 index 0000000000..e1b1e0c2f1 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/defaults.parm @@ -0,0 +1,16 @@ +# setup the heater temperature to 45 degree +BRD_HEAT_TARG 45 + +# turn on the CAN power monitoring(default) +CAN_P1_DRIVER 1 +BATT_MONITOR 8 + +# setup the parameter for the ADC power module +BATT_VOLT_PIN 11 +BATT_CURR_PIN 10 +BATT_VOLT_MULT 18.000 +BATT_AMP_PERVLT 24.000 + +# setup the parameter for the ADC rssi +RSSI_ANA_PIN 18 + diff --git a/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/hwdef-bl.dat b/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/hwdef-bl.dat new file mode 100644 index 0000000000..b50f9ea214 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/hwdef-bl.dat @@ -0,0 +1,55 @@ +# hw definition file for processing by chibios_hwdef.py +# for A6_YJUAV board + +# MCU class and specific type +MCU STM32H7xx STM32H743xx + +# crystal frequency +OSCILLATOR_HZ 16000000 + +# board ID for firmware load +APJ_BOARD_ID 1113 + +FLASH_SIZE_KB 2048 + +# bootloader is installed at zero offset +FLASH_RESERVE_START_KB 0 + +# the location where the bootloader will put the firmware +# the H743 has 128k sectors +FLASH_BOOTLOADER_LOAD_KB 128 + +# ChibiOS system timer +STM32_ST_USE_TIMER 5 + +PE12 LED_RED OUTPUT OPENDRAIN HIGH # red +PE15 LED_BOOTLOADER OUTPUT OPENDRAIN HIGH # green +PB9 LED_ACTIVITY OUTPUT OPENDRAIN HIGH # blue +define HAL_LED_ON 0 + +# order of UART (and USB) +SERIAL_ORDER OTG1 UART7 + +# UART7 DEBUG +PE8 UART7_TX UART7 NODMA +PE7 UART7_RX UART7 NODMA + +PA11 OTG_FS_DM OTG1 +PA12 OTG_FS_DP OTG1 + +define BOOTLOADER_DEBUG SD7 + +PA13 JTMS-SWDIO SWD +PA14 JTCK-SWCLK SWD + +# Add CS pins to ensure they are high in bootloader +PA8 IMU1_CS CS +PD4 IMU2_CS CS +PD11 IMU3_CS CS +PE4 FRAM_CS CS +PE3 BAROMETER_CS CS +PD10 COMPASS_CS CS +PC15 RESERVE_CS CS + +# Extra SPI CS +PE10 EXT_CS CS diff --git a/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/hwdef.dat b/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/hwdef.dat new file mode 100644 index 0000000000..a22442afd4 --- /dev/null +++ b/libraries/AP_HAL_ChibiOS/hwdef/YJUAV_A6/hwdef.dat @@ -0,0 +1,233 @@ +# hw definition file for processing by chibios_hwdef.py for A6_YJUAV + +# MCU class and specific type +MCU STM32H7xx STM32H743xx + +# crystal frequency +OSCILLATOR_HZ 16000000 + +# board ID for firmware load +APJ_BOARD_ID 1113 + +FLASH_SIZE_KB 2048 + +# with 2M flash we can afford to optimize for speed +env OPTIMIZE -O2 + +# ChibiOS system timer +STM32_ST_USE_TIMER 5 + +# bootloader takes first sector +FLASH_RESERVE_START_KB 128 + +# order of UARTs (and USB) +SERIAL_ORDER OTG1 USART1 USART2 USART3 UART5 UART8 UART7 OTG2 + +# now we define the pins that USB is connected on +PA11 OTG_FS_DM OTG1 +PA12 OTG_FS_DP OTG1 + +# USART1 TELEM1 +PA10 USART1_RX USART1 +PA9 USART1_TX USART1 + +# USART2 TELEM2 +PD6 USART2_RX USART2 +PD5 USART2_TX USART2 + +# USART3 GPS +PD9 USART3_RX USART3 NODMA +PD8 USART3_TX USART3 NODMA + +# UART5 GPS2 +PB5 UART5_RX UART5 NODMA +PB13 UART5_TX UART5 NODMA + +# SBUS, DSM port +PE0 UART8_RX UART8 +PE1 UART8_TX UART8 + +# UART7 DEBUG +PE7 UART7_RX UART7 NODMA +PE8 UART7_TX UART7 NODMA + +# default the 2nd interface to MAVLink2 until MissionPlanner updates drivers +define HAL_OTG2_PROTOCOL SerialProtocol_MAVLink2 + +# these are the pins for SWD debugging with a STlinkv2 or black-magic probe +PA13 JTMS-SWDIO SWD +PA14 JTCK-SWCLK SWD + +# SPI1 -IMU1 -COMPASS +PA5 SPI1_SCK SPI1 +PA6 SPI1_MISO SPI1 +PD7 SPI1_MOSI SPI1 + +# SPI2 -IMU2 -IMU3 +PD3 SPI2_SCK SPI2 +PC2 SPI2_MISO SPI2 +PB15 SPI2_MOSI SPI2 + +# SPI4 -FRAM -BAROMETER +PE2 SPI4_SCK SPI4 +PE5 SPI4_MISO SPI4 +PE6 SPI4_MOSI SPI4 + +# SPI3 -Extra SPI +PB3 SPI3_SCK SPI3 +PB4 SPI3_MISO SPI3 +PB2 SPI3_MOSI SPI3 + +# sensors cs +PA8 IMU1_CS CS +PD4 IMU2_CS CS +PD11 IMU3_CS CS +PE4 FRAM_CS CS +PE3 BAROMETER_CS CS +PD10 COMPASS_CS CS +PC15 RESERVE_CS CS + +# Extra SPI CS +PE10 EXT_CS CS + +# I2C buses +PB10 I2C2_SCL I2C2 +PB11 I2C2_SDA I2C2 + +PD12 I2C4_SCL I2C4 +PD13 I2C4_SDA I2C4 + +# order of I2C buses +I2C_ORDER I2C2 I2C4 + +NODMA I2C* +define STM32_I2C_USE_DMA FALSE +define HAL_I2C_INTERNAL_MASK 0 + +# PWM channels +PE9 TIM1_CH1 TIM1 PWM(1) GPIO(50) BIDIR +PE11 TIM1_CH2 TIM1 PWM(2) GPIO(51) +PE13 TIM1_CH3 TIM1 PWM(3) GPIO(52) BIDIR +PE14 TIM1_CH4 TIM1 PWM(4) GPIO(53) +PA15 TIM2_CH1 TIM2 PWM(5) GPIO(54) BIDIR +PA1 TIM2_CH2 TIM2 PWM(6) GPIO(55) +PA2 TIM2_CH3 TIM2 PWM(7) GPIO(56) BIDIR +PA3 TIM2_CH4 TIM2 PWM(8) GPIO(57) +PC6 TIM3_CH1 TIM3 PWM(9) GPIO(58) +PA7 TIM3_CH2 TIM3 PWM(10) GPIO(59) +PB0 TIM3_CH3 TIM3 PWM(11) GPIO(60) +PB1 TIM3_CH4 TIM3 PWM(12) GPIO(61) +PD14 TIM4_CH3 TIM4 PWM(13) GPIO(62) NODMA +PD15 TIM4_CH4 TIM4 PWM(14) GPIO(63) NODMA + +# PWM output for buzzer +PB14 TIM12_CH1 TIM12 GPIO(77) ALARM + +# RC input +PC7 TIM8_CH2 TIM8 RCININT PULLUP LOW + +# Analog in +PC0 BATT_CURRENT_SENS ADC1 SCALE(1) +PC1 BATT_VOLTAGE_SENS ADC1 SCALE(1) + +# ADC3.3/ADC6.6 +PC4 SPARE1_ADC1 ADC1 SCALE(1) +PC5 SPARE2_ADC1 ADC1 SCALE(2) + +PC3 VDD_5V_SENS ADC1 SCALE(2) +PA4 RSSI_IN ADC1 SCALE(1) + +# CAN bus +PD0 CAN1_RX CAN1 +PD1 CAN1_TX CAN1 + +PB12 CAN2_RX CAN2 +PB6 CAN2_TX CAN2 + +# GPIOs +PC14 HEATER_EN OUTPUT LOW GPIO(80) +define HAL_HEATER_GPIO_PIN 80 +define HAL_HAVE_IMU_HEATER 1 + +# enable pins +PC13 VDD_3V3_SENSORS_EN OUTPUT LOW + +# red LED marked as B/E +PE12 LED_R1 OUTPUT OPENDRAIN HIGH GPIO(0) +PE15 LED_G1 OUTPUT OPENDRAIN HIGH GPIO(1) +PB9 LED_B1 OUTPUT OPENDRAIN HIGH GPIO(2) + +define HAL_GPIO_A_LED_PIN 0 +define HAL_GPIO_B_LED_PIN 1 +define HAL_GPIO_C_LED_PIN 2 + +define HAL_GPIO_LED_ON 0 +define HAL_GPIO_LED_OFF 1 + +# use pixracer style 3-LED indicators +define HAL_HAVE_PIXRACER_LED + +# allow to have have a dedicated safety switch pin +define HAL_HAVE_SAFETY_SWITCH 1 +PB8 LED_SAFETY OUTPUT +PB7 SAFETY_IN INPUT PULLDOWN + +# SPI devices +SPIDEV imu1 SPI1 DEVID1 IMU1_CS MODE3 2*MHZ 8*MHZ +SPIDEV imu2 SPI2 DEVID1 IMU2_CS MODE3 2*MHZ 8*MHZ +SPIDEV imu3 SPI2 DEVID2 IMU3_CS MODE3 2*MHZ 8*MHZ +SPIDEV ramtron SPI4 DEVID1 FRAM_CS MODE3 8*MHZ 8*MHZ +SPIDEV dps310 SPI4 DEVID2 BAROMETER_CS MODE3 5*MHZ 5*MHZ +SPIDEV bmp388 SPI4 DEVID3 BAROMETER_CS MODE3 5*MHZ 5*MHZ +SPIDEV rm3100 SPI1 DEVID2 COMPASS_CS MODE3 2*MHZ 8*MHZ + +# IMU1 +IMU Invensense SPI:imu1 ROTATION_PITCH_180_YAW_90 +IMU Invensensev3 SPI:imu1 ROTATION_PITCH_180_YAW_90 + +# IMU2 +IMU Invensense SPI:imu2 ROTATION_PITCH_180_YAW_90 +IMU Invensensev3 SPI:imu2 ROTATION_PITCH_180_YAW_90 + +# IMU3 +IMU Invensense SPI:imu3 ROTATION_YAW_90 +IMU Invensensev3 SPI:imu3 ROTATION_YAW_90 + +define HAL_DEFAULT_INS_FAST_SAMPLE 5 + +# baro dps310 or bmp388 +BARO DPS310 SPI:dps310 +BARO BMP388 SPI:bmp388 + +# compasses rm3100 +COMPASS RM3100 SPI:rm3100 false ROTATION_PITCH_180 + +define HAL_PROBE_EXTERNAL_I2C_COMPASSES +COMPASS IST8310 I2C:ALL_EXTERNAL:0x0E true ROTATION_ROLL_180_YAW_90 +COMPASS IST8310 I2C:ALL_INTERNAL:0x0E false ROTATION_ROLL_180_YAW_90 + +# microSD support +PC8 SDMMC1_D0 SDMMC1 +PC9 SDMMC1_D1 SDMMC1 +PC10 SDMMC1_D2 SDMMC1 +PC11 SDMMC1_D3 SDMMC1 +PC12 SDMMC1_CK SDMMC1 +PD2 SDMMC1_CMD SDMMC1 + +# enable FAT filesystem support (needs a microSD defined via SDMMC) +define HAL_OS_FATFS_IO 1 + +define HAL_BOARD_LOG_DIRECTORY "/APM/LOGS" +define HAL_BOARD_TERRAIN_DIRECTORY "/APM/TERRAIN" + + +# enable RAMTROM parameter storage +define HAL_STORAGE_SIZE 32768 +define HAL_WITH_RAMTRON 1 + +DMA_PRIORITY SPI1* SPI2* TIM*UP* +DMA_NOSHARE SPI1* SPI2* TIM*UP* + +# Enable Sagetech MXS ADSB transponder +define HAL_ADSB_SAGETECH_MXS_ENABLED HAL_ADSB_ENABLED +