Go Down

Topic: controlling speed of simple vibration motor (Read 5784 times) previous topic - next topic


hi  i am new to arduino and the forums.
i want to drive a small Shaftless Vibration Motor(10x2.0mm) but I want to make it vibrate faster or slower based on input.
What is the best way to achieve this?
Should I buy a motor driver shield or is there any other way to control the motor?



Use a driver transistor if the motor's current is over 30mA and feed it with a PWM signal to control the speed.


Other details about this motor are more important than its dimensions.
How much voltage and current does it take?  That will determine how you can control it from Arduino.
Also, knowing what kind of motor is it?  Is it actually a rotating motor with an offset weight?

Or is it some sort of "buzzer" kind of device?  Some of the "buzzer" devices have built-in drivers
and/or they achieve maximum movement by being resonant at some particular frequency.

If your gadget has a built-in driver or it is resonant, then you cannot control the frequency.

But without knowing more about your "Shaftless Vibration Motor" we would be shooting in the dark.

Oh I apologize, I am new to this and didn't realize that those specifications affected the way you control the motor.

"Free-run speed @ 3V:    14500 rpm
Free-run current @ 3V:    60 mA2
Voltage:    3 V
Vibration amplitude:    0.75 g"

That is all the specification that is listed. How do I figure out if it is resonant or if it has a built in driver?
Perhaps you have a suggestion for a vibration motor that has a controllable frequency? My only requirement would be that it can't be outlandishly huge.


sorry for interrupting, RPM is per minutes, 14500 / 60 = 241.6 Hz


The vibration motor I am looking at this:

I do not want the vibration to be audible but something that the user can feel. So it should vibrate faster or slower based on input from other sensors.


Jun 15, 2011, 08:07 am Last Edit: Jun 15, 2011, 08:13 am by swish123 Reason: 1

Yes it appears that you can probably control it with Arduino PWM and a transistor (because of the current). I wouldn't expect a wide range of frequencies.

Thanks a lot.
I still haven't looked too much into the functions of the Arduino PWM but along with the spec sheet of the motor I found this(RPM vs Current vs Voltage):

So would the arduino PWM really be able to control the current and/or voltage going to the motor or is speed controlled through other means?

As in, if another sensor gave a certain input I would want the motor to get - for example - 2.6v with 53 amp of current(~13260 RPM) but a different input should max out the motor at 3.4v 67 amps(~15900 RPM).

Also, do you have any suggestions on how to obtain a wider range of frequencies from a vibration motor?


Okay I appreciate the help. I decided to do some more research before I posted anything else but I am unable to find any online resource pertaining to motor control through Arduino PWM.
Can anyone suggest a link with sample code as to how to use PWM to control a motor?


Jun 19, 2011, 03:31 pm Last Edit: Jun 19, 2011, 03:41 pm by MGeo Reason: 1
PWM will variable rpm, model aircraft electric motor speed controls do that all the time.  This will give you open loop speed control of a brush motor.

Here is a Microchip  :smiley-eek: app note that explains concepts: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en012017

If you wanted more precise speed control independent of input voltage there are back-emf sense schemes that measure back-emf during the 'coast' portions of the PWM cycle to close a velocity loop.  Likely more than you are looking for here.

If it matters, remember that the vibratory force is a square function of RPM, (e.g. if you reduce the RPM in half, you will cut the vibratory force generated to 1/4 of the full RPM value).

Go Up