• 【DIY飞控板PX4移植】BARO模块BMP388气压计的PCB硬件设计和PX4驱动配置


    BMP388简介

    BMP388是一款基于成熟传感原理的压力和温度测量数字传感器。

    硬件设计

    封装

    采用了标准的LGA封装,单位是毫米。

    在这里插入图片描述

    引脚序号。

    在这里插入图片描述

    引脚定义。

    在这里插入图片描述

    原理图

    使用I2C总线进行连接时的原理图。

    在这里插入图片描述

    使用I2C总线进行连接时的原理图。

    在这里插入图片描述

    PCB设计

    我这里使用的是I2C总线进行连接,连接到MCU主控的I2C1接口。

    在这里插入图片描述

    主控选择的是STM32H743VIH6,I2C1总线是使用的SDA-PB9引脚、SCL-PB8引脚,气压计的数据准备完毕信号Data_Ready是使用PB7引脚,这些信息需要记录下来,之后在PX4配置中需要用到。

    在这里插入图片描述

    引脚选择问题

    这里需要注意不是所有的引脚都可以作为BMP388的连接引脚,这个需要在给定的几种方案中选择。

    对于主控STM32H743VIH6来说,有以下的引脚映射头文件。

    引脚映射头文件stm32h7x3xx_pinmap.h

    其中有以下内容:

    #define GPIO_I2C1_SCL_1           (GPIO_ALT|GPIO_AF4|GPIO_SPEED_50MHz|GPIO_OPENDRAIN|GPIO_PORTB|GPIO_PIN6)
    #define GPIO_I2C1_SCL_2           (GPIO_ALT|GPIO_AF4|GPIO_SPEED_50MHz|GPIO_OPENDRAIN|GPIO_PORTB|GPIO_PIN8)
    #define GPIO_I2C1_SDA_1           (GPIO_ALT|GPIO_AF4|GPIO_SPEED_50MHz|GPIO_OPENDRAIN|GPIO_PORTB|GPIO_PIN7)
    #define GPIO_I2C1_SDA_2           (GPIO_ALT|GPIO_AF4|GPIO_SPEED_50MHz|GPIO_OPENDRAIN|GPIO_PORTB|GPIO_PIN9)
    #define GPIO_I2C1_SMBA            (GPIO_ALT|GPIO_AF4|GPIO_SPEED_50MHz|GPIO_PUSHPULL|GPIO_PORTB|GPIO_PIN5)
    

    所以I2C1总线的SCL引脚只能从PB6、PB8中选择,SDA引脚只能从PB7、PB9中选择。

    对于数据准备完毕信号的选择,由于该信号使用的是STM32的外部中断输入功能,所以它们的外部中断号不能重复,比如PE3的外部中断号是EXTI3、PE4的外部中断号是EXTI4,如果使用了外部中断号是EXTI3的PE3,那么在之后的其他数据准备完毕信号的选择中就不能选择外部中断号是EXTI3的PA3、PB3、PC3等引脚。

    PX4驱动配置

    飞控板的配置文件夹结构

    飞控板的配置文件夹结构为下列所示。

    YanQi
    ├─extras
    |  └─UCAS_YanQi_bootloader.bin
    ├─init
    |  ├─rc.board_defaults
    |  └─rc.board_sensors
    ├─nuttx-config
    |  ├─bootloader
    |  |  └─defconfig
    |  ├─include
    |  |  ├─board.h
    |  |  └─board_dma_map.h
    |  ├─nsh
    |  |  └─defconfig
    |  ├─scripts
    |  |  ├─bootloader_script.ld
    |  |  └─script.ld
    |  ├─src
    |  └─Kconfig
    ├─src
    |  ├─board_config.h
    |  ├─bootloader_main.c
    |  ├─CMakeLists.txt
    |  ├─hw_config.h
    |  ├─i2c.cpp
    |  ├─init.c
    |  ├─...
    |  └─usb.c
    ├─bootloader.px4board
    ├─default.px4board
    └─firmware.prototype
    

    default.px4board文件

    default.px4board文件是最常使用的文件,它负责配置每个串口的映射,配置哪些源码被编译到飞控固件中。由于需要使用BMP388的驱动,所以需要添加一行代码。

    CONFIG_DRIVERS_BAROMETER_BMP388=y
    

    nuttx-config/nsh/defconfig文件

    nuttx-config/nsh/defconfig文件配置的是飞控固件中需要调用的底层资源,比如串口驱动、SPI驱动、I2C驱动等等。

    这里使用的是I2C1总线,所以需要添加以下代码。

    CONFIG_STM32H7_I2C1=y
    

    nuttx-config/include/board.h文件

    board.h文件用于配置NuttX操作系统中的时钟和引脚,对于所有具有多功能引脚(比如STM32中的有些引脚既可以作为UART也可以作为普通GPIO)的外围设备,NuttX需要知道每个引脚的设定功能,它们在芯片特定的引脚映射头文件stm32h7x3xx_pinmap.h中定义。

    需要按照之前的原理图设计对应引脚映射头文件进行修改。

    引脚映射头文件stm32h7x3xx_pinmap.h

    I2C1的引脚定义设置的代码。

    #define GPIO_I2C1_SCL GPIO_I2C1_SCL_2       /* PB8  */
    #define GPIO_I2C1_SDA GPIO_I2C1_SDA_2       /* PB9  */
    
    #define GPIO_I2C1_SCL_GPIO                  (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN8)
    #define GPIO_I2C1_SDA_GPIO                  (GPIO_OUTPUT | GPIO_OPENDRAIN |GPIO_SPEED_50MHz | GPIO_OUTPUT_SET | GPIO_PORTB | GPIO_PIN9)
    

    src/board_config.h文件

    board_config.h文件是一些LED灯定义、ADC采样定义。需要按照之前的原理图设计的数据准备完毕信号进行配置。

    #define GPIO_I2C1_DRDY1_BMP388  /* PB7  */  (GPIO_INPUT|GPIO_FLOAT|GPIO_EXTI|GPIO_PORTB|GPIO_PIN7)
    

    src/i2c.cpp文件

    需要启动I2C1总线。

    constexpr px4_i2c_bus_t px4_i2c_buses[I2C_BUS_MAX_BUS_ITEMS] = {
    
    	initI2CBusInternal(1),
    	initI2CBusExternal(2),
    	// initI2CBusExternal(3),
    	// initI2CBusExternal(4),
    
    };
    

    init/rc.board_sensors文件

    rc.board_sensors文件作用是启动连接到板上的传感器。

    -I 是 Internal I2C 启动,-X 是 External I2C 启动。

    -a 后面是 I2C 地址。

    # 内部 I2C 总线 BMP388 气压计
    bmp388 -I -a 0x76 start
    

    编译BootLoader和Firmware并烧录进自己的飞控板

    在Firmware文件夹中输入命令即可对BootLoader和固件进行编译。

    make UCAS_YanQi_bootloader
    make UCAS_YanQi_default
    

    没有安装烧录工具的先安装dfu-util烧录工具包。

    sudo apt install dfu-util
    

    按住飞控板上的BOOT键同时将USB线插入飞控板,进入DFU模式,运行命令即可进行BootLoader烧录。

    dfu-util -a 0 --dfuse-address 0x08000000 -D ./build/UCAS_YanQi_bootloader/UCAS_YanQi_bootloader.bin
    

    之后使用QGC安装UCAS_YanQi_default.px4飞控固件即可。

  • 相关阅读:
    用VScode做PPT:marp插件
    OpenShift常用管理命令杂记
    研报精选230528
    第三章:高精度算法(加、减、乘、除)
    【Redis】Redis Cluster-集群故障转移
    三数之和[中等]
    剑指 Offer II 014. 字符串中的变位词
    【简洁】【皮肤美化】博客园页面美化 主文章加宽
    深入浅出Java多线程(五):线程间通信
    【k8s】pod调度——亲和,反亲和,污点,容忍
  • 原文地址:https://blog.csdn.net/weixin_45031928/article/details/139664802