
import matplotlib.pyplot as plt
class Pid:
def __init__(self, target, p, i, d):
self.target = target
self.kp = p
self.ki = i
self.kd = d
self.target_val = target
self.now_val = 0
self.error_new = 0
self.error_last = 0
self.error_last_last = 0
self.d = 0
def myfunc(self):
self.error_last_last = self.error_last
self.error_last = self.error_new
self.error_new = self.target_val - self.now_val
self.d = self.kp * (self.error_new - self.error_last) + self.ki * self.error_new + self.kd * (self.error_new - 2 * self.error_last + self.error_last_last )
self.now_val += self.d
return self.now_val
p = Pid(100, 0.02, 0.4, 0)
val = []
for i in range(0, 100):
val.append(p.myfunc())
plt.plot(val)
plt.grid()
plt.xlim(0, 100)
plt.show()

修改的D 的计算
e-el+el-ell 结果好像变化不大
浙公网安备 33010602011771号