rims-arduino-library  v3.1.1
Recirculation infusion mash system library for Arduino
RimsTuner.h
Go to the documentation of this file.
1 
7 #ifndef RimsTuner_h
8 #define RimsTuner_h
9 
10 
11 
13 #define STEP0VALUE 30.0
14 #define MEANTEMPTIME 1680000
17 #define STEADYTIMELENGTH 1800000
20 
23 #define RELAYSAMPLEFACTOR 15
24 
26 #define RELAYSTEP 25.0
27 #define RELAYHYST 1.0
29 
32 #define MAXSAMPLEPERPERIOD 200
33 
35 #define MODELPARAMTOL 0.05
36 #define MAXRELAYPERIOD 8
38 
39 
40 #include "Arduino.h"
41 #include "Rims.h"
42 #include "utility/UIRims.h"
43 
44 
69 class RimsTuner : public Rims
70 {
71 
72 public:
73  RimsTuner(UIRims* uiRims, byte analogPinTherm, byte ssrPin,
74  double* currentTemp, double* ssrControl, double* settedTemp);
75 
76  void setFlowSensor(byte pinFlow, float flowFactor,
77  float lowBound = -1, float upBound = 100,
78  float critalFlow = -1);
79 
80 
81 protected :
82 
83  void _initialize();
84  void _iterate();
85 
86  void _refreshTuner();
87 
88  void _relayInit();
89  bool _relayAction();
90  bool _relayStartNewPeriod();
91  void _relayEnd();
92 
93  float _evalAmplitude();
94  void _calcTuningPID(float T, float A);
95 
96 private :
97 
98  // === RELAY TRESHOLD ===
99  unsigned int _steadySignalSampleQty;
100  float _steadySignalSampleSum;
101  float _relayTreshold;
102 
103  // === RELAY UNDERSAMPLING ===
104  unsigned int _samplingFactorIndex;
105 
106  // === RELAY DATA FOR AMPLITUDE AND PERIOD EVALUATION ===
107  unsigned int _signalSampleQty;
108  float _signalSamples[MAXSAMPLEPERPERIOD];
109 
110  // === RELAY PERIODS AND AMPLITUDES ===
111  bool _halfPeriodCompleted;
112  char _curRelayPerIndex;
113  float _measuredPer [MAXRELAYPERIOD];
114  float _measuredAmpl [MAXRELAYPERIOD];
115 
116  // === PID COEFFICIENTS ===
117  float _Kp;
118  float _Ki;
119  float _Kd;
120  float _tauFilter;
121 
122 };
126 #endif
RimsTuner(UIRims *uiRims, byte analogPinTherm, byte ssrPin, double *currentTemp, double *ssrControl, double *settedTemp)
Consructor.
Definition: RimsTuner.cpp:16
Toolkit to automatically tune PID without a process model.
Definition: RimsTuner.h:69
#define MAXSAMPLEPERPERIOD
Max signal samples per relay period (limited by SRAM), i.e., with default values, maxMeasurableRelayP...
Definition: RimsTuner.h:32
void _relayInit()
Init relay for identification procedure.
Definition: RimsTuner.cpp:152
float _evalAmplitude()
Evaluate fundamental harmonic amplitude of previously saved samples.
Definition: RimsTuner.cpp:273
void _calcTuningPID(float T, float A)
Calculate auto-tuned PID coefficients after tuning procedure.
Definition: RimsTuner.cpp:298
void _iterate()
Iterations for RimsTuner instance.
Definition: RimsTuner.cpp:79
bool _relayAction()
Save a signal sample for amplitude evaluation and switch relay output if treshold is reached...
Definition: RimsTuner.cpp:171
Rims class declaration, related macro and global variables.
void _relayEnd()
Evaluate PID coefficients and show them on UIRims.
Definition: RimsTuner.cpp:242
#define MAXRELAYPERIOD
Maximal relay period before forcing auto-tuner ending [integer].
Definition: RimsTuner.h:37
Library to manage LCD and keypad for Rims library.
Definition: UIRims.h:68
void _refreshTuner()
Refresh relay identification and compute critical point parameters.
Definition: RimsTuner.cpp:116
UIRims class declaration and related macro.
Recirculation infusion mash system (RIMS) library for Arduino.
Definition: Rims.h:145
bool _relayStartNewPeriod()
Start new relay identification period.
Definition: RimsTuner.cpp:208
void _initialize()
Initialize RimsTuner before iterations.
Definition: RimsTuner.cpp:24
void setFlowSensor(byte pinFlow, float flowFactor, float lowBound=-1, float upBound=100, float critalFlow=-1)
Same as Rims::setFlowSensor.
Definition: RimsTuner.cpp:314