Grüße zusammen, ich bin an einem PID-Regler schier am verzweiflen. Mein Ziel ist einfach, einen doppelten PID-Regler auf einem Mega32 in C zu rea- lisieren. Der soll als Eingang einen Wert einer globalen Variable konsumieren und als Stellgröße einen PWM-Duty-Cycle regeln. Also, gegeben: - Meßgröße1: unsigned int, globale Variable (0-4000) - Sollwert1: unsigned int, globale Variable (0-4000) - Stellgröße1: unsigned char, Timer OCR0 (PWM) (0-255) - Meßgröße2: signed int, globale Variable (-1000 - +1000) - Sollwert2: unsigned int, globale Variable ( 0 - + 200) - Stellgröße2: unsigned char, Timer OCR2 (PWM) (0-255) Die Meßgröße 1 wird zu bestimmten Zeitpunkten von Timer 1 erfaßt (RPM eines Lüfters), Meßgröße 2 wird in der Hauptschleife ermittelt, wenn die MCU eben Leerlauf hat... Nun hab ich in der AVR221 schon C-Code gefunden, da steht aber nicht drinnen, wie man den die Werte passend skaliert für eben die 8bit PWM. Falls möglich, tät ich gerne kein float verwenden, das spart nämlich Speicherplatz. Kann mir jemand einen Denkanstoß geben? Danke...
Werte doch im ersten Anlauf doch einfach mal die 8 MSB des auf 12bit berechneten Sollwertes aus... Und dann schau was passiert :-)
Das kapier ich net: 1. Sollwert1 (bleibt ja konstant!) z.B. = 0x01FF, maskiert 0xFF, PWM = 100%, motor läuft ständig volle pulle. 2. Wenn Du die Differenz aus (Ist-Soll) meinst: Dank PID nimmt die ja irgendwann ab, geht gegen 0, davon 8bit wären 0, PWM aus, Motor steht... Oder steh ich am Schlauch?
Du sollst die Stellgröße so berechnen lassen wie es dein geklauter Code eben hergibt und dann einfach auf den Bereich 0-255 runterrechnen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.