Ich hab mal was kleines in C++ geschrieben um den Spaß zu Simulieren und zu versuchen es zu versthen:
Code:
#include <iostream>
#include "..\GITFrameworkW32.h"


using namespace std;

int main()
{
	int esum=0;
	int ist[6]={9,10,8,1,15,20};
	int e;
	int y;
	int Kp=5;
	int Ki=5;
	int Kd=5;
	int Ta=5;
	int soll=15;
	int ealt=0;

	for(int i=0;i<6;i++){
	e=soll-ist[i];
	esum += e;
	y=Kp*e+Ki*Ta*esum+Kd*Kd*(e-ealt)/Ta;
	ealt = e;

	git_printf("Soll Wert: %i\r\nIst Wert: %i\r\nRegel Wert: %i\r\n\r\n", soll, ist[i], y);

	}
return 0;
}
An dem GIT Kram nicht stören, das ist eine Oberfläche von der Hochschule, so ein kleines nettes Fenster das man nich immer in der Konsole arbeitet.

Ausgabe ist:
Soll Wert: 15
Ist Wert: 9
Abweichung: 6
Regel Wert: 210

Soll Wert: 15
Ist Wert: 10
Abweichung: 5
Regel Wert: 295

Soll Wert: 15
Ist Wert: 8
Abweichung: 7
Regel Wert: 495

Soll Wert: 15
Ist Wert: 1
Abweichung: 14
Regel Wert: 905

Soll Wert: 15
Ist Wert: 15
Abweichung: 0
Regel Wert: 730

Soll Wert: 15
Ist Wert: 20
Abweichung: -5
Regel Wert: 625
Wie interpretier ich das jetzt auf mein PWM Signal? Würde ich den spaß auf 8 bit begrenzen würde er ja immer 100% fahren Oder wo ist der denkfehler?


Edit: Mir fällt grad ein das Kd Ki etc. ausschlaggebend für den Regler sind und ich die willkürlich zum test auf 5 gelegt hab, das kann logischerweise Variieren. Das tu ich gerade mal

Edit2: Bzw wie stell ich den Spaß so ein das ein Sinnvoller PWM wert bei y herrauskommt (den ich ja ggf. Nach oben und unten je nach Bitbreite des Timers begrenzen kann)? Oder liegt der wurm noch wo anders? Ich bin bei "Ist" von einer Drehzahl ausgegangen die von einem Sensor kommt