Steuerung der Motordrehzahl mit PID zur Skalierung von PWM auf Drehzahl und zurück

Ich möchte die Drehzahl eines Motors mit einem PID-Regler steuern. Mein Problem ist, dass der gültige PWM-Bereich, den ich in meinem Mikrocontroller einstellen kann, von 0 bis 199 reicht , aber ich messe die Drehzahl des Motors (mit einem Encoder) im Bereich von ~ 50 bis 6000 U / min.

Wie kann ich diese Werte sinnvoll austauschen?

Beispiel:

Ich habe die Zielgeschwindigkeit auf 6000 eingestellt, wenn der Motor auf 0 U / min läuft. Dann startet die PID und in diesem Moment ist der Fehler 6000 ... also gibt die PID eine maximale Ausgabe von 32767 aus. Aber ich kann den Timer-PWM nur von 0 bis 200 einstellen.

Ich verwende den Code im Anwendungshinweis AVR221 und dort ist jede Variable eine vorzeichenbehaftete Ganzzahl (keine Gleitkommazahlen). Mein eigener Mikrocontroller ist stm32, der Gleitkommazahlen effizient verarbeiten kann, glaube ich.

Antworten (4)

Keine Notwendigkeit zu skalieren. Sie müssen Ihren PID-Reglerausgang auf 0 % und 99 % begrenzen und herausfinden, welche Faktoren am besten funktionieren. Es gibt I * R, alle Arten von Interferenzen, Beschleunigung, also hängt die Spannung nicht streng von der Geschwindigkeit ab. Tatsächlich mag es manchmal so aussehen, als gäbe es überhaupt keine Beziehung. Sie machen also PI oder PID und stimmen es ab. Best Practice ist es, überall auch SI-Einheiten zu verwenden, aber nicht zwingend.

Übrigens, und das ist sehr wichtig. Sie müssen ein Bewegungsprofil erstellen. Was bei Geschwindigkeitsregelung bedeutet, dass Sie die Geschwindigkeit entsprechend der Beschleunigung allmählich erhöhen müssen. Andernfalls kommt es zu Überschwingern und sehr instabilem Verhalten oder schlechter Steuerung, wenn Sie Ihre Verstärkung verringern, um das System zu beruhigen.

Anstelle von "Sie müssen den Ausgang Ihres PID-Reglers auf 0% und 99% begrenzen", würde ich formulieren als "den Ausgang des PID-Reglers verwenden, der zwischen 0 und 199 geklemmt ist". Ich denke, es macht es klarer und spezifischer für den Fall von OP.
Vielleicht. Ich hoffe, er ist unabhängig genug, um das Thema selbst weiter zu erforschen
@GregoryKornblum "Übrigens, und das ist sehr wichtig. Sie müssen ein Bewegungsprofil erstellen. Was im Fall der Geschwindigkeitssteuerung bedeutet, dass Sie die Geschwindigkeit entsprechend der Beschleunigung allmählich erhöhen müssen. Andernfalls erhalten Sie Überschwinger und sehr instabiles Verhalten oder schlechte Kontrolle wenn Sie Ihre Verstärkung verringern, um das System zu beruhigen."
@GregoryKornblum Hallo, ich weiß, das ist eine alte Frage, aber ich würde dich gerne etwas fragen. Ich arbeite an einer PID zu PWM und habe einige Probleme, und wenn ich lese, was Sie im obigen Kommentar geschrieben haben, habe ich eine Frage. Schlagen Sie vor, dass bei jedem Abtastzyklus der PID-Schleife die Änderungsrate des PWM-Tastverhältnisses auf eine maximale Änderungsrate begrenzt wird? Ich habe Probleme mit übermäßigem Überschwingen, egal was ich tue, und ich denke, meine PID-Schleifenzeit ist vielleicht zu langsam, aber was Sie erwähnt haben, könnte eine Möglichkeit sein, dieses Problem zu beheben?
@ David777 nein, das sage ich nicht. Aber um Ihre Frage zu beantworten, muss ich besser verstehen, was Sie tun.
@GregoryKornblum Ich habe gerade diese Sekunde eine Frage gepostet, wenn Sie einen Blick darauf werfen möchten.
Oh Mann, das ist zu lang. Wenn Sie möchten, senden Sie mir eine E-Mail an gregoryk at veriqube-canada.com, und ich werde morgen Zeit für ein Gespräch finden. Ich glaube nicht, dass Sie mit einer einzigen Frage bekommen, was Sie brauchen. Sie scheinen eine ausführlichere Erklärung zu benötigen.

Normalerweise ist der Ausgang einer PID-Funktion eine Zahl zwischen 0,0 und 1,0 (0-100 %), Sie können diese mit Ihrer Timer-Periode multiplizieren, um den Tastgradwert zu erhalten.

Aber wenn Sie ganzzahlige Mathematik verwenden, ist die Ausgabe Ihrer PID-Funktion -32768 bis 32767, dann haben Sie -1,0 bis 1,0 mit einer Auflösung von 1/32767.

Teilen Sie in Ihrem Fall die vorzeichenbehaftete 16-Bit-Ausgabe durch 163.

Der PID-Ausgang ist im Grunde die erforderliche Erhöhung der LEISTUNG, um einen Weg zum erforderlichen Sollwert zu finden - denken Sie an einen Tempomat in einem Auto, wenn die Geschwindigkeit unter den Sollwert fällt, wird mehr Gas gegeben. Die Drehmomentkurve der meisten Gleichstrommotoren folgt a parabolische Form, so dass bei hohen und niedrigen Drehzahlen Ihre "Beschleuniger" -Eingabe entsprechend hochskaliert werden muss. Drehmomentkurven ändern sich natürlich mit der Eingangsspannung, daher wäre es eine gute Idee, zur Stabilisierung des Systems beizutragen, einen Spannungsregler zu verwenden, der dazu beiträgt, mindestens ein sich bewegendes Ziel aus dem System zu eliminieren.

PWM ändert die Drehzahl eines Motors nicht direkt, es ändert die Spannung am Motor, während das Drehmoment beibehalten wird. Die einzige Möglichkeit, das PWM-Tastverhältnis zuverlässig und genau in die Drehzahl eines Motors umzuwandeln, besteht darin, selbst ein Diagramm zu erstellen. Ich würde sagen, machen Sie mindestens 5 Punkte und tragen Sie die Geschwindigkeit in einem Diagramm gegen den Arbeitszyklus auf.

Ich verstehe es nicht. Am Ende muss ich den PWM-Wert ändern, um die Geschwindigkeit zu ändern, also wie würde dieses Diagramm helfen?
Sie stellen PWM abwechselnd auf 20 %, 40 %, 60 %, 80 %, 100 % ein und messen die Drehzahl des Motors. Auf diese Weise können Sie dann ein Diagramm zeichnen, um das Verhältnis von PWM zur Motordrehzahl anzuzeigen.
Das wäre nicht die Lösung ... wegen der Schwankung der BUS-Spannung zum Motor wäre dieser Graph bedeutungslos. z. B. an einem Tag 12 V und an einem anderen Tag 11 V ... schlimmer, wenn Batterien verwendet werden
Oh richtig, also variiert der Eingang zum Motor überall! Das macht es komplizierter: Sie müssen daher einen einfachen Regelkreis in der Software haben, der ihn steuert. Sie müssen die gewünschte Drehzahl einspeisen und entweder die aktuelle Drehzahl oder die Einspeisespannung. Führen Sie es dann durch einen Steueralgorithmus. Sie können wahrscheinlich nur die Proportionalsteuerung verwenden, es sei denn, Ihr Setup lädt sehr schnell auf.