Some impressions of where I got spotted using only an indoor antenna and 200mW.
WSPR-beacon / version 1.x (how it all began :-))
- based on AD9850 and Arduino™ "Uno" (AD9851 and "Nano" are ok, too)
- covers 160-10m at 200mW output
- built-in SWR meter
- time synchronised by DCF77 radio time signal station
WSPR-beacon / version 2.x (please check the 1.x page for details on hardware and antenna)
- same basic hardware design as version 1.x
- uses GPS for clock synchronisation and calculation of locator
- can display additional parameter (current position, speed, altitude, ...)
- special attention was paid to using off-the-shelf components
- wide range of input voltage (9...24V) for portable/mobile use
- supports AD9850 modules (160-10m) as well as AD9851 (up to 6m)
- compensation of frequency drifts due to changes in DDS quarz temperature
Frequently asked questions:
How can I calibrate the DDS?
To calibrate the DDS it should be set to the highest possible frequency. Let's assume you have access to a (decent) frequency counter that can measure up to 50MHz and your DDS is an AD9850. Under these conditions you should set your beacon to transmit on 10m only, beacon_mode = 100, DDS_CLK = 120000000 (targeted transmission frequency = 28126100 Hz). Let the beacon run for some time (e.g. 30min) to insure it's thermally stable and then perform the measurement. If, for example, the measured frequency turns out to be 28125700 Hz (targeted freq. - 400 Hz), the parameter DDS_CLK should be corrected to 120000000 * 28125700 / 28126100 = 119998293 Hz. Reload the beacon with the corrected setting and check again. It should now transmit at the desired frequency of 28126100 Hz.
And without a frequency counter? In this case you could use your transmitter/receiver and one of the many commercial shortwave stations as a reference. There are still a number of active radio broadcast stations as well as some special services like for example the Russian RWM (time signal radio station) on 4.996 MHz, 9.996 MHz and 14.996 MHz. To get the beacon to generate one of these frequencies, you could simply modify the base frequency table of your beacon software.
Another approach is to use the WSPR community as a reference. Once you have done a first, rough calibration of your beacon (e.g. using your transceiver), start transmitting on one of the highly frequented bands (20, 30, 40 meter are good choices / beacon_mode = 100). After 1...2 days you should download a summary of all spots from the WSPR-page and copy/paste the data into a spreadsheet (Excel, ...). The number of individual spotters should be as high as possible (say, at least 20) for this method to work. You will find that the frequencies reported by the different spotters vary a lot. Mathematically speaking it's a normal distribution. Sort the list of frequencies by value and take the center element (e.g. #200 if the list has 400 elements). That value will be very close to the actual transmission frequency.
The DDS units tested by me showed a typical frequency drift of about 20ppm at temperatures between 0...70°C. Let's assume you run your beacon indoors at temperatures between 20...25°C on 20m. In this scenario the max. variation in output frequency would be 43Hz, which is just acceptable. If, on the other hand, your beacon is an outdoor/portable version supposed to work correctly from 10...40°C on 6m, compensation becomes mandatory as frequency could be off target by as much as 429Hz.
How do I measure the frequency drift of my DDS?Most crystals are AT-cut types whose temperature curve resembles a sine wave. To reproduce this curve with sufficient accuracy I recommend measuring the frequency in intervals of max. 5 degree around the stationary temperature of the module. Let's say ambient temperature is 22°C and your DDS module stabilizes at 35°C. The frequency at this setpoint is considered 0 Hz and deviations are measured at 30, 25, 20, ... as well as 40, 45, 50, ... °C. To do this a handheld IR-thermometer would do a good job. However, getting the crystal to the right temperature is the tricky part. I solved the problem by building a little heatpipe (a piece of copper sheet) from underneath the crystal (other side of the PCB) to the actual heat source and fixed it with a bit of hot glue. For heating, you can use your soldering ion, for cooling some ice cubes supported by an air fan will do. You can adjust the amount of heat coupled in/out by adjusting the distance to the heat pipe or putting the source (ion / ice) on and off. That sounds complicated but after some practice everyone should manage to be accurate to about a degree. Keep in mind that the measured frequency drift should be converted to the DDS crystal frequency. To give an example, if at a certain temperature the offset at a frequency of 30 MHz was measured to be -100 Hz the actual offset at 125 MHz is -100*125/30 = -416.7 Hz.
That's all a bit too complicated. Isn't there an easier way to keep the frequency stable?Another approach would be to insulate the whole DDS module (or preferably only the crystal) and keep it at a stable temperature well above ambient (e.g. 70°C). It would require a switchable heat source (resistor), a NTC attached to the crystal and connected to one of the analog inputs of the Arduino and some programming to build a close loop controller. If someone is interested and comes up with a good hardware design I'd volunteer to take the programming part. To insure success we should talk about topics such as heat balance in advance.
☺