Close
0%
0%

Simple Digital Mode Transmitter

A low-power, all-digital transmitter.

Similar projects worth following
An HF-band low-power (QRP) transmitter for just about any FSK digital mode.

This is not just another AD9850-based source! Neither is it an FSK transmitter. This does audio tone frequency estimation, which drives the DDS, so that the output is essentially the same as is achieved by upconversion but without doing any mixing, and therefore avoids the need for a bunch of analogue/RF circuitry.

Motivation: I want to play with amateur radio digital modes (like FT8, WSPR, etc.). There are several software tools that can manage all the encoding/decoding, which use the soundcard to generate/receive audio waveforms, but I don't have a rig capable of USB AM modulation which does the translation to RF. (Although the modulation is AM, the resulting waveform is essentially FSK).

I do, however, have an SDR dongle, so I can receive just fine. This project is about creating a general-purpose transmitter capable of any FSK waveform.

Concept: The AD9850/51 is a cheap and powerful DDS ('synth') which can easily generate signals at all of the RF frequencies I'm interested in, and is agile enough to add frequency or phase modulation. A simple microcontroller (e.g. Arduino Nano) should be able to take the audio waveform from the PC, determine the frequency, and program the DDS accordingly. Do this fast enough, and the DDS should track the audio as the FSK tones change

  • 1 × Arduino Nano (or clone)
  • 1 × AD9850 module
  • 1 × RTL-SDR or similar (only for receiving, not part of the transmitter)
  • 1 × 45W amplifier "530 v303" type
  • 1 × Relpol RM822N-2112-85-S005 DPDT relay

  • A bit of a surprise...

    RobG3 days ago 0 comments

    I finally got into the office today and had a chance to put the transmitter on the bench. First job was to swap out the filter components - though actually the new filter isn't that great either (the roll off needs to be steeper) so I might change it again one day...

    Output power measured on spec. an. (CW swept over 1-60MHz, max hold on)

    But the next thing was to measure the output power: a measly -2dBm! Barely 0.5mW! And that's after I changed Rset for a 2kohm to increase the output power. No wonder I'm struggling to get the signal out...

  • Switch it around

    RobG05/25/2021 at 13:43 0 comments

    Replaced the TX/RX relay today. Was previously SPDT, now DPDT configured so that the RX port is shorted to ground during transmit for a bit more isolation. When I've got a 10W PA hanging off the other port, and only 10mW (1000x less) into the receiver will damage it, I want to be very sure that I've got all the isolation I can manage!

    Relay is a Relpol RM822N-2112-85-S005. A quick look on my VNA shows >60dB from DC to 50MHz. That'll do...

    Here's the circuit so far:

  • First spot!

    RobG05/23/2021 at 17:33 0 comments

    I've been trying, on and off, to make a QSO but the output power of the DDS is just too low to be heard. I'd just about given up until I managed to get an FT8 packet received by a station in Germany - about 900km away - on 20m. Not bad for 10mW or so...

    I have one of those "45W amplifiers" (found cheaply all over the Internet) knocking around, so the next plan is to use it to boost the output of the DDS. First I'll tweak it slightly to bring the power down to 5-10W (the most I'm allowed on a Foundation Licence) and hopefully also lower the risk of popping the transistors.

    I've also just realised that I can adjust the output power of the DDS chip by sticking a trimmer pot where Rset should go, giving a means of controlling the output of the PA once its connected.

  • Yaesu emulator

    RobG05/15/2021 at 18:37 0 comments

    Today's coding fun was all about adding CAT functionality, so that JTDX, WSPR-X, and so on can all interact with the transmitter just like a real rig. After a bit of choosing I settled on emulating the Yaesu FT-450. The CAT commands are well-documented, though debugging without any way to see what was passing over the serial port was a bit of a git. Got there in the end.

    So now the transmitter jumps frequencies whenever you change bands in whatever software you're using - sweet. Or I can manually change frequency by sending an ASCII string like "FA14074000;"

  • SPICE-ing things up

    RobG05/14/2021 at 17:37 0 comments

    Had a bit of a muck about with LTspice, but can't seem to work out a way to gang the DAC outputs together to get more power - the balun approach doesn't seem to work*.

    However, what I did find is that the filter supposedly on the module is a bunch of junk - certainly not suitable for driving a notionally 50ohm antenna. A better one might be:

    C2=C4=C6=22pF, 

    C1=C7=33pF,

    C3=C5=82pF,

    L1=L2=L3=100nH

    together with R4=51ohms, R5=no fit, R6 (Rset)=1.95kohm. Oh, and a series DC blocking cap somewhere.

    LTSpice then gives the output power around 20mW (+13dBm) and rolls off at about 70MHz. When I next get into work I'll swap all the components over, and stick the output on a power meter and see...

    (*update: oh hang on, maybe I've just worked out a way to get ~38mW (+16dBm) out?)

  • more testing

    RobG05/13/2021 at 18:27 0 comments

    Looks like WSPR will work too. Just tried the same test as last night - namely using a .wav recording of a packet to drive the transmitter - and the PC software happily decodes it.

    Next step is to try and squeeze a few more dBm out of the synth. I have a plan to bodge on a 1:1 balun on the outputs of the synth so that both pins are combined (double the power?). Also might try changing Rset to get them to drive more current. Maybe get a whopping 3-4dBm this way?

    Finally I need to fit a TX/RX switch (a cheap 5V relay) driven by one of the Arduino pins. This then disconnects the SDR dongle, and connects the transmitter, whenever the PC makes a tone - i.e. we want to transmit.

  • Early success!

    RobG05/12/2021 at 19:41 0 comments

    The AD9850 module arrived today, so I quickly set about hooking it up to the Arduino. A few wires and a few lines of (stolen) code later, and I had it producing CW.

    Then it was an easy step to integrate it with the frequency estimator code from yesterday, and hey presto!

    Here's a pic:

    Photo of the breadboarded DDS and microcontroller.

    Using a .wav file recording of FT8 audio, I was able to produce a real FT8 transmission (on 14MHz) and JTDX was able to receive and decode it - worked first time. Not only that but my 'blob' on the waterfall looked just like everybody else's, suggesting that the RF spectrum being produced is nice and clean.

    Now let's remember, the output power is very feeble (only a few milliwatts), and I have no antenna connected yet, so there's still work to do...

  • First step: frequency estimation

    RobG05/12/2021 at 08:52 0 comments

    A key feature of FT8, WSPR and other waveforms is that the FSK tones are very closely spaced in frequency (compared to, say, the kind of FSK that an ISM-band device might transmit). Also, they change relatively slowly - only a few symbols per second, if that.

    The first step, therefore, is to be able to very accurately (<1Hz) estimate the frequency of an audio-frequency tone that is presented to a pin on the Arduino. And to do this quickly, certainly less than 100msec.

    The approach I've taken is to count rising edges (Ne) whilst simultaneously running a timer (f = 2MHz). After the measurement period is up, the frequency is simply f x Ne / timer_value.

    It took a few hours of messing about with timers and interrupts, but finally it's working very nicely. The plots below show the measured frequency output for a given audio input.

    Comparison of the frequency estimator output (graphed in Libreoffice - top) versus the spectrogram of the original audio (in Audacity) for an FT8 packet.

    (Note: audio signal is applied to the Nano pin via a series capacitor (DC block) and resistor divider so that it is centred mid-rail.)

View all 8 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates