Hallo Leute,
da ich es immer Hasse wenn Sachen gefragt werden und die Leute dann keine Antwort schreiben:
Ich habs nun:
e sollte float sein
Dann gehts auch wieder mit viel P und wenig I...
Hier die relevanten glob. Variablendefinitionen:
volatile int motorsoll = 0, out=0, esum = 0;
volatile float e = 0, ealt = 0;e = motorsoll - umin;
esum = esum + e/10; // esum wird sehr groß - /10 wegen Typ int
if (esum < 0) {esum = 0;} //Begrenzung I-Anteil
if (esum > 30000) {esum = 30000;}
out = (int)((0.2 * (float)e) + (0.01 * (float)esum)+ (0.1 * (float) ealt)); // perfekt für 1krpm 0.4 und 0.015
if(out>117) out = 117;
if(out<0) out = 0; // "standgas" begrenzen
OCR2A = 127 - out; // Maschine läuft grade an ; Regelung mit out 0...117
ealt = e;
Ich hoffe es hilft noch dem einen oder anderen Suchenden
Lesezeichen