Interactive simulatorBeginner

PID Controller Simulator for Robotics Control Systems

Tune proportional, integral, and derivative gains while visualizing response, error, saturation, and disturbances in a PID controller simulator.

Category
Control Systems
Time
60–120 min
Platform
Browser · Arduino
PID Controller Simulator for Robotics Control Systems technical schematicRESPONSETIMESETPOINT

01 / Start here

Introduction

PID control appears throughout robotics: wheel speed, heading, joint position, temperature, and balancing systems all rely on feedback. This project turns the controller into a visible experiment. Change one gain, disturb the plant, and connect the resulting curve with the code that could run on an Arduino or embedded controller.

Live lab / Deterministic sampled control loop

PID controller simulator

Drive a second-order plant toward a setpoint. Tune each gain, inject a load, and watch response, error, and control effort in real time.

Browser native
This simulator plots a PID controller's response, error, and control effort over time. Use the controls below to run it, or read the full theory and algorithm after this lab.

Three stacked plots share a scrolling time axis: measured output against the setpoint line, tracking error around zero, and control effort inside the shaded actuator-limit band.

Simulation

Paused. Press Start or Step to begin.

Setpoint & timing
PID gains
Disturbance
Setpoint
1.00
Measured
0.000
Error
1.000
Control
0.000
Overshoot
0%
Steady-state error
1.000

Keyboard: focus the plots, then use Space to run/pause, N to step, R to reset, G to toggle the load, and F for full screen.

Controls

The simulator exposes setpoint, proportional, integral, and derivative gains, sample interval, actuator limit, and disturbance magnitude. Aligned plots show setpoint, measured output, error, and control effort. Reset clears controller memory so experiments remain comparable.

Theory

A feedback controller calculates error as setpoint minus measurement. Proportional action reacts immediately, integral action accumulates persistent error, and derivative action responds to the rate of change. Their sum becomes the actuator command.

Controller performance is constrained by the plant. Sampling too slowly hides motion; driving beyond the actuator limit causes saturation; noisy measurements make an unfiltered derivative term unstable. Tuning is therefore an experiment involving both controller and system.

Step response plot comparing three tunings of a second-order system. A high-gain curve overshoots the setpoint and oscillates before settling. A well-tuned curve rises quickly with slight overshoot and settles fast. A low-gain curve rises slowly and never overshoots.
Damping shapes the step response: too much gain overshoots and rings, too little is sluggish, and a balanced tuning settles quickly. Download SVG

Algorithm

  1. Read the measurement at a fixed interval and compute error.
  2. Accumulate a bounded integral using the actual time step.
  3. Estimate derivative from measurement or error and apply appropriate filtering.
  4. Sum the three weighted terms and clamp to the actuator range.
  5. Apply the command, store the previous sample, and record metrics.
  6. Reset integral and history when the control mode or plant changes substantially.

Source code

This implementation includes a simple anti-windup condition:

float updatePid(float setpoint, float measured, float dt) {
  const float error = setpoint - measured;
  const float derivative = (error - previousError) / dt;
  const float candidateIntegral = integral + error * dt;
  const float raw = kp * error + ki * candidateIntegral + kd * derivative;

  const float output = constrain(raw, outputMin, outputMax);
  if (raw == output) integral = candidateIntegral;
  previousError = error;
  return output;
}

Production controllers also define behavior for invalid measurements, timer overruns, mode transitions, and actuator faults.

Circuit diagram

The feedback sensor reports the actual output; it is not a substitute for current limiting or a hardware safety stop. The controller compares the setpoint with the conditioned sensor reading, then drives the actuator through a PWM stage rated for the load.

Block diagram of a closed PID feedback loop. The setpoint enters a summing junction, the resulting error feeds the PID controller, its output drives an actuator and PWM stage, that drives the plant, and a sensor measures the plant output and feeds it back to the summing junction with a negative sign.
The closed PID loop: the sensor closes the path from plant output back to the summing junction, where feedback is subtracted from the setpoint. Download SVG

Hardware checklist

Components

  • Microcontroller with a stable timer
  • Measured plant such as a DC motor or servo
  • Encoder, potentiometer, or other feedback sensor
  • Output driver rated for the actuator
  • Regulated power source and emergency stop

Continue building

Download resources

Use these on-page references while working through the project. Downloadable project bundles will be added only after their source and version are published.

Common questions

Frequently asked questions

What should I tune first?

Begin with integral and derivative gains at zero. Increase proportional gain until the response is useful but oscillatory, then add derivative damping. Add integral gain last and only when a repeatable steady-state error remains. A common rule of thumb: P gives speed, D reduces overshoot, and I removes offset—add them in that order, one at a time.

How do I stop a PID controller from overshooting?

Overshoot usually comes from too much proportional or integral action. Reduce proportional gain first, then increase derivative gain to damp the approach. If overshoot only appears after the actuator hits its limit, the cause is integral windup rather than gain, and you should clamp the integral term instead.

Why does my PID controller oscillate?

Sustained oscillation almost always means the proportional gain is too high for the loop, or the derivative term is too weak to damp it. Reduce proportional gain by about half, then add derivative gain. Oscillation can also come from a control loop that runs too slowly or with an inconsistent interval, which makes the derivative term unreliable.

What is integral windup and how do I prevent it?

Windup occurs when the actuator saturates—a motor at full speed, a valve fully open—but the accumulated integral error keeps growing, so the controller overshoots badly when the error finally reverses. Prevent it with clamping (stop adding to the integral while the output is saturated) or back-calculation (bleed the integral down using the difference between the requested and delivered output).

How fast does a PID loop need to run?

The loop should sample several times faster than the system it controls, at a consistent interval. On a microcontroller, avoid long blocking delays: a variable or slow loop changes the effective integral and derivative terms even when the gains are unchanged, which is a frequent hidden cause of poor tuning.

Can I use PID with only the P and D terms?

Yes. PD control (no integral) is common when a small steady-state error is acceptable and you want to avoid windup, and PI control (no derivative) suits noisy signals where a derivative term would amplify noise. Use only the terms the problem needs rather than always running full PID.

What is the difference between manual tuning and Ziegler–Nichols?

Manual tuning adjusts one gain at a time while watching the response, which is intuitive and safe for learning. Ziegler–Nichols is a formula-based method that derives gains from the point of sustained oscillation; it is faster but often aggressive, so its output is usually a starting point you refine by hand.

Further reading

References

Authoritative sources for going deeper than this simulator's bounded educational model.