Autor |
|
|
|
BID = 339854
photonic Schreibmaschine
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
|
Hallo Zusammen
Mein Brushlesstreiber läuft mittlerweile Hardwaremässig tip top. Die Software macht aber noch etwas Kopfzerbrechen. Es funktioniert eigentlich schon ganz gut, eine alte Festplatte läuft als Testmotor stabil mit voller Drehzahl.
Nun kämpfe ich aber noch etwas mit einer guten Regelung der Kommutationsfrequenz. Ich habe im Moment etwas wie eine Software PLL gebaut, je nach Phasenlage der Rotorposition erhöht oder vermindert sich die Kommutationsfrequenz. Nur bin ich mit der Dynamik des Antriebs noch nicht wirklich zufrieden, die Platte dreht nicht so schnell hoch wie sie könnte und bei sehr schnellen Lastwechseln fällt sie gelegentlich aus der Synchronisation.
Weiss jemand wo ich gute Infos finde wie man Softwarebasierte Regler und Dinge wie PLL entwickelt? Ein Buch oder ähnlich wäre ideal...
|
|
BID = 341988
photonic Schreibmaschine
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
|
Habs hinbekommen, der PLL hat jetzt einen PI-Regler bekommen und lässt sich durch nichts mehr aus der Synchronisation werfen. Falls mal jemand vor dem selben Problem steht und einen Brushlessmotor ansteuern muss. Alle anderen arten von "Regelkreis" haben zwischen ziemlich und ziemlich kläglich versagt. |
|
BID = 346573
cholertinu Inventar
Beiträge: 3755 Wohnort: CH
|
Wie hast du es realisiert? Eine kurze Beschreibung ist erwünscht! Evtl. mit Skizze/Schaltplan.
[ Diese Nachricht wurde geändert von: cholertinu am 3 Jul 2006 13:55 ]
|
BID = 347102
photonic Schreibmaschine
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
Was genau möchtest du? einen Schaltplan für den Brushlesscontroller oder eine Beschreibung der Software? Die Software ist immer noch in Entwicklung, etwas fertiges an dem du nicht weiterarbeiten müsstest kann ich noch nicht anbieten. Die grundlegende Funktion ist aber schon recht stabil.
Die Regelung funktioniert grob so:
Die Kommutation wird durch einen 16 bit timer durchgeführt der sich jeweils beim compare match resettet und dabei um einen Zyklus weiterschaltet. Die Kommutationsfrequenz ist also durch den Wert eines compare registers definiert (wenn auch auf nichtlineare Weise was aber in dem Fall nicht so tragisch ist) Ich messe dann jeweils die Phasenlage des Gegen-EMK Nulldurchgangs und vergleiche diese mit dem geplanten Kommutationszeitpunkt durch Subtraktion. So erhalte ich den Phasenfehler des Rotors im Vergleich zum Drehfeld. Praktischerweise skaliert der absolute Fehler mit der Drehzahl so das er direkt als Proportinalkoeffizient(mit einem konstanten Gainfaktor multipliziert) im Regler verwendet weden kann ohne dass ich über den Winkelfehler rechnen müsste (wenn man das mal auf Papier schreibt sieht man warum) zudem nehme ich einen kleinen Anteil des Fehlers für die Integralkorrektur so dass der Regelkreis nach kurzer Zeit eine Abweichnug von 0 erreicht. So kommutiert sich der Motor von selbst präzise wenn die Regelung eingerastet ist.
das entsprechende Codestück das dies tut sieht so aus:
crossing enthält den Timerwert bei dem die Gegen-EMK den Nulldurchgang hatte, base ist der Anteil von OCR1A welcher durch den I-Regler modifiziert wird und der schon so nahe wie möglich am richtigen Wert dran sein sollte und so nur noch eine geringe Proportionalkorrektur erfordert. Die ganze Regelung ist durch die Kommutationsfrequenz getaktet (steckt in einer Interruptroutine die durch den compare match ausgeführt wird), erhält also so eine drehzahlabhängige Zeitkonstante was ein gutes Regelverhalten über den ganzen Drehzahlbereich ergibt.
Code:
-----
phase_error= crossing-(OCR1A>>1); // right shift = Division durch 2 ( Gegen-EMK Nulldurchgang wird 30° von der Kommutation entfernt erwartet)
OCR1A = base+phase_error/3;
base=base+(phase_error/32)
Die Faktoren 1/3 und 1/32 definieren die Regeldynamik und müssen am besten experimentell festgestellt werden, anhand des Verhaltens des vorliegenden Motors um eine optimale Regelung zu bekommen.
[ Diese Nachricht wurde geändert von: photonic am 5 Jul 2006 1:23 ]
|