leider kenne ich mich in Sachen Regelungstechnik nicht gerade gut aus und digital schon garnicht
Trotzdem würde ich gerne via µC einen DC Motor (0…8V) ansteuern.
Ich meine mich daran zu erinnern, das ein PI Regler keine Regeldifferenz aufweist und deshalb dachte ich, dass das der perfekte Regler für mich ist.
Wie kann ich denn nun solch einen Regler als Softwarefunktion nachbilden? Gibt es dafür Algorithmen (wenn ja, wo finde ich die)? Ist ein PI Regler überhaupt geeignet für mein Vorhaben?
leider kenne ich mich in Sachen Regelungstechnik nicht gerade
gut aus und digital schon garnicht
Trotzdem würde ich gerne via µC einen DC Motor (0…8V)
ansteuern.
Ich meine mich daran zu erinnern, das ein PI Regler keine
Regeldifferenz aufweist
Zumindest nach der Einscheingzeit.
und deshalb dachte ich, dass das der
perfekte Regler für mich ist.
Über dein Problem hast du noch gar nichts geschrieben … ??
Wie kann ich denn nun solch einen Regler als Softwarefunktion
nachbilden? Gibt es dafür Algorithmen (wenn ja, wo finde ich
die)?
Die Stellgrösse berechnest du direkt aus dem Sollwert und der Abweichung zwischen Soll- und Istwert.
Dann musst du die Differenz zwischen Soll- und Istwert in festen Zeitlichen Abständen erfassen und aufaddieren. Diesen Wert addierst du dann zu deiner berechneten Stellgrösse dazu.
Ist ein PI Regler überhaupt geeignet für mein Vorhaben?
Schreibe mal, was dein Vorhaben eigentlich ist, dann kann man auch etwas dazu sagen.
Ein Regelkreis besteht aus einem Sensor, dem Regler und einem Stellglied. In deinem Fall müsstest du noch die Drehzahl oder den Strom oder weiss ich nicht was messen um überhaupt regeln zu können.
Es geht um einen Schieberegler, der mit einem Motor betrieben wird. Der DC Motor wird mit 8V angesteuert (ich hab mich also auch noch falsch ausgedrückt mit 0 bis 8v…naja). Der Schieberegler ist ein Spannungsteiler, an dem 0 bis 5V anliegen können (jetzt stimmts aber *g*). Diese Spannung wird über einen AD Wandler (8Bit) in Werte von 0 bis 255 gewandelt.
Ich möchte also meiner Routine einen Wert von Null bis 255 vorgeben können und der Motor (der const. mit 8V gespeist wird) soll auf diese Position fahren.
Der Motor muss also so lange vor bzw. zurückfahren, bis am Spg Teiler die Spannung zum zugehörigen Wert anliegt.
Ich hoffe Du kannst mit dieser kurzen Beschreibung etwas anfangen.
für ein so triviales Problem brauchst Du nicht erst noch
Regelungstechnik studieren, es sein den, das ganze soll
mit max. Geschwindigkeit gehen und Du mußt die ganze
Theorie dazu darlegen
Zum Problem an sich:
Ich nehme an, der Anstrieb ist ein Getriebemotor mit
entsprechend großer Übersetzung, oder?
1.Die Ansteurung der Motors machst Du mit Impulsen
-\> PWM = Pulsweitenmodulation.
2.Wenn die Abweichung vom Istwert zum Sollwert groß ist,
dann kannst Du den Motor mit max. Geschwindigkeit
losfahren lassen.
3.Da der Zusammenhang zwischen Position = Spannungswert
und Stellzeit recht gut liniear sein sollte, kannst
Du auch die Zeit bestimmen, die nötig ist, um die
Sollpos. anzufahren. Die Kennlinie ist natürlich etwas
abhängig von den Umgebungsbedingungen, aber für ein
recht zügiges Anfahren der Sollpos. kann hilfreich sein.
4.Wenn die Diff. einen gewissen Wert unterschreitet,
läßt Du den Motor langsamer laufen (Puls-Pausenverhältnis
anpassen).
5.Wenn die Diff. sehr klein ist, nur noch mit einzelnen
kurzen Impulsen arbeiten, bis Istwert = Sollwert ist.
6.Auf Grund von Rauschen, Vibration und externen Störungen
kann es passieren, daß der Istwert ständig um den
Sollwert schwankt. -\> Tiefpaß bilden und eine kleine
Hysterese einbauen (also z.B. erts nachstellen, wenn
die abweichung \> 3 Digit ist).
7.Beim Stellen wirst Du auch feststellen, daß bei Umkehr
der Richtung wegen Spiel im Getriebe eine Totzeit
auftritt. Entweder kannst Du sowas verhindern, indem Du
das Getriebe spielfrei machst (z.B mit Feder vorspannen).
oder Du berücksichtigst dies im Algorythmus
-\> z.B. nach jeder Richtungsumkehr eine def. Impulszeit
den Motor fahren lassen und dann erst die Impulse
wieder verkürzen.
8.Die kürzeste Pulszeit, die möglich ist, kannst Du durch
Ausprobieren ermitteln. Nach meiner Erfahrung sind mind.
ca. 10ms...20 nötig, damit der Motor sich tatsächlich
bewegt.
Gruß Uwi
Stimmt, meine Angaben sind sehr dürftig.
Es geht um einen Schieberegler, der mit einem Motor betrieben
wird. Der DC Motor wird mit 8V angesteuert (ich hab mich also
auch noch falsch ausgedrückt mit 0 bis 8v…naja). Der
Schieberegler ist ein Spannungsteiler, an dem 0 bis 5V
anliegen können (jetzt stimmts aber *g*). Diese Spannung wird
über einen AD Wandler (8Bit) in Werte von 0 bis 255 gewandelt.
Ich möchte also meiner Routine einen Wert von Null bis 255
vorgeben können und der Motor (der const. mit 8V gespeist
wird) soll auf diese Position fahren.
Der Motor muss also so lange vor bzw. zurückfahren, bis am Spg
Teiler die Spannung zum zugehörigen Wert anliegt.
Ich hoffe Du kannst mit dieser kurzen Beschreibung etwas
anfangen.
habe dein Posting erst jetzt gelesen, daher eine späte Antwort. Nein, einen PI Regler brauchst du nicht. Du hast ja einen so genannten „Abtastregler“ mit deinem µC (ist das übrigens ein CControl? Mit dem realisiere ich nämlich gerade einen PD-Regler für meine Heizung). Und ein Abtastregler kann so konstruiert werden, dass er keine bleibende Regelabweichung hat! Uwi hat schon einige zu beachtende Dinge geschrieben. Allerdings meine ich, dass du es einfacher hast, wenn du den Motor einfach ansteuerst, bis du keine oder nur eine vorgegebene geringe Abweichung hast.
Ich steuere so den Mischermotor meiner Heizung an. Abhängig von der Regelabweichung lasse ich den Motor ein Stück laufen (auf oder zu), wobei
Laufzeit = P-Faktor \* Regelabweichung
ist. „P-Faktor“ ist ein Proportionalitätsfaktor, den ich experimentell bestimmt habe. Das wiederholt sich im Minutentakt. Du kannst natürlich einen kürzeren Takt nehmen, der aber länger sein sollte als die Motorlaufzeit - das ist ein bisschen Probiererei, das einzustellen.
Zur Ergänzung: Leider ist in meiner Regelstrecke + Temperatursensor (Vorlauftemp.) eine Totzeit von ca. 2 min, dann noch eine Zeitkonstante von mehr als 5 min. Das fange ich ein bisschen mit einem D-Anteil ab, soll heißen, ich messe die Temp.differenz zwischen aktuellem und vorherigen Takt. Je größer diese ist, desto mehr Korrekturfaktor muss ich einfügen, damit die Temp. nicht weit über den Sollwert hinausschießt, volkstümlich ausgedrückt: ich steuere rechtzeitig gegen. Damit ergibt sich folgende Berechnung in jedem Takt: