Forum: Mikrocontroller und Digitale Elektronik BLDC Motor Controller (ARM 7) arbeitet nur bei geringer Lastspannung am Motor


von Andreas M. (streicher)


Lesenswert?

Hallo!
Ich habe ein kleines Problem mit meinem eigenen BLDC-Controller. Die 
Rotorposition wird mittels 3-Hallsensoren bestimmt.

Wenn ich die Lastspannung, während eine PWM mit einem Tastverhältnis von 
(z.b)75% läuft, langsam hochdrehe, dann fängt der Motor an zu drehen. So 
weit so gut. Wenn die Lastspannung allerdings größer wie etwa 4 Volt 
wird, dann stoppt der Motor abrupt. Daraufhin habe ich zusätzliche 
Induktivitäten in Reihe in die 3 Motorphasen geschaltet und den Versuch 
wiederholt. Nun war es möglich die Lastspannung bis auf etwa 20 Volt(bei 
25% PWM, obwohl das Tastverhältnis keine Rolle spielt, bei diesem 
Phänomen) hochzufahren. Danach begann der Motor etwas zu pfeifen bis er 
letztendlich wieder stoppte. Wenn die Lastspannung bei 20Volt gelassen 
wurde, dann war es ebenfalls möglich das Tastverhältnis, der PWM zu 
erhöhen bzw. zu erniedrigen und der Motor änderte passend seine 
Drehzahl. Woran kann dieses Phänomen liegen? Eigentlich soll die 
Lastspannung demnächst 48Volt(der Motor läuft an einem gekauften 
Controller auch mit 48Volt und ohne Induktivitäten) betragen und ein 
Betrieb des Motors soll auch ohne die zusätzlichen Induktivitäten 
möglich sein.
Die Schaltung in meinem Controller besteht aus 3 Halbbrücken(N-Mosfets) 
mit Bootstrap-C, welche mit dem Treiber IRS2184 angesteuert werden. Der 
Treiber wird wiederrum von einem ARM7 Prozessor gesteuert. Bei Bedarf 
kann ich noch einen Schaltplan posten.

Über jegliche Ideen und Anregungen bin ich dankbar.
Gruß Andreas

von Steffen W. (derwarze)


Lesenswert?

Schaltplan wäre hilfreich.
Scheint mir aber möglicherweise ein Softwareproblem der Ansteuerung zu 
sein. Bin aber kein ARM-Experte, könnte zu einem Listing wenig sagen.
Wird Block oder Sinuskommutiert gesteuert?

von Uwe (Gast)


Lesenswert?

> dann war es ebenfalls möglich das Tastverhältnis, der PWM zu
> erhöhen bzw. zu erniedrigen und der Motor änderte passend seine
> Drehzahl.

Die Drehzahl läßt sich nicht vom Tastverhältnis ändern.

von Klaus (Gast)


Lesenswert?

Uwe schrieb:
> Die Drehzahl läßt sich nicht vom Tastverhältnis ändern.

Warum nicht?

MfG Klaus

von Andreas M. (streicher)


Angehängte Dateien:

Lesenswert?

Ich habe mal den Schaltplan angefügt. Anstelle des IR2183 Brückentreiber 
ist wie gesagt nun der IRS2184, wobei dort der IN Eingang mit der PWM 
beaufschlagt wird(Bin noch nicht dazu gekommen den auszutauschen). Mit 
der Lastspannung meine ich die +48V in dem Schaltplan.

An den Mosfets kommt ohne die Lastspannung auf jeden Fall das richtige 
Ansteuermuster an, wenn ich den Motor von Hand drehe. Von daher sehe ich 
keinen Fehler in der Software. Sonst würde das mit den Induktivitäten 
meiner Meinung auch keinen Sinn machen.
Es wird Blockommutiert gesteuert.

Wieso kann man durch das Tastverhältnis nicht die Drehzahl ändern? Wenn 
der Oberschalter länger durchschaltet, dann wird der Motor auch länger 
bestromt. Ansonsten würde die PWM ja gar keinen Sinn machen.

von Peter II (Gast)


Lesenswert?

Hi, ist es nicht so, dass durch das Tastverhältnis der PWM, neudeutsch 
Duty Cycle, dem Motor eine bestimmte Spannung aufgeprägt wird, z.B. ein 
Sinus. Die Frequenz dieses Sinus wiederum bestimmt die Drehzahl, 
zusammen mit Polpaaranzahl.

von David R. (Gast)


Lesenswert?

So weit ich es von Servomotoren her kenne, ist das nicht ganz so. Sonnst 
bräuchte man ja laut der oben gennanten Methode auch keine Sensoren zur 
genauen bestimmung der Rotorposition, sondern nur einen Drehzahlsensor.

Man steuert nämlich das Drehfeld immer so, das es vor dem Rotor ist. Der 
Rotor wird sozusagen mitgezogen.
Also alles so ähnlich wie bei einem Synchronmotor, nur das sich die 
Drehfeldgeschwindigkeit der Rotorgeschwindigkeit anpasst, und nicht 
umgekehrt.

Mit der Stromstärke (also per PWM) regelt man jetzt die Kraft die der 
Motor entwickelt. Und je mehr Kraft er entwickelt, desto schneller wird 
er.
Will man hingegen die Drehzahl regeln, braucht man einen zweiten 
übergeordneten Regelkreis, der anhand der Ist und Solldrehzahl den 
Stromregelkreis "füttert".

von Andreas M. (Gast)


Lesenswert?

Die Sensoren brauche ich allerdings ja um zum richtigen Zeitpunkt zu 
kommutieren bzw dann die richtigen Ober/Unterschalter anzusteuern.
Aber das funktioniert ja alles. Die Frage ist jetzt nur, warum 
funktioniert dieses bei einer höheren Lastspannung nicht mehr? Das ist 
das was für mich keinen Sinn ergibt.

von gaast (Gast)


Lesenswert?

Uwe schrieb:
> Die Drehzahl läßt sich nicht vom Tastverhältnis ändern.

Blödfug. Die Rotorgeschwindigkeit wird durch die Spannung aufgeprägt, 
die Positionsbestimmung dient lediglich dazu im richtigen Moment zu 
Kommutieren.

von Chris B. (cbb)


Lesenswert?

Andreas M. schrieb:
> Die Sensoren brauche ich allerdings ja um zum richtigen Zeitpunkt zu
> kommutieren bzw dann die richtigen Ober/Unterschalter anzusteuern.
> Aber das funktioniert ja alles. Die Frage ist jetzt nur, warum
> funktioniert dieses bei einer höheren Lastspannung nicht mehr? Das ist
> das was für mich keinen Sinn ergibt.

Hi Andreas,

was verstehst du unter einer höheren Lastspannung?
Die Spannung wird eigentlich nur duch die PWM (Duty/Cylce-Verhältnis) 
geregelt.
Oder hast du ein Labornetzteil vor der Schaltung und veränderst an 
dieser?
Ansonsten würde ich sagen, du kannst Duty/Cycle nur bis zu einem 
gewissen Prozentteil fahren (Bsp. 80% An), danach ist die 
Treiberschaltung nichtmehr in der Lage die oberen Mosfets zu schalten, 
da SPG am oberen Gate zu gering wird. (weil Bootstrap C nicht 
ausreichend geladen)

Bin gerade an einem ähnlichen Projekt.
Was mich an deinem Schaltplan verwundert sind die 47µ Kondensatoren 
Parallel zu deinen 100n (bei deiner Bootstrap Kapazität).
Ich würde eher 100n und 10µ zusätzlich zwischen Vcc und GND der Treiber 
hängen, damit in dem Moment wenn deine Schaltung oben aus ist, der 
Bootstrap C schnell geladen werden kann. Ich denke hier könnte ein Prob 
liegen...

Ich hab meinen Motor noch nicht am drehen gehabt, und mir ist derzeit 
ein bisschen schleierhaft ob es funktioniert.
Man hat ja 3 phasen, wovon eine pro Kommutierung immer unbeteiligt 
ist.(bei Blockkommutierung)
Von den 2 aktiven phasen ist bei einer die Low-Side durchgeschaltet und 
bei der 2. die PWM auf der Highside.
Bzw. bei den Treibern welche für die PWM gerade zuständig sind, wird 
auch immer abwechseln noch die Low-Side geschalten, um eben den 
Bootstrap C aufzuladen.
Schließt man denn hiermit nicht 2 der Motorwicklungen kurz, was zu einem 
bremsen führt? Oder stelle ich mir da gerade etwas falsch vor?

Was für eine Frequenz verwendest du eigentlich für deine PWM?

Grüße Chris

von Andreas M. (streicher)


Lesenswert?

Hallo Chris!

Als meine Signale soweit richtig waren, habe ich als Spannung an der 
Last meine 48 Volt gelegt und bin angefangen mein duty cycle 
hochzufahren. Hatte eigentlich erwartet, dass der Motor anfängt zu 
drehen, was er allerdings nicht gemacht hat. Also habe ich das ganze 
anders rum versucht. ich habe mein duty cycle auf 75% gestellt und die 
Lastspannung von 48 Volt auf 0Volt(kommt von einem Labornetzteil). Diese 
habe ich dann langsam von Hand am Netzteil hochgedreht. Quasi genau das, 
was ich sonst eigentlich mit dem duty cycle mache. Und da lief der Motor 
bei einer geringen Spannung. In Zukunft soll dies aber ja mit dem duty 
cycle laufen.
Da hast du Recht, dass ich den dutycycle nur bis einer bestimmten %-Zahl 
fahren kann. Aber so hoch habe ich die eh noch nicht gefahren.
Die 100n bei den 47µ sind einfach zur zusätzlichen Stabilität. Könnte 
man auch weglasssen.
Mit den 10µ zusätzlich an den Treibern sehe ich nicht als Problem, da 
meim PWM-Signal ja nicht zusammenbricht und der obere Mosfet noch 
durchschaltet.

Wenn der Low-side schaltet um den bootstrap aufzuladen, hast du recht, 
dass ich zu den Zeitpunkten 2 Phasen auf Masse lege und der Motor 
dadurch etwas bremst. Kurzschließen tut man da allerdings nix, da ja 
auch kein Oberschalter zu diesen Zeitpunkten an ist. Das Bremsen sollte 
eig auch so gering sein, dass du es gar nicht(kaum) merkst(denke ich 
zumindest). Bei meinem gekauften Controller wird der untere Schalter 
nicht getaktet um den Bootstrap aufzuladen. Dieses ist von den Signalen 
her der einzigste Unterschied.
Wenn du richtig bremsen willst, dann musst du alle 3 Unterschalter 
schließen, dann sind alle Wicklungen gegen Masse.

Meine PWM-Frequenz beträgt zu Zeit 16kHz, da der gekaufte Controller 
diese Frequenz auch fährt.

Gruß Andreas

von Chris B. (cbb)


Lesenswert?

Hi Andreas,

wenn Du sagst, Du hast die Signale an den Mosfets gemessen und da ist 
alles okay, dann kann es daran nicht liegen.
Aber generell würde der 100n zwischen VS und VB ausreichen und der 47µ 
eher zwischen Vcc und GND, um dann schnell über die Diode laden zu 
können. :)
Oder hast du ein so großen Bootrapkondensator laut Berechnung nötig?
(ist aber eher eine Nebensache und sollte mit dem problem nichts zu tun 
haben)

Was für einen µC verwendest du eigentlich?
Wie werden deine Hallsensoren mit Spg. versorgt?
Mit 3,3V passend für den Controller?
Außlesen der Position per Interrupt auf nem normalen Port?

Hast du mal noch die Signale von den Sensoren am Controller gemessen?
Nicht dass da etwas nicht genug "entkoppelt" ist und Du einfach ab ner 
gewissen Spannung Störungen auf deinem Signal hast die so groß wie dein 
eigentliches Signal sind.

Wenn der Motor sich bei geringer Spannung dreht und die Drehzahl sich 
auch noch per PWM Signal verstellen lässt, wüsste ich nicht was an 
deinem Program falsch sein sollte.
Hast du mal die Signale bei höherer Spannung am Mosfet verglichen zu den 
Hallsensoren gemessen? Ist das Kommutierungsschema noch richtig?

Grüße

von Andreas M. (streicher)


Lesenswert?

Hallo Chris!

Ich denke, dass ein zusätzlicher 10µ zwischen VCC und Gnd nichts bringt, 
da dieser ja auch schnell nachgeladen muss. Und ob meine Spannungsquelle 
jetzt diesen und den Bootstrap schnell nachladen muss, sollte kaum einen 
Unterschied machen, außer das der 10µ auch während des Oberschalters 
nachgeladen wird.
Mein µC ist ein LPC2368 und die Hallsensoren werden mit 5V Spannung 
versorgt, da dieses der vorhandene Controller zu dem Motor auch so 
macht.

Ich habe über das Problem gestern mit einem Professor, der sich damit 
auskennt gesprochen. Er kam darauf, dass der Motor einen anderen 
Kommutierungspunkt braucht, als den den die Hall-sensoren geben. Sprich 
ich sollte in meiner Tabelle für die Hallsensor-signale mal einen 
Schritt weiter schauen, oder zurück. Er kam darauf, als er den Motor 
während er lief festgehalten hat. Man kann dann ja das kommutieren quasi 
spüren. Der Motor hatte da bei verschiedenen Punkten leicht 
unterschiedliche Drehmomente. Das man in der Tabelle dann etwas 
weiter/zurückschauen muss liegt daran, dass es möglich ist, dass die 
Hall-sensoren aufgrund von Fertigungstoleranzen nicht passend sind. Ich 
habe dieses ausprobiert und der Motor lief gleich viel 
gleichmäßiger(überall gleiches Drehmoment) und auf einmal bis einer 
Spannung von 10Volt.
Bei einer höheren Spannung bekomme ich dann Störungen auf den 
Hall-Sensoren, worauf der controller womöglich falsch kommutiert, da 
auch der strom zwischen 2 Phasen stark ansteigt.
Da mein momentaner Aufbau noch etwas provisorisch ist(Layout ist noch 
nicht fertig :)), kann es sein, dass bei höheren Spannung die Signale 
auf die Hall-sensoren überkoppelt. Ich denke wenn das Layout fertig ist 
und alles schön kompakt gebaut ist, dann sollte das besser werden. Laut 
dem Prof. ist die Schaltung auf jeden Fall so korrekt.
Auf deine Frage ein paar Einträge vorher: Wenn zwischenzeitlich 2 
Unterschalter offen sind(durch das alternierende takten, dann bremst der 
Motor nicht! Der Strom befindet sich dann für einen kurzen Moment im 
Freilauf, was dem Drehen des Motors aber nicht stört.

Von daher sollte das Problem vorerst einmal gelöst sein. Alles weitere 
wird sich zeigen, wenn die endgültige Platine fertig ist.

Ich wünsche die noch viel Glück bei deiner Schaltung. Wenn du weitere 
Fragen hast, dann kannst du dich gerne melden.

Gruß Andreas

von Chris B. (cbb)


Lesenswert?

Hi Andreas,

das mit den beiden Unterschaltern hört sich doch schonmal ganz gut an!

Mit dem 10µ zwischen Vcc und GND hab ich nur aus ner App.-Note.
Du musst bedenken, der 10µ Kondensator würde wie du schon selbst sagst, 
auch geladen, wenn der obere schalter geschlossen ist. Die Kapazität 
zwischen Vcc und GND ist außerdem auch für den unteren Mosfet zuständig, 
um bei diesem beim Schalten, das Gate aufzuladen.
Deshalb wird geraten die Kapazität zwischen Vcc und GND sollte min 10xC 
Bootstrap betragen.

Zu den Kommutierungspunkten:

Wie groß ist deine Auflösung der Hallsensoren? Ich denke du hast 6 
versch. Werte, sodass du auf eine Auflösung in 60° Schritten kommst.
Findest nicht, dass 60° vor oder zurück etwas viel sind für 
Fertigungstoleranzen? Da müsste ja schon gut was "schief" gegangen sein.
Ich denke eher sagen wir mal +/- 10°. Hier müsstest du dann die 
Verschiebung des Kommutierungspunktes über eine zeitverzögerte 
Ansteuerung (diese auch noch Drehzahlabhängig)schalten, um den Fehler zu 
beheben.

Evtl. kannst du ja nochmals nachfragen, aber ich weiß ja auch nicht die 
Auflösungsgenauigkeit.

Ich melde mich, wenn Fragen bestehen nochmals hier bzw. schreibe Dir 
evtl. ne PN.

Grüße Chris

von Andreas M. (streicher)


Lesenswert?

Hallo Chris!

Mit dem 10µ werde ich nochmal im Auge behalten. Den kann man ja zur not 
noch schnell einfügen.

Ich bekomme pro umdrehung und pro Sensor 23 Impulse. Von daher sind das 
schon recht kleine Schritte und das könnte im Bereich von 
Fertigungstoleranzen fallen.

Gruß

von Chris B. (cbb)


Lesenswert?

Hi!

Okay, das könnte natürlich wirklich hinkommen.
Jenachdem, welche Qualität der Motor aufweißt.

Hänge einfach zu deinem 100n zusätzlich einen 10µ Kondensator parallel.
Verwende am besten Keramik vielschicht SMDs.
So hab ichs zumindest gemacht.

grüße

von Simon K. (simon) Benutzerseite


Lesenswert?

Chris B. schrieb:
> Hänge einfach zu deinem 100n zusätzlich einen 10µ Kondensator parallel.
> Verwende am besten Keramik vielschicht SMDs.

Wenn schon Keramik Vielschicht, dann NUR 10µF. Keine 100nF parallel. Das 
kann fiese Resonanzen geben und ist auch unnötig.

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.