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


von A. (Gast)


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:
1
intern_data_width        : integer := 28;
2
3
k_p: in std_logic_vector(intern_data_width-1 downto 0);
4
k_i: in std_logic_vector(intern_data_width-1 downto 0);
5
k_d: in std_logic_vector(intern_data_width-1 downto 0);
6
7
8
k_p => "0000000001110000000000000000",
9
k_i => "0000000000000000000000100000",
10
k_d => "0000000000000000001000000000",
11
12
--Regeldifferenz
13
14
e => 000000100000000
15
16
--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.

von noips (Gast)


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?

von Armin (Gast)


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

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.