PID Controller

Generic PID with anti-windup and output clamping.

Header: core/ecu_pid.h

void ecu_pid_init(ecu_pid_t *pid, const ecu_pid_config_t *cfg)

Initialise a PID controller.

Parameters:
  • pid[out] PID state to initialise.

  • cfg[in] Tuning parameters.

void ecu_pid_reset(ecu_pid_t *pid)

Reset integral and derivative history.

Parameters:
  • pid[inout] PID state.

float ecu_pid_update(ecu_pid_t *pid, float setpoint, float measured, float dt)

Compute one PID output.

Parameters:
  • pid[inout] PID state.

  • setpoint[in] Desired value.

  • measured[in] Current measured value.

  • dt[in] Time step in seconds.

Returns:

Clamped PID output.

struct ecu_pid_config_t
#include <ecu_pid.h>

PID tuning and limit parameters.

Public Members

float kp

Proportional gain.

float ki

Integral gain.

float kd

Derivative gain.

float output_min

Minimum output value.

float output_max

Maximum output value.

float integral_max

Anti-windup integral limit (0 = auto).

struct ecu_pid_t
#include <ecu_pid.h>

PID controller runtime state.

Public Members

ecu_pid_config_t cfg

Active configuration.

float integral

Accumulated integral term.

float prev_error

Previous error for derivative.

bool initialized

true after first update.