Ich habe ein Potentiometer, das eine analoge Spannung im Bereich von 0-5 V liefert. Ich betrachte diesen POT als Drosseleingang für den Motor. Wenn ich die Topfgeschwindigkeit ändere, erhöhe und verringere sie auf der Grundlage der vom Topf kommenden Spannung. Ich erfasse die analoge Spannung vom ADC meiner ATMEL-MCU. Meine MCU arbeitet mit 5V.
Angenommen, der analoge Eingang vom POT beträgt 2 V. Und ich gehe davon aus, dass das Befehlssignal 200 U / min für den Motor beträgt. Mein Motor hat einen Hallsensor o / p, von dem ich die aktuelle Drehzahl des Motors ablesen kann, die beispielsweise 120 U / min beträgt.
error = set_speed - current_speed = 200 -120 = 80 RPM
Jetzt wende ich die PID auf dieses Fehlersignal (80 U / min) an. Ich bekomme einen Controller o / p.
Die Motordrehzahl wird durch Ändern des PWM-Tastverhältnisses (16-Bit-Register) gesteuert. Die große Frage ist jedoch, dass PWM zur Steuerung der Motordrehzahl verwendet wird. Nun, wie man diesen Controller-Ausgang verwendet, um die PWM-Eingabe meiner MCU zu ändern
Wie bezieht sich PWM auf das O / P-Signal des Controllers, um die Geschwindigkeit anzupassen?
Beim Einrichten eines PID-Reglers benötigen Sie Skalierungsparameter, die die abstrakten PID-Zahlen in die Eigenschaften der realen Welt übersetzen. In ähnlicher Weise müssen Sie auch maximale und minimale Grenzen für P, I bzw. D haben, die ebenfalls auf die Ausgangseigenschaften skaliert werden müssen.
Sie haben eine bestimmte Spannung, die die maximale Drehzahl des Motors ist. Diese angegebene Spannung muss in ein maximales Tastverhältnis der PWM übersetzt werden. Vielleicht sind es 5 V und dann ist das Maximum 100% Einschaltdauer.
Der Skalenwert, den Sie für den PID-Regler verwenden müssen, ist dann dieses maximale Tastverhältnis. Die Einheit sind Timer-Ticks des Timers, mit dem Sie die PWM erzeugen.
Stellen Sie außerdem sicher, dass Sie die Möglichkeit haben, den Messwert des Hallsensors mit Ihren PID-Regleraktualisierungen zu synchronisieren. Sie können das System nicht schneller regeln, als Sie den Sensor lesen können. Die Lesevorgänge müssen ebenfalls skaliert werden, wahrscheinlich ist es am einfachsten, sie auch auf den Arbeitszyklus zu skalieren, sodass Sie überall dieselbe Einheit haben.
Programmiertechnisch ist es viel einfacher, mit diesem 16-Bit-Timer-Tick-Rohwert zu arbeiten, als beispielsweise mit Volt, Prozent der Einschaltdauer, Drehzahl usw.
Bei voller Einschaltdauer erhalten Sie maximale Geschwindigkeit, und bei Null-Einschaltdauer erhalten Sie überhaupt keine Drehung. Ihr Fehler kann auch 0 und maximal sein, wenn Sie volle Geschwindigkeit wünschen und der Motor nicht dreht. Die volle Einschaltdauer entspricht dem vollen DC-Bereich bis 5 V, die Einschaltdauer der halben Periode entspricht 2,5 V und so weiter. Sie müssen die Spannung, die Sie als Ausgang in Ihrer Berechnung von PID erhalten, in das Tastverhältnis umwandeln. Wenn der Ausgang des PID beispielsweise 1 V (im Bereich von 0-5 V) beträgt, sollte Ihr Arbeitszyklus 0,2 betragen. Hoffe das hilft.
Haris778
Benutzer6363
Benutzer6363
Lundin
Lundin
Haris778
Benutzer6363
Benutzer6363