HAL_ChibiOS: added YJUAV_A6 support

This commit is contained in:
yunjiuav 2023-06-27 20:35:53 +08:00 committed by Peter Barker
parent 4ef85b14d0
commit 92a7d09e2e
5 changed files with 549 additions and 0 deletions

View File

@ -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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 KiB

View File

@ -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

View File

@ -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

View File

@ -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