Forum: FPGA, VHDL & Co. PID-Regler


von Max (Gast)


Lesenswert?

Hallo Leute

Wer kann mir von Euch unverbindlich eine "Pi mal
Daumen"-Gatterabschätzung für einen digitalen PID-Regler geben, der in
VHDL realisiert werden soll?

Ich kann's nicht abschätzen, weil ich hier Null Erfahrung habe.
Welche Parameter muss ich euch dazu geben, oder könnt ihr mir bereits
so eine Angabe machen?
1000 Gatteräquivalente?
2000 Gatteräquivalente?
5000 Gatteräquivalente?

Bitte schreibt mir.
Danke.

Max

von Max (Gast)


Lesenswert?

Hallo Experten (VHDL-User)

Kann mir Niemand wenigstens Pi-Mal-Daumen weiterhelfen?
Bitte!
Danke...

Max

von AxelM (Gast)


Lesenswert?

Hi...
also ich habe in der Hinsicht noch nichts gemacht, aber das sit doch
eine aufgabe für einen DSP. Wenn ich richtig informiert bin dann sollen
Virtexbausteine soetwas am besten lösen können oder?
Also schnapp dir doch mal das Webpack und entwickle den VHDL Code.
Vorher gibst du an das du einen Virtex (bei Xilinx) xy nutzt.
Machst du das für dein Studium? Wenn ja dann habt ihr bestimmt Matlab
zur verfügung. Da kannst du dann auch nen PID Regler ersellen nud den
dann mit dem passenden interface in Modelsim exportieren. Soll sehr gut
funktionieren.


evtl bringt dich mein halbwissen ja auf den richtigen weg.
Axel

von Oma-mit-Dackel (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

wir haben im Rahmen unserer Technikerausbildung (Fach Regelungstechnik)
einen mathematischen Algorithmus für einen PID-Regler erstellt. Doktor
Siefker(Namen merken ! bringt ein Buch zum Thema digitale
Regelungstechnik raus) hat den PID Regelalgorihmus in eine Summenformel
gebracht. Ich bin gerade dabei die PI-Regler-Formel an meinem Atmel
anzupassen. Später soll die Temperatur einer Kafferöstmaschine geregelt
werden. WICHTIG: To = Zykluszeit des Kontroller = Zeitraum zwischen den
Berechnungen wenn du das Programm Regelmässig mit einem Timer aufrufst
ist das diese Zeit ! Tv = Vorhaltezeit, Tn = Nachstellzeit Kp =
P-Anteil des Regler, e = rückgeführte Grösse: e = w-r wobei w =
Sollwert und r der Istwert von der Messwerterfassung ist. Um eine
Aufnahme der Sprungantwort wirst du nicht herumkommen (Ermittlung von
Kp, Tv, Tn).

Viel Spass dabei....

von Gunkl (Gast)


Lesenswert?

hat da etwa Hans-Axel Mayer als AxelM geschrieben?
haha, so ein gayhavi

von Sebastian (Gast)


Lesenswert?

Auf einen FPGA könnte man es mal mit einem Fuzzy-Regler probieren. Ein
Fuzzy-Regler kann man auch als PID-Regler programmieren. Das
Stellsignal wird aus Teilmengen gebildet. Matlab hilft da auch weiter.

Also ich denke das müßte super funktioniern. Werde ich mal auf meine
TODO-Liste setzen.

Gruß,
Sebastian

von Winni Gruber (Gast)


Lesenswert?

Oder du machst einfach das, was ein Regler tut:
Addieren, multiplizieren,.... also parallele Struktur.
Wird superschnell!
Hab mal einen PI-Regler so gebastelt und mehr als zufrieden mit dem
Ergebnis

von christian (Gast)


Lesenswert?

hi winni

kannst du den code für deinen pi regler mal ins forum stellen.
das wäre echt net.

von winni (Gast)


Lesenswert?

hi christian!
Nun, den kompletten Code, das bringt dir nix, weil er zu speziell ist,
aber das Prinzip kann ich dir erklären.

Neue Sollwerte kommen zyklisch (muss so sein)
Immer wenn ein neuer Sollwert kommt, dann stösst du den Regelagorithmus
an, generierst dir also nen Trigger, den die Berechnung startet. Und so
geht´s dannn los:

if trigger = '1' then
-- Berechnung der Regelabweichung
Regelabweichung := Sollwert - Istwert;

-- Integrieren der Regelabweichungen
Regelabweichung_Summe := Regelabweichung_Summe + Regelabweichung;

-- stellen der Stellgröße
Stellgröße := Regelabweichung_Summe * ki + Regelabweichung * kp;

end if;

Das war´s im Prinzip schon.
Die werte ki und kp sind die Regelparameter und müssen abhängig von dem
verhalten deiner Regelstrecke ermittelt werden (Probieren, oder
Sprungantwort aufnehmen und berechnen). Selbstredend, dass du natürlich
mit Reset deine Variablen und Register sinnvoll vorbelegst.


Ausserdem würde ich die werte für Regelabweichung,
Regelabweichung_Summe und Stellgröße sinnvoll kappen, wenn sie einen
bestimmten Wert über oder unterschreiten:

if Regelabweichung > 1000 then Regelabweichung := 1000;
if Regelabweichung < -1000 then Regelabweichung := -1000;

sonst kann bei zu großen Abweichungen beim Anschwingen dein Regler
verrücktspielen (klaro, wenn dein Register überläuft und das Ergebnis
auf einmal negativ wird, da das MSB springt.

Ich hoff, dass dir das hilft. Wie gesagt, um die richtigen Werte zu
finden, muss man einfach ein bisschen "Spielen" oder eben Messen udn
rechnen.

Tipp: der Regler wird super präzise, wenn du mehr Bits für deine
Stellgrößen etc spendierst, als du eigentlich benötigst und dann auf
diesen "Nachkommstellen" regelst. Ausgegeben werden dann aber nur die
benötigten Bits.

von Peter Rinas (Gast)


Lesenswert?

Hallo Max

Wie das Leben so spielt. Bin gerade selbst dabei, einen PID-Regler in
VHDL zu entwickeln. Also sooo einfach wie Du Dir das vorstellt, ist es
nun doch nicht, wenn Du einen richtigen professionellen Regler
schreiben willst.
Dinge die da zu klären sind:
-Berechnung der Faktoren: Aus den Eingaben von P,I,D müssen die
entsprechenden Faktoren berechnet werden. Soll der FPGA das machen oder
macht das ein Bedienkomputer? In den Faktorberechnungen geht die
Abtastzeit mit ein. Der Regler soll ja unabhängig von der Abtastzeit
immer das gleiche machen
-Moment des Einschaltens und des Ausschaltens des Regelkreises (wenn Du
nur Temperatur damit regeln willst, sicher kein Problem, bei einer
Maschine schon)
- Genauigkeit; 16 Bit sollten es schon sein. Willst Du mit Gleitkomma
oder Festkomma arbeiten? Bei Festkomma kommst Du ohne Bitschieberei
nicht aus, um eine hinreichend große interne Genauigkeit (auf jeden
Fall wesentlich größer wie 16 Bit)zu bekommen, sonst könnte es sein,
daß der Regler schwingt (sog. Grenzschwingungen, durch das nicht zu
umgehende Abschneiden/Runden)
- und da gibt es noch einige andere Dinge zu beachten wie Begrenzung
des I-Anteils, der Stellgröße etc.
Der PID-Regler war einmal Thema meiner Dipl.Arbeit, damals(vor 20
Jahren) allerdings auf einem Einplatinenkomputer. Ich habe den
Algorithmus auch schon in Assembler auf anderen Prozessoren
geschrieben, da ist es natürlich leichter als auf einem FPGA.
Was ich machen werde steht schon fest. Ich werde den Regler in
Gleitkomma schreiben, die entsprechenden Routinen für Mult, Add,
Umwandlung Gleitkomma <> Festkomma habe ich schon (aus einem sehr guten
Buch von Günter Jorke "Rechnergestützter Entwurf dig. Schaltungen",
kann ich nur empfehlen). Der Algorithmus liegt auch schon fest (wenn Du
einen brauchst, kann ich ihn Dir zumailen).
Ich bin kein FPGA-Experte (sondern ein "Newbe"), aber nach meiner
Einschätzung wird das Ding wegen der vielen Multiplikationen und
Divisionen schon einiges an Resourcen brauchen, bei Gleitkomma
wesentlich mehr wie bei Festkomma.
Gruß
Peter

von Roger S. (edge)


Lesenswert?

Hallo,

wir haben in unserem Projekt einen VHDL PID-Regler im einsatz,
ist Teil eines FPGA basierten Motorcontrollers.
Die Implementation des Reglers ist recht trivial (fixpunkt),
die wesentlichen Teile der PID entity sind in VHDL nicht mal 100 LOCs.
Die Schwierigkeit ist wohl in der Anwendung und Verstaendniss.
Synthetisiert bringts unsere Implementation auf etwa 450 StratixII
ALUTs
mit einer Handvoll DSP elements. Und da ist IMHO beim PID-Regler auch
der groesste Resourcenverbrauch -> im Multiplizierer. Ohne Hardware
Multiplizierer brachte es der Regler auf ueber 2500 4-LUTs.
Wiviel das nun in Gatter sind ist relativ schwer abzuschaetzen,
aber das ist vermutlich auch nicht mehr so aktuell.

Cheers, Roger

von Peter Rinas (Gast)


Lesenswert?

Hallo Roger

habe leider zu spät aufs Datum gesehen und gemerkt, daß die Nachricht
über ein halbes Jahr alt ist. In dem Board wird wohl nicht
aufgeräumt??
Vielen Dank noch einmal zu Deiner Antwort. Noch eine kurze Bemerkung
von mir zum PID-Regler: Die Schwierigkeit liegt nicht so sehr in der
Implementation des Algorithmus (wenn es auch da Feinheiten zu beachten
gibt), sondern in dem Verhältnis der P,I,D Parameter untereinander
(richtige Größenordnung!). Glaubt man zudem, man könnte sich auch die
Berechnung der Faktoren sparen (weil man meint diese direkt vorgeben zu
können und weil es Aufwand erspart), dann hast du alles mögliche, aber
keinen PID-Regler. Das Ding mag zwar irgendwie regeln, nur fehlt dann
eben das typische PID Verhalten. Um das beurteilen zu können, sollte
man doch ein wenig was von Regelungstechnik verstehen....
Ich will meinen Regler wie gesagt in Gleitkomma realisieren(um auf 16
Bit echte Genauigkeit zu kommen)und auf einem Xilinx unterbringen. Mal
sehen, wieviel Resourcen ich da verbrauche.

gruß
Peter

von Peter Rinas (Gast)


Lesenswert?

Hallo Sebastian
Dein Fuzzy PID-Regler würde mich schon interessieren. Kennst Du Dich da
näher aus? Habe auch mal drüber nachgedacht. Müßte mich aber erst mal in
die Thematik einarbeiten. Bis dato werde ich es wohl erst mal mit dem
klassischen PID-Regler versuchen, den kenne ich nämlich bestens.
Gruß
Peter

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.