annotate core/Pid.cpp @ 150:ebbfb154351a ClockSync

Now leveraging BBB's lock between xenomai clock and audio clock for ultra-accurate, low-latency clocking. CAVEAT: fractions of samples drifts will occurr every time the clock is changed
author Giulio Moro <giuliomoro@yahoo.it>
date Tue, 22 Sep 2015 04:09:13 +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