www.mikrocontroller.net

Forum: FPGA, VHDL & Co. PID Regler vhdl implementierung


Autor: A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab ein kleines Problem
Ich habe einen PID Regler in VHDL implementiert, ich möchte dass die P I 
D Anteile, die ich selbst festlege, auch gebrochenrationale Zahlen sein 
können. Ich habe dazu jeweils ein Register das eine Wortbreite von 28 
bit hat, dabei entsprechen die ersten 10 bit vor dem Komma und die 
letzten 18 bits nach dem komma. Die Auflösung des ADC DAC beträgt 14 
bit. Das heißt wenn meine Regeldifferenz entsteht will ich sie dann auf 
die interne Wortbreite erweitern(28 bit), um dann mit den eizelnen 
Anteilen zu multiplizieren.

Bsp.:

Meine PID Anteile sehen wiefolgt aus:
intern_data_width        : integer := 28;

k_p: in std_logic_vector(intern_data_width-1 downto 0);
k_i: in std_logic_vector(intern_data_width-1 downto 0);
k_d: in std_logic_vector(intern_data_width-1 downto 0);


k_p => "0000000001110000000000000000",
k_i => "0000000000000000000000100000",
k_d => "0000000000000000001000000000",

--Regeldifferenz

e => 000000100000000

--z.B e_mult_kp


also muss ich erst e auf die interne Wortbreite erweitern um dann mit 
den Anteilen multiplizeiren zu können. kann mir einer erklären wie man 
das erweitert, was man dabei berücksichtigen muss. Wäre für jede Hilfe 
Dankbar.
Danke.

MfG
A.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich es richtig verstehe, bekommst du deine Regeldifferenz als einen 
analogen Wert und wandelst das in ein 14-bit Wort. Dieses Wort willst du 
dann als Dezimalzahl darstellen und an deine interne Wortbreite 
anpassen. Stimmt es so?

Autor: Armin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich würde mal sagen, das hängt ganz klar, davon ab, wie du den 
Messbereich des ADC im Programmcode abbilden willst.

also du hast einen Wertebereich mit 14bit
und einen mit 28 bit

also beispielsweise könntest du rechts an die 14bit nullen dranhängen, 
um den maximalen bereich von den 28bit mit niedrigerer Genauigkeit 
abzudecken.

Beachte aber auch, dass wenn du eine 28 bit-Zahl mit einer 28 bit-Zahl 
multiplizierst, eigentlich eine 56 bit-Zahl herauskommen kann. Von der 
Genauigkeit her.

ki*e ist wohl gleich null mit deinen oberen Werten, wenn du das auf 
28bit zurückrechnest

Ein Suchbegriff wäre vielleicht auch "Q-Format". Das kann zwar nur 
zahlen <1 aber wenn man die Systematik verstanden hat, lässt sich auch 
etwas anderes bauen

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]
  • [vhdl]VHDL-Code[/vhdl]
  • [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.