【发布时间】:2016-03-04 03:18:48
【问题描述】:
我正在创建一个用于控制电机的 PID 控制器。我使用 PID 库进行了调查,但我认为它不适合我的需求,因为我需要使用同一个控制器在两个方向上控制电机。
我目前正在使用 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);
【问题讨论】:
标签: variables controller pid