Abtastrate für die PID-Steuerung zum Ausgleichen eines umgekehrten Pendels mit 8051 - AT89c51rc2

Ich möchte einen Gleichstrommotor steuern (um ein invertiertes Endulum auszugleichen). Ich möchte den Eingang von Sensoren (zB: ADXL345) abtasten und mit einem DAC in digital umwandeln. Die maximale Ausgangsdatenrate (ODR) für den Sensor ADXL beträgt 3200 Hz. Die Eingangsabtastrate und die Ausgangssteuerdatenrate zum Motor sollten hoch, aber nicht zu hoch sein, da der Prozessor Zeit benötigt, um auch PID-Steuerberechnungen durchzuführen. Aber wie berechnet man die Abtastrate und die Ausgangssteuerdatenrate zum Motor unter Berücksichtigung dieser?

Antworten (3)

Dies hängt von der Dynamik Ihres Systems ab, über das Sie uns nichts gesagt haben. Es kommt wirklich auf die Höhe Ihres umgekehrten Pendels an. Je kürzer (vom Drehpunkt zum Massenmittelpunkt), desto schneller reagiert es und desto schneller muss der Regelkreis sein.

Unter der Annahme, dass dies ein Pendel im menschlichen Maßstab ist, vielleicht 1 Fuß bis 1/2 Meter oder so, sagt mein Bauchgefühl, dass die Regelschleife für den Anfang alle 10 ms laufen sollte. Bedeutende Dinge sollten auf der Zeitskala von einigen 100 ms passieren, daher scheint eine Schleifenzeit von 10 ms ungefähr richtig zu sein. Sie möchten die Schleife im Allgemeinen 20-50 Mal pro Zeitkonstante erster Ordnung ausführen.

Die Kompromisse bestehen darin, dass eine schnellere Schleifenzeit Ihnen mehr Granularität verleiht, aber zu schnell bedeutet, dass der D-Term hauptsächlich Rauschen sieht und die I-Beiträge im Verhältnis zum Ausgabewert sehr klein sind. Nehmen wir an, Sie verwenden aus Gründen der Geschwindigkeit und Einfachheit Gleitkommazahlen mit 16-Bit-Mantisse. Wenn die I-Beiträge so klein sind, dass sie 1000-mal kleiner sind als der kumulierte Wert, dann sind Sie auf 6 Bits von I pro Beitrag gesunken. Das mag noch ok sein, aber darunter würde ich nicht gehen wollen. Sie können mehr Bits (und damit mehr Zyklen) auf das I-Auflösungsproblem werfen, aber Sie können den D-Term nicht beheben, indem Sie hauptsächlich Rauschen oder einzelne Sensorschritte (Quantisierungsrauschen) sehen.

Sie scheinen davon auszugehen, dass die Abtastrate und die Schleifenrate gleich sind. Sie sollten nicht sein. Ich würde versuchen, die Sensoren viel schneller als die Schleifenperiode abzutasten, etwa alle 100 bis 500 µs, je nachdem, was Ihre A/Ds und Sensoren können. Wenden Sie dann zwei Pole der Tiefpassfilterung auf die Sensorwerte an, aber halten Sie die Sprungantwortzeit bei mindestens 80 % oder so in einer Schleifenzeit.

Der Vorteil des Filterns besteht darin, dass Sie die hohen Frequenzen dämpfen, die nicht zur Steuerung der Anlage beitragen, aber Jitter und andere Probleme verursachen. Es reduziert auch das Quantisierungsrauschen und bringt Ihnen sogar ein oder zwei zusätzliche Bits, vielleicht weil ein Messwert das Ergebnis einer Reihe von Eingangsabtastungen ist.

Angenommen, Sie können alle Eingänge einmal alle 200 µs abtasten. Mit zwei Polen der Tiefpassfilterung unter Verwendung eines Filteranteils [FILT <-- FILT + FF(NEW – FILT), wobei FF der Filteranteil ist] von 1/16 (multipliziert mit FF ist eine Verschiebung um 4 Bits nach rechts), dann erhalten Sie 83 % schwingen in Ihrer Schleifenperiode von 10 ms ein. Aber keine Probe trägt mehr als etwa 2,5 % zur Ausgabe bei.

Ja, es gibt High-Fallutin-Mathematik, um all dies im Voraus zu berechnen, wie einige der anderen Antworten gezeigt haben. Das Problem dabei ist jedoch normalerweise, dass Sie Dinge über Ihr System wissen müssen, die Sie nicht kennen und die Sie nicht einfach messen können. An einer vernünftigen Stelle zu beginnen und dann nach Bedarf zu optimieren, ist normalerweise einfacher und schneller. Allerdings muss man wirklich verstehen , was vor sich geht, sonst tappt man nur im Dunkeln.

Dies ist eine schöne Antwort. Die Art von Sachen, die in der Schule gelehrt werden sollten.

Geben Sie hier die Bildbeschreibung einWenn Sie die Möglichkeit haben, den Sensor mit hoher Geschwindigkeit (3200sps) zu bekommen, können Sie diese Daten zusätzlich filtern (FIR oder IIR), um reibungslose Daten zu erhalten. Über die Abtastgeschwindigkeit, Bobal: Digital Self-tuning controllers:

Die Antwort ist natürlich „ausreichend“.

Was ist ausreichend?

Sie haben ein geschlossenes Regelsystem. Wenn Sie eine Sensorleseperiode von t Sekunden haben, haben Sie allein dadurch eine Steuerlatenz von mindestens t/2 Sekunden. Wenn Ihre Mathematik Pipelining verwendet, werden mehr Zyklen hinzugefügt. Ihr Motorsteuerungs-DAC fügt eine weitere t / 2-Latenz hinzu.

Die Steuerlatenz fügt Ihrem Regelkreis eine Phasenverschiebung hinzu, dies neigt dazu, Ihren Regelkreis zu destabilisieren, zusätzlich zu all den anderen Phasenverschiebungen, gegen die Sie kämpfen.

Als Faustregel gilt, dass die Steuerungslatenz nicht mehr als etwa 10 bis 20 Grad zusätzlichen Phasenspielraum bei der Einheitsverstärkungs-Crossover-Frequenz beitragen soll. Es gibt wenig Nutzen, um es viel unter 10 Grad zu bekommen, Sie müssen hart an anderen Phasenverschiebungselementen arbeiten, wenn es viel mehr als 20 Grad ist.

Daher möchten Sie als Obergrenze, dass die Summe Ihrer Sampling-, Berechnungs- und Motorantriebslatenz <1/(20*f0dB) beträgt, wobei f0dB Ihre Einheitsverstärkungs-Crossover-Frequenz ist.

Was ist dein f0dB? Je länger das Pendel, desto niedriger kann Ihr f0dB sein und desto langsamer können Sie abtasten, bevor Sie auf Instabilität stoßen.

Ich empfehle Ihnen dringend, das System zu modellieren, das Sie bauen möchten. Matlab (wenn Sie Zugriff darauf haben) oder Octave sind eine gute Wahl, ich verwende Python gerne mit numpy, scipy und matplotlib, obwohl Sie einen Schaltungssimulator oder sogar eine Tabellenkalkulation dazu zwingen könnten. Und finden Sie heraus, was in einem idealen System passieren sollte, bevor Sie die reale Welt darauf loslassen. Sobald Sie sich im Simulator befinden, können Sie zusätzliche Latenz hinzufügen und sehen, was funktioniert.