凌霄飞控开发日志兼新手教程——基础篇:认识基本的文件内容和相关函数作用(25电赛备赛版)
目录
硬件部分
配置清单
电池
烧录器
上位机设置
遥控器通道
串口电压注意
串口分配
软件部分
认识基本文件(非常重要!):
main函数:
时分调度器:
User_task:
ANO_DT_LX:
ANO_LX:
LX_FC_FUN:
Drv_BSP:
Drv_Led:
Drv_Uart:
本篇文章是笔者对25年TI杯电赛H题(四旋翼无人机题)备赛的回顾总结,同时给后来的学习无人机(凌霄飞控)的学弟学妹们开一个新手教程。匿名科创虽然有提供比较专业的手册,但奈何内容过于精炼简洁,专业性比较强,对于新手入门仍然有一定的难度,整个飞控的程序框架是基于标准库的编程,易读性很好,最主要的部分就是飞控外设的引入(串口操作)、基本运动函数的封装、GPIO的操作、程控内容的设计。
硬件部分
由于这一部分大家不同的无人机硬件采买有不同的电机、机架、电池、接收机/遥控器等等,所以这一部分内容仅供大家参考。大家可以直接跳转到软件部分阅读。
配置清单
无刷电机:四颗KV1200的电机搭配上三叶螺旋桨;
机架:Q4机架,真正意义上的全包机架;
电调:搭配电机一套的四合一电调;
机载计算机:英伟达的Jetson Orin NX super;
视觉模块:MaixCAM视觉;
电池:三块格氏电池:4s 3300mAh(放电倍率30c)+5300mAh(45c)+4500mAh(30c)
其他外设:英特尔的深度相机(T265)(很不建议使用)
电池
经过测试,小块电池1300/3s满电量可以测试飞行5~6次,单次飞行时长30s左右,总飞行时长可达3分钟。7.17
烧录器
目前贴置在无人机上的烧录器型号为DAP-Link,我们有两款烧录器型号不相同,只是外观相同,另一块则是Jlink,可以通过设备管理器查看设备类型来分辨烧录器类型。7.17
上位机设置
每次试飞需连接上位机,首先检查上位机电池参数,如果是使用小电池则需要写入3s的参数,虽然电池参数错误也不会炸机,但是低电压报警会失效。7.17
遥控器通道
目前设置SWB三段开关来选中飞行模式,最上方为定高,中央位置为定点,向下打为程控。
设置了SWC三段开关映射通道6,当开关在最上方时执行一键降落,在中间执行一键起飞,在最下方执行程控程序,故在设计完程序之后,先把SWB三段开关拨到最下方进入程控模式,再拨动SWC到最下方直接启动程序内容,如果出现意外可以通过SWC打到最上方执行一键降落,紧急情况直接打八字锁定飞机!7.17
串口电压注意
连接要使用5V,不能用3.3V
串口分配
- 串口1用于底部MaixCAM的调用
- 串口2用于RF_Nano的调用(可以删除,目前没什么大用处)
- 串口3用于激光雷达的调用(0x34帧)
- 串口4用于光流(不可随便改动)
- 串口5用于IMU通信(绝对不可改)
软件部分
认识基本文件(非常重要!):
以上几个文件是用户操作的可编程内容,这里不建议大家到手后再去重新烧录IMU的固件(IMU的固件是通过上位机来烧录的,大家初次使用的时候不要稀里糊涂地通过上位机把IMU里面的固件给清除了( ̄▽ ̄)~*)真正的程序还是像正常的单片机一样,通过keil工程编译之后,用烧录器下载到飞控的单片机里!
在图中,解压rar文件后,得到第一个文件夹,即ANO_LX_FC文件夹,这个就是主工程文件了!
例程1已经在主工程文件中生效啦,所以不需要自己放进去的,这里是防止用户乱改出错来复原的文件。
如图,FcSrc中的User_Task.c就是程控内容的编程内容了,用户的执行代码主要内容都在这个.c文件里设计存放,后续我们控制基本飞行的程序设计也是在这里面实现的。
然后我们打开工程来看所有的文件结构:
main函数:
大家可以看到,main函数里面是做了一个时分调度器,初始化函数也在这里执行。main函数里的内容是不需要进行改动的,因为这个框架是设定好的,这里也不建议大家去改动!因为有可能会影响调度器里的时间参数。
时分调度器:
然后就是这个时分调度器了,注释浅显易懂,类似于定时器的用法,不过和定时器不一样的地方在于,它的多任务之间并非并行进行的,而是串行进行。也可以在这个.c文件中直接封装一些简单静态函数,直接在调度器中调用。
User_task:
这里前面也介绍过,User_task就是用户任务,也就是我们需要飞控执行什么样的一连串指令动作,通过程序预设来实现功能,调用各种函数来实现飞行控制。这里值得一提的是,每一步的执行控制,都采用了状态机思想来实现,至于状态机编程相关的内容,我将在后续展开说说。
ANO_DT_LX:
这个.c文件主要是一些系统的封装函数,有关于上位机和飞控收发相关的函数,没有和上位机通信测试相关的需求的话,这个文件大概率是用不到的。
不过值得一提的是,这个函数里有一段控制飞控灯光的函数调用:
图中被我注释掉的内容就是灯光RGB控制内容,大家使用过凌霄飞控就知道,凌霄的灯光是大功率RGB,非常晃眼睛,而且变化还非常快,使用起来非常难受,所以建议大家注释掉这一段灯光数据内容。而且注释掉之后可以通过自己的函数来控制灯光的颜色变化,无论是作为调试还是赛题指示灯都是非常好用的!
ANO_LX:
这个.c文件里面的内容为飞控基础功能程序,不建议用户改动和调用。包括遥控器数据的接收,电池电压的测量,光流外设、灯光、电调控制等。(这个.c也不用大家去学习研究,基本用不上)
LX_FC_FUN:
这个.c文件就相当重要了!正如其名Function,也就是基本飞行控制函数的封装处了!这里封装了几个基本函数,包括解锁、上锁、一键起飞、一键下降、朝某一方向飞行的函数。这里其实对函数封装的还是偏简陋了,比如说没有控制飞行器自旋转向,或者上升下降固定高度的函数封装。不过通过匿名通信协议还是可以自己动手封装相关函数的。
Drv_BSP:
这个文件主要就是All_Init函数的参数设置,比如对应的串口波特率,对某一外设的初始化等等内容。这里我们可以直接修改对应串口的波特率,或者加入GPIO的初始化(自定义函数)等等,或者注释没有使用的函数内容,比如GPS等。
Drv_Led:
这里是一个灯光的驱动函数,注意这里的灯光调用规则,是通过改变结构体 led.brightness[i] 来控制灯光颜色的,这里的 ledOff() 是笔者自己添加的灭灯函数,凌霄的LED是四个caiseLED的融合,来显示不同颜色的光,所以通过改变 led.brightness[i] 的值,就可以实现不同的灯光显示。
比如这里笔者就把红绿蓝三色用宏定义来处理好,需要调用对应颜色的时候,先进行一次 ledOff() 清除原先的颜色(颜色会被叠加),然后调用宏定义,就可以显示对应的颜色。
Drv_Uart:
这个文件也是至关重要的,有关于F4系列五个主要串口的调用情况。
如果没更改过文件内容的话,那么应该Uart1被分配给GPS,而U4、U5则是被固定分配给光流和IMU,这两个是不可以更改的,至少与IMU之间的通信不可以缺失,光流可以用其他的传感器来替换。这里可以看到,文件使用了串口函数宏定义的方式,来快速定义串口解析函数。相关的串口中断函数也在这个文件中了,使用起来相当方便。
以上就是我们编写程序要用到的几大基本文件了,分别对应着不同的外设控制、串口分配、灯光、遥控等基本信息传递,以及基本的程序控制内容。
接下来的进阶版教程和相关函数的运用和理解,会在之后继续更新哦~