Skip to content

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)

  1. Set and
  2. Increase until the output oscillates with constant amplitude → record (ultimate gain) and (period)
  3. 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 * derivative

TIP

Use derivative on measurement (not on error) to avoid derivative kick when the setpoint changes.

Released under the MIT License.