xref: /openbmc/phosphor-pid-control/pid/ec/pid.hpp (revision e620656c)
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 
53 }
54