PID 理论讲解
PID 控制器是嵌入式系统中最经典的控制算法,名称源于三个核心环节:比例(Proportional)、积分(Integral)和微分(Derivative)。其核心逻辑是通过计算'目标值'与'实际值'之间的偏差(Error),根据偏差的变化规律输出控制量,使系统趋于稳定。
其中 u(t) 为输出控制量,e(t) 为偏差,Kp/Ki/Kd 分别为比例、积分、微分系数。在单片机中,我们通常使用离散化公式进行计算:
这里 k 代表当前时刻,Σe(i) 是累积偏差。理解这三个环节的作用至关重要:
- 比例环节(P):对当前偏差直接放大。
Kp越大响应越快,但过大会导致震荡。例如机器人偏离黑线时,偏差越大转向幅度越大。 - 积分环节(I):消除静态误差。当存在机械不对称等固定偏差时,通过累积修正使偏差归零。
Ki过大则易超调。 - 微分环节(D):抑制震荡。反映偏差变化趋势,提前产生反向调节。例如快速接近目标时抑制速度,防止冲过头。
场景与硬件
以 24 年电赛 H 题为例,场地包含半圆弧线与直线段,要求小车自动行驶并定点停车。硬件配置如下:
- 传感器模块:8 路灰度传感器(检测黑线位置)
- 姿态传感器:MPU6050/JY61P(提供 Yaw 角数据,用于丢线时的方向控制)
- 执行机构:TB6612 电机驱动模块 + 520 直流减速电机
在这个场地上,小车主要面临两种环境:正常寻线和丢失路线。针对这两种情况,我们需要切换不同的控制策略。
算法实现细节
1. 正常循线模式
在正常循线时,由于黑线宽度固定,静态误差较小,通常采用 PD 控制即可,省略积分环节。核心逻辑封装在 follow_line() 函数中。
首先处理传感器数据。8 路灰度传感器的输出为 8 位二进制数据,每一位代表对应通道的检测结果(1 为黑,0 为白)。我们通过加权求和来计算偏差:
// 传感器权重分配(左 4 路正权重,右 4 路负权重)
const int8_t sensor_weights[8] = {4, 3, 2, 1, -1, -2, -3, };
error = ;
( i = ; i < ; i++) {
(sensor_value & ( << i)) {
error += sensor_weights[i];
}
}

