xref: /openbmc/phosphor-pid-control/pid/ec/pid.hpp (revision c404b3ec)
1 #pragma once
2 
3 #include <cstdint>
4 
5 namespace ec
6 {
7 
8 typedef struct
9 {
10     float min;
11     float max;
12 } limits_t;
13 
14 /* Note: If you update these structs you need to update the copy code in
15  * pid/util.cpp.
16  */
17 typedef struct
18 {
19     bool initialized; // has pid been initialized
20 
21     float ts;          // sample time in seconds
22     float integral;    // intergal of error
23     float last_output; // value of last output
24 
25     float p_c;     // coeff for P
26     float i_c;     // coeff for I
27     float ff_off;  // offset coeff for feed-forward term
28     float ff_gain; // gain for feed-forward term
29 
30     limits_t i_lim;   // clamp of integral
31     limits_t out_lim; // clamp of output
32     float slew_neg;
33     float slew_pos;
34 } pid_info_t;
35 
36 float pid(pid_info_t* pidinfoptr, float input, float setpoint);
37 
38 /* Condensed version for use by the configuration. */
39 struct pidinfo
40 {
41     float ts;             // sample time in seconds
42     float p_c;            // coeff for P
43     float i_c;            // coeff for I
44     float ff_off;         // offset coeff for feed-forward term
45     float ff_gain;        // gain for feed-forward term
46     ec::limits_t i_lim;   // clamp of integral
47     ec::limits_t out_lim; // clamp of output
48     float slew_neg;
49     float slew_pos;
50 };
51 
52 } // namespace ec
53