Drehzahlregelung PID mit AVR
Hallo Community
Ich habe schon ganz viel über den PID Regler gelesen aber irgendwie
verstehe ich es nicht.
Folgendes Szenario:
Ich möchte eine genaue Drehzahlregelung für ein Masselaufwerk
(Plattenspieler) machen.
Ich habe eine Codescheibe mit 72 Segmenten, hier messe ich mit einer
Reflexlichtschranke über den ICP Eingang die Zeit und kann damit die
Drehzahl berechnen, dies funktioniert einwandfrei.
33 1/3 upm enspricht 100 000 Ticks für die Zeit
Als Ausgang habe ich einen 12bit DA-Wandler, welcher über einen
LeistungsOPV analog den Motor stellt (Spannungsmäßig), dies funktioniert
auch einwandfrei.
Nun fehlt mir aber der Ansatz den Motor zu regeln.
Das Problem ist aber, dass ich ja nicht weiß bei welchem Ausgang, welche
Drehzahl herauskommt.
Die meisten Beispiele die ich gefunden habe waren darauf ausgelegt
irgendeine Position zu erreichen und dann dort stehen zu bleiben.
Wenn in meinem Fall aber IST>SOLL kommt ein negativer wert für den
Ausgang raus und wenn IST=SOLL wird der regler auf 0 gesetzt, was ja
auch quatsch ist.
Der Bascomcode ist nach dem Motto:
E = 33.33333333 - Drehzahl
Esum = Esum + E
Proportionalteil = Kp * E
Integralteil = Ki * Ta
Integralteil = Integralteil * Esum
Differentialteil = E - Ealt
Differentialteil = Differentialteil / Ta
Differentialteil = Differentialteil * Kd
Av = Proportionalteil + Integralteil
Av = Av + Differentialteil
Was stelle ich nun mit AV an, damit es funktioniert?
Wenn ich eine einfache regelung mache ala
IST>SOLL -> Decr Ausgang
IST<SOLL -> Incr Ausgang
funktioniert es wie erwartet, aber aufgrund der hohen Masse schwingt es
nur sinnlos.
Es muss also irgendwas rauskommen wie:
wenn drehzahl zu klein erhöhe intelligent den ausgang aber kompensiere
überschwingen.