Mercurial > hg > beaglert
annotate core/Pid.cpp @ 151:e9c9404e3d1f ClockSync
Pff partially working. No PID. When setting the audio clock on the bbb to 44098 the master and slave clock keep diverging instead of converging ...
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Tue, 22 Sep 2015 04:10:07 +0100 |
parents | 134bff10e561 |
children | 8f98b32d0e23 |
rev | line source |
---|---|
giuliomoro@149 | 1 /* |
giuliomoro@149 | 2 * Pid.cpp |
giuliomoro@149 | 3 * |
giuliomoro@149 | 4 * Created on: 14 Sep 2015 |
giuliomoro@149 | 5 * Author: giulio |
giuliomoro@149 | 6 */ |
giuliomoro@149 | 7 |
giuliomoro@149 | 8 #include "Pid.h" |
giuliomoro@149 | 9 |
giuliomoro@149 | 10 Pid::Pid(){ |
giuliomoro@149 | 11 integralError = 0; |
giuliomoro@149 | 12 pastError = 0; |
giuliomoro@149 | 13 error = 0; |
giuliomoro@149 | 14 differentialError = 0; |
giuliomoro@149 | 15 kp = 5; |
giuliomoro@149 | 16 ki = 2; |
giuliomoro@149 | 17 kd = 0.8; |
giuliomoro@149 | 18 idleTimeout = 0; |
giuliomoro@149 | 19 timeoutCount = 0; |
giuliomoro@149 | 20 output = 0; |
giuliomoro@149 | 21 // printf("----------%f %f %f %f %f %f\n", kp, error, ki, integralError, kd, differentialError); |
giuliomoro@149 | 22 } |
giuliomoro@149 | 23 void Pid::updateIntegralError(){ |
giuliomoro@149 | 24 integralError += (error + pastError) * 0.5 * ts; |
giuliomoro@149 | 25 } |
giuliomoro@149 | 26 void Pid::updateDifferentialError(){ |
giuliomoro@149 | 27 differentialError = (error - pastError) / ts; |
giuliomoro@149 | 28 } |
giuliomoro@149 | 29 float Pid::setError(float anError){ |
giuliomoro@149 | 30 pastError = error; |
giuliomoro@149 | 31 error = anError; |
giuliomoro@149 | 32 ts = 1; //TODO: this should be passed as a parameter, unless setError() gets always called at constant intervals |
giuliomoro@149 | 33 updateIntegralError(); |
giuliomoro@149 | 34 updateDifferentialError(); |
giuliomoro@149 | 35 output= kp * error + ki * integralError + kd * differentialError; |
giuliomoro@149 | 36 // printf("%f %f %f %f %f %f %f\n", output, kp, error, ki, integralError, kd, differentialError); |
giuliomoro@149 | 37 return output; |
giuliomoro@149 | 38 } |
giuliomoro@149 | 39 float Pid::getOutput(){ |
giuliomoro@149 | 40 return output; |
giuliomoro@149 | 41 } |
giuliomoro@149 | 42 |
giuliomoro@149 | 43 |