PID Regler vhdl implementierung

Gast #1842719
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.
Gast #1842934
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?
Gast #1843902
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren