NXPCUP-libary
Library for car's control board on NXPCUP competition based on the Mbed framework.
pid.h
Go to the documentation of this file.
1 #pragma once
2 
3 // This file is part of 'Atoms' library - https://github.com/yaqwsx/atoms
4 // Author: Jan 'yaqwsx' Mrázek
5 
6 #include "../numeric/value.h"
7 
8 namespace atoms {
9 
10 template <class T>
11 class Pid {
12 public:
13  struct Config {
14  T p;
15  T i;
16  T d;
17  T bottom;
18  T top;
19  };
20 
21  struct State {
24 
25  State(const T& bottom, const T& top)
26  : integrator(0, { bottom, top }), last_input(0) { }
27  };
28 
29  Pid(const Config& params)
30  : params(params), state(params.bottom, params.top) {}
31 
32  Config get_params() const {
33  return params;
34  }
35 
36  void set_params(Config& p) {
37  params = p;
38  reset();
39  }
40 
41  State get_state() const {
42  return state;
43  }
44 
45  void reset() {
46  state = State(params.bottom, params.top);
47  }
48 
49  T step(T input, T desired_value) {
50  T error(desired_value - input);
51  state.integrator = state.integrator.get() + params.i * error;
52 
53  Value<T, Clamped> output(params.p * error + state.integrator
54  - params.d * (input - state.last_input),
55  { params.bottom, params.top });
56 
57  state.last_input = input;
58 
59  return output;
60  }
61 
62  T step(T input, T desired_value, T time_step) {
63  T error(desired_value - input);
64  state.integrator = state.integrator.get() + params.i * error * time_step;
65 
66  Value<T, Clamped> output(params.p * error + state.integrator
67  - (params.d * (input - state.last_input) / time_step),
68  { params.bottom, params.top });
69 
70  state.last_input = input;
71 
72  return output;
73  }
74 private:
75  Config params;
76  State state;
77 };
78 
79 }
T step(T input, T desired_value)
Definition: pid.h:49
T last_input
Definition: pid.h:23
Config get_params() const
Definition: pid.h:32
void set_params(Config &p)
Definition: pid.h:36
State get_state() const
Definition: pid.h:41
Pid(const Config &params)
Definition: pid.h:29
T top
Definition: pid.h:18
T i
Definition: pid.h:15
T step(T input, T desired_value, T time_step)
Definition: pid.h:62
Definition: value.h:62
Definition: pid.h:11
State(const T &bottom, const T &top)
Definition: pid.h:25
Definition: pid.h:8
T d
Definition: pid.h:16
Definition: pid.h:21
T p
Definition: pid.h:14
void reset()
Definition: pid.h:45
T bottom
Definition: pid.h:17
Definition: pid.h:13
Value< T, Clamped > integrator
Definition: pid.h:22