xref: /openbmc/phosphor-pid-control/pid/ec/pid.hpp (revision 6d31049a)
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 proportionalCoeff;   // coeff for P
45     double integralCoeff;       // coeff for I
46     double feedFwdOffset;       // offset coeff for feed-forward term
47     double feedFwdGain;         // gain for feed-forward term
48     ec::limits_t integralLimit; // clamp of integral
49     ec::limits_t outLim;        // clamp of output
50     double slewNeg;
51     double slewPos;
52     double positiveHysteresis;
53     double negativeHysteresis;
54 };
55 
56 } // namespace ec
57