www.mikrocontroller.net

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


Autor: Alex M. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)

Autor: Heinz Schenk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Heinz Schenk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rage (Gast)
Datum:

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

Autor: Alex Trusk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Heinz Schenk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex Trusk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.