Forum: Mikrocontroller und Digitale Elektronik PID-Control mit ATMega 16 und DC-Motor


von Alex M. (Gast)


Angehängte Dateien:

Lesenswert?

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)

von Heinz Schenk (Gast)


Lesenswert?

P-Regler macht

e=(w-x)   das ist die Diff. von Soll/Ist-Wert

y = kp*e      Ausgang ist also e(rror)xFaktor



ts

von Alex M. (Gast)


Lesenswert?

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 ...

von Heinz Schenk (Gast)


Lesenswert?

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

von Rage (Gast)


Lesenswert?

Wie Heinz shon sagte, wird dein p-regler immer regeln. desswegen würd
ich ein pi-regler für solch aufgaben bevorzugen!

von Alex Trusk (Gast)


Lesenswert?

"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.

von Heinz Schenk (Gast)


Lesenswert?

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

von ... (Gast)


Lesenswert?

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.

von Alex Trusk (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.