PID Tuning
A PID (Proportional–Integral–Derivative) controller calculates a correction signal based on the error between a desired setpoint and a measured value.
Tuning Steps (Ziegler–Nichols)
- Set and
- Increase until the output oscillates with constant amplitude → record (ultimate gain) and (period)
- Apply the table:
| Controller | |||
|---|---|---|---|
| P | — | — | |
| PI | — | ||
| PID |
Python Example
python
class PID:
def __init__(self, kp, ki, kd, dt):
self.kp, self.ki, self.kd, self.dt = kp, ki, kd, dt
self.integral = 0
self.prev_error = 0
def compute(self, setpoint, measured):
error = setpoint - measured
self.integral += error * self.dt
derivative = (error - self.prev_error) / self.dt
self.prev_error = error
return self.kp * error + self.ki * self.integral + self.kd * derivativeTIP
Use derivative on measurement (not on error) to avoid derivative kick when the setpoint changes.