Forum: Mikrocontroller und Digitale Elektronik Ansteuerung BLDC Motor mittels PWM PROBLEME


von Fabian L. (fabls)


Lesenswert?

Hallo liebe Forummitglieder,

ich erkläre euch erstmal mein Projekt, habe nämlich eine Platine 
entwickelt, um ein Pedelec anzusteuern. Die Platine läuft soweit ganz 
gut, das einzige Problem ist jetzt das Programm zu schreiben. Auf meiner 
Platine habe ich einen STM32 und programmiere es mit uVision 4. Der 
Motor ist ein 250W 4Pol BLDC mit Hallsensoren von Panasonic mit einem 
Planetengetrieben und einer Übersetzung von 14.
 Soweit so gut, nun komme ich zu meinem Problem:

Habe in ganz vielen Internetseiten und Büchern nachgeschaut, doch leider 
kam das Verständnis nicht zu 100%. Also mein uC generiert 6PWM Signale 
High1, High2, High3 und Low1, Low2 und Low3! High1-High3 und Low1-Low3 
sind alle um 120° Phasenverschoben und überschneiden sich nicht. High1 
ist das inversum von Low1 und das selbe für 2 und 3! Man nimmt 
üblicherweise eine Frequenz von 20kHz. Diese Signale kommen an einem 
3-Phasen-Gatetreiber, der die Signale für die Leistungstransitoren (die 
in einer B6-Brücke geschaltet sind) verstärkt, um diese sicher 
durchschalten zu können.

PROBLEM: Wenn ich nun die Drei Phasen (U V W) anschließe, dreht sich 
zwar der motor, aber nur sehr langsam, nur 2 Umdrehungen und vorallem 
sehr laut! Es dreht sich auch nur dann, wenn ich die Frequenz auf 8kHz 
runterstelle.


Wenn ihr mehr Daten bzw. mehr Details braucht kann ich gerne dazu 
schreiben.

Ich wäre für jede Antwort von euch sehr dankbar, denn habe noch einpaar 
Verständnisprobleme...


Danke im Voraus
Fabian

von Peter II (Gast)


Lesenswert?

hast du beachtet das der Strom auch immer wieder zurückfließen muss? Es 
hilft also nicht wenn du auf U eine Spannung gibst und in diesem Moment 
V und W nicht geschaltet sind. (also die PWM gerade auf 0 ist )

von Uwe (Gast)


Lesenswert?

> 120° Phasenverschoben und überschneiden sich nicht
Müssen sie aber ...
> Man nimmt üblicherweise eine Frequenz von 20kHz
Man nimmt üblicherweise eine Beschleunigunsrampe ...
Dir fehlen die Grundlagen und du solltest besser aufhören bevor du was 
kaputt machst. Erst mal ein paar Tage mit der Theorie beschäftigen.

von Klaus (Gast)


Lesenswert?

Uwe schrieb:
>> Man nimmt üblicherweise eine Frequenz von 20kHz
> Man nimmt üblicherweise eine Beschleunigunsrampe ...

Die Grundfrequenz der PWM beschleunigen ?

MfG Klaus

von Fabian L. (fabls)


Angehängte Dateien:

Lesenswert?

Peter II schrieb:
> hast du beachtet das der Strom auch immer wieder zurückfließen
> muss? Es
> hilft also nicht wenn du auf U eine Spannung gibst und in diesem Moment
> V und W nicht geschaltet sind. (also die PWM gerade auf 0 ist )

Danke für deine Antwort... Also das Einganssignal sieht so aus (siehe 
Anhang1-PWM_tabelle),doch am Ausgang sollten sich dann 2 Phasen 
überschneiden.

Wie soll ich es beachten, das der Strom wieder zurückfließen muss???

von Falk B. (falk)


Lesenswert?

@ Fabian L. (fabls)

>Danke für deine Antwort... Also das Einganssignal sieht so aus (siehe
>Anhang1-PWM_tabelle),doch am Ausgang sollten sich dann 2 Phasen
>überschneiden.

Tun sie auch, nennt sich Trapezansteurung.

Um das zum Laufen zu bringen, musst du erstmal das GANZ LANGSAM 
betreiben, sprich, vielleicht mit 1 Hz dieses Signalspiel erzeugen. Die 
PWM bleibt natürlich bei 20kHz. Zu beachten ist auch, dass die 
Hallsensoren richtig angeschlossen sind, sonst verhaspelt sich der 
Motor, weil er falsch angesteuert wird. Und man darf diese Muster nicht 
mit starrem Timing erzeugen, sondern muss man Ende jeder Phase darauf 
warten, dass die HALL-Sensoren anzeigen, dass das Ende der Pahse 
erreicht wurde.

von Fabian L. (fabls)


Angehängte Dateien:

Lesenswert?

> Tun sie auch, nennt sich Trapezansteurung.
>
> Um das zum Laufen zu bringen, musst du erstmal das GANZ LANGSAM
> betreiben, sprich, vielleicht mit 1 Hz dieses Signalspiel erzeugen. Die
> PWM bleibt natürlich bei 20kHz. Zu beachten ist auch, dass die
> Hallsensoren richtig angeschlossen sind, sonst verhaspelt sich der
> Motor, weil er falsch angesteuert wird. Und man darf diese Muster nicht
> mit starrem Timing erzeugen, sondern muss man Ende jeder Phase darauf
> warten, dass die HALL-Sensoren anzeigen, dass das Ende der Pahse
> erreicht wurde.

Die Ausgangs Signale müssten Stimmen und die Low Phasen werden auch 
jeweils geschaltet. Wenn die U Phase an ist, dann sind die Low Phasen 
von V und W jenachdem wo der Hallsensor steht an.

von Carsten R. (kaffeetante)


Lesenswert?

Fabian L. schrieb:
> Also mein uC generiert 6PWM Signale
> High1, High2, High3 und Low1, Low2 und Low3! High1-High3 und Low1-Low3
> sind alle um 120° Phasenverschoben und überschneiden sich nicht. High1
> ist das inversum von Low1 und das selbe für 2 und 3! Man nimmt
> üblicherweise eine Frequenz von 20kHz.

Ich werde das Gefühl nicht los daß hier gerade zwei Dinge durcheinander 
laufen. Falk sagt es zwar schon aber ich würde es noch mal genauer 
betonen.

Falk Brunner schrieb:
> Um das zum Laufen zu bringen, musst du erstmal das GANZ LANGSAM
> betreiben, sprich, vielleicht mit 1 Hz dieses Signalspiel erzeugen. Die
> PWM bleibt natürlich bei 20kHz.

Bedeutet: Die Phasenansteuerung kommutiert zu beginn langsam und 
steigert die Kommutierungsgeschwindigkeit. Das ist aber nicht mit PWM 
gemeint. Die PWM kommt noch hinzu. Wichtig sind hierbei folgende zwei 
Sachen.

1. Die Kommutierung muß synchron zur Rotorposition erfolgen, sonst 
beschleunigst und bremst Du im schnellen Wechsel wenn die Phasen nicht 
zur Rotorposition passen. Die Kommutierungsgeschwindigkeit ist also 
Proportional zur Drehzal. Sie ist aber nicht identisch mit der Drehzahl, 
sondern beträgt ein vielfaches der Drehzahl. Das Verhältnis wird durch 
den internen Aufbau des Motors bestimmt durch Phasen und Polzahl des 
Motors. Hier steckt das größte Know-How um das passend synchron zu 
schalten. Da gibt es mehrere Methoden. Da Du Hall-Sensoren hast, würde 
ich diese dafür benutzen. Es gibt noch andere Verfahren.

2. Die PWM regelt die Leistungszufuhr und hat erst einmal nichts mit der 
Kommutierung am Hut. Man kann sich diese PWM als Stufe in der 
Stromversorgung vorstellen. Man kann es auch so realisieren. Da aber in 
der Kommutierungseinheit schon passende Mosfets vorhanden sind benutzt 
man oftmals diese, indem man ein passendes PWM Signal in das 
Kommutierungssignal untermischt. Das wird aber etwas komplizierter. Da 
wirst Du noch einiges recherchieren müssen.

Dabei werden dann die beiden leitenden Phasen so umgesteuert, daß 
während der Off-Zeit das leitende Spulenpaar in den Freilauf geschaltet 
wird. Das erreicht man, indem man während der Off-Zeit der PWM entweder 
immer die High-side sperrt oder immer low-side sperrt. Der 
"Freilaufstrom" der läuft dann an der gesperrten Seite über eine Diode 
oder Rückwärts durch den anderen Mosfet in die Zuleitung zurück. Man hat 
dann einen Hi-Hi-Kreis bzw. eine Low-Low-Kreis. Das entspricht in die 
Rotorposition dann einer normalen 2-Quadrantensteuerung. Da der Rotor 
sich aber dreht, wird es mir etwas komplizierter.

Daher mein TIP:

Laß für den Einstieg zuerst die PWM aus dem Spiel und regel die Leistung 
über die Versorgungsspannung. Wenn die Kommutierung klappt kannst Du 
noch immer die PWM hinzuprogrammieren. Die PWM frequwenz sollte dann 
aber entweder synchron zur Kommutierungsfrquenz sein oder deutlich 
höher.

von Carsten R. (kaffeetante)


Lesenswert?

Fabian L. schrieb:
> Die Ausgangs Signale müssten Stimmen und die Low Phasen werden auch
> jeweils geschaltet. Wenn die U Phase an ist, dann sind die Low Phasen
> von V und W jenachdem wo der Hallsensor steht an.

Das entspricht nicht Deiner ersten beschreibung.

Fabian L. schrieb:
> Also mein uC generiert 6PWM Signale
> High1, High2,....
>sind alle um 120° Phasenverschoben und überschneiden sich nicht. High1
> ist das inversum von Low1 und das selbe für 2 und 3! Man nimmt
> üblicherweise eine Frequenz von 20kHz.

> PROBLEM: Wenn ich nun die Drei Phasen (U V W) anschließe, dreht sich
> zwar der motor, aber nur sehr langsam, nur 2 Umdrehungen und vorallem
> sehr laut! Es dreht sich auch nur dann, wenn ich die Frequenz auf 8kHz
> runterstelle.

Entweder es wird mit mit der PWM-Frequenz kommutiert (falsch, es sei den 
man synchronisiert die PWM ständig mit dem Rotor nach), oder die 
Hall-Sensoren bestimmen die Kommutierung. Zuerst schreibst du a und dann 
b. Irgendetwas stimm da nicht oder hat sich inzwischen geändert.

von Carsten R. (kaffeetante)


Lesenswert?

Fabian L. schrieb:
> Die Ausgangs Signale müssten Stimmen und die Low Phasen werden auch
> jeweils geschaltet. Wenn die U Phase an ist, dann sind die Low Phasen
> von V und W jenachdem wo der Hallsensor steht an.

Werden die High-Pasen auch ebenfalls passend zur Rotorposiion gesteuert? 
;-)

von MaWin (Gast)


Lesenswert?

> Man nimmt üblicherweise eine Frequenz von 20kHz.

Für die um 120 Grad verschobenen Phasen ? Sicher nicht, so schnell dreht 
kein Motor.

> Soweit so gut, nun komme ich zu meinem Problem:

So lange du die Hallsensoren nicht beachtest, passiert da gar nichts. 
Was meinst du, wozu diese Dinger montiert wurden ? Weil sie überflüssig 
sind ?


http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.10.1

von Carsten R. (kaffeetante)


Lesenswert?

@MaWin

Das hast Du recht. Aber ich würde das zum besseren Verständnis gerne ein 
wenig relativieren. Da die Kommutierungsfrequenz ein vielfaches der 
Drehzahl beträgt, sind 20 KHz je nach internem Aufbau des Motors nicht 
mehr ganz so krass wie es sich auf den ersten Blick liest.

Es stimmt zwar was Du sagst, aber umgekehrt sind die 
Kommutierungsgeschwindigkeiten bei vermeintlich niedrigen Drehzahlen 
bauartabhängig manchmal überraschend hoch. Das sollte man ebenfalls mal 
betonen, weil dies für Einsteiger nicht offensichtlich ist.

von brushless (Gast)


Lesenswert?

Mir dünkt, hier fehlt noch immer das Verständnis für die Funktion der 
PWM. Die Motorphasen werden in Blöcken angesteuert. Bei eingeschalteter 
Phase wird das Einschaltsignal (Block) mit der PWM überlagert und damit 
die Leistung reduziert.

Der Kommutierungszeitpunkt wird hier durch die Hallsensoren festgelegt. 
Bei sensorlosen Konzepten durch die BEMF, der gemessenen Rückwirkung 
innerhalb der jeweils unbestromten Wicklung.

Wenn Du mit der Thematik BLDC startest, solltest du vielleicht erst mal 
mit einem integrierten Motortreiber beginnen. Später kannst Du ja dessen 
Funktion mal in deinen µC mit integrieren. Ich kann dir die Treiber von 
Allegro empfehlen: A3930 für Hallsensor-Motore bzw. A4960 für Sensorlos. 
Dafür gibt es jeweils recht brauchbare Demoboards, die auch erst mal 
Stand-alone mit einem Rechteckgenerator und PC funktionieren.

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.