国产芯片飞控开源分享
本帖最后由 muyichuan2012 于 2022-10-18 09:06 编辑国产芯片飞控开源分享
作者:二木山人经作者同意,本文转自B站:https://space.bilibili.com/29163672/video为什么移植BF2020年年底,从尘封的书架上翻到一本《飞行员知识手册》 一下子勾起了自己年少时的飞行梦,现在再投身飞行恐怕是晚了,玩玩模型吧。首先看的就是固定翼模型,模拟器、遥控器买了之后5边练习纯熟,发现自己身处的帝都要想找块场地起降固定翼基本不可能,这时候想起来13年的时候看到的四轴飞行器竞速赛, 穿越机又重回了视角。 在组装了一架5寸之后,意犹未尽,正好这时候身边一位朋友魏哥在自制F405、F722 的飞控,了解了初步的原理之后,自己用F411 开发版+ MPU6500 模块+自制OSD模块、电源模块等,先飞线拼了一个“飞控”出来并试飞成功。 这次拼装打开了我对穿越机飞控的大门,从此深陷飞控大坑,买了STM32开发相关的书籍自学MCU知识、阅读BF 的源代码。。。。。
2021年适逢STM32 系列MCU 价格大涨, 飞控价格也从百十元翻番,国产MCU 也百花齐放,难道这么多“32” ,就一个也没有能拿来替代的? 肯定有, 甚至有代码都不用修改的GD、APM 系列、自己独创度比较高的HD系列等。选来选去,目标定在了高频、便宜、IO丰富的雅特力芯片上,首先盯上的是AT32F403A, 和STM32F103 外设一样代码无需修改即可运行,但是觉得不彻底,就定上了 2021年8月份雅特力新上市的 AT32F437 系列, 大Flash、高频率、丰富IO 都很合适,预估不会比F405 差,于是启动了使用AT-BSP 库全面移植、重写BF底层驱动的目标。
选择国产芯片,一方面是想降低飞控的价格,让各位模友降低费用,另外一方面也是想着在过程中对比、学习MCU 的开发知识,以实际项目促进自己的学习,事实证明这确实是一条学习的捷径,使我快速了解了ST、AT 两套MCU 的基础知识,也掌握了BF 的代码结构,因此整理了整个移植过程,希望能够给其他同好留下一些线索,给自己做一次系统的知识总结。
MCU 的选型与IO 性能评估针对一款飞控的mcu进行选型,需要综合考虑多重问题,比如在之前的选择中,曾经对比、评测过 esp32、联盛德W806、树莓派Pico、合宙105 、gd32f407等多种mcu,这些mcu的频率、flash大小、内存架构、外设架构、外设情况等,具体如下表
mcu 选型表表格太大,可访问表格原地址查看:https://www.bilibili.com/read/cv18935442?spm_id_from=333.999.0.0
以上表格并未做完数据,但是重点需要考虑的因素有:
1、系统计算能力,主频在140mhz 以上(对比f405)
2、系统内存在 128kb 以上,flash在 512kb 及以上,如果是spi集成外部flash,执行效率会下降2-3倍,需要在主频上找
3、外设丰富程度,SPI 总线数量在2个以上(1 IMU 1OSD+blackbox),支持至少6路PWM输出,定时器数量额是主要考虑对象,在所有的选择里面,外设的丰富程度、速度、数量是首要选择部分。
4、资料丰富性: 相关用户手册、DATASHEET 是否清晰、完备,是移植工作重要考虑因素,如果资料不易获得,甚至需要签保密协议才可以获取,这种的芯片坑太多了,而且后期遇到硬件问题,必须找厂家支撑的时候基本是不可能支撑你这个人用户的。比如合宙的air105就属于这种情况, 基本无法获取c开发库的任何资料,即便是比较合适也只能放弃。
5、价格:必须得比当前的F405 价格低,而GD32系列因为可以平替对应的STM32,甚至代码都不需要做大的调整,确实是比较适合用来做替代的但是在淘宝上的售价和stm32 相差无几而且开发板价格爆贵, 这种确实也不太适合选择作为移植的对象。
经过综合对比、选择,最后雅特力的AT32F403AAT32F435/7这三款芯片是比较适合选择作为移植的对象,具体情况是 :
主频:240Mhz、288Mhz ,内存128KB-512Kb可调, 确实在所有一众国产芯片中拔得头筹, 即便是 at32 也存在flash 读写效率低的问题,但是通过较大的可调内存,通过调小内存将代码全部 load 到内存ZW(零等待区,CPU取指不需要等待,flash区需要等待 2-4个cpu 周期)方式,可以取得较好的执行效率
外设丰富程度:外设的数量、速度基本满足bf的需求 : 无论是spi、i2c、定时器还是adc都绰绰有余,当然at32 也存在短板,比如 spi的频率最高只有36Mhz 虽然在读取w25q128 黑匣子flash 导出飞行记录的时候速度会慢一些,但是对于OSD和 IMU 的通信已经绰绰有余。
资料丰富程度: at32 的相关开发资料相当丰富, 虽然赶不上stm32 的准确、清晰易懂,但是在一众国产芯片里也算是例程充足、文档完整了。当然at32也存在一些文档上的bug和瑕疵,但是官方更新的相当快。
价格:at32 的价格在15-22块之间,而且淘宝上可以直接买到。方便后期DIY 用户直接购买。
最后,是选择 403a还是选择 最新的435/7 ?
既然是移植,就没必要使用性能第二的403a、虽然403a 价格便宜很多,差不多10块钱1片,但是本次移植不为商业利益,更是一种自己的学习挑战,所以选择了最新的at32 f437 作为移植目标。
目前已经支持的 AT32F435 、at32f437vmt7at32f437vgt7
怎么把Betaflight 从STM32 移植到 AT32 系列 --大纲经过接近5个月的努力,已经将betaflight 4.3.0 -rc2 从stm32 移植到 雅特力at32F437Zmt7,开发板已经对功能初步验证通过, 协同另外一个朋友(N.T.Jia)正在制作原型飞控板进行试飞验证。趁这段时间开一个坑,总结一下怎么把bf 移植到非STM32 系列的MCU上,以及遇到了哪些坑、怎么进行优化,以及后继如何对bf 固件进行定制等话题。计划大纲(内容分批撰写):
[*] 0. 序:为什么移植BF
第一章: 移植的准备工作
[*]从上而下看BF 对代码结构
[*]MCU 的选型与IO 性能评估
[*]bf 的Makefile 体系与移植
[*]编译环境的搭建
第二章:BF代码基础移植工作
[*]时钟树:MCU 的总动脉
[*]RCC : RCC 与CRM 总闸开关
[*]GPIO :点亮一盏灯,Step1 验证
[*]DMA : 内存搬运工
[*]TIMER : 计时器基础的PWM输出 第二次点亮灯
[*]EEPROM :Flash 模拟EEprom 以及配置信息存储
第三章: BF数据总线、通讯部分移植
[*]bus 、SPI、I2C
[*] Serial、Usart、4Way Esc
[*] Serial USB VCP
[*] 点亮陀螺仪、气压计、磁力计、接收机、地面站通信
第四章: BF与ESC 通信部分移植电调常见通信方式: PWM、Dshot、双向Dshot、Proshot
[*]PWM 移植与验证(oneshot 、Multishot)
[*]硬件定时器实现Dshot (ProShot) 原理、移植、与验证
[*]Dshot-bitBang 原理、移植、与验证
[*]ESC Bhelis-32 验证
第五章: 系统启动优化与性能优化
[*]重新回到启动文件
[*]内存大小与ZW区调整
[*]内存RAM 分区调整
第六章: 雅特力的硬件局限性
[*]TIMER 与DMA 中断问题与解决思路
[*]DMA 性能瓶颈问题与解决思路
第七章: 原型飞控板的设计与制作
第八章: 测试、试飞 与调整优化。
第九章 : 后记
betaflight 代码结构betaflight 的代码结构主要如下, 整体上我们移植需要关注的是 src/main/drivers 文件夹下的驱动,其他文件夹各自用途标注
+---docs -- bf 的文档文件夹,包括如何设置、搭建编译环境等,如果英语不太差建议多读+---lib -- MCU 以及引用的一些外部lib 文件,mcu 的驱动库比如HAL、at32 的bsp放这里
| +---main| | +---AT32F43x| | +---BoschSensortec| | | \---BMI270-Sensor-API| | +---CMSIS--- ARM 核心的驱动,必须要| | +---dyad| | +---google --google的glc序列化协议| | \---MAVLink--mavlink 数传协议| \---test -- 自动化单元测试用例+---make -- makefile 的主要文件夹, 包括target引入、特定MCU 的编译链接配置等, at32 需要新建一个 makefile文件| \---mcu+---src --主要源代码文件夹| +---link -- gcc 的ld 文件夹,主要声明程序的内存、flash布局,需要根据mcu 仔细调整, 声明内存起始、flash起始、程序的 bss、ess 等段声明,bf 的配置数据管理体系 PG (flash 模拟eeprom )重点在这里。F4的重启到bootloader 也是在这里
+---main| | +---blackbox 黑匣子代码| | +---build 构建的一些设置| | +---cli bf 地面站的cli 功能实现| | +---cms OSD 设置菜单的实现| | +---common 通用配置文件| | +---config 读写config 的配置| | +---drivers 驱动层 ,mcu和传感器的驱动代码,移植的代码主要在这里| | | +---accgyro 加速度计与陀螺仪,基本不需要修改| | | +---accgyro_legacy “史前”古老的加速度计和陀螺仪| | | +---barometer 气压计驱动| | | +---compass 罗盘驱动| | | +---rangefinder 遥控测试用的| | | \---rx 所有接收机的驱动,包括elrs、cc2500 、sbus 等,大部分不需要移植,ppm 、elrs 用到timer 需要修改| | +---fc init、飞控核心代码无需移植
| | +---flight 飞行状态代码,无需移植| | +---io 对于输入输出的抽象代码,不需要修改| | | \---asyncfatfs| | +---msc U盘模式,需要移植| | +---msp bf configuator 和bf 串口配置通信的协议,无需移植| | +---osd OSD 的抽象层无需修改| | +---pg 配置信息读写库,无需修改| | +---rx 接收机上层代码,无需修改| | +---scheduler 核心调度器,无需修改| | +---sensors 传感器抽象代码,无需修改| | +---startup mcu 启动初始化代码,需要根据mcu配置 startup.s ,修改初始化静态变量、预加载内存变量等部分| | +---target 硬件目标配置信息,需要根据板子自己定义| | | +---AT32F437DEV本次移植用的开发板target.h target.c target.mk 文佳| +---test --单元测试代码| | \---unit| | \---timer_definition_unittest.include| | +---drivers| | \---pg| \---utils --工具代码无需修改\---unified_targets --统一化的固件配置信息,无需修改 \---configs
整体上代码的结构,可以看下
bf 代码结构图 https://blog.csdn.net/github_37459410/article/details/126372389可以看到bf 代码呈沙漏型,中间的driver文件夹对上下层进行了抽象隔离,也便于bf 向各个mcu移植。 不过总体来说stm32 系列mcu 的结构变化不是很大,除了F7、H7 内存、DMA有部分的差异之外, 代码中夹杂着宏定义来实现1套代码不同target 打包
飞控制作视频专辑:二木山人B站主页:https://space.bilibili.com/29163672/video群友制作试飞成功@现代野人:https://www.bilibili.com/video/B ... id_from=333.999.0.0
国产芯片飞控升级4.3.1 同步优化https://www.bilibili.com/video/BV1WB4y1E7ZN?spm_id_from=333.999.0.0
详解第二版国产芯片飞控硬件https://www.bilibili.com/video/BV1fd4y1B7zE?spm_id_from=333.999.0.0
新飞控首飞https://www.bilibili.com/video/BV16T411F7VQ?spm_id_from=333.999.0.0
国产芯穿越机飞控https://www.bilibili.com/video/BV1Ld4y1d7TX?spm_id_from=333.999.0.0
开源资料由于资料是处于持续更新中,建议到如下地址下载硬件相关:https://oshwhub.com/pdwdw/at32f437固件等其他:可加入BF飞控移植自制交流群下载,QQ群号:428787190
不错 厉害。。 软件代码开源吗? 大佬总是无处不在,还没真正玩过四轴飞行器呢。 就凭我这技术看了也不知道能不能diy一个 厉害的楼主,也是无私的楼主 楼主上心了啊 感谢大佬的分享,先收藏资料了。 AT32F403A是否带有硬件处理器? 之前用st的试过,不知道AT的怎么样 这个可以pin2pin替换掉吗? 140Mhz的频率,处理数据的速度翻了一般了。 这个的性能怎么样? 四旋翼的设计都是开源的,网上有很多的资料。 这个不错,新颖的设计。 现在的国产芯片针对太多了。 这个容易收到电机的干扰的吗? 怎么才能把芯片的芯片降低下来? AT32做的东西比较高端了。
页:
[1]
2