## Electronics and Electrical Engineering Design Forum

Where you can find electronics and electrical engineering forum questions & answers.
Wednesday, November 29, 2017 by david azoulay

# Calculating an acceleration from 3 axis MEMS

I installed a MEMS sensor on a motor that I can control the motor speed. I'm recording the information from the sensor (x, y, z)

I'm trying to compare if the MEMS sensor reading is ad the same as my motor speed. But I don't know how to convert the data from the 3 Axis MEMS

For example I set my motor speed to 28.84 RPM, I have the data from the MEMS sensor (as a X,Y,Z array)

How i can convert the data to RPM or vice versa to be able to compare the reading to the actual motor speed .

thanks

• by  Mike Anderson (edited)
Hmm... I'm assuming that since you tagged this with accelerometer, that your MEMS sensor is an accelerometer and not a gyro?  You also don't say if you're running a brushed or brushless motor.  Accelerometers measure the gravity that is affecting the sensor given its current orientation.  Unfortunately, being in close proximity of rotating magnetic fields can have a negative impact on the operation of some MEMS units.  If you're using a brushed motor, then you'll also get considerable electrical noise because the brushes are constantly making and breaking contact, thereby creating sparks.

Are you trying to measure the fluctuation of gravity induced by the rotor?  If so, the MEMS device may not be sensitive enough depending on the size of the armature and the MEMS sensor you're using.  If you're trying to measure motor speed based on vibration, then you're looking for patterns in the data that jibe with the vibration you're experiencing.  You'll need to know exactly how your motor is constructed so you can correlate the speed of the motor with the vibration you're seeing.  E.g., if there are two poles on the armature, you should see two spikes as the poles rotate past your sensor.  With that data, you can correlate your motor speed with the data you're seeing.

However, the best way to determine speed is to use a take off from the axle of the motor itself such as a quadrature shaft encoder or one of the Grayhill rotary encoders.  Alternatively, there are multiple optical ways to determine speed that use reflectance from something shiny on the axis of rotation or by drilling a small hole through the driven wheel/gear and putting something like and infrared LED on one side and an infrared photo-diode on the other side and count light pulses.  If you're driving metal gears, you can also use a Hall-effect sensor to detect the magnetic field induced as the teeth go past the sensor.  But, the Hall-effect technique doesn't work if the gears are aluminum.

You really need to be more specific about your testing set up, what you're trying to measure and how you think you're going to measure it -- including part numbers.  Then, we might be able to provide more information.

HTH,

Mike
• Hi Mike

Thank you for your replay.

What I'm trying to do is to measure the delta between the motor and the accelerometer  measurement.

I assume that my motor is very accurate so if ill set the motor to rotate in a defined speed  he will to it.

I have a list of different speed in RPM (from 20 to 500) each time I set the motor to rotate in a specific speed, then I'm recording the accelometer data (acc_x, acc_y, acc_z) .

i want to convert (by calculation) my motor speed to acceleration data that I'm  getting from the accelometer ( in m/s^2) . By  that I can find the delta between the motor acceleration  to the accelometer meserment.

What I don't know is how to calculate from motor speed ( in RPM) to the same units that the accelerometer  gives me ( m/s^2) - I know that I need only to calculate only one axis from  the accelerometer  data.

thank you

• So, you're measuring the vibration of the motor in the accelerometer?  Are you actually seeing a pattern in the acceleration data as the motor moves or is it sort of random?  Try to graph the data from the various axis in something like Excel or GnuPlot.  Does it look like there's a pattern?

To determine the speed of the motor, you actually don't need to convert from m/s^2 to RPM (which I'm not even sure is possible in the first place).  You just need to recognize the pulses as the motor turns (the vibration peaks) and count those per unit time for your number.

HTH,

Mike

• Hi Mike

Thank you for your replay.

What I'm trying to do is to measure the delta between the motor and the accelerometer  measurement.

I assume that my motor is very accurate so if ill set the motor to rotate in a defined speed  he will to it.

I have a list of different speed in RPM (from 20 to 500) each time I set the motor to rotate in a specific speed, then I'm recording the accelometer data (acc_x, acc_y, acc_z) .

i want to convert (by calculation) my motor speed to acceleration data that I'm  getting from the accelometer ( in m/s^2) . By  that I can find the delta between the motor acceleration  to the accelometer meserment.

What I don't know is how to calculate from motor speed ( in RPM) to the same units that the accelerometer  gives me ( m/s^2) - I know that I need only to calculate only one axis from  the accelerometer  data.

thank you

• So, you're measuring the vibration of the motor in the accelerometer?  Are you actually seeing a pattern in the acceleration data as the motor moves or is it sort of random?  Try to graph the data from the various axis in something like Excel or GnuPlot.  Does it look like there's a pattern?

To determine the speed of the motor, you actually don't need to convert from m/s^2 to RPM (which I'm not even sure is possible in the first place).  You just need to recognize the pulses as the motor turns (the vibration peaks) and count those per unit time for your number.

HTH,

Mike

• So, you're measuring the vibration of the motor in the accelerometer?  Are you actually seeing a pattern in the acceleration data as the motor moves or is it sort of random?  Try to graph the data from the various axis in something like Excel or GnuPlot.  Does it look like there's a pattern?

To determine the speed of the motor, you actually don't need to convert from m/s^2 to RPM (which I'm not even sure is possible in the first place).  You just need to recognize the pulses as the motor turns (the vibration peaks) and count those per unit time for your number.

HTH,

Mike