前言:本篇博客为飞控专栏的第一篇系统性概述文章,将对飞控系统进行详细讲解介绍。考虑到飞控项目具有一定工程复杂度,所以作者将整个项目进行分章节教学与讲解,希望可以给读者朋友带来更好地学习体验。项目将以 C-Quad 四轴无人机为工程样机,飞行器主控为 STM32F103C8T6,遥控为 STM32F103C6T6。项目代码为 HAL 库版本,该项目博客将把算法与硬件相结合,深入挖掘飞控的奥妙与原理。(代码开源!)
硬件实物图:
效果图:
飞控即无人机飞行控制器,可理解为飞行器的大脑,其核心是微控制器MCU。微控制器基于外部传感器(如姿态传感器,气压传感器,GPS,光流等)返回的数据,经过一系列处理与融合后,控制无人机的飞行姿态。飞控的种类有很多,常见的有:四旋翼、六旋翼和八旋翼无人机等(本项目专栏为四旋翼无人机项目)。
四旋翼无人机又叫做四轴飞行器,是一种小型的智能化产品。随着自动控制技术的更新换代以及人工智能广泛应用,使得无人机更加贴近人们的生活。其中,四旋翼无人机由于其价格低廉,结构稳定,性能优越,易于控制的特点而被广泛使用。
飞行器在飞行过程中有个重要的指标:飞行姿态。飞行姿态则涉及到如下欧拉角:pitch(俯仰角)、yaw(偏航角)、roll(横滚角)。
特别说明:飞机的坐标轴体系和AR眼镜是不一样的,指向机头的是X轴,指向右机翼的是Y轴,垂直向上的是Z轴(建议大家别人云亦云,多去参考正规性学术论文)。
pitch():俯仰,将物体绕Y轴旋转(localRotationY)
yaw():航向,将物体绕Z轴旋转(localRotationZ)
roll():横滚,将物体绕X轴旋转(localRotationX)
飞行器通常都是需要设计配套遥控器的。当然,可以使用手机APP适配之后操作,也可以制作一个遥控手柄。本项目中四旋翼飞行器与遥控手柄通过 NRF24L01 2.4G 模块进行通讯。
油门:飞控的设计制作过程中,都会设计到一个关键词汇 “油门(throttle)” ,油门方向的遥感不具备自动回调的特性,通过油门方向的遥感控制飞行器的飞行高度。
解锁:高速旋转的机翼通常都具有一定的杀伤能力,为了防止简单误触造成飞行器意外起飞等情况。飞控的设计中存在锁门的这个概念,即:需要解锁操作,之后才能正常控制飞控。不同的遥控手柄的解锁方式往往不同,比较常见的解锁有: “外八字” 解锁和 “下上下” 油门解锁等。
上锁:飞行器飞行过程中难免可能出现意外情况,这个时候可以使用上锁操作强制锁定机翼转动。上锁方式同样根据实际情况设计。
四旋翼无人机主要分 “×” 型和 “+” 型两种,两种无人机的主要区别在于机头方向的选择。四旋翼无人机的简化结构如下图所示,无刷电机转动带动四个桨叶高速旋转产生向上的升力作用于无人机,当推动遥控器的油门使升力逐渐超过无人机自身重力时,四旋翼无人机便能够起飞升空,控制器发出的指令不断改变无人机的电机转速,就可以使无人机切换到不同的运动模式。考虑到“×” 型四旋翼无人机机动性更好,故本项目将采用 “×” 型四旋翼无人机设计。
本项目以 “×” 型飞行器为设计标准,故后续以 “×” 型飞行器的运动控制学进行分析,该类型飞行器结构图如下:
为了方便描述,将四旋翼无人机的四个电机分别编号为:Motor1、Motor3、Motor2、Motor4。Motor1和 Motor3电机逆时针进行旋转,从而可以产生逆时针方向的扭矩,Motor2和 Motor4电机顺时针进行旋转,从而可以产生顺时针方向的扭矩。如此,四个旋翼旋转所产生的扭矩便可相互抵消。当四个旋翼具有相同的转速,产生的上升合力正好与自身重力相等,则飞行器将进入悬停状态!
如上图所示,在保证四旋翼无人机每个旋翼转速大小相同(产生的总扭矩为零),对每个旋翼增加/减小大小相同的转速,便可实现无人机的垂直上升/下降运动。
旋翼总升力>无人机重力,垂直上升;
旋翼总升力<无人机重力,垂直下降。
将电机Motor1、Motor4的转速减小或者将Motor2、Motor3增加时,四旋翼会产生向前上方的力,使四旋翼向前飞行。反之,如果将Motor1、Motor4的转速增加或者将Motor2、Motor3减小时,四旋翼会产生向后上方的力,使四旋翼向后飞行。
将电机Motor1、Motor2的转速增加或者将Motor3、Motor4的转速减小时,四旋翼会产生向右上方的合力,使四旋翼向右飞行。反之,如果减小Motor1、Motor2的转速或者增加Motor3、Motor4的转速,四旋翼会产生向左上方的合力,使四旋翼向左飞行。
将电机Motor2、Motor4的转速增加或者将Motor1、Motor3的转速减小,四旋翼会向右旋转,实现向右偏航。反之,如果将Motor2、Motor4的转速减小或者将Motor1、Motor3的转速增加,四旋翼会向左旋转,实现向左偏航。
一般情况下,四旋翼无人机由检测模块、控制模块、驱动模块以及电源模块四个部分组成。
检测模块:负责对无人机当前姿态进行量测,并对控制模块提供数据;
控制模块:负责对无人机当前姿态进行解算,优化控制,并对驱动模块产生相对应的控制量;
驱动模块:负责驱动4台电机进行旋转,从而使得无人机进行正常飞行;
电源模块:负责对整个系统进行供电,其中,分为控制供电与动力供电。
飞控的控制模块即飞行器的微控制器MCU,现如今飞控多采用 STM32F4 系列的芯片,算力和成本都非常适宜。当然,本项目作者使用的 MCU 为 STM32F103C8T6 ,成本相对来说更低。当然,制作的飞控整体控制起来难度更大一点。MCU负责计算控制以及维持各个模块之间的通讯联动。
检测模块则通常包括:惯性检测单元(MPU6050,磁力计等),气压计(MS5611等),电子罗盘(GPS等)。通过各类检测模块的运作,可以在一定程度上得到飞行器的位姿(位置和飞行姿态)。
惯性检测单元:惯性检测单元通常由姿态传感器 + 磁力计构成。航模新手的话仅使用六轴姿态传感器 MPU6050 作为惯性检测单元即可近似完成飞行器的姿态解算,得到飞行器的欧拉角度。本项目中的惯性检测单元仅使用 MPU6050。
问题:惯性检测单元为什么还需要磁力计的帮助?
欧拉3角:pitch(俯仰角)、yaw(偏航角)、roll(横滚角),其中的偏航角yaw,因为姿态解算算法的原因长期使用后会导致误差积累,故此需要使用磁力计的帮助进行校正。
气压计:气压计在飞行器中通常用来检测飞行器的飞行高度,帮助飞行器实现定高功能。常见的气压计为 MS5611 模块,MS5611 气压传感器是集合 SPI 和 I²C (高达20 MHz)总线接口的高分辨率气压传感器,分辨率可达到 10 cm。内部有一个高线性度的压力传感器和一个超低功耗的 24 位AD。
本项目制作的为四旋翼飞行器,故需要驱动4个电机。飞行器的电机驱动需要设计专门的驱动电路或者使用电调装置。本项目使用如下驱动电路:
电路分析:
100Ω电阻:起到限流作用,在 MOS 开启瞬间时需要吃电流,如果电流过大,会导致瞬间开启,缩短 MOS 管的寿命。
10K 电阻:IC 在复位状态下,所有 IO 口都处于浮空输入状态,加 10K 下拉电阻就可以避免在单片机还没工作时,MOS 导通,电机疯狂旋转打伤人。
2302MOS:NMOS,高电平导通。通过 PWM 占空比控制 MOS 管的导通,从而控制电机的平均功率。2302 在门级开启电压 Vth=3.3V 下导通电流可达 3A,而最大的空心杯电机(8520)最大消耗电流>1A,如果按照瞬间导通的电流 2.5 倍计算,MOS 承受的电流应在 2.5A 左右。故 2302 符合使用条件。
电容:吸收电机产生的高频杂讯
飞行器的电源模块通常使用航模专用锂电池。由于四轴在飞行过程中,电量不断下降,当下降到一定程度后,可能会出现瞬间低于 3.3V,这样稳压就会无法正常工作,导致输出截断,所以配备升压。
升压:BL8530 升压 IC 需要 47uH 电感作为储能,内部集成类似 BOOST 升压电路,大家学过电路原理的都会学到 BOOST 升压电路。而这个肖特基二极管,在这里起到续流作用。
稳压:662K 3.3V 稳压 IC,稳压(LDO)这个很好理解。
航模的锂电池通常具有高电流的特性,保证有足够电流量去驱动电机转动。
本篇作为飞控专栏的第一篇文章,其主要目的为帮助读者朋友们了解飞控的基础原理和设计框架。后续作者将手把手教大家完成四旋翼飞行器的制作,项目的硬件原理图和程序代码将全部开源给大家。当然,飞控算是较为复杂的嵌入式设计,建议读者朋友除了参考本人的博客,还可以多借鉴“匿名者”等优秀的飞控设计。