Problem mit PID-Regelung


hallo zusammen,

ich bin ein totaler arduino neuling und nutze dieses board aber nun für eine studienarbeit.
ich möchte die geschwindigkeit eines motor über einen poti regeln aber gleichzeitig soll sich die geschwindigkeit in abhängigkeit der werte, die ich von einem ultraschallsensor einlese, ändern.

pid vpid(&vist, &vger,&vsoll, kp, ki, kd, direct);
void setup(){
    serial.begin(9600);
    pinmode(motora, output);
    pinmode(motorb, output);
    pinmode (pwm, output);
   digitalwrite(csr, high);
    vpid.setoutputlimits(0 , 255); //falls variablen double!!
   vpid.setmode(automatic);
   vpid.setsampletime(sampletime);
}

void loop(){
   vsoll=analogread(poti)/4.02;

  digitalwrite(motora, high);
  digitalwrite(motorb, low);

vist=vsoll- abstandsmessung()/5;

vschiebpid.compute();
analogwrite(pwmlvger);
}
int abstandsmessung()
{
   //    // turn on display:
   lcd.display();
   pinmode(pingpin, output);
    digitalwrite(pingpin, low);
    delaymicroseconds(2);
    digitalwrite(pingpin, high);
    delaymicroseconds(5);
    digitalwrite(pingpin, low);
    pinmode(pingpin, input);
    duration = pulsein(pingpin, high);
    abstand = microsecondstocentimeters(duration);
    return abstand;
}

long microsecondstocentimeters(long microseconds)
{
  return microseconds / 29 / 2;
}

der motor gibt nun immer sehr stockend gas. und oft wenn er soll aber auch wenn man nichts ändert beschleunigt der motor stockend.


kann mir jemand helfen ich falsch mache?

vielen danke
grüße

pack mal bitte das ganze programm (in "code"-tags) rein.
hier stimmt einiges nicht.

z.b. _muss_ sampletime einen wert enthalten-man kann die zeile auch ganz weg lassen, dann wird die voreinstellung benutzt.
glaub, 200ms...

dann heisst dein regler pid vpid, später aber lässt du _den_ gar nicht berechnen, sondern irgendwas, vorher nie intialisiertes namens vschiebpid...
auch der kommentar da ist quatsch:  vpid.setoutputlimits(0 , 255); //falls variablen double!!
hat damit absolut nix zu tun, outputllimits beschreibt lediglich den bereich, in dem sich die ausgangsgrösse des reglers bewegen soll!
wenn du den motor über ne pwm ansteuerst, die 256 stufen hat, ist deine programmzeile richtig, aber der kommentar dahinter zeigt, dass du nicht verstanden hast, wozu die gut ist.

Übrigens: für eine regelung braucht man _immer_ ein feedback- woher soll der regler sonst wissen, wann, und wie weit er zu regeln hat?

mit deinen vorgaben (bzw. dem, du hier erklärt hast) brauchst du lediglich nen drehzahlsteller.
ohne feedback (was der motor _wirklich_ macht) _kann_ eine regelung nicht funktionieren.
hab da ja  nen verdacht, aber-> beschreib das problem mal bitte _richtig_ und genau.


Arduino Forum > International > Deutsch (Moderator: uwefed) > Problem mit PID-Regelung


arduino

Comments

Popular posts from this blog

opencv3, tbb and rasp pi 2 - Raspberry Pi Forums

small ethernet problem - Raspberry Pi Forums

Multithumb configuration params not working? - Joomla! Forum - community, help and support