hi,
du hast die möglichkeit deine drehzahl zu bestimmen, indem du die zeit zwischen 2 impulsen misst, oder die anzahl der impulse innerhalb einer festen zeit. bei der 2. möglichkeit ist ta die zeit, in der die impulse gezählt werden.
esum wird nicht auf 0 gesetzt, sondern bleibt wie es ist. es wird dann halt etwas weiter zurückgeregelt, sodass es wieder 0 ist. bei esum spielt die abweichung seit dem start ne rolle. du hast die möglichkeit eine art vergessen einzubauen, indem du esum=0.95*esum+e machst, so werden weit zurückliegende ereignisse schwächer gewichtet.
wenn du die drehzahl differenz als eingang verwendest, bekommt du dann eine pwmdifferenz heraus. du kannst es ja dann so machen, dass du das ergebnis zum einen rad addierst, beim anderen abziehst, und jeweils begrenzst, falls es den maximalen oder minimalen wert überschreitet. wenn du willst, kannst du dann das beim nächsten regeldurchlauf weiterverwenden.
du kannst auch einfach auf ta verzichten, und ki_neu=ki*ta und kd_neu=kd/ta als konstanten verwenden.
dann hast du:
pwmdiff=kp*e+ki_neu*esum*kd_neu*(e-ealt)
dann kannst du mal ungefähre werte für die konstanten abschätzen, wenn du weißt wie groß dein eingangsignal e ist, und wie groß dein ausgangssignal pwm sein soll. ich würde am anfang ki ganz klein, oder sogar 0 wählen.
mfg jeffrey