Ich bin ein Elektrotechniker, der in die digitale Welt hineingestoßen ist und dabei lernt. Ich programmiere einen TI-Prozessor für eine PID-Schleife (Proportional-Integral-Derivative) , die in diesem Diagramm dargestellt ist:
Ich werde es auch beschreiben:
Operationsverstärker mit negativer Rückkopplung, mit nicht invertierendem Anschluss geerdet. Eingang über Minuspol. Die Rückkopplungsschleife ist eine RE-Reihenschaltung parallel zu einem Widerstand und alles parallel zu einer Kappe.
Hat jemand eine Idee, wie man diese Schaltung in C-Code konvertiert? Ich bin ein bisschen außer meinem Element und könnte die Hilfe gebrauchen.
dt
in die Konstanten, anstatt zusätzliche Teilungen und Multiplikationen in der Schleife durchzuführen.Antworten:
Die Rennbahn
Ok, ich habe gerade ein Konto hier erstellt, als ich diese Frage sah. Ich kann Ihre Frage nicht bearbeiten, damit ich den Tippfehler korrigieren kann, den Sie gemacht haben. Ich glaube, Sie meinten RC-Serienschaltung parallel statt RE (wenn ja, habe ich keine Ahnung, was das bedeutet)
Die analoge Schaltung, die Sie mit C simulieren möchten, sieht ungefähr so aus
(Ich konnte meinem Drang, dies zu zeichnen, nicht widerstehen, da ich Ihnen erzählen wollte, wie Elektro- / Elektronikingenieure in Foren und E-Mails ohne Bilder kommunizierten ... und warum wir Kurierschriftarten mit fester Breite einfach lieben.)
Ich muss gestehen, dass die von Ihnen verwendete Schaltung einfach einzurichten ist, aber mathematisch sehr komplex ist, wenn es darum geht, die Propotional-, Integral- und Derivativkonstanten des Systems individuell auf einen gewünschten Wert abzustimmen. Dies ist nicht möglich.
Ich empfehle dringend, dass Sie die Schaltung aus dieser Quelle zum Lernen verwenden.
Obwohl das Einrichten etwas mühsam ist, ist es mathematisch viel einfacher zu analysieren, da Sie es direkt auf die mathematische Standardform anstatt auf die ideale beziehen können.
Zuletzt steuert der Vout einen Motor oder was auch immer gesteuert werden muss. Und Vin ist die variable Prozessspannung.
Bevor Sie Ihre Füße in C (Meer?) Nass machen
Ich gehe davon aus, dass Sie die Signale von einem Analog-Digital-Wandler lesen. Wenn nicht, müssten Sie das Signal als Eingang simulieren.
Wenn wir das Standardformular verwenden, haben wir
Angenommen, die Laufzeit der Schleife ist klein genug (ein langsamer Prozess), können wir die folgende Funktion zur Berechnung der Ausgabe verwenden:
wo
wobei anfänglich 'der' und 'int' Null wären. Wenn Sie eine Verzögerungsfunktion im Code verwenden, um die Schleifenfrequenz auf 1 kHz abzustimmen, beträgt Ihr dt 0,001 Sekunden.
Zeichnung in C.
Ich habe diesen hervorragenden Code für PID in C gefunden, obwohl er nicht jeden Aspekt abdeckt, aber dennoch gut ist.
Wenn wir einen langsamen Prozess ausführen, können wir eine niedrigere Frequenz verwenden, sodass die Ausführungszeit für dt >>> Code für eine einzelne Schleife (weitaus größer als) ist. In solchen Fällen können wir den Timer abschaffen und stattdessen eine Verzögerungsfunktion verwenden.
quelle