blob: 779ced56073198d0473ff728a938f24d5022016c [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{
Patrick Venture5f59c0f2018-11-11 12:55:14 -080010 double min;
11 double max;
Patrick Ventured8012182018-03-08 08:21:38 -080012} 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{
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070019 bool initialized; // has pid been initialized
Patrick Ventured8012182018-03-08 08:21:38 -080020
Patrick Venture5f59c0f2018-11-11 12:55:14 -080021 double ts; // sample time in seconds
22 double integral; // intergal of error
23 double last_output; // value of last output
Patrick Ventured8012182018-03-08 08:21:38 -080024
Patrick Venture5f59c0f2018-11-11 12:55:14 -080025 double p_c; // coeff for P
26 double i_c; // coeff for I
27 double ff_off; // offset coeff for feed-forward term
28 double ff_gain; // gain for feed-forward term
Patrick Ventured8012182018-03-08 08:21:38 -080029
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070030 limits_t i_lim; // clamp of integral
31 limits_t out_lim; // clamp of output
Patrick Venture5f59c0f2018-11-11 12:55:14 -080032 double slew_neg;
33 double slew_pos;
Patrick Ventured8012182018-03-08 08:21:38 -080034} pid_info_t;
35
Patrick Venture5f59c0f2018-11-11 12:55:14 -080036double pid(pid_info_t* pidinfoptr, double input, double setpoint);
Patrick Ventured8012182018-03-08 08:21:38 -080037
38/* Condensed version for use by the configuration. */
39struct pidinfo
40{
Patrick Venture5f59c0f2018-11-11 12:55:14 -080041 double ts; // sample time in seconds
42 double p_c; // coeff for P
43 double i_c; // coeff for I
44 double ff_off; // offset coeff for feed-forward term
45 double ff_gain; // gain for feed-forward term
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070046 ec::limits_t i_lim; // clamp of integral
47 ec::limits_t out_lim; // clamp of output
Patrick Venture5f59c0f2018-11-11 12:55:14 -080048 double slew_neg;
49 double slew_pos;
Patrick Ventured8012182018-03-08 08:21:38 -080050};
51
Patrick Ventureda4a5dd2018-08-31 09:42:48 -070052} // namespace ec