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);