0
我正在创建一个PID控制器来控制电机。我调查了使用PID库,但我认为它不适合我的需要,因为我需要使用相同的控制器在两个方向上控制电机。PID控制器,编码D部分的问题。
我目前有PI部分工作,但我正在努力与D部分。我无法将当前错误存储为上次错误,然后可以使用它来计算下一个D值。相反,我的d值似乎反映了错误,而不是当前错误与上次错误相比的变化。我的代码如下所示,任何意见将不胜感激。
**注意,我知道delta_T通常包含在控制器的积分和微分部分,但我更愿意将它并入到控制常数Ki和Kd中以避免编码复杂化。
Distance = analogRead (irSense); //read the sensor, assigns value to Distance
//Serial.println(Distance) ;
double lastError;
int control; //initialize control variable , set up PID parameters
int setpoint = 350; //Neutral position, zero point, desired input
int error = Distance - setpoint; //error function
double d = (error - lastError); //derivative function
double kp = 0.9; //Proportional constant
double ki = 0.000001; //Intergral constant
double kd = .0001; //Derivitve constant
i += error; //intergral Set
control = error * kp + i * ki + d * kd; //PID control funtion
lastError = error;
Serial.println (d);