This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DRV10983: RPM Measurement Accuracy with Register 0x01

Part Number: DRV10983

Hello E2E,

We're looking into using I2C only for setting the motor speed. This idea is to set the Motor speed via register 0x30 and then monitor via Register 0x01. I have something working but I'm observing some error in my motor speed calculation which makes use of register 0x01. My calculation is as follows:

 

RPM = (( (MotorSpeed)*6) >> PolePairsShift;

 

Where PolePairsShift = 2, corresponding to 4 pole pairs. 

 

It looks like the value is in the ballpark as I increase the motor speed, but can be off by a 100RPM or so... ("True" RPM has been measured using the FG pulse from the motor driver and also a secondary RPM measuring device with an oscilloscope, both of which show the same value.)

 

How accurate should I expect my RPM measurement to be utilizing register 0x01? (Could be that there is an error in my equation as well... :) ) Preference would be to not need to rely on the FG pulse.

 

Alternatively, would a measurement using the MotorPeriod be more accurate? (Register 0x02) Haven't tried that yet. 

Thanks for the help!

Regards,

Russell

  • Hello Russel,

    I'll start by showing my work regarding the RPM calculation for other users who might read this but your equation is correct:

    RPM = 60*f_elec/n_polePairs. So, Electrical speed = {MotorSpeed1:MotorSpeed2} / 10. and right shift by 2 will divide by 4. This'll change the equation to RPM = 60*{MotorSpeed1:MotorSpeed2}/(10*n_polePairs) = 6*{MotorSpeed1:MotorSpeed2}>>2. I only encourage you to make sure you read Speed1 then Speed2.

    You have noticed correctly that FG is a pure analog block that translates the speed (electrical commutation) of the motor so it will be most accurate for calculating speed. With that said, the MotorPeriod register 0x02[15:0] is a 16 bit value that is sampled right off of the analog block used for FG and the MotorSpeed Register 0x01[15:0] is actually a 12 bit calculation of the inverse of MotorPeriod. This leads to some ~6% error between MotorPeriod and MotorSpeed.

    By using MotorPeriod, your error should drastically reduce.

    Best,

    -Cole