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.
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.
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.
schwach
Benutzer76844
David777
David777
Benutzer76844
David777
Benutzer76844