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
153 struct config
154 {
155 float p = 1;
156 float i = 0;
157 float d = 0;
158 float outCap = 15000;
159 float integralCap = 500;
160 };
161
162
163 float feedForward = 0;
164
165 float pC, iC, dC = 0;
166
168
172 PID();
173
182 PID(float kP, float kI, float kD, float integralCap = 0, float outputCap = 0);
183
184 PID(config cfg);
185
192 void setPID(float p, float i, float d, float integralCap = 0, float outputCap = 0);
193
194 void resetPID(float kP, float kI, float kD, float integralCap = 0, float outputCap = 0);
195
196 void resetErrorIntegral();
197
198
207 int calculate(int desired, int current, double dt);
208
209 int calculatePeriodic(float error, double dt);
210
211 void limitOutput(double &PIDCalc) const;
212
213 double limitErrorDerivative(double dTerm);
214
215 void limitErrorIntegral();
216
221 void setDerivativeCap(float derivativeCap);
222
227 void setIntegralCap(float integralCap);
228
233 void setOutputCap(float outCap);
234
235};
236
237
238
239#endif //TR_EMBEDDED_PID_H
240#endif
#define lastX
Definition PID.h:104
Definition PID.h:138
PID()
Definition PID.cpp:120
double limitErrorDerivative(double dTerm)
lastfew dBuffer
Definition PID.h:167
int calculatePeriodic(float error, double dt)
Definition PID.cpp:181
void setPID(float p, float i, float d, float integralCap=0, float outputCap=0)
Definition PID.cpp:148
void resetErrorIntegral()
Definition PID.cpp:169
float pC
Definition PID.h:165
void setOutputCap(float outCap)
Definition PID.cpp:239
float iC
Definition PID.h:165
float feedForward
Definition PID.h:163
int calculate(int desired, int current, double dt)
Definition PID.cpp:175
void limitErrorIntegral()
Definition PID.cpp:209
void resetPID(float kP, float kI, float kD, float integralCap=0, float outputCap=0)
Definition PID.cpp:157
void setIntegralCap(float integralCap)
Definition PID.cpp:234
void setDerivativeCap(float derivativeCap)
float dC
Definition PID.h:165
void limitOutput(double &PIDCalc) const
Definition PID.cpp:221
IMU::EulerAngles p
Definition imuExampleAllData.cpp:21
Definition PID.h:154
float p
Definition PID.h:155
float outCap
Definition PID.h:158
float d
Definition PID.h:157
float i
Definition PID.h:156
float integralCap
Definition PID.h:159
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