Forum: Mikrocontroller und Digitale Elektronik Niedrigdrehzahl-Regelung für Brushless-Motoren


von Johannes M. (jo-loom)


Lesenswert?

Hallo zusammen,

zum Einsatz in RC-Mikromodellen (Schiffe) habe ich auf Basis fertiger 
Hongkong-Flugregler (ATMEL ATMega8A) eine komplett neue 
Assembler-Software geschrieben. Hierbei floss u. a. viel Know How von B. 
Konze (Quax) mit ein, auch wenn der Code komplett neu gestaltet ist.

Bislang läuft die SW einwandfrei (Start, Frequenz- und PWM-Regelung, 
Vor-/Zurück, Sicherheitsfunktionen).

Gegenwärtig sitze ich an einer zusätzlichen Open-Loop Funktion für 
Niedrigstdrehzahlen. Hier funktioniert bereits der simple Ansatz mit 
fixer Vorgabe des Kommutierungs-Timings (errechnet aus der Zieldrehzahl) 
und des PWM-Duty-Zyklusses. Vergleichbar zu Schrittmotoren tackert der 
BLDC immer 120° weiter. Auf diese Weise kann ich nahezu beliebig 
langsame Drehzahlen realisieren.

Der Nachteil dabei: Immense Verlustleistung => große Hitze.
Also gilt es den PWM Duty Cycle zu regeln.
Die Detektierung des Phasen Zero Crossing klappt bei den niedrigen 
Drehzahlen nicht zuverlässig.

Habt Ihr noch Ideen, Tipps oder Links für denkbare Algorithmen?
Ich bin allerdings in der HW auf die bekannten 3 MOSFET-Brücken 
angewiesen - also Sinussteller, Hall-Sensoren etc. scheiden aus.

Besten Dank schon mal an Euch,
Johannes

von MaWin (Gast)


Lesenswert?

Die Schrittmotortreiber (die ja langsam sein können und auch 
stehenbleiben können) machen das alle mit PWM Chopper Stromregelung über 
einen shunt auf den durch die Bauart fest vorgegebenen maximalen 
Spulenstrom, damit die Spule bei langsamen Takt, wo der Spulenstrom 
durch die Induktivität immer weiter bis zur Sättigung steigen würde, 
nicht höher wird als an Verlustleistung für den Motor zulässig ist.

Wenn du nun keinen Stromsensor-shunt hast, könntest du versuchen, die 
PWM experimentell zu ermitteln (oder aus der Induktivität des Motors zu 
berechnen) und den duty cycle fest gekoppelt nach Drehzahl festlegen. 
Dabei bietet es ich an, auch gleich den Sinus nachzubilden. Der Motor 
hat dann zwar nicht so viel Drehmoment, weil die Gegen-EMK durch 
Belastung nicht kompesiert werden kann wie es bei gemessenem Strom wäre, 
aber immer noch besser als ruckeln.

von Purzel H. (hacky)


Lesenswert?

Wenn man den Motorstrom reduziert nimmt unter Belastung der Polradwinkel 
zu. Dh es wird einen Fehler zwischen soll- und ist-Position geben, der 
mit kleinerem Strom, sowie groesserem Drehmoment zunimmt.

von Jo-Loom (Gast)


Lesenswert?

Herzlichen Dank schonmal für das Feedback!

Ziel ist später die aus Hongkong gekauften Flugregler (< 5 Euro) kurz zu 
strippen (Schrumpfschlauch runter) und mit der neuen Software per 
Clip-Adapter zu flashen.
Der zusätzliche Aufwand mit Einbau eines Shunts würde den Rahmen 
sprengen.
Also bleibt lediglich die Nutzung des virtuellen Sternpunktes (klassisch 
3 Phasen über Widerstands-Spannungsteiler) und die Messung der 
Phasenspannungen per AD-Multiplexer.

Im Augenblick probiere ich in diesem Open Loop Modus statt per PWM nur 
mit fixen Blöcken alle 60° zu kommutieren. Das 60°-Timing errechnet sich 
ja direkt aus der Zieldrehzahl.
Die Kommutierungs-Blöcke möchte ich in ihrer Länge regeln, in 
Abhängigkeit der Rotor-Bewegung.

Meine Hoffnung ist die, dass diese reine Block-Kommutierung sauberere 
BEMF-Signale liefert als im PWM-Closed-Loop-Modus.

Aber vielleicht habt Ihr ja noch weitere geniale Ideen?
Danke und Gruß,
Johannes

von Jo-Loom (Gast)


Lesenswert?

Ergänzung:
Im gegenwärtigen Stand mache ich es genau so, dass ich für einen 
spezifischen Motor für jede Zieldrehzahl experimentell den optimalen PWM 
Duty cycle ermittle und per Tabelle in der SW hinterlege.

Ist aber nicht sinnvoll, da der richtige / optimale PWM Duty cycle eine 
Funktion sowohl von Drehzahl, als auch Last ist.

von Stumpf (Gast)


Lesenswert?

Hallo,

ich gehe davon aus das du die Welle direkt betreiben willst. Also ohne 
Getriebe.

Da ist es bei diesen Motoren extrem schwer die aktuelle Position zu 
ermitteln. BEMF ist bei diesen Drehzahlen so gut wie nicht erkennbar. 
Diese wird erst bei größeren Drehzahlen sauber erkannt.

Um das ganze mit einen ATMega48 zu machen........ wirst du um 
Hallsensoren / Stromsensoren nicht drum herumkommen!

Gruß Stumpf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.