作者:Stephen Evanczuk
#关键词: 四轴飞行器,无人机,DIY,智能传感器,开发套件
四旋翼无人机,即四轴飞行器,在各种应用中发挥的作用日趋重要,但这方面的设计仍然相当复杂,需综合机械、电子和软件子系统方面的知识。虽然设计人员有能力学习掌握所需的知识,但无人机开发套件可以为他们提供一个良好的开端,集合了无人机飞行理论和实践经验累积所需的所有元素。
本文介绍了STMicroelectronics开发套件,该套件可为开发人员提供易于组装的小型四轴飞行器无人机,同时也充分展示了所有多旋翼飞行器必备的复杂飞行控制系统。
四轴飞行器动力学
就最常见的形式而言,四轴飞行器为航空摄影、现场检测、监控等众多应用提供了相当稳定的平台。与固定翼飞机,甚至可变螺距直升机不同,由于小型高效直流电机的广泛应用,固定螺距多旋翼无人机的设计相对简单,且易于构建。
这些无人机的机械简单性和空气动力学稳定性,主要源自各旋翼间的协调配合以控制各种动作,而不像飞机利用飞行表面控制,或如直升机利用主旋翼和尾桨的配合。
在四轴飞行器中,位于机身对角线上的一对电机旋转方向相同,而与另一对电机的旋转方向相反。若四个电机的转速相同,无人机则可上升、下降或悬停。如果某对对角电机比另一对电机转速快,则无人机发生偏航,保持在同一水平面绕重心旋转(图1,左)。

图1:无人机通过不同的转速组合操控动作,例如偏航动作(左)时两个对角电机 (M2, M4) 同时加速;或一个对角电机 (M2) 加速,同时另一对角电机 (M4) 减速,从而完成更复杂的俯仰、滚转动作(右)。(图片来源:STMicroelectronics)
如果前(或后)旋翼电机转速发生变化,无人机就会像固定翼飞机上升或下降飞行一样,机头上升或下降。若左或右旋翼作出类似调节,将导致无人机滚转,即绕中心线旋转。通过调节对角电机或单个电机的相对速度,无人机可轻松实现更复杂的飞行姿态(俯仰、偏航和滚转的组合)(图1,右)。
无人机的飞行控制系统负责调节适当的电机转速,实现所需的飞行姿态,从而完成所需操作。
例如在实践中,不仅在转弯时,即使在水平飞行期间,控制系统也需要不断调节电机转速,以校正诸如风、热流或湍流的扰动力。即使在室内操纵小型无人机,飞行控制系统也需要测量无人机的实际姿态和所需姿态之间的差值。
对于工程师而言,利用误差信号校正电机转速是常见的控制回路反馈问题,可以通过比例-积分-微分 (PID) 控制器来解决。而所剩的唯一概念挑战则是确定测量无人机姿态的方法,不过使用高精度智能传感器数据来做欧拉角计算,即可轻松解决这一问题。
欧拉角可表示物体相对于某个xyz参考坐标系的XYZ坐标系方向,这两个坐标平面相交于直线N(图2)。而欧拉角的定义为:
- α:x 轴与 N 之间的夹角
- ß:z 轴与 Z 轴之间的夹角
- γ:N 与 X 轴之间的夹角

图2: 欧拉角 (α, ß, γ) 描述了旋转坐标系 (XYZ) 相对于固定参考坐标系 (xyz) 的相对方向,两个坐标平面相交于直线 N。(图片来源:Wikimedia Commons CC BY 3.0)
对于飞行控制系统,物体坐标系和参考坐标系直接对应为无人机的当前方向 (XYZ) 及所需姿态 (xyz)。而欧拉角则表示无人机所需的轴向旋转以实现所需姿态。尽管多年来用于确定当前方向的原始数据一直由机械陀螺仪提供,但高精度微机电系统 (MEMS) 加速计和陀螺仪的出现,使该方法甚至可以应用于轻小型无人机。
如今,各种形状和大小的无人机都依赖基于传感器的姿态和航向参考系统 (AHRS),该系统可为欧拉角计算提供位置信息。而欧拉角用于为PID控制器提供误差信号,PID控制器则管理电机转速以实现所需飞行操作。挑战在于在移动平台上使用软件实现该方法,该平台必须能够完成计算并以所需的速度和精度来调整电机。
STMicroelectronics的STEVAL-DRONE01小型无人机套件及相关软件提供了该方法的工作示例,可作为探索无人机飞行控制系统细节的基础。
小型无人机套件整装待“飞”
STEVAL-DRONE01套件囊括了构建小型四轴飞行器所需的所有组件。除了塑料机身外,该套件还包括四个8.5 x 20mm、3.7V、8520无铁芯直流电机,每个电机的推力约为35g,并且配备65mm螺旋桨。电机和螺旋桨配成两对,可顺时针和逆时针旋转。与3.7V锂离子聚合物 (LiPo) 电池组装后,无人机总重量(或空中总重量,AUW)小于70g,无人机操作时的最佳推力重量比约为2:1。
然而,除了机械部件外,该套件的核心组件是STMicroelectronics的STEVAL-FCU001V1飞行控制器单元 (FCU) 电路板及相关软件包,这些部件共同实现了上述飞行控制系统功能。FCU电路板是高能效的复杂多传感器系统,具有低功耗蓝牙 (BLE) 连接功能(图3)。

图3: STMicroelectronics的STEVAL-FCU001V1飞行控制器单元是完整的电池供电多传感器系统,具有BLE连接和直流机驱动功能。(图片来源:STMicroelectronics)
该电路板配备基于32位Arm® Cortex®-M4的STMicroelectronics STM32F401微控制器,具有三个不同的MEMS传感器,分别用于测量无人机定位和导航的不同特征,包括:
- STMicroelectronics的LSM6DSL iNEMO惯性测量装置 (IMU),集成了AHRS功能所需的加速计和陀螺仪
- STMicroelectronics的LIS2MDL磁力仪,为实现方向检测功能提供数据
- STMicroelectronics的LPS22HD压力传感器,用于提供垂直定位数据,分辨率为8cm
在传感器输入端,FCU的STM32F401微控制器通过共享SPI总线与各传感器连接。在电机输出端,微控制器的TIM4通用定时器提供脉冲宽度调制 (PWM) 信号,用于控制 STMicroelectronics的STL6N3LLH6 MOSFET功率晶体管的栅极,以驱动无人机的直流电机。
FCU提供两个选项用于接收用户控制命令:用户可以在智能手机上,通过蓝牙连接板载STMicroelectronics的SPBTLE-RF模块来控制无人机,该模块包括该公司推出的BlueNRG-MS收发器,提供最佳功耗的蓝牙堆栈。或者,用户可以使用基于标准无线电控制 (RC) PWM的遥控器。最后,对于电池和电源管理,该电路板包括STMicroelectronics的STC4054锂离子电池充电器IC和LD39015低压差 (LDO) 稳压器。
如图3所示,FCU还支持与外部电子速度控制器 (ESC) 的连接,例如STMicroelectronics的STEVAL-ESC001V1。ESC允许系统驱动更稳定的三相电机,使得FCU可以应用于承载能力较大的四轴飞行器设计。
为简化飞行准备和控制,该套件预先配置为通过STMicroelectronics的STDrone Android移动应用程序来使用蓝牙连接选项。该应用程序设计为虚拟遥控器,可为用户提供简单的飞行控制界面,具有控制图标和两个虚拟操纵杆(图4)。

图4:STMicroelectronics的STDrone Android移动应用程序为用户提供虚拟遥控器,可操作由该公司的STEVAL-DRONE01开发套件构建的小型无人机。(图片来源:STMicroelectronics)
组装后,无人机操作员可以在移动设备上使用STDrone应用程序启动和控制无人机。起飞前,操作员需将无人机放置在平坦表面上,触摸应用程序的“校准”图标直至图标变为绿色,则表示校准已完成。为了安全起见,无人机电机最初会通过软件禁用,要求用户在应用程序中点击另一个图标来“装载”无人机。此时,应用程序用户界面的功能则类似于遥控器,允许用户移动虚拟操纵杆,以调整无人机的电机转速和飞行姿态。
尽管超轻型STMicroelectronics无人机的质量和功率不足以进行广泛的户外应用,但是操作员如需在户外操作小型无人机,则需要了解无人机在预定操作区域的飞行限制。操作小型无人机可能不需要操作许可证,或为这类小型无人机注册。不过,操作员仍需要遵守相关要求。
具体飞行要求包括:保持视距,最大高度不得超过400 ft;避开禁飞区,例如美国规定为机场5ml范围内,英国规定为1km范围内;避免在体育赛事或紧急行动场地附近进行操作等。无人机操作员可以使用移动应用程序,例如美国联邦航空管理局的B4UFLY应用程序,或英国国家空中交通管理局 (NATS) 的Drone Assist(无人机助手)应用程序,这些应用程序都可根据用户的GPS定位提供当地空域限制的相关信息。
飞行控制软件
对于工程师而言,STMicroelectronics无人机套件的FCU具有一大亮眼功能,即相关软件包,STMicroelectronics将其保存在开源的github 存储库中。该应用程序基于STMicroelectronics的STM32Cube框架,建立在蓝牙堆栈中间件和底层驱动层之上。驱动层使用STM32Cube硬件抽象层 (HAL) 和STEVAL-FCU001V1板级支持包 (BSP) 处理硬件交互的细节。驱动层包括所有上述FCU电路板设备的驱动程序。
该应用程序的软件架构围绕三个独立模块构建,这些模块分别用于遥控、位置确定和PID控制(图5):
- 遥控模块处理来自STDrone移动应用程序或RC遥控器的输入,从应用程序采集数据值或转换遥控器PWM数据,然后将数据值转换为所需飞行姿态的欧拉角。
- 位置确定模块从LSM6DSL IMU采集加速计和陀螺仪数据,用于欧拉角计算所需的AHRS位置测定值,从而确定无人机的当前飞行姿态。虽然来自LIS2MDL磁力仪和LPS22HD压力传感器的数据也会得到采集,但截止本文撰写时,这些数据不适用于现有软件版本中的无人机飞行控制计算。
- PID控制模块使用所需姿态欧拉角与当前姿态欧拉角之间的差值来完成位置误差计算。该模块采用传统PID控制方法,使用误差信号调节各电机转速,使无人机实现所需姿态。

图5:STMicroelectronics小型无人机飞行控制软件功能围绕独立的模块构建,分别用于处理遥控输入(蓝色框,标记(1))、位置确定(红色框,(2))和PID控制(深蓝色框,(3))。随后PID控制驱动四轴飞行器的四个电机。(图片来源:STMicroelectronics)
使用这种功能架构,无人机应用程序将这些模块整合到所需工作流中,从而将用户操作命令转换为执行这些操作所需的电机转速调整(图6)。尽管整体功能比较复杂,但更新飞行控制参数的主循环相对简单。

图6: STMicroelectronics小型无人机飞行控制软件实现一个连续读取传感器数据的工作流,更新无人机的当前飞行姿态,调整无人机四个电机的转速,从而达到飞行所需的推力,实现俯仰、滚转和偏航的动作组合。(图片来源:STMicroelectronics)
调用初始化硬件和软件系统等一系列例程后,应用程序主例程main.c进入无限循环(清单1)。在主循环中,更新过程调用一系列例程来执行上述飞行控制核心算法。
while (1)
{
…if (tim9_event_flag == 1)
{ // Timer9 event: frequency 800Hz
tim9_event_flag = 0;
…// AHRS update, quaternion & true gyro data are stored in ahrs
ahrs_fusion_ag(&acc_ahrs, &gyro_ahrs, &ahrs);
// Calculate euler angle drone
QuaternionToEuler(&ahrs.q, &euler_ahrs);
#ifdef REMOCON_BLE
gRUD = (joydata[2]-128)*(-13);
gTHR = joydata[3]*13;
gAIL = (joydata[4]-128)*(-13);
gELE = (joydata[5]-128)*13;
/* joydata[6]: seek bar data*/
/* joydata[7]: additional button data
first bit: Takeoff (0 = Land, 1 = Takeoff)
second bit: Calibration When it changes status is active
third bit: Arming (0 = Disarmed, 1 = Armed) */
gJoystick_status = joydata[7];
if ((gJoystick_status&0x04)==0x04){
rc_enable_motor = 1;
fly_ready = 1;
BSP_LED_On(LED2);
}
else {
rc_enable_motor = 0;
fly_ready = 0;
}
if (connected){
rc_connection_flag = 1; /* BLE Remocon connected flag for enabling motor output */
SendMotionData();
SendBattEnvData();
SendArmingData();
}
else{
rc_connection_flag = 0;
gTHR=0;
rc_enable_motor = 0;
fly_ready = 0;
BSP_LED_Off(LED1);
BSP_LED_Off(LED2);
}
if (joydata[7]&0x02){
rc_cal_flag = 1;
BSP_LED_On(LED1);
}
#endif
#ifdef REMOCON_PWM
…#endif
// Get target euler angle from remote control
GetTargetEulerAngle(&euler_rc, &euler_ahrs);
…FlightControlPID_OuterLoop(&euler_rc_fil, &euler_ahrs, &ahrs, &pid);
…}
…}
在此循环中,微控制器的TIM9通用定时器用作事件标志以控制更新速率。发生更新计时器的事件时,主循环调用AHRS更新例程 ahrs_fusion_ag(),该例程使用来自加速计 (acc_ahrs) 和陀螺仪 (gyro_ahrs) 的最新数据,执行更新涉及的传感器融合计算。然后,QuaternionToEuler() 例程使用该结果数据(四元数形式)来计算无人机当前飞行姿态的欧拉角。
此时,如果已启用蓝牙 (#ifdef REMOCON_BLE),应用程序主循环将使用蓝牙采集所需飞行姿态的相关数据;如果已启用外部RC遥控器,则应用程序将使用遥控器采集相关数据。而代码更新对应传统RC遥控器数据的四个变量:gRUD(方向舵位置,即偏航)、gAIL(副翼位置,即滚转)、gELE(升降舵位置,即俯仰)和gTHR(节流阀位置)。采集了这些数据后,主循环使用例程 GetTargetEulerAngle() 来计算所需飞行姿态的欧拉角,以执行无人机操作员的命令。不过在执行计算之前,主循环这部分的功能对无人机操作员而言至关重要。若出于任何原因导致蓝牙连接失败,代码将停止电机。显然,这将致使无人机即刻不受控制地下降。然而有个简单却意义重大的软件扩展,可能会使用LIS2MDL磁力仪和LPS22HD压力传感器数据,在停止电机前,使无人机飞回起始点,并控制下降速度以平稳降落。
最后,主循环调用例程FlightControlPID_OuterLoop(),更新PID控制器的目标值。此外,FlightControlPID_innerLoop() 则属于回调操作的一部分,旨在中断TIM9定时器事件。TIM9定时器事件频率设定为800Hz。每次中断时,回调例程读取传感器,筛选原始数据,更新与变量acc_ahrs和gyro_ahrs相关的先进先出 (FIFO) 缓冲器。这两个变量在上述主循环中均已提及。回调例程使用无人机当前飞行姿态的更新数据,调用FlightControlPID_innerLoop(),重新计算各电机的PWM值。最后,回调例程调用set_motor_pwm(),为微控制器的PWM输出赋值,并结束更新过程。
开发人员可以使用各种工具链修改开源软件包,轻松探索其他飞行控制方案。这些工具链包括适用于ARM的IAR Embedded Workbench、适用于STM32的KEIL RealView微控制器开发套件,以及STMicroelectronics推出基于Windows的免费版System Workbench for STM32集成开发环境 (IDE)。在对修改过的代码进行编译后,开发人员可以使用STMicroelectronics的ST-LINK/V2在线调试器和编程器,或连接STMicroelectronics的STM32 Nucleo开发板与套件随附的JTAG串行线调试 (SWD) 适配器板,将固件加载到FCU中。
总结
在航空摄影、现场检测、监控等众多应用中,多旋翼无人机因机械设计颇为简单而深受青睐。这些无人机使用智能传感器为控制算法提供数据,采用复杂的飞行控制软件,支持稳定操作,并能快速响应无人机操作员的操作命令。
虽然开发人员可以自行寻找并组装所需的机械、电气和软件组件,但STMicroelectronics推出的全面小型无人机开发套件,使其能够更轻松地引入小型无人机的设计和操作。通过探索甚至修改相关的开源飞行控制软件,开发人员可以快速获取多旋翼无人机飞行动力学和控制算法方面的经验。
———————————————————–
如有任何问题,欢迎联系得捷电子Digi-Key客服团队。
中国(人民币)客服
- 400-920-1199
- service.sh@digikey.com
- QQ在线实时咨询 |QQ号:4009201199
中国(美金)/ 香港客服
- 400-882-4440
- 8523104-0500
- china.support@digikey.com