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...
Gast
#2397169
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?
Gast
#2397546
Du sollst die Stellgröße so berechnen lassen wie es dein geklauter Code eben hergibt und dann einfach auf den Bereich 0-255 runterrechnen.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.