TR-mbed 1.0
Loading...
Searching...
No Matches
PID.h
Go to the documentation of this file.
1//This adds an unstable change to make the D component low pass (avg itself)
2#define FUNNY_PID
3
4#ifndef FUNNY_PID
5
6//
7// Created by ankit on 1/31/23.
8//
9
10#ifndef TR_EMBEDDED_PID_H
11#define TR_EMBEDDED_PID_H
12
13#include "mbed.h"
14
19class PID {
20private:
21 float kP = 0;
22 float kI = 0;
23 float kD = 0;
24
25 double integralCap = 0;
26 float outputCap = 0;
27
28 float lastError = 0;
29 double errorIntegral = 0;
30
31public:
32 float feedForward = 0;
33
34 float pC, iC, dC = 0;
35
39 PID();
40
49 PID(float kP, float kI, float kD, float integralCap = 0, float outputCap = 0);
50
57 void setPID(float p, float i, float d, float integralCap = 0, float outputCap = 0);
58
59 void resetPID(float kP, float kI, float kD, float integralCap = 0, float outputCap = 0);
60
61 void resetErrorIntegral();
62
63
72 int calculate(int desired, int current, double dt);
73
74 int calculatePeriodic(float error, double dt);
75
76 void limitOutput(double &PIDCalc) const;
77
78 void limitErrorIntegral();
79
84 void setIntegralCap(float integralCap);
85
90 void setOutputCap(float outCap);
91
92};
93
94#endif //TR_EMBEDDED_PID_H
95#else
96//
97// Created by ankit on 1/31/23.
98//
99
100#ifndef TR_EMBEDDED_PID_H
101#define TR_EMBEDDED_PID_H
102
103#include "mbed.h"
104#define lastX 10
105
106struct lastfew {
107 long long last[lastX] = { 0 };
108 int arm = 0;
109 int lastY = 1;
110
111 lastfew(int lastY_ = 1) {
112 if(lastY_ > lastX){
113 lastY = lastX;
114 }else{
115 lastY = lastY_;
116 }
117 }
118
119 void add(long long l) {
120 last[arm] = l;
121 arm++;
122 if (arm == lastY)
123 arm = 0;
124 }
125
126 long long time() {
127 long long t = 0;
128 for (int i = 0; i < lastY; i++)
129 t += last[i];
130 return t / lastY;
131 }
132};
133
138class PID {
139private:
140 float kP = 0;
141 float kI = 0;
142 float kD = 0;
143
144 double integralCap = 0;
145 double derivativeCap = 0;
146 float outputCap = 0;
147
148 float lastError = 0;
149 double errorIntegral = 0;
150
151public:
152 float feedForward = 0;
153
154 float pC, iC, dC = 0;
155
157
161 PID();
162
171 PID(float kP, float kI, float kD, float integralCap = 0, float outputCap = 0);
172
179 void setPID(float p, float i, float d, float integralCap = 0, float outputCap = 0);
180
181 void resetPID(float kP, float kI, float kD, float integralCap = 0, float outputCap = 0);
182
183 void resetErrorIntegral();
184
185
194 int calculate(int desired, int current, double dt);
195
196 int calculatePeriodic(float error, double dt);
197
198 void limitOutput(double &PIDCalc) const;
199
200 double limitErrorDerivative(double dTerm);
201
202 void limitErrorIntegral();
203
208 void setDerivativeCap(float derivativeCap);
209
214 void setIntegralCap(float integralCap);
215
220 void setOutputCap(float outCap);
221
222};
223
224
225
226#endif //TR_EMBEDDED_PID_H
227#endif
int i
Definition BiCGSTAB_step_by_step.cpp:9
#define lastX
Definition PID.h:104
float * p
Definition Tutorial_Map_using.cpp:9
Definition PID.h:138
PID()
Definition PID.cpp:120
double limitErrorDerivative(double dTerm)
lastfew dBuffer
Definition PID.h:156
int calculatePeriodic(float error, double dt)
Definition PID.cpp:172
void setPID(float p, float i, float d, float integralCap=0, float outputCap=0)
Definition PID.cpp:139
void resetErrorIntegral()
Definition PID.cpp:160
float pC
Definition PID.h:154
void setOutputCap(float outCap)
Definition PID.cpp:230
float iC
Definition PID.h:154
float feedForward
Definition PID.h:152
int calculate(int desired, int current, double dt)
Definition PID.cpp:166
void limitErrorIntegral()
Definition PID.cpp:200
void resetPID(float kP, float kI, float kD, float integralCap=0, float outputCap=0)
Definition PID.cpp:148
void setIntegralCap(float integralCap)
Definition PID.cpp:225
void setDerivativeCap(float derivativeCap)
float dC
Definition PID.h:154
void limitOutput(double &PIDCalc) const
Definition PID.cpp:212
Definition PID.h:106
void add(long long l)
Definition PID.h:119
lastfew(int lastY_=1)
Definition PID.h:111
long long time()
Definition PID.h:126
int lastY
Definition PID.h:109
long long last[lastX]
Definition PID.h:107
int arm
Definition PID.h:108