blob: e138933504a112bf3aa35145b20f07940ea31d2f [file] [log] [blame]
Patrick Ventured8012182018-03-08 08:21:38 -08001#pragma once
2
3#include <cstdint>
4
5namespace ec
6{
7
8typedef 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 */
17typedef 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
36float pid(pid_info_t* pidinfoptr, float input, float setpoint);
37
38/* Condensed version for use by the configuration. */
39struct 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}