Vraag:
Hoe kan ik back-EMF meten om de snelheid van een DC-motor af te leiden?
Phil Frost
2013-01-14 22:12:42 UTC
view on stackexchange narkive permalink

Ik ben geïnteresseerd in het meten van de back-EMF van een motor om de motorsnelheid te bepalen, omdat deze goedkoop is en geen extra mechanische onderdelen nodig heeft. Hoe kan ik de back-EMF meten wanneer ik de motor bestuur?

+1. Om meer informatie te verzamelen: http://www.acroname.com/robotics/info/articles/back-emf/back-emf.html
Een antwoord:
Phil Frost
2013-01-14 22:12:42 UTC
view on stackexchange narkive permalink

One way to do this is to briefly stop driving the motor, long enough to let any residual current from the driving voltage die down, and then simply measure the voltage. The time it takes the current to settle will depend on the inductance of the windings. This is simple to understand, and the undriven interval can be made quite short, but this has obvious disadvantages.

Another method involves a clever use of Ohm's law. A motor can be modeled as a series circuit of an inductor, a resistor, and a voltage source. The inductor represents the inductance of the motor's windings. The resistor is the resistance of that wire. The voltage source represents the back-EMF, and it is directly proportional to the speed of the motor.

motor model schematic

If we can know the resistance of the motor, and we can measure the current in the motor, we can infer what the back-EMF must be while the motor is being driven! Here's how:

We can ignore \$L_m\$ so long as the current through the motor is not changing much, because the voltage across an inductor proportional to the rate of change of current. No change in current means no voltage across the inductor.

If we are driving the motor with PWM, then the inductor serves to keep the current in the motor relatively constant. All we care about then, is really the average voltage of \$V_{drv}\$, which is just the supply voltage multiplied by the duty cycle.

So, we have an effective voltage we are applying to the motor, which we are modeling as a resistor and a voltage source in series. We also know the current in the motor, and the current in the resistor of our model must be the same because it is a series circuit. We can use Ohm's law to calculate what the voltage across this resistor must be, and the difference between the voltage drop over the resistor and our applied voltage must be the back-EMF.

Example:

motor winding resistance \$ = R_m = 1.5\:\Omega\$
measured motor current \$= I = 2\:\mathrm A \$
supply voltage \$= V_{cc} = 24\:\mathrm V \$
duty cycle \$ = d = 80\% \$

Calculation:

24V at an 80% duty cycle is effectively applying 19.2V to the motor:

$$ \overline{V_{drv}} = dV_{cc} = 80\% \cdot 24\:\mathrm V = 19.2\:\mathrm V $$

The voltage drop over the winding resistance is found by Ohm's law, the product of the current and winding resistance:

$$ V_{R_m} = IR_m = 2\:\mathrm A \cdot 1.5\:\Omega = 3\:\mathrm V $$

The back-EMF is the effective driving voltage, less voltage across the winding resistance:

$$ V_m = \overline{V_{drv}} - V_{R_m} = 19.2\:\mathrm V - 3\:\mathrm V = 16.2\:\mathrm V $$

Putting it all together into one equation:

$$ V_m = dV_{cc} - R_m I $$

Een punt dat het vermelden waard is, is dat, behalve in de mate dat een inductor * parallelle * weerstand of andere lekkage heeft, de gemiddelde spanning over een inductor over een bepaald tijdsinterval evenredig moet zijn met het verschil in stroom tussen het begin en het einde daarvan interval. Als een inductor aan het begin en einde van een bepaald tijdsinterval dezelfde hoeveelheid stroom heeft, moet de gemiddelde spanning over de inductor nul zijn. Die regel is zowel van toepassing op discrete inductoren als op het model van de inductor die in serie staat met een ideale motor.
@supercat: hm, interessant punt. Ik kan zien hoe ik dat zou kunnen gebruiken om het negeren van de inductor verder te rechtvaardigen, maar toen dacht ik aan iets anders. Als de stroom werkelijk verandert (tijdens periodes van verandering van belasting of snelheid misschien), zou dit een fout in deze methode introduceren, nietwaar? Ik vraag me af of dit belangrijk genoeg is om in overweging te nemen.
Merk ook op dat als iemand een motor met een behoorlijke frequentie PWM-gebruikt, de efficiëntie het beste zal zijn als de stroom in zijn inductantie * niet * afneemt tussen cycli. In plaats van de motor te openen, moet u deze kortsluiten, tenzij of totdat de stroom tot niets daalt (hopelijk zal de PWM-snelheid snel genoeg zijn dat dit niet het geval is). Als men de motor lang genoeg kortsluit, zal de stroom tot nul dalen en vervolgens omkeren. Tegenstroom zal efficiëntie tenietdoen, dus open het circuit op dat punt (of kortsluiting door een transistor die slechts één stroomrichting toelaat). Let daar op...
... als de blokkeerstroom groter is dan de hoeveelheid die iemands voorraad kan leveren zonder te verzakken, kan PWM'ing de motor daadwerkelijk * het beschikbare start- of langzaam-toerentalkoppel * verhogen *. Merk ook op dat als de motor sneller draait dan de snelheid "gevraagd" door de PWM, een deel van de overtollige energie terug in de toevoer wordt gedumpt (goed voor efficiëntie, als men het veilig kan benutten).
Over het algemeen hoeft men zich over het algemeen geen zorgen te maken dat de motorinductie een verandering in de motorstroom in een onjuiste spanning verandert. Het kan ervoor zorgen dat sommige individuele metingen uit zijn, en kan mogelijk leiden tot oscillatie, maar het is maar een van de vele factoren die oscillatie veroorzaken in een niet-gecompenseerde feedbacklus, en die, samen met de andere, kan worden gecorrigeerd door een correct -afgestemde PID-lus.
Ik ben geen specialist, maar ik denk niet dat je zomaar kunt aannemen dat je huidige niet zal veranderen, en je kunt je inductie zo gemakkelijk negeren.Externe belastingen produceren koppel en dit koppel veroorzaakt een stroomverandering.Ook de PWM itsef zal een verandering in de stroom in de motor aanbrengen ... ja de inductantie zal het "gemiddeld" houden, maar dit zal geen platte lijn zijn, het maakt het ook gemiddeld door spanningen te creëren.Hoeveel zal dit echt van invloed zijn op uw project?Nou, ik kan het niet zeggen, het is volledig afhankelijk van de motor zelf en de belasting, dus dit zal drastisch variëren van project tot project.
Nadat @mFeinstein deze methode daadwerkelijk heeft geïmplementeerd en getest, kan ik zeggen dat, hoewel beide effecten die u noemt, bestaan, ze * kunnen * worden genegeerd.Als u extreme precisie bij snelheidsregeling nodig heeft, moet u een servo gebruiken.Het voordeel van deze methode is eenvoud.
Zoals ik al zei, ik denk dat dit erg toepassingsafhankelijk is ... Heb je het gebruikt in grote motoren en hoge traagheidsbelastingen?Het had heel goed kunnen werken voor je toepassing, maar ik kan niet zeggen voor alle andere die er zijn ... Ja, servo's zijn beter ... Als je ze kunt gebruiken ... Ik heb controle gezien over grote ladingen met grote luidruchtige geborsteldmotoren en elke variabele die in die applicatie wordt geteld ... Maar ja, voor eenvoudige dingen kan dit werken, ik heb het nooit uitgesloten, houd gewoon de dingen in de gaten als dat niet het geval is
@mFeinstein Telt een kleine elektrische auto als een grote motor en een hoge traagheidsbelasting?
Waarschijnlijk denk ik :), ik denk dat het sterk afhangt van de motor, de inductantie en de precisie van de besturing die je nodig hebt, bijvoorbeeld op een ampflow maakt elk stukje informatie het verschil
Waarom meet u niet gewoon de spanningsval over een BLDC-motor terwijl deze draait met een multimeter en vermenigvuldigt u deze met Kv om de snelheid van een motor te schatten?Waarom moet u stroom meten?
@techSultan Een borstelloze motor opent enkele mogelijkheden die hier niet worden besproken.
Deze methode wordt in meer detail besproken in een IEEE-paper: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=4314629


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...