forked from niclash/Arduino-PDF-Library
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPDF_control.h
80 lines (62 loc) · 3.93 KB
/
PDF_control.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#ifndef PID_v1_h
#define PID_v1_h
#define LIBRARY_VERSION 1.0.0
class PDF {
public:
//Constants used in some of the functions below
#define AUTOMATIC 1
#define MANUAL 0
#define DIRECT 0
#define REVERSE 1
//commonly used functions **************************************************************************
PDF(double *, double *, double *, // constructor. links the PDF to the Input, Output, and
double, double, int); // Setpoint. Initial tuning parameters are also set here
void SetMode(int Mode); // sets PDF to either Manual (0) or Auto (non-0)
bool Compute(); /* performs the PDF calculation. it should be
called every time loop() cycles. ON/OFF and
calculation frequency can be set using SetMode
SetSampleTime respectively
*/
void SetOutputLimits(double, double); /* clamps the output to a specific range. 0-255 by default, but
it's likely the user will want to change this depending on
the application
*/
//available but not commonly used functions ********************************************************
void SetTunings(double, double); /* While most users will set the tunings once in the
constructor, this function gives the user the option
of changing tunings during runtime for Adaptive control
*/
void SetControllerDirection(int); /* Sets the Direction, or "Action" of the controller. DIRECT
means the output will increase when error is positive. REVERSE
means the opposite. it's very unlikely that this will be needed
once it is set in the constructor.
*/
void SetSampleTime(int); /* sets the frequency, in Milliseconds, with which
the PDF calculation is performed. default is 100
*/
//Display functions ****************************************************************
double GetKp(); // These functions query the pid for interal values.
double GetKi(); /* they were created mainly for the pid front-end,
where it's important to know what is actually
*/
int GetMode(); // inside the PDF.
int GetDirection(); //
private:
void Initialize();
double dispKp; // we'll hold on to the tuning parameters in user-entered
double dispKi; // format for display purposes
double kp; // (P)roportional Tuning Parameter
double ki; // (I)ntegral Tuning Parameter
int controllerDirection;
double *myInput; // Pointers to the Input, Output, and Setpoint variables
double *myOutput; // This creates a hard link between the variables and the
double *mySetpoint; /* PDF, freeing the user from having to constantly tell us
what these values are. with pointers we'll just know.
*/
unsigned long lastTime;
double ITerm, lastInput;
unsigned long SampleTime;
double outMin, outMax;
bool inAuto;
};
#endif