Pololu Robotics & Electronics
My account Comments or questions? About Pololu Contact Ordering information Distributors

Pololu Forum

4.4:1 HP 12V with 48 CPR Encoder counts


I am using the 4.4:1 HP 12V motor with 48 CPR encoder counts with the jrk G2 21v3 USB motor controller. The controller uses a single quadrature channel and the docs say that I should expect 12 counts per revolution. Is this 12 counts per revolution of the DShaft? Also, might you have a settings file for the JRK utility for this motor?



My goal is to write a small application which allows the user to start and stop the motor adjust the speed and see the RPM feedback. I am using the jrk G2 21v3 USB and a 4.4 HP 12V motor with 48 CPR counts per rev. My input supply voltage is 12V and I’d like to allow users the ability to adjust the speed to the full range (0-1500 rpm). Here’s my feedback setup:

The motor runs smoothly but at max speed I see the feedback at roughly 2650.

If I try to calculate the RPM from the feedback frequency I get:

2650-2048 = 612Hz = .0016 seconds/count = 656 counts/second = 37500 counts/minute

If there are 53 counts per revolution of the motor dshaft this is 707 RPM (37500/53).

Do I have a mistake somewhere? I was expecting the motor to be able to achieve at least 1500 rpm unloaded.


It looks like your calculation is over-simplified. You can find a description of how Feedback is calculated under the “Pulse timing mode” heading of the “Setting up frequency feedback” section of the Jrk G2 user’s guide. There is a lot of information there, so for convenience here is the specific part that describes it:

So, the calculation should look like this:

\text{PulseWidth} = \frac{2^{26}}{|\text{Feedback}-2048| * \text{FrequencyDivider}}*\frac{1}{\text{PulseTimingClock}}

With your settings and feedback values put into the equation:

\text{PulseWidth} = \frac{2^{26}}{600*32}*\frac{1}{12}=291\text{ μs}

To get the pulse rate, we can multiply it by 2 to get the period (since we are assuming a 50% duty cycle) and reciprocate it:

\text{PulseRate} = \frac{1}{2*291*10^{-6}} = 1718 \text{ pulses per second}

That is the pulse rate of the backshaft, so to convert that into the RPM of the output shaft of the motor:

\text{RPM of output shaft} = \frac{\text{PulseRate}}{\text{PulsesPerRevolution}}*\frac{60}{\text{GearRatio}}
\text{RPM of output shaft} =\frac{1718}{12}*\frac{60}{4.4}=1950\text{ RPM}

Note that the PulsesPerRevolution in that equation is the number of pulses seen on a single encoder channel per rotation of the back shaft, so it would be 12 for a 48 CPR encoder.


1 Like

Thank you for the education Brandon. Very helpful, excellent support

1 Like