PID基本概念
PID算法被广泛地应用于工业控制领域,是一种闭环反馈控制机制。
- P: 比例控制(Proportional)
- I: 积分控制(Integral)
- D: 微分控制(Direvative)
PID流程框图
其中:
Kp: 比例增益常数
Ki: 积分增益常数
Kd: 微分增益常数
比例环节
比例项的输出与差错值成线性关系:
Po=Kpe(t)
Ki, Kd保持不变,改变Kp
积分环节
Io=Ki∫e(t)dt
微分环节
Do=Kdde(t)dt
伪代码
以下代码来自:http://bbs.cmnxt.com/thread-5688-1-1.html
Kp = 1000 ! 记住我们用 Kp*100,因此Kp实际为10
Ki = 100 ! 记住我们用 Ki*100,因此Ki实际为1
Kd = 10000 ! 记住我们用 Kd*100 ,因此Kd实际为100
offset= 45 ! 初始化变量
Tp = 50
integral = 0 ! 用于存储积分的变量
lastError =0 ! 用于存储最后一个误差值的变量
derivative = 0 ! 用于存储导数的变量
Loop forever
LightValue = read light sensor ! 当前光电传感器的读值
error = LightValue - offset ! 减掉 offset(补偿量),计算误差值
integral = integral + error ! 计算积分值
derivative = error - lastError ! 计算导数值
Turn = Kp*error + Ki*integral + Kd*derivative ! “比例控制部分”+“积分控制部分”+“导数控制部分”
Turn = Turn/100 ! 记住消除Kp,Ki和 Kd中因数100的影响!
powerA = Tp + Turn ! A马达功率值
powerC = Tp - Turn ! C马达功率值
MOTOR A direction=forwardpower=PowerA !在马达模块中设置A马达的功率值和转向
MOTOR C direction=forwardpower=PowerC ! 在马达模块中设置A马达的功率值和转向
lastError = error ! 把当前误差存储在变量lastError中,作为下一次循环的最后一个误差
end loop forever ! 结束循环,返回,进行下一次循环