飞行器控制器——主控MCU

作者:nieyong

什么是飞控

飞控是多旋翼飞行器的灵魂。那么什么是飞控呢?飞控就是飞行器的电子控制部分,全称为飞行控制器,英文Flight Controller,简写为FC。飞控主要包括主控处理器MCU和惯性导航模块(传感器部分)。

四轴飞行器相对于直升机等航模,最复杂的就是电子部分。可以和固定翼以及直升机比较一下。在常规固定翼航模上,陀螺仪并非常用器件。相对操控难度大点的直升级航模,如果不做自动稳定系统,也只是锁尾才用到陀螺仪。四轴飞行器则必须配备陀螺仪,这是最基本要求,不然无法飞行,更谈不上飞稳了。不但要有,还得是3个维度都得有,这是四轴飞行器的机械结构、动力组成特性决定的。在此基础上再辅以3轴加速度传感器,这6个自由度,就组成了飞行姿态稳定的基本部分,也是关键核心部分惯性导航模块,简称IMU。飞行中的姿态感测全靠这个IMU了,可见它是整架模型的核心部件。

IMU感知飞行器在空中的姿态,将数据送给主控处理器MCU。主控处理器MCU将根据用户操作的指令,以及IMU数据,通过飞行算法控制飞行器的稳定运行。由于有大量的数据需要计算,而且需要实时性极高的控制,所以MCU的性能也决定了飞行器是否能够飞得足够稳定,灵活。

本篇文章只讲飞控的MCU部分,另外一篇文章讲解IMU部分内容。

主控MCU STM32

Crazepony的主控MCU选用的是意法半导体的STM32F103T8U6,为32位ARM Cortex-M内核,最高72MHz。关于为什么会选用这片MCU,在CamelGo的博客我和Crazepony的那点事儿(2)中有这么一段描述。

曾经在犹豫用TI的430系列单片机还是意法半导的STM32。那是在我大二的时候,从来没有接触过STM32,以前都是用51单片机和TI的msp430系列单片机。好吧,我承认了,我做Crazepony其实是就是为了学习STM32的,没有买过STM32相关的开发板,就这么简单粗暴大刀阔斧的开始了我的STM32之旅…

最终选择用STM32当然还有其他原因,TI公司的MSP430系列都是基于低功耗在做文章,作为移动消费电子,对电源续航能力要求比较高的场合比较适用。

……

之所以选择STM32F103T8U6作为Crazepony的主控芯片。首先因为他是crotex-M3内核,继承了ARM的优良性能,主频能跑到72MHz,3个通用定时器,1个高级定时器,7通道DMA控制器,而且总线接口资源丰富;其次是因为它VFQFPN36的封装,只有6mm*6mm的占地面积,对这个寸土寸金的项目来说简直太赞了。这么高的性价比,当然让我选择了他作为主控。72MHz虽然生不了孩纸,但是足以处理除了图像之外的大部分任务了。

主控选型需要考虑的问题

CamelGo上面说的选用了STM32F103作为主控MCU比较随意,其实真正在选型时候,有很多问题是需要我们考虑的,下面列举出几个最常见的问题。

  • 首先是MCU的性能,最重要的指标就是主频。这直接决定MCU计算的快慢。四轴飞行器有很多来自IMU的数据需要处理,而且还有复杂的控制算法,如果MCU的性能不够,那么将直接限制飞控只能够处于一个比较初级的阶段,无法完成更加复杂的功能和精准的控制;
  • MCU的接口也很重要。MCU是整个四轴飞行器的大脑,几乎所有的数据都要连接到它上面。例如I2C总线个数,DMA通道数目,GPIO数据等等;
  • 正如博客中提到的,MCU的尺寸大小也是值得考虑的因素;
  • 另外就是这个MCU的开发是否简单,技术资源的支持是否足够多。这对于一个DIY的开源四周飞行器也很重要;

综合了这些因素,我们选择了STM32这片MCU作为我们的主控MCU。我们也高兴的看到,很多国内国外的四轴爱好者也选择了这一片MCU。Crazepony不再孤独!

STM32F系列的MCU基本上是现在主流飞控的首选。其选择也从原来的STM32F103到了性能更高的STM32F303。部分飞控甚至选用高性能型号STM32F403,例如PX4飞控。

  • STM32F103:CC3D飞控/Naze32飞控/Crazepony四轴
  • STM32F303:F3飞控
  • STM32F403:CC3D Rev版本/APM飞控/PX4飞控

下图是从ST官网截取的STM32系列处理器的定位图。横轴为所使用的ARM内核,纵轴为性能定位。红色圈出的处理器,为现在飞控所使用。

关于ARM Cortex-M

由于STM32使用的是ARM Cortex-M架构,所以这里有必要做一点ARM Cortex的普及。

ARM公司在经典处理器ARM11架构之后,为了给不同需求的CPU厂商提供服务,之后的内核架构命名都改为Cortex,并分成了A,R,M三类,也即将ARM的三个字母拆分为三个架构的名,代表着不同的发展方向:

  • A系列处理器可托管丰富的OS平台和应用商提供全方位的解决方案,诸如手机、数字电视、机顶盒、打印机、服务器等。
  • R系列为实时处理器,要求可靠性、可用性、可维护性和实时响应的嵌入式系统提供解决方案。
  • M系列是一系列可向上兼容的高效能、易于使用的处理器,这些处理器旨在帮助开发者满足将来嵌入式的需要,这些需要包括低成本、不断增加的连接、代码改善移植等。M系列主要应用在智能测量、人机接口设备、汽车电子、工业控制、大型家电等。

我们的STM32F103使用的Cortex-M3内核,就属于ARM的M系列,主要针对嵌入式产品需求而设计的。下面是一张Cortex-M3的内核架构图。