Ich habe meinen Kopf auf diesem Projekt für eine Weile geschlagen und brauche etwas Anleitung. Es ist ein Magnetschwebegerät, das im Kontrolltheorieunterricht verwendet wird. Ich habe den Kurs noch nie besucht, also habe ich versucht, ihn durch Online-Kurse und Bücher zu lernen. Ich glaube, ich verstehe einige der Grundlagen, aber nicht genug, um das herauszufinden.
Das System soll so funktionieren, dass ein Elektromagnet seinen Ausgang pulsiert, um ein Objekt (in meinem Fall einen Permanentmagneten) in der Schwebe zu halten.
Kurze Beschreibung des Systems: Es gibt einen Elektromagneten, der durch ein PWM-Signal von einem Arduino gesteuert wird. Der Arduino weiß oder soll wissen, welche Einschaltdauer basierend auf dem Strom durch den Elektromagneten und den Hall-Effekt-Sensor bereitzustellen ist.
Wenn sich das Objekt dem Hallsensor nähert, steigt der Wert des Hallsensors. Das Schlimme dabei ist, dass der Hallsensor auch darauf reagiert, wenn sich der Strom, der von der PWM gesteuert wird, durch den Elektromagneten ändert. Um diesen Effekt zu beseitigen, messen wir den Strom durch den Elektromagneten, wandeln ihn in einen "Hallwert" um und subtrahieren ihn, um den Messwert des Hallsensors zu normalisieren. Dies ergibt tatsächlich ein reines Ablesen des Abstands des Objekts relativ zum Hallsensor.
Schaltplan
Jetzt ist mein Problem, wie man das System charakterisiert und abstimmt.
Eine der Techniken zur Charakterisierung des Systems besteht darin, einen Impuls oder einen Schritt bereitzustellen und die Reaktion des Systems zu messen. Ich habe versucht, eine Sprungantwort zu verwenden, die den Elektromagneten im Wesentlichen mit Strom versorgt. Jetzt ist die Frage, wie ich die Reaktion messe. Wenn ich dem Elektromagneten volle Kraft gebe, schießt der Permanentmagnet hoch und bleibt hängen. Ich habe eine Überschreitungssituation. Wenn ich weniger Strom gebe, passiert eigentlich gar nichts. Ich stecke in einer binären Situation fest: Der Permanentmagnet bewegt sich entweder nicht oder schießt hoch und bleibt stecken.
Wie kann ich dieses System mit dieser Einschränkung charakterisieren?
Ich habe auch versucht, nur einen PID-Regler zu verwenden und zu raten, um ihn abzustimmen, bin aber immer wieder auf dieselben Probleme gestoßen.
Danke,
Es gibt ein paar Probleme mit Ihrer Implementierung.
Wenn Sie Probleme haben, den Magneten stabil zu bekommen, denken Sie daran, dass dies möglicherweise nichts mit Ihren PID-Verstärkungen und alles mit der Aktualisierungsrate des Regelkreises zu tun hat. Als ich meinen Magnetschwebebahn machte, war das absolute Minimum, das ich zum Arbeiten bekam, 200 Hz. Besonders wenn Sie Fließkomma-Mathematik für den PID-Controller eines AVR verwenden, wette ich, dass Sie keine stabile Levitation erhalten können. Machen Sie stattdessen alles mit 8-Bit- und 16-Bit-Integer-Mathematik (bekannt als Festkomma ), und Sie werden leicht Zykluszeiten unter einer Millisekunde erreichen können.
Sowohl der Eingang als auch der Ausgang Ihres PID-Reglers hängen nicht linear mit dem zusammen, was Sie steuern möchten (Sie möchten den Abstand erfassen und die Aufwärtskraft steuern). Stattdessen ist die Ausgabe des Hall-Effekt-Sensors proportional zum multiplikativen Inversen des Quadrats des Abstands, und die vom Elektromagneten auf den Magneten ausgeübte Kraft ist nicht nur proportional zum Spulenstrom, sondern auch umgekehrt proportional zum Quadrat des Abstands .
PID-Regler mögen diese Nichtlinearität nicht. Sie sollten die Nichtlinearitäten in Ihrem Regelsystem kompensieren, damit der Regler in einem linearen Raum arbeitet. Berechnen Sie für die Eingabe eine lineare Entfernung von der Ausgabe des Hall-Effekt-Sensors und speisen Sie diese einstatt des Rohwertes an die Steuerung. Wenden Sie für den Ausgang weniger Strom für eine bestimmte angeforderte Kraft an, wenn der Magnet näher ist, damit die Anziehungskraft unabhängig von der Entfernung ist.
Es gibt auch eine bessere Möglichkeit, den Beitrag des Elektromagneten aus dem Ausgang des Hall-Effekt-Sensors zu eliminieren:
Abtasten Sie den Ausgang des Hall-Effekt-Sensors synchron mit Ihrem PWM-Ausgang, sodass der Fluss nur gemessen wird, wenn der Spulenstrom am Ende jeder PWM-Periode auf Null abgeklungen ist. Was die Hardware angeht, ist der einzige Nachteil, dass Sie auf einer niedrigeren Ebene programmieren müssen und die Analog-Digital-Wandlung in jedem Zyklus in einem Timer-Interrupt starten müssen. Filtern Sie den ADC-Eingang in diesem Fall jedoch nicht tiefpassfilternd.
Benutzer253751
pgvoorhees
Ich Gr
Ich Gr
jonk
Ich Gr