```java
public class PIDController {
private double kp; // 比例系数
private double ki; // 积分系数
private double kd; // 微分系数
private double setpoint; // 设定值
private double integral; // 积分项
private double previousError; // 上一个误差
public PIDController(double kp, double ki, double kd) {
this.kp = kp;
this.ki = ki;
this.kd = kd;
}
public void setSetpoint(double setpoint) {
this.setpoint = setpoint;
}
public double compute(double input) {
double error = setpoint - input; // 当前误差
double p = kp * error; // 比例项
integral += error; // 更新积分项
double i = ki * integral; // 积分项
double derivative = error - previousError; // 当前误差与上次误差的差,用于计算微分项
double d = kd * derivative; // 微分项
double output = p + i + d; // PID控制输出
previousError = error; // 更新上一个误差
return output;
}
}
```
使用方法:
```java
public class Main {
public static void main(String[] args) {
PIDController pidController = new PIDController(0.5, 0.2, 0.1);
pidController.setSetpoint(10); // 设定值
double input = 7; // 输入值
for (int i = 0; i < 10; i++) {
double output = pidController.compute(input);
System.out.println("控制输出:" + output);
// 更新输入值
input += output;
}
}
}
```
这段代码实现了一个简单的PID控制器。其中,`kp`、`ki`和`kd`分别表示比例系数、积分系数和微分系数。`setSetpoint`方法用于设置设定值,`compute`方法用于根据当前输入值计算PID控制输出。
在main函数中,我们创建了一个PIDController对象,并设置了kp、ki和kd的值。然后,循环进行PID控制,每次计算输出后更新输入值。