Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

esp32 adaptive tuning #140

Open
tomislav12 opened this issue Oct 19, 2023 · 2 comments
Open

esp32 adaptive tuning #140

tomislav12 opened this issue Oct 19, 2023 · 2 comments

Comments

@tomislav12
Copy link

double Setpoint, Input, Output;
PID myPID(&Input, &Output, &Setpoint, 0, 0, 0, DIRECT);

setup() {
Input = 10;
Setpoint = 10;
double Kp = 10; // CHANGED
double Ki = 0;
double Kd = 0;
myPID.SetOutputLimits(-200, 200);
myPID.SetSampleTime(16);
myPID.SetMode(AUTOMATIC);
myPID.SetTunings(Kp, Ki, Kd);
}
loop() {
// below is simplified, in real code it is in some function call):
Input = 5; // (simplified change)
myPID.Compute();
SerialBT.println(Output); // only takes initial params into consideration (0,0,0) ! Why is that?
}

Second question, I need to have params 20,0,-10, can Kd be below zero?

@tomislav12
Copy link
Author

tomislav12 commented Oct 28, 2023

Another question, I found this inside the library code:

"SetOutputLimits(...)
This function will be used far more often than SetInputLimits.  while
 the input to the controller will generally be in the 0-1023 range (which is
 the default already,) ...."

Is input really needed to be 0-1023 or can it be eg 0-12?
Anyway, I cannot find the function SetInputLimits or the default(1023) mentioned in the code of this library...

@drf5n
Copy link

drf5n commented Jul 31, 2024

There are no bounds on the input limits. The input need only be in the same units/range to be compatible with Setpoint, so that these calculations make sense:

/*Compute all the working error variables*/
double input = *myInput;
double error = *mySetpoint - input;
double dInput = (input - lastInput);
outputSum+= (ki * error);

This reference to a non-existent SetInputLimits is spurious:

/* SetOutputLimits(...)****************************************************
* This function will be used far more often than SetInputLimits. while
* the input to the controller will generally be in the 0-1023 range (which is
* the default already,) the output will be a little different. maybe they'll
* be doing a time window and will need 0-8000 or something. or maybe they'll
* want to clamp it from 0-125. who knows. at any rate, that can all be done
* here.
**************************************************************************/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants