LINUX.ORG.RU

История изменений

Исправление WRG, (текущая версия) :

сейчас как раз этим и занимаюсь. вывожу ошибку на serial и смотрю через picocom. она почему-то всегда равна как раз 13, т.е. конечному результату, который я хочу получить. буду колупать дальше, почему не так работает.

накопал еще arduino pid library, там функция, аналогичная моей pid_compute() выглядит так

bool PID::Compute()
{
   if(!inAuto) return false;
   unsigned long now = millis();
   unsigned long timeChange = (now - lastTime);
   if(timeChange>=SampleTime)
   {
      /*Compute all the working error variables*/
	  double input = *myInput;
      double error = *mySetpoint - input;
      ITerm+= (ki * error);
      if(ITerm > outMax) ITerm= outMax;
      else if(ITerm < outMin) ITerm= outMin;
      double dInput = (input - lastInput);
 
      /*Compute PID Output*/
      double output = kp * error + ITerm- kd * dInput;
      
	  if(output > outMax) output = outMax;
      else if(output < outMin) output = outMin;
	  *myOutput = output;
	  
      /*Remember some variables for next time*/
      lastInput = input;
      lastTime = now;
	  return true;
   }
   else return false;
}

Исходная версия WRG, :

сейчас как раз этим и занимаюсь. вывожу ошибку на serial и смотрю через picocom. она почему-то всегда равна как раз 13, т.е. конечному результату, который я хочу получить. буду колупать дальше, почему не так работает.