每个玩单片机的人,包括Arduino,肯定是需要攀登PID高峰的,所谓高峰,是因为它确实有点难度。
如下这个视频,浅显易懂地讲解了PID,便于理解,有空看看,可以加深对PID的理解。
PID我的理解,就是系统通过不断的迭代,系统输出无限逼近目标设定值的过程。
如下这个程序,相当于运用arduino做了下数学迭代的计算器,并将数据通过串口输出出来,可以对PID有更近一步的理解。
int setpoint = 1000;//设定值
long sumerror;//总的误差
double kp = 1.3,ki = 0.15,kd = 0.1;
int lasterror=0;//上次误差,起始值设为0
int input = 10;//输入起始值,这个可以理解为项目中我们要控制的目标,
int output;
int nowerror;
int count=0;//加入计数器,观察迭代多少次后,input达到目标值
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
nowerror = setpoint - input;//求出现在的误差
sumerror = nowerror; //累积误差
output = kp*nowerror ki*sumerror kd*(lasterror - nowerror);
lasterror = nowerror;
input = output;
count =1;
Serial.println(input);
Serial.println(count);
delay(500);
}
打开串口观察,通过多少次迭代后,系统输出值达到了目标设定值