krnl 1
Loading...
Searching...
No Matches
apidalg.ino
Go to the documentation of this file.
1// JUST A SIMPLE PID CONTROLLER
2// Jens
3
4#define epsilon 0.01
5#define dt 0.01 //100ms loop time
6#define MAX 4 //For Current Saturation
7#define MIN -4
8#define Kp 0.1
9#define Kd 0.01
10#define Ki 0.005
11
12float PIDcal(float setpoint,float actual_position)
13{
14 static float pre_error = 0;
15 static float integral = 0;
16 float error;
17 float derivative;
18 float output;
19
20 //Caculate P,I,D
21 error = setpoint - actual_position;
22
23 //In case of error too small then stop intergration
24 if(abs(error) > epsilon)
25 {
26 integral = integral + error*dt;
27 }
28 derivative = (error - pre_error)/dt;
29 output = Kp*error + Ki*integral + Kd*derivative;
30
31 //Saturation Filter
32 if(output > MAX)
33 {
34 output = MAX;
35 }
36 else if(output < MIN)
37 {
38 output = MIN;
39 }
40 //Update error
41 pre_error = error;
42
43 return output;
44}
45
46void setup()
47{
48}
49
50void loop(void) {
51}
#define epsilon
Definition apidalg.ino:4
void loop(void)
Definition apidalg.ino:50
#define MAX
Definition apidalg.ino:6
void setup()
Definition apidalg.ino:46
#define Ki
Definition apidalg.ino:10
#define Kp
Definition apidalg.ino:8
#define dt
Definition apidalg.ino:5
#define Kd
Definition apidalg.ino:9
#define MIN
Definition apidalg.ino:7
float PIDcal(float setpoint, float actual_position)
Definition apidalg.ino:12