pid auto-tune

This commit is contained in:
rusefi 2017-09-13 22:08:59 -04:00
parent c40a892683
commit 06037cd4ce
2 changed files with 110 additions and 0 deletions

View File

@ -0,0 +1,59 @@
/*
* pid_auto_tune.cpp
*
* Created on: Sep 13, 2017
* @author Andrey Belomutskiy, (c) 2012-2017
*/
#include "pid_auto_tune.h"
PID_AutoTune::PID_AutoTune() {
running = false;
nLookBack = 50;
oStep = 10;
noiseBand = 0.5;
}
int PID_AutoTune::Runtime() {
justevaled = false;
if (peakCount > 9 && running) {
running = false;
FinishUp();
return 1;
}
justevaled = true;
if (!running) {
//initialize working variables the first time around
peakType = 0;
peakCount = 0;
justchanged = false;
absMax = input;
absMin = input;
setpoint = input;
running = true;
outputStart = output;
output = outputStart + oStep;
for (int i = nLookBack - 1; i >= 0; i--) {
// default values for history array
lastInputs[i] = input;
}
} else {
if (input > absMax)
absMax = input;
if (input < absMin)
absMin = input;
}
//oscillate the output base on the input's relation to the setpoint
if (input > setpoint + noiseBand)
output = outputStart - oStep;
else if (input < setpoint - noiseBand)
output = outputStart + oStep;
return 0;
}

View File

@ -0,0 +1,51 @@
/*
* pid_auto_tune.h
*
* http://brettbeauregard.com/blog/2012/01/arduino-pid-autotune-library/
*
*
* Created on: Sep 13, 2017
* @author Andrey Belomutskiy, (c) 2012-2017
*/
#ifndef CONTROLLERS_MATH_PID_AUTO_TUNE_H_
#define CONTROLLERS_MATH_PID_AUTO_TUNE_H_
class PID_AutoTune {
public:
PID_AutoTune();
void reset();
void FinishUp();
int Runtime();
bool isMax, isMin;
/**
* sensor position
*/
float input;
/**
* actuator duty cycle
*/
float output;
/**
* trigger line
*/
float setpoint;
float noiseBand;
//int controlType = 1;
bool running;
unsigned int peak1, peak2, lastTime;
//int sampleTime;
int nLookBack;
int peakType; // todo: convert to enum
float lastInputs[101];
float peaks[10];
int peakCount;
bool justchanged;
bool justevaled;
float absMax, absMin;
float oStep;
float outputStart;
float Ku, Pu;
};
#endif /* CONTROLLERS_MATH_PID_AUTO_TUNE_H_ */