APM固件硬件配置文件分析

1、前言

玩过单片机开发的电子爱好者们应该都知道,在完成硬件设计后,还需要进将固件烧录到MCU芯片上的,整个软硬件系统结合起来才能正常工作,飞控系统也不例外,在完成WFG100飞控的设计后,我们还需要基于官方代码修改硬件配置相关的文件,这样官方的代码的即可适配我们自定义的 飞控硬件,其流程整体如下:

image

上述流程步骤说难不难,但还是有一些基本的操作门槛。比如需要懂一些Linux的基本操作指令、Vscode编译器使用基础、以及有一台Linux系统的电脑(或者在Windows电脑上装有WLS子系统)。如果不会做源码的修改的话,那么就只能下载别人编译的好的固件,或者在设计原理图的时候,芯片的引脚定义需要设计成和官方某个开源板子的引脚一致,然后使用它的固件。 当然这样的话,就是设计自主性上差了点意思,不能随心所欲的设计,无法做到运放自如!

2、APM源码地址

  Ardupilot固件的源码地址:

image

https://github.com/ArduPilot/ardupilot

3、如何选择飞控硬件的核心传感器?

玩无人机的朋友应该都清楚,其实飞控的核心硬件系统是非常简单的,就是一个主控MCU(一一般情况下通常是STM32单片机)+IMU(惯性测量单元)+气压计+磁盘罗盘组成。那么我们在自己设计硬件画原理图的时候,不禁会问一个问题:我到底要怎么样选择飞控IMU、气压计以及磁罗盘的型号?  有三种方法:

1)参考市面上售卖的成品飞控,研究他们的传感器选型。

      因为商家选型肯定考虑了兼容性、性价比、开源支持性等等。

2)查看APM支持的传感器型号,这样就不需要重写底层驱动代码,仅改宏定义配置文件即可。

      如何查看APM固件支持的全部传感器型号,请查阅本文章节4、APM固件支持传感器列表

3)针对能够玩转源码底层的嵌入高手,传感器型号随便选择,甚至纯国产化都没问题。

      (此部分就暂时略过吧,因为三言两语讲不清楚,后期物唯团队会通过视频进行讲解。)

4、APM 固件支持传感器列表

在选择IMU、气压计、罗盘时,我们最好选择APM固件已支持的传感器,这样我们就不需要再专门的写传感器的底层驱动,直接通过某些简单的宏定义即可调用驱动;Ardupilot源码支持的传感器型号在“ardupilot/Tools/scripts/decode_devid.py”这文件下,Github链接如下:https://github.com/ArduPilot/ardupilot/blob/master/Tools/scripts/decode_devid.py

4.1APM固件支持的IMU型号

image

4.2 APM固件支持的罗盘型号

image

4.3 APM固件支持的气压计型号

image

5、APM固件的硬件配置文件解读

大家有没有发现,从淘宝采购的某些大牌子的飞控硬件,只需要将数据线插入飞控地面站,地面站就可以识别飞控的板子型号,或者选择指定厂商的飞控板子就会自动匹配相应的固件。这是因为这些飞控厂商通过赞助/资助/合作的方式,与飞控的官方开发组建立了长期的迭代机制,官方代码在每次版本更新的时候,就会默认将这些飞控的硬件厂商都包含了进去,做好了适配。

如果是自己DIY手搓的飞控,那官方代码里肯定没有我们的自己画的飞控硬件相关的引脚定义配置文件,所以必须要我们下载官方源码,然后自行添加或修改引脚配置文件,再自行编译固件去适配我们自己设计的飞控硬件。

接下来就给大家讲解一下APM的硬件配置文件如何进行修改?

5.1 基本概述

下载代码后,APM固件的外设设备的引脚定义都在/ardupilot/libraries/AP_HAL_ChibiOS/hwdef这个文件夹下。此时我还没教大家下载代码,大家可以通过官方的github链接进行查看,如下:

https://github.com/ArduPilot/ardupilot/tree/master/libraries/AP_HAL_ChibiOS/hwdef

如下图所示,下面的每一个文件夹都代表着一个硬件的定义描述,这个硬件可以是飞控、可以是GPS模块、也可以是外设模块。目前物唯团队自己设计了一个飞控硬件并命名为WFG100,我们在编译源码生成固件时,首先需要在/ardupilot/libraries/AP_HAL_ChibiOS/dwdef这个目录层级下,创建一个“WFG100”的文件夹,然后在这个“WFG100”文件夹中编写我们的硬件描述定义。

image

5.2 解读雷迅飞控的硬件定义文件

    /ardupilot/libraries/AP_HAL_ChibiOS/hwdef这个文件夹下,一直往下翻,就可以找到雷迅各系列飞控的引脚定义文件。

imageimage

我们分别展开CUAV-NoraCUAV-pixhack-v3CUAV-X7CUAVv5CUAVv5Nano的文件夹,会发现里面有2种不常见的后缀格式,分别是:“ .parm”   “.dat”

image

重点:

文件格式

文件作用

必要性

hwdef-bl.dat

带bl.dat结尾的bootloader的硬件定义文件,它是系统启动的基石,是飞控硬件上电后执行的首段代码,它负责初始化硬件、管理固件更新,并为加载主应用程序做好准备。

必要文件

hwdef.dat

hwdef.dat文件是最重要的引脚定义文件,主控芯片型号、传感器型号、数据总线分配、串口号分配、引脚功能都写在这个文件中。(自定义的飞控硬件主要就是修改此部分的代码)

必要文件

XXXX.JPG

一些备注图片,不参与代码编译!

非必要

可有可无

README.md

一些备注文档,不参与代码编译!

非必要

可有可无

5.3 解读微空飞控的硬件定义文件

由于雷迅的各个系列的飞控定位都是比较高端的行业级飞控,我们的WFG100飞控定位为1款穿越机的飞控,因此我们以同样定位为穿越机飞控的微空科技MicoAir743-V2飞控作为案例进行讲解。(该厂商的飞控已经与APM官方开发组进行了适配,在源码中也能看到微空科技的飞控硬件定义配置文件)

在Ardupilot源码中找到的MicoAir743 V2的硬件定义,其目录路径如下:

ardupilot/libraries/AP_HAL_ChibiOS/hwdef/MicoAir743v2,github链接为:https://github.com/ArduPilot/ardupilot/tree/master/libraries/AP_HAL_ChibiOS/hwdef/MicoAir743v2

重点就看hwdef-bl.dat、hwdef.dat这两个文件。

image

5.4 如何修改硬件配置文件?

对于新手而言,修改硬件配置文件的诀窍就是:多参考几个飞控硬件的hwdef-bl.dat、hwdef.dat文件,照葫芦画瓢!

整体步骤就是:

1)先创建一个文件夹(这个文件夹就是你自定义飞控的名称,比如WFG100)

2)从跟你类似的成品飞控硬件定义文件中,拷贝hwdef-bl.dat和hwdef.dat到飞控命名的文件夹下。

3)照葫芦画瓢,根据自己的实际硬件连接,修改hwdef-bl.dat和hwdef.dat文件。

在修改.DAT的过程中,如果不是很懂里面的每一句定义,大家可以直接把代码复制下来,问AI,他会帮你解释的非常清楚,甚至大家可以把上述微空的硬件定义文件复制下来,告诉AI你的硬件定义,再让AI参照上述格式给你提供参考。 大家可以多参考几个飞控的硬件定义文件具体是怎么写的,其实都大同小异。这里也给出几个成品开源飞控的链接以及对应硬件定义目录,大家可以用来参考,然后我们照葫芦画瓢,多编译几次肯定是可以写出自己的硬件定义文件的!

7、自定义板卡的唯一ID号修改

在源码文件夹中的:  Ardupilot/Tools/AP_Bootloader/board_types.txt,  里面记录了APM飞控支持的所有硬件外设的ID。

其中在6000-6909的ID中,是留给用户自定义用的。

8、WFG100飞控的APM硬件配置文件

飞控硬件的原理图资料请查看WFG100硬件设计资料汇总

基于物唯WFG100飞控的APM硬件配置文件请访问以下链接进行下载:

0199a3ef-6738-7cdb-ba80-1e5530dd389a

将上述文件解压后,放置在ardupilot/libraries/AP_HAL_ChibiOS/hwdef路径下,便可开展编译工作。

image

相关文档