Snel acceleren BLDC motor

Hallo,

Ik ben al een tijdje bezig met het maken van BLDC controller voor mijn quadrocopter. Het werkt allemaal goed en is gebaseerd op de volgende techniek (link).
Ik sample tijdens de On en Off-time van de PWM de BEMF om zerocrossings te bepalen.
Dit werkt allemaal vloeiend op 1 ding na, als ik bijvoorbeeld van 5% PWM in 1 keer naar 90 of 100% PWM ga blokkeerd de motor en maakt hij wat piepende geluiden. En als ik niet ingrijp branden mijn fets uit.

Als ik er een ratelimter opbouw werkt het prima maar dit is nadelig voor de bandbreedte.
Ik zoek dus eigenlijk de oorzaak waarom de motor dit doet, en hoe ik het kan verhelpen.

Met een normale DC motor gaat dit wel. Ik heb al gezocht op internet maar kon geen zinning antwoord vinden.

Wie o wie kan mij hier bij helpen ?

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

Ik denk dat je meer energie nodig hebt om de versnelling te halen. Hogere spanning is hogere stroom en hogere versnelling mogelijk.

Als je sturing sneller gaat dan je motor bij kan houden en er is geen (juiste) terugkoppeling dan gaat het mis. Er zit dus gewoon een maximum aan. Als je daar onder blijft moet het goed gaan. Bepaal aan de hand van wat tests hoe snel je van 0 naar 100% kan gaan en blijf daar net wat onder.

Kom eens langs bij RevSpace of één van de andere spaces!

Het gaat niet zo zeer om hem sneller te maken. Maar vanaf lage toerentallen naar hoge toerentallen stalles hij. Een dc motor blijft gewoon draaien

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

Werkt je BEMF al bij 5%? Dan zou je hem niet moeten "verliezen". Het is toch ook niet zo dat je 90% het toerental bepaalt? Die 90% is de tijd dat de motor aan de voeding hangt, toch?

Ik denk dat je een zero-crossing meet, die er niet is. Alleen dan gaat je elektrische veld sneller dan de motor kan bijhouden.

Schakel je op het moment van de zero crossing? Dat moet toch een stuk later? In theorie iets van 30 graden, maar als je snelle accelleratie wilt, kan het al 15 graden later. Als je nul zou doen, denk ik dat je hem wel eens kan verliezen.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

Ik denk dat je toch een rate/current limiter nodig hebt doordat de interne weerstand en inductie van de motor zo laag is.

Voorbeeld van een Roxxy 2827-34 motor:

Als je de inductie (ongeveer 25uH) weglaat (doordat elektrische tijdconstante veel kleiner is dan de mechanische) dan is de stroom door de motor (PWM*Supply-RPM*Kv)/R. De weerstand van de Roxxy is rond de 0.11 Ohm.
Even zonder load gerekend (Back-emf = Supply): 10V voeding en PWM van 5% naar 100% (10V-0.5V)/0.11 = 86A.

Hoe snel kan je de motor al accelereren?

Op 3 december 2012 21:27:18 schreef rew:
Werkt je BEMF al bij 5%? Dan zou je hem niet moeten "verliezen". Het is toch ook niet zo dat je 90% het toerental bepaalt? Die 90% is de tijd dat de motor aan de voeding hangt, toch?

Ik denk dat je een zero-crossing meet, die er niet is. Alleen dan gaat je elektrische veld sneller dan de motor kan bijhouden.

Schakel je op het moment van de zero crossing? Dat moet toch een stuk later? In theorie iets van 30 graden, maar als je snelle accelleratie wilt, kan het al 15 graden later. Als je nul zou doen, denk ik dat je hem wel eens kan verliezen.

Dit is niet zo zeer het probleem, ik kan mijn dutycycle veranderen van 5% tot 99% zonder problemen als ik het binnen 10ms (heb even geen exacte waarde). Maar doe ik dat instant dan gaat het fout, daarvoor had ik de ratelimiter die per sampled tijd (5ms) de verandering van PWM begrenste.

Op 3 december 2012 22:17:09 schreef Rixo:
Ik denk dat je toch een rate/current limiter nodig hebt doordat de interne weerstand en inductie van de motor zo laag is.

Voorbeeld van een Roxxy 2827-34 motor:

Als je de inductie (ongeveer 25uH) weglaat (doordat elektrische tijdconstante veel kleiner is dan de mechanische) dan is de stroom door de motor (PWM*Supply-RPM*Kv)/R. De weerstand van de Roxxy is rond de 0.11 Ohm.
Even zonder load gerekend (Back-emf = Supply): 10V voeding en PWM van 5% naar 100% (10V-0.5V)/0.11 = 86A.

Hoe snel kan je de motor al accelereren?

Toevallig heb ik die motor, ik meete met de LCR van fase naar fase 50uH en 2Ohm.

Ik zou eens wat testen kunnen doen hoeveel tijd ik minimaal nodig heb om mijn motor normaal te kunnen acceleren.

Mijn controller zou de PWM wel uit moeten zetten op het moment dat de bus stroom boven de 17A uitkomt (instelbaar door DAC)(dsPIC33FJ16GS504)

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

De waarde die ik noemde zijn per fase. Ik had inderdaad de fase naar fase waarde moeten nemen. Ik meet dus ook een inductie van 50uH van fase naar fase. Voor de weerstand kom ik dus op 0.22 Ohm uit. 2 Ohm lijkt mij dan ook niet te kloppen, meet je wel met een 4 punts meting?

2Ohm zou ook vreemd zijn als je de verliezen in de winding uitrekent. Bij vollast van 9A zou dat betekenen dat de verliezen in de windingen I2R = 162 Watt zijn.

ik heb gemeten met een 4 punts LCR meter gemeten (Agilent E4980A) dit was wel met een gedeukte motor.

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

Je wilt dus zonder tussenstappen direct van 5% naar 100%? Volgens mij is dat door de massatraagheid van de motor al niet mogelijk. Het duurt nou eenmaal even voordat massa op gang is.

Kom eens langs bij RevSpace of één van de andere spaces!

Dat wilde ik net zeggen. De motor heeft gewoon een massatraagheid, er is een maximum wat hij aan accelleratie aankan. En je zult OF de commutatie moeten koppelen aan de accelleratie OF de accelleratie kunstmatig beperken, om het maximum te halen, anders schiet je inderdaad de massatraagheid voorbij.

Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com

Op 4 december 2012 08:36:18 schreef Benadski:
Je wilt dus zonder tussenstappen direct van 5% naar 100%? Volgens mij is dat door de massatraagheid van de motor al niet mogelijk. Het duurt nou eenmaal even voordat massa op gang is.

Dat snap ik, volgens heb ik mijn probleem niet duidelijk uit gelegd.

Ik snap dat de motor erbijvoorbeeld 200ms over doet om van 500RPM naar 6000 rpm te gaan door de massatraagheid, maar dat is ook niet het probleem.

Het probleem is als ik de spanning van van de motor verander van 1V naar 12V binnen 250ns dan stop de motor. Daardoor heeft hij ook geen BEMF en kan hij dus ook niet commuteren.

Als ik de spanning veranderen van bijvoorbeeld 5V naar 12V is er niks aan de hand dan accelereerd de motor zo snelmogelijk (beperkt door massatraagheid).

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

Dan denk ik dat door magnetische koppeling van de bekrachtigde spoel(en) naar de onbekrachtigde je BEMF meting de mist in gaat en je de zero crossing mist.

Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com

Heb het getest ik moet er minimal 0.2 seconde over doen om van 5% naar 95% te gaan. Doe ik het in 0.18 seconde gaat het fout.
Maar dan duurd het dus ook 20ms om de PWM met 10% te verhogen. Terwijl het dan niet nodig is.

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

@rew: als je 15 graden na de nuldoorgang commuteert, ben je effectief veldverzwakking aan het doen (de gemiddelde hoek tussen de rotor- en statorvelden worden dan kleiner dan 90 graden). Het effect hiervan is dat je het veld van de rotormagneten tegenwerkt, waardoor de tegen-EMK kleiner wordt, en je met een gegeven spanning dus een hoger toerental kunt halen, of bij een gegeven toerental en busspanning een grotere stroom door de motor kunt krijgen, als die tegen-EMK al zo groot was dat dat de beperking werd.

Helaas is die tegen-EMK ook meteen de koppelfactor; door de tegen-EMK te verkleinen, neemt de koppelfactor (Nm/A) af, waardoor je dus een grotere stroom nodig hebt om een gegeven koppel te halen, en de motor minder efficient wordt. De koperverliezen nemen immers kwadratisch toe met de fasestroom.

@TS: kijk eens met een scope wat er gebeurd net voordat je de motor stall trekt. Een hall sensor om de werkelijke rotorpositie te bepalen lijkt me erg handig.

Ik denk dat je helemaal niet moet kijken naar de effectieve spanning of pulsbreedte, maar naar de fase- en DC bus stromen. Ik neem aan dat je de fasestroom wel kunt meten? De fasestroom bepaald het koppel, en het koppel bepaald, natuurlijk samen met het lastkoppel en massatraagheidsmoment, wat de acceleratie wordt.

Als die fasestroom te groot wordt, zou het wel eens te lang kunnen duren voordat de onbekrachtige fase zijn stroom gedumpt heeft, en de nuldoorgangsdetectie kun je pas betrouwbaar doen als dat is gebeurd. Daarbij kan de motor bij te grote fasestromen zodanig ver verzadigd raken dat dit roet in het eten gooit bij de nuldoorgangsdetectie.

Gebruik je een software phase locked loop o.i.d. voor de rotorpositie? Een soort van state estimator lijkt me wel handig om te voorkomen dat een enkele verstoorde meting ellende veroorzaakt, maar als de motor zo snel versnelt dat de phase locked loop of andere state estimator het niet kan volgen, zul je het ding natuurlijk ook stallen.

Overigens hebben de sliding mode observer-stijl state estimators hetzelfde probleem.

In principe zou je een analoge phase locked loop ook al een state estimator kunnen zien, en daar is al heel veel over geschreven, wat in grote lijnen van toepassing is op andere state estimators.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Ik gebruik geen state observer, ik doe niks meer dan in de eerder genoemde link. De brushless motoren die ik gebruik hebben geen hall sensoren dus dat word lastig. Fase stroom kan ik thuis niet meten, maar wil vrijdag op het werk gaan meten daar zijn genoeg current probes en scopes met flink geheugen.

Ik heb zelf het vermoeden door een hoge spannings verandering waarbij de EMK nog laag is dat de fase spoelen in verzadiging gaan en daardoor geen kracht meer kunnen leveren. Met als gevolg dat hij stalled en dus ook niet verder commuteerd omdat er geen zerocrossings meer komen.

Ik doe trouwens niet aan veldverzwakking door vervroegt te commuteren. Tevens als ik het busstroom limiet op 12A leg gaat het wel goed. De dsPIC kapt de PWM automatisch af als de stroom boven de 12A komt. De motor doet op max toerental ongeveer 6A average

[Bericht gewijzigd door Jeroen13 op dinsdag 4 december 2012 22:02:26 (12%)

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

Ok, als ik het goed begrijp, kan die dsPIC zelf dus niet direct de fasestroom meten? Als je de DC bus stroom meet met een redelijk forse bandbreedte, kun je de fasestroom ook berekenen.

Een state estimator is juist wel bruikbaar als je geen hall sensors gebruikt, omdat je daarmee gemakkelijk valse nuldoorgang events kunt onderdrukken.

Als de stator begint te verzadigen zal de stroom sterk toenemen, en de koppelfactor neemt af, maar het geleverde koppel zal nooit lager worden dan bij een kleinere fasestroom. Bij de verzadiging neemt de totale flux niet af, hij neemt alleen minder snel toe.

Overigens heb ik dat artikel niet helemaal in detail gelezen.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Op 4 december 2012 21:20:21 schreef SparkyGSX:
@rew: als je 15 graden na de nuldoorgang commuteert, ben je effectief veldverzwakking aan het doen (de gemiddelde hoek tussen de rotor- en statorvelden worden dan kleiner dan 90 graden).

De motoren waar het hier over gaat zijn 3-fase. DWZ in de aansturing zijn 6 fasen. Als je normaal commuteert zijn er dan 360/6 = 60 graden per commutatie. Volgens mij gebeurt de nuldoorgang halverwege zo'n periode. Dus normaliter zal je na 30 graden (die reken je uit door dezelfde tijd te nemen als sinds je vorige commutatie of zoiets).

Maar als je aan het accellereren bent dan mis je wat acelleratie-vermogen als je braaf na die 30 graden commuteert. Dus kan je op commerciele ESCs iets van 7 graden /15 graden instellen.

Ik blijf het er op houden dat je een nuldoorgang ziet die er niet is. Heb je genoeg geheugen om te loggen hoeveel tijd je tussen commutatie en nuldoorgang ziet?

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

ik kan wel eens kijken of hij uberhaupt een zero crossing ziet.
Die 30 naar 15 graden is veldverzwakking.

De PIC kan inderdaad niet direkt de fase stroom meten, ik doe dat wel indirect door op het helft van de PWM puls de stroom te samplen. En ik weet wanneer waar welke stroom loopt. Ik sample elke PWM periode de BEMF van alle drie de fases en ook de BUS-stroom.

Hmm ik dacht echt dat het met de verzadiging te maken had.

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

Hier een plaatje van de BEMF en bus stroom op het moment van PWM veranderen

http://users.telenet.be/jeroenvandemortel/Quadrocopter%20Electronic/dsESC/BLDC%20BEMF.png

Geel: Is het punt waar PWM veranderd
Groene: op de opgaande flank en neergaande flank detecteerd hij zero crossing
Blauw: BEMF
Paars: Busstroom

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

Hey! Een rigol achtig apparaat. Je hebt dus 1M samplepunten: je kunt scrollen om meer data te bekijken! Dat kan nodig zijn om het probleem te zien.

Volgens mij zie je hier in beeld dus al waarom het misgaat.

net VOOR het midden van het scherm zie je een zero crossing. Net NA het midden weer 1. Je prop kan niet in de 1 ms van het begin van het scherm NIET commuteren en dan ineens met 250µs ineens twee keer.

Je ziet een zero crossing die er niet is. (hoe lang zeg ik dat al? Twee dagen!).

[edit]
Even voor de goede orde: Ik zie links een periode van meer dan 1ms zonder commutatie signaal. De prop draait dus minder dan 1 omwenteling per 6ms. Dan 2x in 250µs, dus dan zou ie ongeveer 1 omwenteling per 1.5ms draaien. Zo snel kan ie, ook op vol gas, niet accelereren.

Hmm. 1 omwenteling per 1.5ms is ongeveer 40000 RPM. Da's wat veel, daarvan kunnen we zowiezo zeggen dat het niet kan. Maar zo erg is het niet: Waar ik hier omwenteling per seconde of RPM zeg, bedoel ik "elektrische" omwenteling. Per fysieke omwenteling zijn er een aantal elektrische. Dat aantal kan best 4, 6 of 8 zijn. Dus dan komen we op 5000-10000 RPM, hetgeen net moet kunnen.

[Bericht gewijzigd door rew op donderdag 6 december 2012 09:07:03 (40%)

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/

De motor die ik gebruik is een 7 polige motor dus het elektrische veld draait 7 keer sneller dan mechanisch.

Ik heb deze meting al een keer eerder gedaan toen gaf het een heel ander beeld (hij zag niet eens zerocrossings). Maar inderdaad de BEMF gaat over de zeik daardoor verkeerde zerocrossings.

Maar wat is dan de rede dat de BEMF zo doet ? Op maximaal toerental zou hij er 250us per 30 graden over moeten doen.

Het is btw een Agilent DSO1024

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

Ik denk niet dat de werkelijke tegen-EMK het probleem is, het zal eerder in je hardware of software zitten, denk ik. Het lastige is dat je op de scope natuurlijk het hele beeld ziet, terwijl de microcontroller wel synchroon met het PWM signaal kan sampelen, en zelf kan bepalen op welke fase die nuldoorgang plaats zou moeten gaan vinden. Het scope beeld wordt bijzonder rommelig doordat alle signalen in de tijd dat ze onbruikbaar zijn toch weergegeven worden.

Misschien kun je de samples van de ADC opslaan in RAM, en ze later uitlezen? Het loont echt om een keer een simpele maar goede scope functie (met een flexibel aantal kanalen e.d.) te schrijven, om in dergelijke real-time projecten te kunnen zien wat er echt in de software gebeurd.

Het is btw een Agilent DSO1024

Nice!

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Dat kan ik zeker, ik kan 4 kanalen samplen met 40kHz en dan 150 samples (geheugen van deze dsPIC is niet zo heel groot). Dat zal ik nog eens proberen.

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

Hier een datalog, van 45 word de PWM veranderd
Rood: BEMF A, Groen Current Phase A, Blauw buscurrent. Geel commutatie stappen.
http://users.telenet.be/jeroenvandemortel/Quadrocopter%20Electronic/dsESC/Data%20Log%20BEMF.png

Ik merk wel ik het stroom limiet op 12A leg, gaat het wel goed alleen de eerste paar cycles zijn ook slecht.

[Bericht gewijzigd door Jeroen13 op donderdag 6 december 2012 22:30:31 (19%)

//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight

En weer zie ik een instantane "versnelling". Het lijkt me toch echt sterk dat je binnen 1 periode op dat hogere toerental kan gaan zitten.

In je buscurrent zie ik dat je commutatie frequentie precies gelijk is aan je PWM frequentie... Hoe komt dat?

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/