PID Regler auf 8bit AVR(mega32)

OP #2397149
Lesenswert?

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...
OP #2397183
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren