Go Down

Topic: How much of voltage drop when running BLDC Motor using servo value of 0-180? (Read 213 times) previous topic - next topic

rjadkins

Hi guys, I am using an Arduino Board to move a BLDC Motor.I'm using the servo library to move the motor using the 0-180 degree value as my speed. The BLDC motor has a 1000Kv, meaning it 1000rpm per volt. I am using a 9V adapter to power the Arduino and the BLDC Motor. Hence, at full speed (180 value)I now that the rpm is 9000 rpm. 9v times 1000kv = 9000rpm. I would like to know the rpm when I key in speed below the 180 value. So how much is the voltage drop when I want to change it from 9000 rpm to 8000rpm and etc? 

vinceherman

I do not know how linear the real life RPM will be compared to ESC throttle input values.
Theoretically, 9v gives 9000rpm and 8v gives 8000rpm, but you are not controlling voltage to the motor, just ESC throttle settings.  And you have not discussed what load the motor will have.  The kv rating is for an unloaded motor.

What are you trying to do?  Do you need specific motor RPM?

rjadkins

The load I have is  4.5 cm diameter aluminum plate attached on top of the motor. Yes, I do need a specific rpm. A motor that can spin 0-9000 rpm. According to my understanding of the BLDC theory, since I have 1000kv BLDC motor and wanting the motor to spin at 9000rpm max, therefore I use a 9V adapter, hence at max voltage, the motor should spin at 9000rpm. I used the servo library to move the motor and using the servo value (0-180) degree meaning, 180 is the max speed, hence the rpm is 9000. However, when I key in the value of 160, the motor slow down compared to the 180. So, how much of voltage provided or the voltage drop when in use the 160 speed? Is there any way to measure the voltage drop?

vinceherman

If you need specific RPM, then measure the RPM and use PID to adjust the ESC throttle values. *1
Your spinning plate IS a load.  Mass.  Air resistance.  Additional force on bearings.

Another possibility is to map the resulting RPM at various throttle settings.  You still need to measure the RPM.  But if you set the throttle to a known value and then record the RPM, you will have a reference.  Repeat this test for a wide range of throttle settings, recording the RPM under load at each setting.

Then you will have a map to use to set the throttle and get close to your desired RPM.  Unless the load can change.  Then you are back to needing real time RPM readings and PID.


*1 I suggest servo.writemicroseconds() over servo.write() since it gives finer granularity.  1000 steps instead of 180

slipstick

Details of what exactly you are trying to drive would help.

Since it is a BLDC motor I assume you are driving it via an ESC. So the question is how linear is the ESC. And most hobby-grade ESCs used with sensorless BLDCs are not very linear at all.

Oh and the Kv for hobby-grade motors is often not very accurate either. I've measured differences of well over 10% sometimes.

Steve

MarkT

The load I have is  4.5 cm diameter aluminum plate attached on top of the motor. Yes, I do need a specific rpm. A motor that can spin 0-9000 rpm. According to my understanding of the BLDC theory, since I have 1000kv BLDC motor and wanting the motor to spin at 9000rpm max, therefore I use a 9V adapter, hence at max voltage, the motor should spin at 9000rpm. I used the servo library to move the motor and using the servo value (0-180) degree meaning, 180 is the max speed, hence the rpm is 9000. However, when I key in the value of 160, the motor slow down compared to the 180. So, how much of voltage provided or the voltage drop when in use the 160 speed? Is there any way to measure the voltage drop?
Not really as the ESC won't necessarily be using a linear decay mode, so even the pwm ratio isn't useful for
this - you have to measure the speed directly.
[ I will NOT respond to personal messages, I WILL delete them, use the forum please ]

Go Up