Hallo zusammen, ich beschäftige mich zum ersten Mal mit Reglern(P,PI,PID). Ich habe vor mit einem Schrittmotor Jalousien je nach Lichteinstrahlung hoch bzw. runter zu fahren. Dabei wird die Lichteinstrahlung durch eine Fotodiode gemessen. Der Schrittmotor bekommt "Tics" vom µC, ob er nun hoch oder runter fahren soll. Ich habe versucht das Prinzip hier zuveanschaulichen: while(1){ Istposition = ConvertMotorTics(ReadADCPhotodiode()); tics = PID(Sollpos - Istpos, Istpos); Motor(tics); } PID{//prinzip pid pTerm = Kp * error;//p-Regler iState += error; iTerm = Ki * iState; //I-Regler dTerm = Kd * (Istpos - dState); dState = Istpos; //D-Regler return pTerm + iTerm - dTerm; } D.h. über einen ADC des µC wird die Lichteinstrahlung gemessen. Da ich aber die Istposition in Tics brauche muss ich eine fkt erstellen mit der ich den HEX-Wert des ADC (Lichteinstrahlung) in Tics für den Motor umwandele. Danach über gebe ich dies an die PID fkt. Dieser gibt einen Wert in Tics zurück, mit dem ich den Motor ansteuere. Meine Frage nun ist die Prinzip was ich mir gedacht habe soweit richtig? Mir ist nicht ganz klar wie ich die Soll bzw. Istposition festlege. Denn "Istposition = ConvMotorTics(ReadADCPhoto());" ist ja meine aktuelle Istposition, aber doch gleichzeitig meine Sollposition, da sich der motor an die Helligkeit anpassen muss?? Und brauche ich überhaupt eine pid, reicht nicht ein einfacher p, da der Schrittmotor linear mit Tics funktioniert? Vielen Dank für Tips um meinen Denkfehler aufzulösen!!
Hi Harald, so, wie Du deine Anwendungs schilderst, würde ich sagen dass ein PID-Regler sicherlich nicht das Richtige für dich ist. Das Problem ist, wie Du schon vermutest Soll und Ist Wert identisch sind, soweit nur die Photodiode an das System angeschlossen ist. Daher ist der Regelfehler immer gleich null und somit besteht auch kein Bedarf an eine Regelung. Allerdings kannst Du ja sicherlich auch sagen: OK, dann schreibe ich halt dem Regler vor, wie hell es im Zimmer sein SOLL (per Tastaturvorgabe etc), und messe mit der Photodiode IM Zimmer die - diffuse - IST Helligkeit. Daraus bilde ich dann die Abweichung und lasse sie von einem wie auch immer gearteten Regler anpasse, indem die Jalusie öffnet oder schließt. Ein PI-Regler sollte dann aber reichen, den P Anteil brauchst Du um den ADC-Wert an die Schrittmotor-Tics (Jalusie-Position) anzupassen und den I-Anteil, um eine bleibende Regelabweichung zu korrigieren. Aufgrund des extrem langsamen Systems wird ein D- Anteil wohl eher den Schrittmotor zerstören, da dann bei jedem an der Diode vorbeifliegendem Insekt die Jalusie mit vollgas geöffnet wird....
Super, ich sitze hier schon seit einigen Stunden, und jetzt nach deiner Hilfe erscheint mir das Problem doch einfach! Danke! Eine Frage noch, bitte: Den Sollwert lege ich vor der Whileschleife fest. Danach läuft die Regelung in der Schleife non-stop und richtet sich an den SollWert. Richtig? D.h. ich müsste jetzt einfach nur Kp und Ki bestimmen (Ich hab da mal was von Ziegler-Nichols-paramenter gehört, wo man bestimmte Faktoren an den Kp bzw. Ki setzt.): Kp bestimmt man, indem man den Ki zuerst weg lässt und den Kp solange verstärkt bis der Schrittmotor ozilliert, sprich sich dieser nicht mehr an einem bestimmten punkt einpendeln kann, also immer hoch<=>runter. Ki wird dann so dimensioniert, dass das ozillieren verschwindet. Hast du vielleicht eine Idee wie man den Wert des ADC(Photodiode) in Tics umwandeln kann(ConvertMotorTics)? Waren wohl mehr als eine Frage ;-)
Hm, warum denn überhaupt so kompliziert? Ist die Helligkeit zu hoch wird die Jalousie langsam (Schnell wird wohl eh nicht möglich sein ;) ) geschlossen, bis die Abweichung ein bestimmtes Mass unterschritten hat (Nennt sich auch Hysterese) und wenn es zu dunkel ist eben umgekehrt. Aufwändigere Regelverfahren wie PID brauchst du erst, wenn die Messung des Ist-Wertes z.B. relativ langsam ist, wie bei Temperaturregelungen. Da beginnt's sonst zu schwingen. Aber das Licht wird schon genügend schnell durch dein Fenster gehn, damit das kein Problem wird. Und mit 20 Messungen pro Sekunde oder sowas müsstest du schon eine ausreichend kleine Hysterese hinbekommen, ausser deine Jalousie braucht vom einen bis zum anderen Anschlag nur ein paar Millisekunden ;)
Hi @Philipp, eine Hysterese hört sich schon sinnvoller an. Der Motor könnte bei Änderung des Lichts mit einer konst. Geschwindikeit hoch,runter fahren bis die photodiode den sollwert misst. Bei den PI-Regler würde der Motor erst schnell dann langsamer anfahren bis zum Sollwert, oder? "Aufwändigere Regelverfahren wie PID brauchst du erst, wenn die Messung des Ist-Wertes z.B. relativ langsam ist, wie bei Temperaturregelungen. Da beginnt's sonst zu schwingen." Dies habe ich nicht ganz verstanden. Man kann doch 20 Mal die Sekunde die Temperatur messen oder, wo liegt da das Problem?
Achso, Verstehe ich das so: Die Regelstrecke bei Temp/Heizung ist lang, man sieht den Effekt später. Daher muss der Istwert langsam an den sollwert anpassen.(keine ozillation verursachen) Bei Licht/Jalousie ist die Streck kurz, den Effekt ist direkt zu erkennen. Daher kann direkt der Istwert auf den Sollwert einstellen werden, da aber der Motor nicht unendlich schnell ist, kann man es einfach durch eine while(soll==ist){ motor++; sleep//wartzeit bis der motor ein tic gefahren hat. } Natürlich fehlt hier noch das Hystereseverhalten, also (minGrenze<--->SollHelligkeit<----->maxGrenze)
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.