915 MHz 3DR Radio Tuning With $7 SDR Spectrum Analyzer! Spectacular range boost!?

If you happened to get one of those $7 SDR radio dongles from ebay and need to put it to work... here's one thing I tried...

Tune in with the R820T... (Using HDSDR)

This is both radios running on one channel.  They are out of tune enough that the channels don't even overlap!

Now I switch them into beacon mode and tune to 925.000 MHz...

Now I tune them up by adjusting the EZRADIOPRO_OSC_CAP_VALUE to get this...

Through the magic of special effects, I can overlay them...

Below are the before and after pics of normal transmissions (non-beacon mode)...

Settings used...

Here are the actual results I measured (warming up and final calibration)...

Ground = +7.3 khz @ OV 204 (cold)
Ground = +6.5 khz @ OV 204 (warm)
Ground = +6.1 khz @ OV 204 (hot)
Ground = +0.1 khz @ OV 208 (warm)

Air = -6.5 khz @ OV 204 (cold)
Air = -6.2 khz @ OV 204 (warm)
Air = -7.1 khz @ OV 204 (warmer)
Air = +0.6 khz @ OV 199 (warmerer)

All the pictures in this post are to the same scale.  The FSK signals (wider pictures) are on a different frequency than the beacon signals.

Make any predictions on expected range improvement below...  

Views: 7376

Comment by Thomas J Coyle III on January 9, 2016 at 9:16am

Hi Jake,

Nice project and tutorial!

No wonder my 3DR 915MHz radios are so inconsistent in relation to their transmission/reception ranges.



Comment by Jake Stew on January 9, 2016 at 10:12am

I just posted some firmware for anyone to try AT THEIR OWN RISK.

Works fine with my old 915 MHz v1 3DR radios.  Otherwise YMMV.

The test firmware is only for testing purposes.  It's poorly written and it is very easy to just grab the right firmware once you find your calibration values with it.

The test firmware is SiK v1.9 with four extra AT commands added to control the radio and make it behave like in my screenshots.

Once you find the right OSC value, just load the corresponding number firmware. 

Comment by Jake Stew on January 9, 2016 at 10:15am

3D Robotics
Comment by Chris Anderson on January 9, 2016 at 11:38am

Super impressive. Do you think each radio needs to be tuned individually, or the values you found should be made the default for all?

Comment by Jake Stew on January 9, 2016 at 11:58am

I'm running 208 (+4) on one and 199 (-5) on the other.  One was high and the other low.  

You certainly can just tune one or the other radio.  Luckily for me, as you can see above, my radios were on opposite sides of being correct.  Therefore I just tuned them each closer to 925.000. 

To calibrate the SDR I simply tuned to a few FM stations in my area, used the AFC to find their center and adjusted the PPM correction that way.

If you notice the settings I have turned the air rate all the way down.  I did that to see the transmissions better on the waterfall display.  As the air speed goes up the channels get wider.  So any higher of an air rate and they do overlap.  So perhaps this tune is not very significant.  It was only about 12.7 kHz total.

Then again I can pretty much guarantee that the radios will tolerate a slightly higher temperature difference because they're now tuned closer to start with.

Comment by Jake Stew on January 9, 2016 at 12:03pm

I'll have the source up soon.  All credit goes to Michael Smith and Andrew Tridgell.

I just kluged in some code into the at.c file to make the needed changes.  It's ugly, but it does the job and wasn't meant to be flight firmware. 

Comment by Paul Meier on January 9, 2016 at 12:15pm

Excellent hacking, thank you for sharing

Comment by Andrew Tridgell on January 9, 2016 at 12:23pm

very nice piece of work.

I wonder if we could auto-learn EZRADIOPRO_OSC_CAP_VALUE live in the radios?

Comment by Carsten Groen on January 9, 2016 at 12:26pm

Excellent Jake, very nice!

I'll tune my spectrum analyzer onto my radios in a couple of days here and see how bad they behave (I have a large selection of 3DR, HK and HM-TRP modules on my own hardware).

Suggestion, how about making a "hidden" ATSxx register that would be used as the calibration factor ?

Then it would be easy to change with a terminal program

Comment by Jake Stew on January 9, 2016 at 1:06pm

Re: Live autolearn tuning...  I thought that it might be handy to have one radio transmit while you get RSSI from the other, and in that way tune one to the other.

In fact, RSSI does seem to work with the radios, even in their beacon state.  So some experimentation may be in order.  With the right power level and distance between the two it might work well.

But, my thinking is that the auto frequency correction will throw things off.  You'd probably end up just getting a plateau.  Though you could still probably use the edges to find the center.

I would just add an extra register or permanent setting, but...  I really don't need the responsibility of making flight firmware.  My tune firmware lets you easily match up your radios and find the right OSC value, then we can all just load a copy of the nice, stable SiK v1.9... without a bunch of my kludges.

All of the AT commands I added (except ATJ) WILL disrupt data transfer (usually).

Now that it's out there we can find out together if it's worth bothering with.  Next, I'll probably port the idea to OpenLRSng if it turns out to have any merit/interest.

I did steal several handfuls of lines from their beacon code to make things work.

Which reminds me, GPL compliance is in the works.  It's just that at the moment I have easily three times as much commented out code as working code.  It wouldn't be very readable.


You need to be a member of DIY Drones to add comments!

Join DIY Drones

© 2019   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service