54 lines
1.4 KiB
Arduino
54 lines
1.4 KiB
Arduino
|
/********************************************************
|
||
|
* PID Adaptive Tuning Example
|
||
|
* One of the benefits of the PID library is that you can
|
||
|
* change the tuning parameters at any time. this can be
|
||
|
* helpful if we want the controller to be agressive at some
|
||
|
* times, and conservative at others. in the example below
|
||
|
* we set the controller to use Conservative Tuning Parameters
|
||
|
* when we're near setpoint and more agressive Tuning
|
||
|
* Parameters when we're farther away.
|
||
|
********************************************************/
|
||
|
|
||
|
#include <PID_v1.h>
|
||
|
|
||
|
//Define Variables we'll be connecting to
|
||
|
double Setpoint, Input, Output;
|
||
|
|
||
|
//Define the aggressive and conservative Tuning Parameters
|
||
|
double aggKp=4, aggKi=0.2, aggKd=1;
|
||
|
double consKp=1, consKi=0.05, consKd=0.25;
|
||
|
|
||
|
//Specify the links and initial tuning parameters
|
||
|
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
|
||
|
|
||
|
void setup()
|
||
|
{
|
||
|
//initialize the variables we're linked to
|
||
|
Input = analogRead(0);
|
||
|
Setpoint = 100;
|
||
|
|
||
|
//turn the PID on
|
||
|
myPID.SetMode(AUTOMATIC);
|
||
|
}
|
||
|
|
||
|
void loop()
|
||
|
{
|
||
|
Input = analogRead(0);
|
||
|
|
||
|
double gap = abs(Setpoint-Input); //distance away from setpoint
|
||
|
if(gap<10)
|
||
|
{ //we're close to setpoint, use conservative tuning parameters
|
||
|
myPID.SetTunings(consKp, consKi, consKd);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//we're far from setpoint, use aggressive tuning parameters
|
||
|
myPID.SetTunings(aggKp, aggKi, aggKd);
|
||
|
}
|
||
|
|
||
|
myPID.Compute();
|
||
|
analogWrite(3,Output);
|
||
|
}
|
||
|
|
||
|
|