当前位置: 首页 > java >正文

凌霄飞控开发日志兼新手教程——基础篇:认识基本的文件内容和相关函数作用(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. 串口1用于底部MaixCAM的调用
  2. 串口2用于RF_Nano的调用(可以删除,目前没什么大用处)
  3. 串口3用于激光雷达的调用(0x34帧)
  4. 串口4用于光流(不可随便改动)
  5. 串口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之间的通信不可以缺失,光流可以用其他的传感器来替换。这里可以看到,文件使用了串口函数宏定义的方式,来快速定义串口解析函数。相关的串口中断函数也在这个文件中了,使用起来相当方便。


以上就是我们编写程序要用到的几大基本文件了,分别对应着不同的外设控制、串口分配、灯光、遥控等基本信息传递,以及基本的程序控制内容。

接下来的进阶版教程和相关函数的运用和理解,会在之后继续更新哦~

http://www.xdnf.cn/news/18535.html

相关文章:

  • 【序列晋升】12 Spring Boot 约定优于配置
  • Spring发布订阅模式详解
  • Python 调用 sora_image模型 API 实现图片生成与垫图
  • 【论文】Zotero文献管理
  • 为什么应用会突然耗尽所有数据库连接
  • 轮廓检测技术不仅能精确计算图像中的轮廓数量,还能完整记录每个轮廓包含的所有像素点坐标
  • 【0基础3ds Max】捕捉工具详解
  • 宋红康 JVM 笔记 Day06|虚拟机栈
  • [激光原理与应用-318]:结构设计 - Solidworks - 草图
  • 损耗源:导线电阻与趋肤效应
  • 深度学习②【优化算法(重点!)、数据获取与模型训练全解析】
  • 线上日志排查问题
  • MCP 与 Function Calling 打开真实世界的两种“母体”方式
  • Spring 框架深度解析:从核心原理到实战应用
  • GitLab CI :深入剖析 gl-sbom-report.cdx.json 解码“数字身份证”
  • linux下的网络编程
  • 快速入门Vue3——初体验
  • 6020角度双环控制一种用于电机控制的策略
  • 智能合约漏洞检测技术综述:守护区块链世界的“自动售货机”
  • 在通义灵码中配置MCP服务
  • uniapp使用map打包app后自定义气泡不显示解决方法customCallout
  • JavaWeb前端05(Vue工程化,Vue组件两种风格:组合式API 和 选项式API)及简单案例)
  • 豆包 + 蘑兔,破解写歌难题!
  • 知识蒸馏 Knowledge Distillation 论文 Generalized Knowledge Distillation (GKD) 目标函数的演化
  • 【Cmake】Cmake概览
  • 使用GMail API 发送邮箱
  • OpenSCA开源社区每日安全漏洞及投毒情报资讯|21th Aug. , 2025
  • 前端github-workflows部署腾讯云轻量服务器
  • 实用R语言机器学习指南:从数据预处理到模型实战(附配套学习资源)
  • docker 查看容器 docker 筛选容器