Konvertieren Sie PID-Parameter in das Q15-Format

Ich habe die Übertragungsfunktion meines Systems berechnet, um eine PID darauf anzuwenden. Mit MATLAB und dem PID-Tuner-Tool habe ich die Kp, Kiund KdParameter meines PID-Reglers bekommen. In meinem Fall sind sie beispielsweise 0,175, 371,22 bzw. 0.

Jetzt muss ich diese Werte in meinem DSP verwenden, aber der PID-Algorithmus verwendet das Q15-Bruchformat für alles. Ich weiß, wie ich die Eingangs- und Ausgangswerte meiner PID skalieren soll:

  • Wenn der maximale Eingabewert ist x, teilen Sie ihn durch, xwenn er von -xbis geht x, oder tun Sie , wenn er von bis (x/2)-1geht , und konvertieren Sie ihn dann in Q15-Bruchzahlen0x

  • Für den Ausgabewert skalieren Sie ihn einfach nach Ihren Bedürfnissen

Aber wie konvertiere ich meine PID-Parameter und KpQ15 richtig? Wenn ich einen Faktor auf sie anwende, wie ich es für die Eingangs- und Ausgangswerte tue, ändere ich tatsächlich die Schleifenantwort, also wie wird das gemacht? Ich denke, dies sollte beim Entwerfen digitaler PIDs eine ziemlich häufige Vorgehensweise sein.KiKd

Antworten (2)

Zunächst einmal sind die maximal darstellbaren Werte des Q15-Formats -1 und 0,9999. Sie könnten also ein Problem mit Ihrem Ki haben.

Die gebräuchlichste Lösung, um ein Double in ein Q15 umzuwandeln, besteht darin, es mit 2^15 zu multiplizieren.

Normalerweise verwende ich dieses Makro:

#define Q15(x)(s16) ((x<0.0) ? (s16)(32768*(x) - 0.5):(s16)(32768*(x) + 0.5))

Da Ihr Ki aber nicht mit dem Q15-Format arbeitet, sollten Sie ein anderes Q-Format verwenden. zB: Q6 oder Q7.

Weitere Informationen finden Sie auf Wikipedia .

Also gibt es einfach keine Möglichkeit, ich muss meine Parameter unter 1 halten?
Oder Sie könnten Ihre Parameter nur 6 Mal verschieben. (=F6)
Der Code funktioniert weiterhin, wenn er für die Verwendung mit Q15 entwickelt wurde und ich Q6 verwende?
Ändern Sie einfach die Bruchlänge von 15 (32768) auf 6 (64).

Sie können die interne Matlab-Funktion: fi(v) verwenden, um ein numerisches Festkommaobjekt zu konstruieren: https://de.mathworks.com/help/fixedpoint/ref/fi.html