ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PX4 飞控板 bring-up 指南:以 NWBlue Pro H757(CubeNode H757 载板)为例的移植验证全流程

PX4 飞控板 bring-up 指南:以 NWBlue Pro H757(CubeNode H757 载板)为例的移植验证全流程 PX4 飞控板 bring-up 指南以 NWBlue Pro H757CubeNode H757 载板为例的移植验证全流程【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot导读本文以 PX4-Autopilot 仓库中 boards/nwblue/pro-h757/bringup.md 为骨架系统梳理一块新硬件从引脚映射到逐项复测的完整 bring-up 流程。NWBlue Pro H757 是一块 30×30 mm FPV 飞控核心是一个 CubePilot CubeNode H757 模组STM32H757载板引出 ICM45686 IMU、DPS368 气压计、IIS2MDC 磁力计、microSD、9 路 DShot/PWM、CAN1 与 6 路 UART。读完本文你将掌握如何读懂板级 port map 与 PX4 设备节点的对应关系、如何在无专用调试串口时通过 USB 使用 NSH 控制台、如何用逐项复测清单驱动硬件验证以及如何从源码px4board、timer_config、board_config、rc 脚本反查每个已验证/未验证结论背后的实现依据。硬件概览与板级资源NWBlue Pro H757 是一块 30×30 mm 的 FPV 飞控主控不是板载焊接的独立 MCU而是搭载了一颗 CubePilot CubeNode H757 模组。其核心资源如下MCUSTM32H757Cortex-M7 双核架构本板使用单核运行 PX4相关 NuttX 配置见 nuttx-config/nsh/defconfigCONFIG_ARCH_CHIP_STM32H747XIy、CONFIG_ARMV7M_DCACHEy、CONFIG_ARMV7M_ICACHEy、CONFIG_ARMV7M_DTCMy。IMUICM45686挂在 SPI3 上CubeNode 模组内部。气压计DPS368同样在 SPI3 上。磁力计IIS2MDC板载内部挂在 I2C3 上GPS 接口还另引出 I2C4 供外置罗盘使用见 src/i2c.cpp 中initI2CBusInternal(3)与initI2CBusExternal(4)。存储microSD走 SDMMC2defconfig 中CONFIG_STM32H7_SDMMC2y、CONFIG_SDMMC2_SDIO_PULLUPy。输出9 路 DShot/PWMTIM1/TIM4/TIM3/TIM2 四组定时器。总线CAN1、6 路 UART。电源监测ADC3 上有多路 rail 感知VSYS/5V/3V3/VREG。板级出厂默认参数与传感器启动脚本分别位于 init/rc.board_defaults 与 init/rc.board_sensors。Port map连接器、UART 与 PX4 设备节点的映射bring-up 的第一步是对表把每个物理连接器对应的串口、PX4 设备节点和用途确认清楚。下表完整来自原文档是后续一切复测项的地图连接器UARTPX4 设备用途ESC J10 pin 4USART1仅 RX/dev/ttyS0TEL3ESC 遥测VTX J9 pin 5USART2仅 RX/dev/ttyS1备用摄像头回传通道RC J11UART4/dev/ttyS2RC串行 RC 输入VTX J9 pins 3,4USART6/dev/ttyS3TEL2MSP DisplayPort OSDTELEM1 J4UART7/dev/ttyS4TEL1MAVLink8N1无流控GPS J8UART8/dev/ttyS5GPS1GPS外加 I2C4 供其罗盘该映射在构建配置中有明确依据default.px4board 里通过CONFIG_BOARD_SERIAL_GPS1/dev/ttyS5、CONFIG_BOARD_SERIAL_TEL1/dev/ttyS4、CONFIG_BOARD_SERIAL_TEL2/dev/ttyS3、CONFIG_BOARD_SERIAL_TEL3/dev/ttyS0、CONFIG_BOARD_SERIAL_RC/dev/ttyS2把六个设备节点分配到位而 nuttx-config/nsh/defconfig 中CONFIG_STM32H7_USART1/2/6、CONFIG_STM32H7_UART4/7/8全部使能串口默认波特率统一为 57600UART4/7/8 与 USART1/2/6 的*_BAUD57600。RC 输入配置串行 RC 走 UART4src/board_config.h 中#define RC_SERIAL_PORT /dev/ttyS2将其指定为 RC 端口。复测结论显示 J11 上 SBUS 收包正常见下文复测清单。MAVLink 实例的启动方式TELEM1UART7与 TELEM2USART6的 MAVLink 实例并非板级脚本强制启动而是由通用 init.d-posix 启动体系根据MAV_*_CONFIG参数动态拉起。init/rc.board_mavlink 中明确注释两块串口的 MAVLink 实例由 rc.serial 依据MAV_*_CONFIG参数创建本板暂无板级覆盖。Console无专用调试串口NSH 走 USB这块板没有引出专用调试控制台debug consoleNSH 默认运行在 USB CDC ACM 之上defconfig 中CONFIG_CDCACMy、CONFIG_CDCACM_VENDORSTRNWBlue、CONFIG_CDCACM_PRODUCTSTRNWBlue Pro H757、CONFIG_CDCACM_PRODUCTID0x2001。这一点与许多带 UART 调试口的载板不同调试时直接插 USB 即可进入 NSH。如何把 NSH 挪到 UART在 bring-up 阶段如果需要把控制台移到某个 UART例如为了观察早期启动日志需要在 nuttx-config/nsh/defconfig 中做两处改动设置CONFIG_port_SERIAL_CONSOLEyport替换为具体串口名如CONFIG_USART1_SERIAL_CONSOLEy删除# CONFIG_DEV_CONSOLE is not set这一行即允许 DEV console。当前 defconfig 第 8 行正是# CONFIG_DEV_CONSOLE is not set说明默认关闭了设备控制台NSH 由 USB 承载CONFIG_INIT_ENTRYPOINTnsh_main也印证系统从 NSH 启动。Retest checklist一块原型板的逐项复测记录原文档的核心是一份针对手工焊接的 rev-A 原型板的复测清单带[x]的项表示在原型板上已验证通过但曾坏过或未测过、需要在量产硬件上重新确认带[ ]的项表示在本次 bring-up 中尚未验证。以下逐项展开并给出仓库内的源码佐证。DShot四组定时器全部可用唯 FMU_CH6 是硅片限制9 路输出分布在四个定时器组上TIM1CH1–CH4FMU_CH1–CH4TIM4CH5–CH6FMU_CH5–CH6TIM3CH7–CH8FMU_CH7–CH8TIM2CH9FMU_CH9对应的通道映射可以在 src/timer_config.cpp 中逐一核对例如initIOTimerChannel(io_timers, {Timer::Timer1, Timer::Channel1}, {GPIO::PortE, GPIO::Pin9})即 FMU_CH1TIM4_CH3/CH4 分别落在 PD14/PD15FMU_CH5/CH6TIM2_CH3 落在 PB10FMU_CH9。关键结论双向 DShot 在除 FMU_CH6 外的所有通道都可用。FMU_CH6 对应 TIM4_CH4而 STM32H7 的 DMAMUX 只为 TIM4_CH1–CH3 提供请求线没有给 TIM4_CH4 的捕获 DMA因此dshot.c在代码层面把该通道排除在双向模式之外。这是硅片级限制无法通过引脚重映射解决CH6 只能用于普通 DShot 或 PWM 输出。CONFIG_DRIVERS_DSHOTy与CONFIG_DRIVERS_PWM_OUTy在 default.px4board 中均已使能。GPSUART8GPS 双向通信已确认可用在排除 GPS 模组本身故障之后。GPS 驱动CONFIG_DRIVERS_GPSy在 default.px4board 中使能设备节点为/dev/ttyS5GPS1。DPS368 气压计DPS368 读数稳定。rev-A 上偶发的不稳定最终定位为焊点虚焊而非驱动或设计问题。传感器启动脚本 init/rc.board_sensors 中的启动命令为dps310 -s -8 start——DPS368 在 PX4 中由 dps310 驱动接管同一驱动族-s表示 SPI 总线-8是 SPI 片选序号。CONFIG_COMMON_BAROMETERSy保证气压计相关模块被编译。电池电压分压比 21.0BAT1_V_DIV设为 21.0对应 VSYS 上的 200k/10k 分压21 倍已用万用表对 VSYS 实测核对。init/rc.board_defaults 中的注释与 src/board_config.h 的 ADC 通道定义一致ADC_BATTERY_VOLTAGE_CHANNEL是 PF3 上的ADC3_CH(5)SYSVIN_SENSEADC3_INP5。注意 src/board_config.h 特别指出原理图把 PF4 标成了 ADC3_INP0但 PF4 实际是 INP9INP0 是 PC2——这类原理图笔误正是 bring-up 阶段最常见的坑。电池电流占位参数必须实测标定电流通道ADC3_INP0在 PC2 上注入电压后 ADC 读数跟踪正确。BAT1_A_PER_V目前沿用 ArduPilot hwdef 的 24.0 作为占位值——因为电流传感器实际接在 ESC 连接器上真实比例只能通过接上实际传感器后测量得到无法凭空给定。BOARD_ADC_OPEN_CIRCUIT_V (5.6f)与BOARD_HAS_NBAT_I等宏在 board_config.h 中配套定义。IMU 与内部罗盘方向无旋转IMUCubeNode 模组与载板方向一致无需旋转icm45686 -s start直接启动SPI 总线。原文档特别提醒ArduPilot 该板的 hwdef 写了ROTATION_ROLL_180但这与这块硬件的实际读数不符ArduPilot 的板级支持未经硬件实测PX4 侧以无旋转为准。内部磁力计IIS2MDC 无旋转已通过罗盘校准确认启动命令为iis2mdc -I -b 3 start内部总线 3即 I2C3。RC 输入UART4SBUS 在 J11 上正常接收CONFIG_DRIVERS_RC_INPUTy使能 RC 输入驱动。DroneCANCAN1CAN1 已使能CONFIG_DRIVERS_UAVCANy、CONFIG_BOARD_UAVCAN_INTERFACES1但必须把 uavcan 时钟从 TIM5 移走CONFIG_BOARD_UAVCAN_TIMER_OVERRIDE6default.px4board 第 27 行。原因是 TIM5 在本板上被占用uavcan 位定时时钟改用 TIM6。src/board_config.h 的定时器分配注释也印证TIM1/2/3/4 给 PWM/DShotTIM6 给 uavcan 时钟TIM8 给蜂鸣器TIM12 作为 HRT 时基。ESC 遥测 RXUSART1驱动侧已验证硬件侧待复测这一项在复测清单里是未完成状态[ ]但原因非常清晰驱动侧已验证在 DShot.cpp 中插桩可以看到 PX4 以预期速率、在所有前置条件满足时置位 ESC 遥测请求位引脚侧已验证Telem 引脚按原理图和 pinmap 路由到 PB7硬件侧是坏板用于 bring-up 的那块板子的 Telem 网络对地短路0 欧姆从连接器一直通到 CubeNode 焊盘另一块板上同一网络是干净的因此属于单板故障而非设计缺陷。相关配置在 init/rc.board_defaults 中param set-default DSHOT_TEL_CFG 103TEL3即/dev/ttyS0。复测结论在未损坏的硬件上重测。TELEM1UART78N1无流控MAVLink 双向通信正常。rev-A 曾把流控引脚接错量产板上 J4 的 pin 4、5 未连接端口以 8N1 运行。这与 port map 中无流控的标注一致。蜂鸣器未确认音量异常偏小复测清单中未完成的一项旋律正确但声音非常小且在所有组合下都复现——两只蜂鸣器有源/无源、两块板、5V/12V、PWM 与 GPIO 两种 tone alarm 后端都试过。究竟是驱动侧还是硬件侧的限制始终未定性。目前保留在 PWM 后端两者中能力更强的。板级定义见 src/board_config.hTONE_ALARM_TIMER 8、TONE_ALARM_CHANNEL 3PC8 TIM8_CH3空闲时GPIO_TONE_ALARM_IDLE输出低电平GPIO_OUTPUT_CLEAR。MSP DisplayPort OSD未测试需 HD VTX板上没有 OSD 芯片模拟视频无法叠加只能由 VTX 渲染因此需要 J9 上接支持 HD 的 VTX 才能测试。默认未启用把MSP_OSD_CONFIG设为 102TEL2即可开启。驱动CONFIG_DRIVERS_OSD_MSP_OSDy已编译进固件default.px4board只是参数默认未激活。RGB LEDarm 状态指示与颜色语义三颗 LED蓝/绿/红均为低电平有效阳极接 3.3V阴极经电阻接 GPIO定义在 src/board_config.h蓝色闪烁表示待解锁/解锁状态1 Hz 就绪、10 Hz 未就绪、4 Hz failsafe绿色解锁后常亮红色过载/错误指示。对应宏BOARD_ARMED_LED LED_GREEN、BOARD_ARMED_STATE_LED LED_BLUE、BOARD_OVERLOAD_LED LED_RED由 commander 驱动BOARD_HAS_CONTROL_STATUS_LEDS 1。注意本板没有颜色状态指示如低电量亮琥珀色——这类指示走led_controluORB topic只有 rgbled 芯片驱动才消费该 topic而这三颗 LED 是普通 GPIO没有对应驱动因此不会出现颜色状态灯。状态 LEDPC0仅由 bootloader 驱动PC0 上的状态 LED 目前只被 bootloader 使用src/hw_config.h 中BOARD_PIN_LED_BOOTLOADER GPIO_LED_STATUSbootloader 等待/刷写期间常亮应用层不碰它。这是一个待决策项应用固件是否要接管这颗灯留待后续决定。已确认正常的功能汇总复测清单之外以下功能在 bring-up 中直接确认可用USB CDC ACM、microSD、内部与外部磁力计、ICM45686、ADC3 各 rail 感知VSYS/5V/3V3/VREG。从源码反查实现依据px4board、board_config 与 rc 脚本整套复测结论并非凭空而来每条都对应仓库内可核对的实现复测项关键实现依据DShot 四组定时器src/timer_config.cpp 的io_timers与timer_io_channelsFMU_CH6 无双向 DShotTIM4_CH4 无 DMAMUX 请求线dshot.c排除该通道串口设备节点default.px4board 的CONFIG_BOARD_SERIAL_*电池电压/电流src/board_config.h 的 ADC 通道宏 init/rc.board_defaults 的BAT1_V_DIV/BAT1_A_PER_VIMU/气压计/罗盘启动init/rc.board_sensors 的icm45686 -s start、dps310 -s -8 start、iis2mdc -I -b 3 startI2C 总线布局src/i2c.cpp内部 I2C3 外部 I2C4uavcan 时钟重定位default.px4board 的CONFIG_BOARD_UAVCAN_TIMER_OVERRIDE6蜂鸣器通道src/board_config.h 的TONE_ALARM_TIMER/CHANNELNSH/USB 控制台nuttx-config/nsh/defconfig 的 CDCACM 与CONFIG_DEV_CONSOLE构建与烧录相关文件一览应用配置default.px4board含全部驱动与模块开关Bootloader 配置bootloader.px4boardbootloader 固件二进制位于 extras/nwblue_pro-h757_bootloader.bin固件清单firmware.prototypeboard_id: 5730镜像最大 1835008 字节与 src/hw_config.h 中BOARD_TYPE 5730、APP_LOAD_ADDRESS 0x08020000对应NuttX 配置nuttx-config/nsh/defconfig 与 bootloader 的 defconfig启动脚本init/下的 rc.board_defaults、rc.board_sensors、rc.board_mavlink。结语bring-up 的正确姿势NWBlue Pro H757 的 bring-up 记录展示了 PX4 新板移植的标准工作流先对齐 port map 与设备节点再确认控制台通路然后用一张可勾选的复测清单把每个外设逐项过一遍。其中最有价值的三条经验是区分设计问题与单板故障——ESC 遥测的坏板案例Telem 网络对地短路提醒我们复测失败时要换板交叉验证避免把单板缺陷误判为设计缺陷区分驱动限制与可修复问题——FMU_CH6 无双向 DShot 是 DMAMUX 硅片限制重映射也救不回来只能按通道能力规划输出用途参数要实测不要抄——BAT1_A_PER_V依赖实际电流传感器BAT1_V_DIV依赖实际分压网络IMU 方向要以本板实测为准ArduPilot hwdef 的ROTATION_ROLL_180在此板并不成立。这些结论全部可以回退到 boards/nwblue/pro-h757 目录下的 px4board、C/C 板级源码与 rc 启动脚本中逐行验证这也正是开源飞控 bring-up 相比闭源方案最可复盘的资产。【免费下载链接】PX4-AutopilotPX4 Autopilot Software项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表