第一章:PID控制基础

各位同学好,我是老张。做飞控这些年,我最大的体会就是——PID这东西,看着简单,用好了真不容易。今天咱们就从最基础的开始聊。

1.1 比例(P)、积分(I)、微分(D)的作用

先说说PID这三个字母到底在干嘛。说白了,它们就是三个"调节器",各自负责不同的任务。

比例(P)—— 当前误差的"即时反应"

比例项看的是"现在"。你想想看,飞机往右偏了10度,那我们就给一个向左的力,偏得越多,给的力越大。这就是比例控制。

但比例控制有个问题。我记得刚入行时调一个四轴,P给大了就震荡,给小了又回不到水平。后来才明白,比例控制永远存在稳态误差——说白了就是"差一点才能到"。

积分(I)—— 过去误差的"累积清算"

积分项看的是"过去"。它把过去所有的误差都加起来,然后给一个修正量。为什么要这么做?

举个例子:飞机一直往右偏1度,比例项给的力刚好能对抗这个偏转,但就是回不到0度。这时候积分项就起作用了——它发现"这家伙一直偏着",就慢慢增加修正力,直到把飞机拉回来。

嗯,这里要注意:积分太强会"过冲",我见过不少新手把I调得太大,结果飞机像抽风一样来回晃。

微分(D)—— 未来误差的"提前预判"

微分项看的是"将来"。它根据误差的变化趋势,提前给出修正。说白了就是"刹车"功能。

我习惯把微分比作开车时的预见性——看到前面红灯了,提前松油门,而不是到了跟前才急刹车。在飞控里,微分项能有效抑制震荡,让响应更平滑。

个人经验:调参时我一般先调P,让系统能响应但不震荡;再加一点D,让响应更平滑;最后加I,消除稳态误差。这个顺序我用了十年,基本没出过问题。

1.2 PID公式推导

好,咱们来看公式。别怕,其实很简单。

最基本的PID公式长这样:

u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt

其中:

  • u(t):控制输出(比如电机转速)
  • e(t):当前误差(期望值 - 实际值)
  • Kp:比例系数
  • Ki:积分系数
  • Kd:微分系数

但在飞控里,我们用的是离散形式。因为飞控是每隔几毫秒采样一次,不是连续计算的。

离散PID公式:

u(k) = Kp * e(k) + Ki * sum(e(i)*dt) + Kd * (e(k) - e(k-1))/dt

这里:

  • k:第k次采样
  • dt:采样时间间隔
  • sum(e(i)*dt):误差的累积和
  • e(k) - e(k-1):误差的变化量

避坑指南:我曾经在代码里直接用连续公式,结果积分项越积越大,飞机直接翻了个跟头。后来才意识到,离散系统必须考虑采样时间dt,不然积分项会"失控"。

1.3 PID在飞控中的典型应用

在飞控里,PID最常见的应用就是姿态控制。拿横滚角来说:

控制层级 输入 输出 作用
外环(角度环) 期望角度 期望角速度 让飞机到达目标角度
内环(角速度环) 期望角速度 电机控制量 让飞机稳定旋转

为什么用两层?我刚开始也纳闷。后来调一架大四轴时才明白——外环管"去哪",内环管"怎么去"。这样分工明确,调参也方便。

实际代码里长这样:

// 外环:角度环PID
float angle_error = target_roll - current_roll;
float desired_rate = Kp_angle * angle_error + Ki_angle * angle_integral + Kd_angle * angle_derivative;

// 内环:角速度环PID
float rate_error = desired_rate - current_rate;
float motor_output = Kp_rate * rate_error + Ki_rate * rate_integral + Kd_rate * rate_derivative;

你看,其实就是两个PID串在一起。外环的输出是内环的输入,内环的输出直接控制电机。

小技巧:我习惯把内环的D设得比外环大一些。因为内环响应快,需要更强的"刹车"来防止过冲。外环则更注重位置精度,P可以大一点。

1.4 本章知识体系

为了让大家更直观地理解PID在飞控中的位置,我画了张图:

PID控制知识体系 比例 (P) 当前误差 × Kp 积分 (I) 误差累积 × Ki 微分 (D) 误差变化率 × Kd 控制输出 u(t) → 电机控制 → 姿态稳定 即时响应 消除稳态误差 抑制震荡

这张图把PID的三个部分串起来了。你看,P、I、D各自贡献一份力,加起来就是最终的控制输出。这个输出驱动电机,电机让飞机动起来,传感器再测回新的角度,形成一个闭环。

核心要点:

  • P是"现在"的响应,决定了系统的快速性
  • I是"过去"的积累,决定了系统的精度
  • D是"未来"的预判,决定了系统的稳定性
  • 三个参数要配合着调,不能只盯着一个

好了,这一章就到这里。PID基础打牢了,后面调参才能得心应手。下一章咱们聊聊怎么在实际飞控里把PID用起来。


专注资料整理