瀏覽代碼

no message

xiuwei 1 年之前
當前提交
78067bae19
共有 3 個文件被更改,包括 85 次插入0 次删除
  1. 20 0
      pom.xml
  2. 53 0
      src/main/java/contorllogic/PidController.java
  3. 12 0
      src/main/java/contorllogic/Test.java

+ 20 - 0
pom.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.syjy</groupId>
+    <artifactId>fastcontrol</artifactId>
+    <version>1.0-SNAPSHOT</version>
+    <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.16</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+
+
+</project>

+ 53 - 0
src/main/java/contorllogic/PidController.java

@@ -0,0 +1,53 @@
+package contorllogic;
+
+import lombok.Data;
+
+/**
+ * PID控制器
+ * 在这个代码中,我们定义了一个PIDController类,
+ * 它包含了比例系数kp、积分系数ki、微分系数kd、目标值setpoint、积分项integral和上一次误差lastError。
+ * 我们还定义了一个calculate方法,它接受一个输入值input,并返回PID控制器的输出值。
+ * 在calculate方法中,我们首先算当前误差error,然后将其加入分项integral中。
+ * 接下来,我们计算误差的微分项derivative,并将当前误差保存为上一次误差lastError。
+ * 最后,我们将比例项、积分项和微分项相加,得到PID控制器的输出值。
+ * 使用这个PIDController类,我们可以轻松地实现PID控制。
+ * 例如,我们可以创建一个PID控制器对象,设置比例系数、积分系数、微分系数和目标值,
+ * 然后在每个时间步骤中调用calculate方法,将当前输入值传递给它,以获得PID控制器的输出值。
+ * PID控制器是一种常见的反馈控制器,用于控制系统的输出。它通过比较实际输出和期望输出之间的差异来计算控制信号,以使输出尽可能接近期望值。
+ * PID控制器的名称来自其三个控制参数:比例系数(P)、积分系数(I)和微分系数(D)。这些参数控制着控制器的响应速度、稳定性和抗干扰能力。
+ * PID控制器的逻辑如下:
+ * 比例控制:比例控制是根据误差的大小来计算控制信号的一种方法。比例系数(P)控制着控制器对误差的响应速度。当误差较大时,控制器会输出更大的控制信号,以加快系统的响应速度。
+ * 积分控制:积分控制是根据误差的积分来计算控制信号的一种方法。积分系数(I)控制着控制器对误差的持续时间的响应。当误差持续一段时间时,控制器会输出更大的控制信号,以减小误差。
+ * 微分控制:微分控制是根据误差的变化率来计算控制信号的一种方法。微分系数(D)控制着控制器对误差变化率的响应。当误差变化率较大时,控制器会输出更大的控制信号,以减小误差的变化率。
+ * PID控制器的输出信号是由比例控制、积分控制和微分控制三个部分组成的。PID控制器的输出信号可以表示为:
+ * Output = Kp * Error + Ki * Integral + Kd * Derivative
+ * 其中,Kp、Ki和Kd分别是比例系数、积分系数和微分系数,Error是期望值与实际值之间的误差,Integral是误差的积分,Derivative是误差的变化率。
+ */
+
+@Data
+public class PidController {
+    private double kp; // 比例系数 控制着控制器对误差的响应速度
+    private double ki; // 积分系数 控制着控制器对误差的持续时间的响应
+     private double kd; // 微分系数 控制着控制器对误差变化率的响应
+    private double setpoint; // 目标值
+    private double integral; // 积分项
+    private double lastError; // 上一次误差
+
+    public PidController(double kp, double ki, double kd, double setpoint) {
+        this.kp = kp;
+        this.ki = ki;
+        this.kd = kd;
+        this.setpoint = setpoint;
+        this.integral = 0;
+        this.lastError = 0;
+    }
+
+    public double calculate(double input) {
+        //目标值减当前值 求出差距值
+        double error = setpoint - input;
+        integral += error;
+        double derivative = error - lastError;
+        lastError = error;
+        return kp * error + ki * integral + kd * derivative;
+    }
+}

+ 12 - 0
src/main/java/contorllogic/Test.java

@@ -0,0 +1,12 @@
+package contorllogic;
+
+public class Test {
+    public static void main(String[] args) {
+        PidController pidController = new PidController(1, 0.01, 0, 20);
+
+
+        for (int i = 0; i < 30; i++) {
+            System.out.println(pidController.calculate(i));
+        }
+    }
+}