Salve,
prma di procedere alla taratura manuale del PID che bilancia il mio segway (SI CI STO ANCORA LAVORANDO!!
DA DICEMBRE :~), mi chiedevo se poteste consigliarmi qualche miglioria o correzione da aggiungere nella funzione.
(Il SampleTime è 0.1 secondi e non ho riportato le variabili per semplicità.)
int ComputePid(){
unsigned long now = millis();
unsigned long timeChange = (now - lastTime);
if(timeChange>=SampleTime)
{
error = Setpoint - input;
ITerm += (ki * error * timeChange);
if(ITerm > 1000) ITerm= 0;
if(ITerm < -1000) ITerm= 0;
PTerm = kp * error;
if(PTerm >= outMax) PTerm= outMax;
if(PTerm < -outMax) PTerm= -outMax;
DTerm = kd * ((error - lastErr)/timeChange);
output = PTerm + ITerm - DTerm;
if(output <= -outMax) output= outMax;
if(output > outMax) output = outMax;
lastInput = input;
lastTime = now;
lastErr = error;
}}