JRK 12v12 & 21v3 Flash addresses

Hi All,

We’re using the JRK’s to control our antennas in both azimuth and elevation. The software is Qt C++ and run on linux https://github.com/poes-weather/poes-usrp/blob/master/rig/jrk.cpp.
We receive high resolution satellite imagery with our toy, http://www.poes-weather.com

We have no problems running the motors from the documents you have provided after we calibrated them using a windows machine.
What we have not found are the flash addresses where the settings are (feedback max/min, max current, etc) and howto read/write directly to the flash (apply these new settings) using C/C++.
There sure is a .NET thing for linux but we do not favour it.

It would be great to have a document where all commands are explained.

Best regards and greetings from Vasa, Finland.

Hello, Patrik.

Wow, that sounds like a very cool application of the jrk!

The jrk’s parameters are actually stored in EEPROM, not Flash. They can be set 1 or 2 bytes at a time using the Set Parameter USB control transfer. You can find the addresses of all the parameters in the jrkParameter enum in the file Jrk/protocol.h (or Jrk/Jrk/Jrk_protocol.cs) in the Pololu USB SDK. The Pololu USB SDK contains the source code for JrkCmd, a .NET command-line utility for the jrk that supports configuring the jrk. It uses libusb to do the USB communication. You can use libusb in your C++ program to do the same thing. We don’t have a document explaining how to do it, but what you can do is read the source code of the relevant part of JrkCmd and then implement the same thing in your C++ program. The relevant code starts in Jrk/JrkCmd/JrkCmd.cs, which calls some function in other parts of the SDK to do the real work:

            if (opts.ContainsKey("configure"))
                string filename = opts["configure"];
                Stream stream = File.Open(filename, FileMode.Open);
                StreamReader sr = new StreamReader(stream);
                ConfigurationFile.load(sr, jrk);


Many thank you David!

stored in EEPROM, not Flash
Oh, good, I was way wrong.

I’m sure I can figure it out now. I will keep your forum informed with pictures explaining

Hi All,

Using libusb is the way to go if you need to access parameters and configure it.
There is a work in progress Qt linux software at github for those interested


Here is a video of the proto Jrk rotor. 12v12 is used for elevation and 21v3 for azimuth.
Dish size 2.4 m, 50:1 gearboxes, 12 VDC motors.

As feedback sensors we use multiturn POT’s. Our target is to swing the dish with accuracy < 0.1 degrees.

Q: Would you recommend us to use a digital sensor (frequency/tachometer) to get “better” accuracy? If so, could you suggest us a link to such sensor.

Thank you for sharing that with us! It looks like you are putting the jrk’s native USB interface to good use.

No. If you used a tachometer with the jrk then you would get fine control of the speed, but not the position. That is probably not what you want.



This sensor doesn’t quite get you to your <0.1° accuracy, but it might get you closer:

They claim <0.5° accuracy under ideal mounting conditions (and at a fixed temperature). We have an alternate version of the jrk firmware that lets it work with this sensor.

Note that 0.1° resolution over a full 360° is very close to the theoretical limit of what the jrk can do, so I’m not sure if your goal will actually be achievable.

- Ben

Many thanks for your suggestions.

We’ll try and learn.