Hi! Ich habe eine Frage zur Implementierung eines PID-Controllers in C (eigentlich nur P-Controller). Und zwar besteht meine Aufgabe darin, eine Motorsteuerung eines DC-Motors mit dem ATMega16 zu erstellen. Diese soll mit 4 Buttons (12% Speed hoch/runter, 25% Speed hoch/runter) realisiert werden. Mittels eines weiteren Buttons soll zwischen Open-Loop und Closed-Loop umgeschaltet werden. Soweit so gut. Die Geschwindigkeit des Motors lese ich an einem Sensor-Pin des Motors ab, indem ich via Interrupt (INT2) einen Frequenz-Zähler (f_zaehler) inkrementiere. Die Frequenz für schnell hoch ist z.B. 1030 Hz. Die Geschwindigkeit des Motors stelle ich aber über einen Timer-Vergleichswert des Timer1 ein (8-Bit Zahl). Diese 8-Bit Zahl liegt ja zwischen 0 und 255- der Wert für "schnell hoch", den ich in das Timer-Register eintragen muss liegt bei ca. 45. Da ich nun in meiner Closed-Loop-Control meinen gemessenen Wert mit dem SOLL-Wert abgleichen muss und dann wieder neu in das Vergleichsregister schreiben soll, muss ich irgendwie einen zusammenhang zwischen dem Registerwert 45 und der anliegenden Frequenz 1030 Hz (Maximum ist 4000 Hz) herstellen. Genau da drehe ich mich im Kreis! Kennt jemand das Problem und kann mir einen Tip geben? Eine 2. Frage: Wenn ich einen P-Regler implementiere, rechne ich dann zuerst den Fehler aus (SOLL-IST), multipliziere ihn dann mit einem Faktor und verwende das Ergebnis als neuen Richtwert, oder muss ich das Ergebnis mit meinem alten IST-Wert verrechnen (addieren)? Das ist mir irgendwie nicht klar geworden ... Ich wäre sehr erleichtert, wenn mir jemand von Euch helfen könnte. Im Moment ist stresst mich diese Aufgabe sehr ... Danke, Gruß Alex. (ps. Anbei mein bisherige Quellcode, falls es hilft)
P-Regler macht e=(w-x) das ist die Diff. von Soll/Ist-Wert y = kp*e Ausgang ist also e(rror)xFaktor ts
Aber was ist denn, wenn SOLL=IST ist und ich dann Null in Programm zurückgebe. Damit würde mein Motor ja auf Geschwindigkeit 0 gesetzt ...
Wenn (w-x) = 0, dann hat der Motor die Drehzahl erreicht, die er erreichen soll. Eine minimale Abweichung wird aber immer bleiben, abhängig von kp. ts
Wie Heinz shon sagte, wird dein p-regler immer regeln. desswegen würd ich ein pi-regler für solch aufgaben bevorzugen!
"Aber was ist denn, wenn SOLL=IST ist und ich dann Null in Programm zurückgebe. Damit würde mein Motor ja auf Geschwindigkeit 0 gesetzt ..." die frage habe ich mir auch schon gestellt und auch nach stundenlangem ueberlegen steig ich da nicht durch. es gibt ja 2 moeglichkeiten, was ich mit der reglung erreichen will(man stelle sich den zeiger einer uhr vor): -der zeiger steht auf 12 uhr, soll auf 3 uhr gebracht werden und da stehen bleiben. e ist in diesem fall der abstand. am anfang ist e=3, der zeiger dreht sich weiter, e wird immer kleiner und bleibt bei e=0, also auf 3 uhr stehen. soweit, so gut, der zeiger wird um 3uhr rum schwingen, aber das vernachlaessigen wir mal. -der zeiger soll sich mit konstanter geschwindigkeit drehen. e ist in diesem fall die abweichung zur wunschdrehzahl, sagen wir mal 3 umdrehungen/min. am anfang steht der zeiger. e ist 3, der zeiger faengt an sich zu drehen. irgendwann ist die drehzahl erreicht und sowohl e als auch y sind dann 0. geht man jetzt davon aus, dass der zeiger reibungsfrei immer weiter laeuft? denn in der realitaet tut er das ganz bestimmt nicht. also wird er wieder langsamer und das ganze wird sich irgendwo weit unter meiner wunschdrehzahl "einpendeln" und stark schwingen. das es schwingt, ok. aber dass es das nicht um meine wunschdrehzahl rum, sondern weit darunter machen wird, ist genau das, was ich nicht verstehe. ich bin noch nicht dazu gekommen, so etwas mal real auszuprobieren, deswegen alles nur gedankenexperimente. wie sieht das in der realitaet aus? ach ja, eine gute seite mit bildchen, den analogen schaltungen und digitalen aequivalenten dazu findet man hier: http://www.roboternetz.de/wissen/index.php/Regelungstechnik und solange man sachen wie in fall 1(position erreichen und halten) regeln will, ist auch alles sehr verstaendlich. aber fall 2 kann ich damit einfach nicht nachvollziehen.
Du hast aber das sog. Stellglied vergessen. Damit wird ja erst der Motor zum Drehen gebracht. Angenommen Du verwendest dazu eine PWM, mit folgender Steuerkennlinie: 0V Steuerspg. = 0%ED (ED steht jetzt für Einschaltdauer) 10V Steuerspg. = 100% ED Weiter angenommen 100 % ED sind 10000 U/min. Du möchtest n = 3000 U/min (wären 3V an der Steuerkennlinie) Bei kp = 10 angenommen: Deine Vorgabe ist z.B. 0,5V Zeitpunkt1: Sollwertspannung 0,5V, Istwert am Anfang x = 0 Volt. Ergibt Steuerspannung dür das Stellglied von y=10x(0,5-x)=5V, Entsprechend unserer Steuerkennlinie startet die PWM mit 50%ED, und der Motor fängt an zu drehen. Zeitpunkt2: Motor dreht jetzt bereits 1000 U/min. y=10x(0,5V-0,1V)=4V Motor dreht weiter, jedoch mit ED der PWM von 40%. Zeitpunkt3:Motor dreht jetzt bereits 2000 U/min. y=10x(0,5V-0,2V)=3V Motor dreht weiter, jedoch mit ED der PWM von 30%. Zeitpunkt3:Motor dreht jetzt bereits 3000 U/min. y=10x(0,5V-0,3V)=2V Motor dreht weiter, jedoch mit ED der PWM von 20%. Nach unserer Annahme ist das zuwenig um 3000 U/min zu drehen. Also wird die Drehzahl wieder abfallen, was die Diff. erhöht, und damit die PWM -ED vergrößert -Folge, Drehzahl steigt wieder. So, das war mal so eine Annäherung wie das funktioniert. Du siehst auch, dass auch die Messeinrichtung mit einem Faktor eingeht. Erhöhe mal in Gedanken das kp auf z.B. 100 und prüfe dann nach was passiert. ts
Da ein reiner P-Regler eine bleibende Regelabweichung besitzt ist der von Rage gemachte Vorschlag mit dem PI-Regler empfehlenswert. Wenn Du keine Regelabweichung haben willst müßtest Du mit einem reinen P-Regler hohe P-Anteile fahren was das Regelverhalten bei Soll-Drehzahl 0 stark strapazieren kann. Allerdings ist die Integrationszeit sinnvoll zu wählen. Ich würde noch einen Vorsteueranteil, der evtl. über einen weiteren Faktor skalierbar ist, hinzufügen. Erhöht die Dynamik. Wenn die Regelung zu "schlecht" wird, solltest Du über eine Kaskadierung mehrerer Regler nachdenken. Dazu müsstest Du allerdings noch andere Größen messen.
ich glaub, ich habs grad geschnallt. mit regelabweichung meint ihr nicht, dass die drehzahl leicht daneben liegt, sondern, dass bei einem reinem p-regler e nie gleich 0 wird und die drehzahl immer um einen gewissen faktor(der von der reibung abhaengt) kleiner ist. will ich also 3000upm muss ich zb 5000 vorgeben, oder besser gleich einen pi-regler nehmen. vielen dank, alex.
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.