ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

STM32飞控从零到悬停:传感器接线、姿态解算与PID调参全攻略

STM32飞控从零到悬停:传感器接线、姿态解算与PID调参全攻略

简介:基于STM32微控制器实现的无人机飞控开发工程包,面向无人机飞控入门开发者、嵌入式爱好者及需要参考飞控代码结构的工程师,可帮助理解如何在STM32上组织一套可编译、可烧录的飞控工程基线。资源以STM32标准外设库工程形式组织,涵盖系统时钟、GPIO、USART、SPI、I2C、TIM等外设驱动,以及control控制逻辑源码,对应从传感器数据读取、姿态解算到电机控制的全链路设计思路。文件总数212个,压缩包大小仅4.53MB,以c源码、h头文件为主,附带Keil MDK工程文件、hex固件及map、axf链接映射文件,也包含o、d中间编译产物,便于直接打开工程查看源码与构建过程;少量txt、htm、lst等辅助文件可供阅读参考。已有2427人学习下载。通过研究这套工程,可以了解STM32飞控的底层外设配置、中断服务编写及控制算法在嵌入式平台上的落地方案,适合从初始化流程到通信接口、控制循环整体对照学习,是学习无人机飞控底层实现的重要参考。

1. 用stm32做飞控:别被“机架、电调和遥控”劝退,这条主线其实很清楚

无人机飞控在很多工程师眼里是个黑匣子:拿来就能飞,一改参数就炸,程序刷进去全是报错。但实际上,用STM32自己做一版飞控,核心链路非常短——传感器把姿态读出来、STM32跑姿态解算、串级PID输出PWM、电调驱动电机转动,四步闭环。我和一位零基础的朋友一起调过机,他从焊板子到飞机能在半米范围悬停,用了两个多月的业余时间,中间摔过三次,两次都是传感器装反导致的。这篇不聊成品飞控怎么用,只讲自己拿STM32从零搭飞控这件事:芯片怎么选、传感器怎么接、姿态怎么解算、PID怎么调、坑怎么避。

2. 自己做STM32飞控的硬件主线:芯片选型、传感器组合与供电设计

2.1 芯片选型:从F103到F405,差的不只是主频

先给结论:想低成本先把飞控原理跑通,STM32F103C8T6足够;想做一个日后能扩展GPS、光流、视觉避障的正儿八经飞控,F405或F411是更合适的投入点。我自己第一版就是用F103,做完一整版之后才理解,真正的瓶颈从来不是芯片主频,而是传感器噪声和算法结构有没有处理好。

芯片型号主频硬件浮点定时器资源适合阶段
F103C8T672MHz无4组定时器入门原型,验证算法
F405RG168MHz有定时器通道丰富正经飞控主控
F411CE100MHz有引脚少但算力快紧凑型飞控

为什么我不推荐直接上F405入门:它的引脚多、外设丰富,接线和调试面一下子大很多,新手一上来面对十几个GPIO的配置,很容易被外设初始化淹没。F103的引脚少,I2C、SPI、UART、PWM各留几根,功能边界一目了然。等你在F103上把算法逻辑消化完,再迁移到F405时,HAL库的代码基本不用大改,主要调的是时钟树和外设基地址,这个迁移成本比很多人想象的低。

再往深一层说FPU的差异。F103没有硬件浮点单元,所有float运算默认走软件模拟,一条简单的乘除法要编译成几十条指令。飞控在500Hz控制频率下,姿态解算加串级PID每秒要跑几千次浮点运算,F103算下来CPU占用率在六到七成。这还没算遥控信号解析、日志打印这些杂活。F405有硬件浮点,同样代码CPU占用能降到两成出头,剩余算力可以做更密的日志记录、传感器滤波,甚至预留在线调参接口。

还有个容易被忽略的选型点:定时器通道数量。四轴最少需要4路PWM输出给四个电调,如果你是X型四轴,还需要单独的电机输出顺序映射。做六轴或八轴时PWM路数直接翻倍,选型前一定要数清楚目标机型的电机路数,提前算好哪几个定时器的通道能凑够。F103的四组定时器在四轴上绰绰有余,但到了八轴就会比较紧张。

实操上的经验是:第一版直接买最小系统板加MPU6050模块飞线测试,不要急着画PCB。先把算法跑通,确认姿态解算输出的角度和实物倾斜方向一致,再花时间去画板。我见过太多人在接线阶段就刷了十几版程序,最后发现大部分时间浪费在传感器模块供电不稳上。

2.2 传感器组合与数据通路:姿态是先读出来,才算出来的

新手最容易忽略的一句话:姿态角不是单片机凭空算出来的,它来自传感器的物理测量。你在屏幕上看到的角度数值,先由陀螺仪感受到角速度、加速度计感受到重力分量、磁力计感受到地磁场,然后经过算法融合才出现。传感器数据质量差,后面算法调得再好都是白搭。

一套标准的入门飞控传感器组合是这样的:

MPU6050(陀螺仪 + 加速度计) -> I2C1 -> STM32 姿态解算 QMC5883L 磁力计 -> I2C2 -> STM32 航向修正 BMP280 气压计 -> SPI1 -> STM32 定高 遥控接收机 -> UART1 -> STM32 控制指令 电调信号 <- TIM1 CH1~CH4 -> 无刷电机

MPU6050是必选,它一次同时输出三轴角速度和三轴加速度,不用再拼接两个独立芯片的数据。磁力计在室内小范围悬停可以先不接,但到了室外航向会越飘越远,磁力计是航向修正的关键。气压计做定高很有用,不过室内有空调和风道干扰,读数会上下乱跳,效果反而不好。

这个链路里我想重点提醒时序问题。MPU6050的陀螺仪和加速度计数据是同一时刻采样的,但通过I2C读回时要先读0x3B开始的14个字节,其中加速度计在前、温度计中间、陀螺仪在后。很多人遇到的第一个数据异常,就是因为读取顺序打乱了寄存器队列,读出来的三个轴数据全部错位。

另一个必踩的点是传感器坐标系方向。MPU6050的X/Y/Z轴定义和飞控板上的安装方向往往不一致,你把传感器转了90度焊上去,软件里就得把对应坐标轴交换并取反,否则推遥控器向前,飞机实际会向左翻。这个方向问题在调试台上就能发现,不需要上真机:把机架往前倾,看串口输出的pitch角度正负对不对。坐标轴映射可以这样处理:

// 假设传感器安装方向与机头方向相差90度 #define MAP_X -1 // X轴取反 #define MAP_Y 1 // Y轴不变 #define MAP_Z -1 // Z轴取反 // 读原始数据后做方向校正 gyro_axis_x = MAP_X * gyro_raw[0]; gyro_axis_y = MAP_Y * gyro_raw[1]; gyro_axis_z = MAP_Z * gyro_raw[2];

2.3 最小硬件系统:从接线到供电的一版可抄作业方案

我第一版做飞控硬件时完全没画PCB,就用最小系统板加传感器模块电调电池做了飞线测试。这版方案谈不上漂亮,但好处是每个环节坏了能单独换,排查问题不会把主板搞成一次性消耗品。

最小系统的接线逻辑:

MPU6050 VCC <- 3.3V MPU6050 GND <- GND MPU6050 SCL <- I2C1_SCL (F103 PB6) MPU6050 SDA <- I2C1_SDA (F103 PB7) MPU6050 AD0 <- GND // 地址为0x68 电调信号线 <- TIM1_CH1~CH4 电调电源线 <- 电池正负极(BEC 5V输出接飞控) 接收机信号 <- UART1_RX 电池电压 <- 分压电阻后接ADC通道

供电设计是这套硬件里最容易出问题的地方。无刷电调工作时会从电池端抽取大电流,这一瞬间的电压跌落会让STM32的3.3V稳压器输出跟着抖。解决办法是动力线单独走、信号地单点连接,或者用磁珠把飞控的电源入口跟动力电源隔开。磁珠对高频噪声有抑制作用,是飞控板上常见的滤波器件。

还有一个经验:传感器模块的供电不能直接从STM32的3.3V输出引脚拉,因为这个引脚的驱动能力很弱,MPU6050上电瞬间的浪涌电流会让3.3V跌到2V左右,单片机直接复位。正确做法是从5V电源经LDO产生3.3V给传感器供电,STM32自己的3.3V也来自同一个LDO,大家共用稳定的参考地。

我画第二版PCB时发现一个更隐蔽的问题:I2C总线上拉电阻放多了。MPU6050模块通常自带2.2k上拉电阻,如果I2C总线上同时挂了多个传感器模块,每个模块都加上拉,并联后的等效阻值会被压到几百欧,I2C信号上升沿过冲,偶尔通信失败、数据偶发跳变。排查方法是用示波器看SCL上升沿,出现明显过冲就摘掉部分模块的上拉电阻,保留一组4.7k左右的总线上拉就够。

接线时还要注意电调BEC的供电方向。很多电调自带5V BEC给飞控供电,但有些接收机也需要供电,这时候不要把两个BEC的输出并联,它们会互相打架。正确做法是让主电调的BEC给飞控供电,其余电调的信号线只接信号和地,不接红色5V线。强行并联的话,轻则飞控供电电压异常,重则烧BEC芯片。这个看似不大的问题,我并过三路5V就翻车了,换了一块电调才算救回来。

3. 把姿态解算与控制环跑在STM32上:从互补滤波到串级PID

3.1 姿态解算:第一次做飞控,互补滤波就是最优解

很多人上来就问用卡尔曼还是互补滤波。自己做飞控起步阶段,我建议直接互补滤波。卡尔曼滤波没有很多人想的那么神奇,它需要准确的系统模型和噪声参数,你连飞机的转动惯量都说不清楚,强行套卡尔曼只会得到一堆看起来平滑但实际不跟手的角度。互补滤波在工程上足够稳,参数只有一个权重系数,调起来直观得多。

互补滤波的逻辑恰好对应两个传感器的特性:陀螺仪测角速度,短时间内积分出来的角度很准,但时间一长就漂移;加速度计静态时能直接给出重力对应的倾角,长期稳定,但飞机一震动数据就剧烈跳。互补滤波的做法是相信陀螺仪的高频响应、相信加速度计的低频长期稳定,用一阶高通和低通把它们拼起来。

代码骨架,假设已经拿到gyro_dps和acc_g的换算值:

// 在500Hz控制循环里调用 float dt = 0.002f; // 控制周期 float alpha = 0.98f; // 陀螺仪权重 // 陀螺仪积分更新角度 roll_est += gyro_dps[0] * dt; pitch_est += gyro_dps[1] * dt; // 从加速度计计算静态倾角(单位:度) float acc_roll = atan2f(acc_g[1], acc_g[2]) * 57.2958f; float acc_pitch = atan2f(-acc_g[0], acc_g[2]) * 57.2958f; // 互补融合 roll_est = alpha * (roll_est + gyro_dps[0] * dt) + (1.0f - alpha) * acc_roll; pitch_est = alpha * (pitch_est + gyro_dps[1] * dt) + (1.0f - alpha) * acc_pitch;

参数说明:alpha取0.98时,时间常数约在0.04到0.05秒,相当于把低于20Hz的陀螺仪漂移交给加速度计去纠正。alpha越大,角度越平滑,但对震动越不敏感;alpha越小,角度越跟手,噪声也越大。试飞前我会先用串口观察角度曲线,如果飞机静止时角度明显漂移,就把alpha降到0.95左右。

上面代码有个细节值得留意:atan2f计算加速度计倾角,用的是加速度计在机体坐标系下的两个轴分量。机架是X型还是+型会影响电机顺序和传感器方向的符号,但姿态解算本身不区分机型,只要传感器方向正确就能输出正确角度。机型差异体现在后面把姿态角映射到四个电机的混控分配上。

陀螺仪零偏在这个环节顺手就能处理。上电后先保持飞机静止,采集200个陀螺仪样本取平均作为零偏,解算前先减掉。不做这一步,飞控通电久了姿态角会缓慢漂移,悬停时飞机会慢慢偏向一个方向,你还会误以为是PID没调好,实际上是零偏在作怪。

3.2 串级PID为什么能站住脚:外环内环各干各的活

单级PID能不能让四轴自稳?能,但效果差很多。原因是角度环直接输出PWM时,角速度只是被隐式反馈,没有显式控制,飞机对风扰和机械振动的响应慢一拍。串级PID把控制分成两层:外环控制角度,输出期望角速度;内环控制角速度,直接输出电机转速修正量。内环控制带宽高,先稳住机体的转动趋势;外环带宽低,慢慢修正姿态偏差。

结构用公式表示就是:

angle_err = desired_angle - measured_angle // 外环:角度偏差 rate_cmd = PID_angle(angle_err, dt) // 外环:输出期望角速度 rate_err = rate_cmd - measured_rate // 内环:角速度偏差 motor_cmd = PID_rate(rate_err, dt) // 内环:输出电机修正量

在代码里这只是两句带累计和微分的函数调用,但参数调起来差别很大。我见过有人把内外环PID都开满,结果任何一个小扰动飞机就开始抖。串级PID的默认习惯是:内环只给P和少量I、不开D,先解决响应速度;外环给P就够,I给少量消除长期倾斜,D通常不给,因为内环已经提供了阻尼。

串级PID还有两个容易被忽略的细节。第一个是外环输出限幅,期望角速度不能超过飞机实际能提供的角速度范围。四寸小机架的最大翻滚角速度可能在400dps左右,限幅到200到300dps更安全。第二个是内环I的积分限幅不能太大,否则遇到持续外力时积分项会堆积,松开遥控后飞机会猛回弹,这就是常见的“悬停时突然猛抖一下”现象。我会把内环I的输出限幅放在PID总输出的20%以内。

3.3 最小可飞的控制代码骨架:从MPU6050读到四路PWM输出

把前面的内容串起来,一个最小可飞的代码如下。HAL库的初始化细节先省略,重点展示主循环里的数据流:

// 定时器中断里调用,500Hz void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM2) { static int sample_count = 0; // 1. 读取MPU6050原始数据 read_gyro_acc(gyro_raw, acc_raw); // 2. 减去零偏并换算物理单位 // 陀螺仪满量程±2000dps,原始值除以16.4 // 加速度计满量程±2g,原始值除以16384 gyro_dps[0] = (gyro_raw[0] - gyro_offset[0]) / 16.4f; gyro_dps[1] = (gyro_raw[1] - gyro_offset[1]) / 16.4f; // 3. 互补滤波更新姿态角 update_attitude(gyro_dps, acc_g, dt); // 4. 外环角度误差 -> 期望角速度 -> 内环角速度误差 float angle_err = target_angle[0] - roll_est; float rate_cmd = pid_angle_p * angle_err; float rate_err = rate_cmd - gyro_dps[0]; motor_cmd[0] = pid_rate_calc(rate_err, dt); // 内环P+I // 5. 混控分配并输出PWM(四轴X型) output_mixer(motor_cmd, pwm_channels); // 6. 串口打印调试数据(每10个周期输出一次) if (++sample_count >= 10) { sample_count = 0; printf("%.1f,%.1f,%.1f\n", roll_est, target_angle[0], motor_cmd[0]); } } }

几个关键点。

第一,换算系数必须和寄存器配置一致。MPU6050的陀螺仪满量程如果是±2000dps,原始值除以16.4得到dps;加速度计量程如果是±2g,原始值除以16384得到g。如果改过量程寄存器,系数要对应变化,否则PID的P值单位完全对不上,调参就成了玄学。

第二,混控分配。output_mixer没有展开,实际就是把PID输出的roll/pitch/yaw三个修正量与油门值叠加,得到四个电机的独立油门。X型四轴的混控公式在飞控教材里很常见,关键是电机旋转方向和电机序号的配对符号不能错,否则解锁就翻。

第三,PWM更新时机。F103的TIM1输出PWM时,更新比较寄存器的动作最好放在定时器更新事件里,避免PWM波形中间被改造成撕裂波。HAL库的HAL_TIM_PWM_Start之后直接改CCR寄存器值即可,同时更新四路时要先关预装寄存器再统一写入。

4. STM32飞控调试的常见问题与避坑记录:五个提升血压的现场

4.1 陀螺仪数据跳变、读取时好时坏

现象:串口打印陀螺仪数值,静止时偶尔跳出几百甚至上千的尖峰值;或者同一份代码换个板子就完全不工作。

原因:大概率是I2C总线问题。传感器模块自带的上拉电阻叠加后总线上拉过重、信号边沿过冲;另一个常见原因是杜邦线太长,在400kHz快速模式下信号没有足够时间稳定。我把传感器换到PCB板上、缩短走线、把I2C频率从400kHz降回100kHz之后,数据尖峰立刻消失。

解决:先把I2C频率降到100kHz验证是否信号质量问题;把模块自带的上拉电阻减到一组;外接设备时杜邦线控制在10cm以内。示波器看SCL上升沿是最直接的排查方式。

4.2 解锁后电机抖动但不转,或者电调乱叫

现象:解锁开关打开后,四个电机不是平滑启动,而是颤抖、卡顿,或者根本不转,只有电调发出规律性响铃。

原因:电调没有完成油门行程校准。很多无刷电调上电时会把当前收到的PWM脉宽记为最大或最小油门,如果飞控在电调上电前没有先主动输出一个最小油门的脉宽,电调内部记录不到正确的油门范围,自然无法正常驱动。

解决:做一次电调行程校准。把电调信号线接到接收机油门通道,或者直接让飞控输出2000us脉宽,上电听到第一声提示后,再把脉宽降到1000us,等电调确认即可。每次换新电调都要重新做这一步。

4.3 推油门就翻机,而且是固定朝着一个方向翻

现象:解锁后油门推到一定值,某个方向的电机突然加速,整机直接翻转。

原因:电机转向反了、螺旋桨正反桨装错、混控公式符号配错,这三种情况都很常见。混控符号配错尤其隐蔽,软件里看起来PID输出正常,但实际输出到电机的正负方向反了,负反馈变成正反馈,飞机当然翻。

解决:在台架上先做个电机测试模式,让每个电机单独转,确认转向和序号都正确;再用一只手压住机架,另一只手往前推俯仰,确认对应方向的电机转速有变化且方向正确。参数符号反了的表现是:往前推俯仰,前方电机转速反而升高,飞机必然翻。

4.4 程序跑飞、上电进不了主循环、调试器连不上芯片

现象:刷完程序后芯片没有任何反应,调试器偶尔能连上,偶尔报HSE晶振启动失败。

原因:最小系统缺外部晶振的起振电容,或者负载电容配错导致HSE起振不稳;另一个常见原因是VDD正常但VDDA、VSSA没有接滤波电容,模拟模块运行不稳。这两个问题在自制板上比开发板更容易出现。

解决:8MHz外部晶振的负载电容一般用10到22pF,两个电容尽量靠近晶振引脚;软件配置时钟时可以先切到内部HSI,验证是不是HSE起振问题。自制板还要检查VDDA、VREF+这些模拟电源引脚的退耦电容有没有放。

4.5 角度静态正常,一通电就缓慢漂移,悬停不住

现象:飞控静止时角度输出正常,通电一分钟后roll角度缓缓变化;起飞后总是朝一个方向偏,回中力不明显。

原因:陀螺仪零偏没有补偿。每个陀螺仪的零偏都不同,温度变化也会让零偏漂移。没有额外静止样本补偿零偏时,陀螺仪积分会在几十秒内积累出一个明显的角度误差。

解决:上电后判断加速度计模值接近1g时,采集100到200个陀螺仪样本取平均作为零偏;再配合互补滤波的权重,让加速度计在低速段把角度拉回来。磁力计做航向修正也能慢速纠偏,但前提是周围没有强磁场干扰。

5. 把飞控调到能“稳得住”:PID参数的调节顺序与验证方法

5.1 为什么必须先调内环角速度,再调外环角度

很多人拿到飞控第一件事就是把角度环P调到很大,觉得自己要的是“打了杆马上回平”的响应。这个思路不对。内环没稳住角速度之前,外环相当于在晃动的地基上盖房子,无论怎么加P,飞机都是抖的。

我建议的顺序是:

  1. 先只保留内环P,D和I清零,外环P清零;
  2. 拆掉螺旋桨,用手拿住机架晃动,观察电机有没有反向阻力;
  3. 逐渐加大内环P,直到明显感觉到电机的“反向顶手”动作,但还没到高频抖动;
  4. 记录这个临界P值,回退到60%到70%作为正式参数;
  5. 再加内环I,让悬停时的慢漂移被纠正;
  6. 最后恢复外环P,推杆后观察入弯手感。

在台架上做测试时,手晃机架的幅度要小、速度要快,模拟的是飞行中的高频扰动;如果晃动太慢,内环P的效果会被外环角度误差掩盖。

内环I的调试信号也有讲究:把飞机放在桌面,用手把机身压到倾斜20度,突然松开,看它能否平稳回中而不是停在偏差角度上。回中慢就加内环I,回中过冲明显就加内环D。

5.2 PID参数的具体数值、调节方向与三个高频误区

给一个我常用的初始参数表,注意这只是起点,不是标准答案:

参数初始值调参方向现象提示
内环P0.08太小则电机无力、角度反应慢手快速晃动时明显有阻力感
内环I0.01太大则积分饱和、回中猛弹回中平稳且无静差
内环D0.002太大则电机发热、高频抖摇晃停止后立刻平稳
外环P3.0太小则回中慢、大则震荡推杆回正时机身跟随速度
外环I0.02太大则低频振荡长时间悬停不漂移

三个高频误区需要重点说。

误区一:参数直接抄网上的。不同轴距、电机、电池电压下的最佳参数差异非常大,抄来的参数只能作为量级参考,必须有自己台架验证的步骤。

误区二:只用“能飞”作为调参标准。“能飞”和“飞得稳”中间差很远,能飞可能只是内环I的积分在死扛,遇到风就乱晃。

误区三:所有轴参数一模一样。理论上四轴对称的机器X/Y轴参数应该接近,但电池、机架共振都会造成差异,试飞发现Y轴抖动明显时单独降Y轴内环P是合理的。

还有个现象值得注意:悬停时电机有周期性“嗡嗡”变化,先检查是不是角速度噪声过大,考虑加低通滤波,而不是单纯降PID增益。我在F103上对陀螺仪数据加了一阶低通,截止频率约50Hz,高频抖动改善非常明显。

5.3 用串口把姿态和指令导出来,数据才是评判官

调参时我最不推荐只靠手感。遇到X/Y轴表现不同、时好时坏的情况,凭耳朵根本分不清是PID问题还是机械共振问题。所以从第一版飞控开始,我就给程序加了一个日志出口:每10ms输出一行数据到UART,内容包括期望角度、实际角度、角速度、PID输出和遥控值。

日志输出格式参考:

T, expected_roll, roll, gyro_x, pid_out_roll, throttle 0.000, 0.0, 0.0, 0.01, 0.00, 1500 0.010, 0.0, 0.0, 0.02, 0.10, 1500 0.020, 5.0, 0.0, 0.20, 0.30, 1500 // 遥控打杆 5 度

在电脑上把数据画成曲线后,有几个很直接的判断:

  • 角度响应明显滞后但无超调:内环P偏小;
  • 角度超调后震荡两三个周期才收敛:内环D不足或外环P偏大;
  • 静态时PID输出仍然高频变化:陀螺仪噪声过大或低通滤波不够;
  • 油门变化不影响姿态曲线但电机转速跟手慢:检查电调油门校准。

6. 让飞控从“能飞”到“稳得住”:台架验证习惯与参数后悔药

6.1 台架测试:拆桨之后也能看到真实响应

有段时间我调参全靠听声和手感,飞机在手里乱抖又不敢开桨,怕切到手指。后来养成了一个习惯——先做台架测试。把机架固定在旋转平台上,拆掉螺旋桨,给一个阶跃目标,比如期望角度从0度瞬间跳到10度,然后直接看示波器上的角度响应曲线。不用起飞就能把内环参数基本确定。

具体步骤是:先设内环P为0,逐步增加,直到角度响应出现10%左右的超调,记这个P为临界值,正式参数取它的0.6倍。这个方法把调参从“听声音猜”变成了“看曲线定”,试飞时主要工作是微调外环的阻尼,不至于一上来就炸机。

6.2 给参数做版本记录,顺手留一份后悔药

我做第一版飞控时最大的教训不是算法没选对,而是没给参数做版本记录。某天调完一组参数飞得很好,第二天加了点代码又飞歪了,回头看自己都不知道上次那组参数是哪次改的。后来给自己立了个习惯:每次调参前先把当前参数复制到一个单独文件,命名带上日期和实验编号。这个习惯救了我很多次,参数崩了随时有后悔药能回退。

有个细节是同时把当天的试飞结论或台架曲线截图一起归档。哪怕是“内环P从0.06改成0.09,飞机高频抖”这种一句话,过两周再翻出来也比对着空参数表挠头强。飞控调试的变量太多,电机、电池、桨、机架都可能影响手感,没有记录就是在同一个坑里反复掉。

希望这个技巧也能帮到正在调飞控的你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进