xref: /openbmc/phosphor-pid-control/pid/ec/pid.hpp (revision 69c51061)
1 #pragma once
2 
3 #include <cstdint>
4 
5 namespace ec
6 {
7 
8 typedef struct
9 {
10     double min;
11     double 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     double ts;         // sample time in seconds
22     double integral;   // intergal of error
23     double lastOutput; // value of last output
24 
25     double proportionalCoeff; // coeff for P
26     double integralCoeff;     // coeff for I
27     double feedFwdOffset;     // offset coeff for feed-forward term
28     double feedFwdGain;       // gain for feed-forward term
29 
30     limits_t integralLimit; // clamp of integral
31     limits_t outLim;        // clamp of output
32     double slewNeg;
33     double slewPos;
34     double positiveHysteresis;
35     double negativeHysteresis;
36 } pid_info_t;
37 
38 double pid(pid_info_t* pidinfoptr, double input, double setpoint);
39 
40 /* Condensed version for use by the configuration. */
41 struct pidinfo
42 {
43     double ts;            // sample time in seconds
44     double p_c;           // coeff for P
45     double i_c;           // coeff for I
46     double ff_off;        // offset coeff for feed-forward term
47     double ff_gain;       // gain for feed-forward term
48     ec::limits_t i_lim;   // clamp of integral
49     ec::limits_t out_lim; // clamp of output
50     double slew_neg;
51     double slew_pos;
52     double positiveHysteresis;
53     double negativeHysteresis;
54 };
55 
56 } // namespace ec
57