资料汇总(AI问答知识库)
物唯AI智慧文档
CSDN系列文章
手搓STM32H743开源飞控系列教程---(一)飞控调研与方案设计-CSDN博客
手搓STM32H743开源飞控系列教程---(二)源码下载,修改引脚定义、编译固件-CSDN博客
手搓STM32H743开源飞控系列教程---(三)物唯飞控原理图讲解、硬件引脚讲解、一键适配官方固件
手搓STM32H743开源飞控系列教程---(四) 番外~~AI问答知识库上线-CSDN博客
手搓STM32H743开源飞控系列教程---(五) 飞控IMU与罗盘方向调整-CSDN博客
立创EDA工程开源:
飞行视频(B站)
一、飞控介绍
目前手搓的飞控代号叫“WFG100”,后续在编译过程中都将使用这个名称进行编译。
这个飞控采用 四层板 + LQFP100 封装 STM32H743VI 主控,板载磁罗盘、双冗余 IMU、气压计与 OSD,支持 ArduPilot / Betaflight 固件。
基本概况
类别 | 详情 |
双冗余惯性 | ICM‑42688‑P + ICM‑42605,自动健康监测与切换 |
高精度气压计 | DPS310 |
10 × PWM/DShot | 8 路PWM电调信号+ 2路辅助信号。 |
AT7456E OSD | 图传画面叠加飞行参数 |
TF 卡 & USB‑C | 黑匣子记录 / 固件 DFU / 参数调试 |
预留接口 CAN & I²C & SPI | 支持 CAN设备、IIC设备及SPI设备的接入;扩展更多可能。 |
状态提示 | LED、蜂鸣器 |
板卡规格
类别 | 规格参数 |
主控芯片 | STM32H743VI • Cortex‑M7 • 480 MHz • 2 MB Flash / 1 MB SRAM |
供电 | 支持 2–6 S(6 V–36 V)电池输入; 5 V @ 3 A,10 V @ 3 A |
传感器 | IMU×2 (ICM‑42688‑P、ICM‑42605) • 气压计 DPS310 • 磁罗盘 IST8310 |
接口 | UART × 8 CAN × 1 I²C × 1 SPI × 4 SDIO × 1 PWM× 10 |
存储 | TF(≤ 32 GB) • 16 MB SPI‑Flash(可选) |
板层 | 4‑Layer FR‑4,厚 1.6 mm,约 45 mm × 55 mm |
支持固件 | Ardupilot4.5~4.6、betaflight4.5~4.6 |
二、飞控引脚与焊盘定义
三、飞控原理图简介(已开源)
3.0 立创EDA开源工程:
3.1 主控芯片
主控芯片采用LQFP封装的STM32H743VIT6。在BF固件中需要按下按键将BOOT0置于高电平才能进入DFU模式才能刷写固件,所以不要忘了这个复位按键。
3.2 IMU传感器
采用双IMU传感器方案(ICM42605+ICM42688),均为SPI通讯方式,相比于IIC通讯的传感器,数据传输更快。
3.3 磁罗盘传感器
磁罗盘传感器采用IST8310,也是飞控中非常通用的一款传感器。对于一些抗干扰要求比较高的飞控一般会采用RM3100,但是内置罗盘终究没有外置罗盘的抗干扰能力强,并且受限于该飞控板卡的尺寸大小,最终还是选用IST8310这款传感器。
3.4 气压计
气压计传感器采用DPS3100,目前也是大部分穿越机飞控所采用的气压计方案。
3.5 OSD图像叠加
OSD芯片的作用是将飞控的遥测数据(高度、速度、电量)叠加到视频画面上,这样我们在显示屏上就可以直接看到飞控的遥测数据。注意:只有模拟图传才需要使用OSD图像叠加,大疆或蜗牛的高清数字图传已自带OSD功能。
3.7 ADC信号采集引脚
本飞控总共有6个MCU引脚作为了采集,分别是2路电池电压采集、2路电池电流采集、1路空速计采集、1路RSSI遥控器信号强度采集。其中1路RSSI遥控器信号强度采集、2路电池电流采集直接将MCU引脚引出至连接器的端子即可。
而2路电池电压采集、1路空速计算采集则需要配上相应的分压电路,如下:
注意看ADC-VBAT1和ADC-VBAT2,设计了2处电池电压采集电路。其中ADC-VBAT1默认接了电池输入,只要电池一上电即可采集到电池电压信息;而ADC-VBAT2只是引出了焊盘,如果需要采集电压需要将焊盘焊接上。
ADC-AIRS是空速计的接口,一般情况下多旋翼是用不上的,但是该飞控如果刷写APM的固定翼固件则可用上,作为预留先引出!
3.8 预留CAN/IIC/SIP接口
本飞控还预留了CAN、IIC、SPI三大通讯接口,正常情况下穿越机也不需要使用该接口。但是后续如果我们用APM固件就可以接入更多的外设传感器,因为也预留引出。
CAN电路,MCU的CAN引脚引出后需要先经过CAN转换芯片,再到连接器端子,如下图所示:
3.9 TF卡
此处采用的是SDIO协议。
3.10 USB下载口
TYPEC接口也没啥好说的,注意在USB口上增加一个EDS管(USBLC6-2P6)用于防静电。
3.11穿越机常规接口
电调接口:
2路电调接口集成了供电、电流采集及8路PWM接口,X8机型也能轻松驾驭。
此外2路辅助PWM接口,通过焊盘引出。
遥控器接收机接口:
使用MCU的串口6作为遥控器的接收机接口,目前常用的遥控器主要是SBUS和CRSF协议。
其中SBUS信号是单向接收的,CRSF则可以回传遥控器接收机的状态给飞控。
模拟摄像头与模拟图传接口:
在3.5处有一个OSD图像叠加芯片,因此摄像头接口(CAMERA)的VRX引脚、模拟图传接口(VTX)的VTX引脚都和OSD图像叠加芯片相连。注意模拟图传接口(VTX)还有一根UART1_TX的信号线,这个是可以通过OSD进行无线调参。(如果不使用无线调参,则可以直接忽略UART1_TX这根线)
大疆高清图传接口:
GPS模块接口:
3.12电源设计
1)电池输入,降至5V
2)5V再降至2路3.3V,1路给MCU供电,1路给传感器供电。
3)电池电压降至10V,给图传模块供电。
4)电源保护电路
3.12LED灯带、蜂鸣器
部分飞友可能还会接上LED灯带和蜂鸣器,这2个外设直接采用底面焊盘引出,分别为A16和A10焊盘。
四、编译APM固件
前言:
接下来内容,需要结合与之前的文章来看,因为很多内容在前面的文章已经讲过了,详细内容查看以下文章的章节五
APM所有飞控板卡硬件定义文件存放在这个文件夹下:
/ardupilot/libraries/AP_HAL_ChibiOS/hwdef
接下来讲解一下具体的适配步骤。此处我默认大家已经完成了WLS的安装、git环境的配置以及ardupilot源码的下载。
4.1 切换分支
源码下载完成后,首先要做的就是切换一个稳定明确的分支,因为源码默认下载的源码是在master版本,这个版本一般是最新的开发版本,定义配置等内容都是比较混乱,没有正式发版。通常我会使用明确发版的版本。截止到2025年7月22日,APM多旋翼固件的稳定版本是4.6.2,执行以下命令切换分支:
git checkout Copter-4.6.2 # 切换到4.6.2分支
git branch # 确认分支切换成功
注意:每次切换分支以后,尽可能都更新一下子模块以及编译环境,因为这里面的 很多工具链版本可能与分支是有对应关系的,分别执行以下2条命令:
git submodule update --init --recursive
Tools/environment_install/install-prereqs-ubuntu.sh -y
4.2 新建文件夹并命名
我们在源码文件ardupilot/libraries/AP_HAL_ChibiOS/hwdef这个文件夹下,首先新增一个“WFG100”文件夹。
4.3 放入两个.dat文件
在“WFG100”这个文件夹中,将我们我们写好的2个.dat格式的硬件定义文件拷贝进去,它们分别是详细的硬件定义文件及bootloader定义文件。
这两个文件已放在交流群中,需要可直接下载,解压后使用。
4.4 执行waf配置
完成上述步骤后,接下来即可执行代码编译工程,首先我们要先执行了一次配置命令,确保./waf配置成功。
输入以下命令:
./waf configure
4.5 关联bootloader
关联bootloader,执行以下命令,在命令的最后是飞控板卡的名称,也就是之前创建文件夹的名字,我的飞控叫WFG100.
输入以下命令,回车执行。
python3 Tools/scripts/build_bootloaders.py WFG100
执行成功后,界面如下:
4.6 配置板子型号
有了bootloader后,我们就可以选择需要编译的板子了。此处我编译板子类型为WFG100(大家如果复刻请按需更改名字即可),输入以下命令,回车执行。
./waf configure --board WFG100
执行成功的界面,如下图所示:
4.7 执行编译、生成固件
./waf copter
等待编译执行,默认是编译1200多个文件,待编译完成后会显示固件的存放位置。
打开固件的生成目录,会发现以下2种类型的固件文件,具体区别详见章节七固件烧录说明。
至此,APM固件的编译以及固件生成就结束了!
五、编译BF固件
前言:
BF固件编译大体流程与APM固件一致,详细编译说明参考之前的文章的章节五,
BF固件的硬件配置文件在/betaflight/src/config/configs目录下,如下图所示:
接下来讲解一下BF固件的具体的适配步骤。此处我默认大家已经完成了WLS的安装、git环境的配置以及betaflight源码的下载。
5.1切换分支
源码下载完成后,首先要做的就是切换一个稳定明确的分支,因为源码默认下载的源码是在master版本,这个版本一般是最新的开发版本,定义配置等内容都是比较混乱,没有正式发版。通常我会使用明确发版的版本。截止到2025年7月22日,BF固件的稳定版本是4.5.2,执行以下命令切换分支:
git checkout 4.5-maintenance # 切换到4.5.2分支
git branch # 确认分支切换成功
注意:每次切换分支以后,都必须重新安装一下编译工具链,执行以下命令
sudo apt update
sudo apt-get upgrade -y
make arm_sdk_install #更新编译工具链
5.2 新建文件夹并命名
我们在源码文件/betaflight/src/config/configs这个文件夹下,首先新增一个“WFG100”文件夹。
5.3 放入config.h文件
在“WFG100”这个文件夹中,将我们写好的config.h格式的硬件定义文件拷贝进去。
这个文件已放在交流群中,需要可直接下载,解压后使用。
5.4 执行编译指令,生成固件
执行编译命令make, 我们的板卡叫WFG100,因此输入以下指令
make WFG100
编译完成后,固件生成在此目录下。
然后我们使用BF地面站即可进行烧录,详见章节七。
六、物唯编译补丁包使用
此外,我们还撰写了一个编译脚本的用来生成APM固件、BF固件的硬件配置文件(仅针对WFG100飞控),其原理就是通过脚本,把相关的硬件配置文件通过补丁的方式打到APM或BF工程的源码上,只要你会基本的操作,那么这个肯定也不在话下,github链接如下:
七、固件烧录说明
7.1 烧录BF固件
BF固件的烧录比较简单,使用Betaflight Configurator地面站进行固件烧录
Betaflight Configurator地面站下载链接:https://github.com/betaflight/betaflight-configurator/releases/download/10.10.0/betaflight-configurator_10.10.0_win64-installer.exe
1)按BOOT0按键,接入USB线上电。
2)打开Betaflight Configurator地面站,确认已进入DFU模式
3)点击右下角“从本地电脑加载固件”,选择需要烧录的固件。
4)确认固件加载完成,并烧录固件。
5)等待固件的擦除与烧录
6)烧录固件完成。
烧录完成后会自动推出DFU模式,此时我们可以连接飞控,进行飞控参数的配置。
7.2 烧录APM固件(通过STM32的烧录工具)
APM固件的烧录则稍微多了一个步骤,需要先对MCU完成Bootloader的烧录。因此如果我们的飞控板之前烧录过BF固件,由于此时MCU中没有APM固件的bootloader,因此用户无法通过Missionplanner地面站进行APM固件的烧录。
Missionplanner地面站下载链接:
第一次烧录APM固件,需要使用STM32CubeProgrammer,将APM的bootloader和用户程序一同烧录到MCU后,后续才能使用Missionplanner地面站进行固件更新,方法如下:
1)按BOOT0按键,接入USB线上电
2)打开STM32CubeProgrammer,进行连接。
3)连接成功后的界面如下图所示:
4)选择本地电脑的APM固件,注意选择固件的格式。
5)确认固件加载完毕,执行烧录
6)烧录完成提示
7)通过Missionplanner地面站连接飞控,即可看到数据正在刷新。
7.3 烧录APM固件(通过Missionplanner地面站)
通过章节6.2的方法完成APM固件烧录后(其实就是确保bootloader烧录到了MCU中),当MCU上已成功烧录bootloader后,用户后续便可通过Missionplanner地面站,进行固件更新。需要注意的是,使用Missionplanner更新固件需要选择的固件格式为“.APJ”。烧录方法如下:
1)通过USB线给飞控板供电。(注意无需按下按键)
2)选择串口号与波特率(115200),注意不要点击连接!
3)初始设置->安装固件->Load custom firmware。注意不要点击连接!
4)根据提示执行动作
5)等到固件烧录完成,烧录完成后会提示Upload Done