28#ifndef CONTROL_SYSTEM_PID_PID_GS_H
29#define CONTROL_SYSTEM_PID_PID_GS_H
101 template <
typename T>
130 void init(T dt_, T Kp_, T Ki_, T Kd_, T I_max_, T u_max_,
bool d_filter_ =
false, T fc_ = 10.0);
148 void set_param(T dt_, T Kp_, T Ki_, T Kd_, T I_max_, T u_max_,
bool d_filter_ =
false, T fc_ = 10.0);
170 T
update(T x_0, T x, T u_ff_ = 0.0, T op_cond_ = 0.0);
191 void merge(T u_k_1_);
T u
PID controller output.
void set_ff(T u_ff_)
Sets the feed-forward control input.
void set_fc(T fc_)
Sets the derivative filter cutoff frequency.
void set_Ki(T Ki_)
Sets the integral gain.
T get_ff()
Gets the feed-forward control input.
void reset()
Resets the PID controller state.
LPF_1< T > lpf
First-order low-pass filter used for derivative filtering.
T * Ki_arr
Integral-gain lookup table.
void set_gain_lookup_table(T *op_cond_arr_, T *Kp_arr_, T *Ki_arr_, T *Kd_arr_, uint16_t len_arr_)
Configures the gain-scheduling lookup tables.
T get_P()
Gets the proportional contribution.
PID_GS()
Constructs a gain-scheduled PID controller.
T get_u()
Gets the controller output.
void update_gain(T op_cond_)
Updates the PID gains according to the operating condition.
T fc
Cutoff frequency of the derivative filter.
T I
Integral contribution.
T interpolate(T x, T x1, T y1, T x2, T y2)
Linearly interpolates a value between two lookup-table points.
T get_I_max()
Gets the maximum integral contribution.
T get_e_k_1()
Gets the previous control error.
void set_d_filter(bool d_filter_)
Enables or disables derivative filtering.
T P
Proportional contribution.
T D
Derivative contribution.
bool get_d_filter()
Gets the derivative filter enable state.
T u_max
Maximum allowed controller output.
void set_param(T dt_, T Kp_, T Ki_, T Kd_, T I_max_, T u_max_, bool d_filter_=false, T fc_=10.0)
Sets the PID controller parameters.
T get_D()
Gets the derivative contribution.
uint16_t len_arr
Number of entries in the gain lookup tables.
T * Kp_arr
Proportional-gain lookup table.
T get_u_max()
Gets the maximum controller output.
T update(T x_0, T x, T u_ff_=0.0, T op_cond_=0.0)
Computes the gain-scheduled PID control output.
T dt
Controller sampling time.
void set_Kd(T Kd_)
Sets the derivative gain.
T get_Kp()
Gets the proportional gain.
T e_k_1
Previous control error.
T get_Ki()
Gets the integral gain.
void set_u_max(T u_max_)
Sets the maximum controller output.
bool d_filter
Derivative filter enable state.
T get_dt()
Gets the controller sampling time.
T * op_cond_arr
Operating-condition lookup table.
T u_ff
Feed-forward control input.
void set_I_max(T I_max_)
Sets the maximum integral contribution.
void set_dt(T dt_)
Sets the controller sampling time.
void set_Kp(T Kp_)
Sets the proportional gain.
void merge(T u_k_1_)
Merges an external controller output into the PID state.
T get_fc()
Gets the derivative filter cutoff frequency.
T get_Kd()
Gets the derivative gain.
T get_I()
Gets the integral contribution.
T * Kd_arr
Derivative-gain lookup table.
bool start
Controller startup state.
void init(T dt_, T Kp_, T Ki_, T Kd_, T I_max_, T u_max_, bool d_filter_=false, T fc_=10.0)
Initializes the PID controller.
T I_max
Maximum allowed integral contribution.
Contains control-system algorithms and controllers.
Contains proportional-integral-derivative controller implementations.
Utility functions for the Control System library.