About six months ago I built a transmitter for 80 meters as my first homebrew project for many years. I had plenty of QSOs on the air with it using my old Kenwood TS430S as a receiver. That was fun but I really had the urge to operate homebrew for both TX and RX. I also wanted to keep things as simple as possible so, despite their limitations, I decided I'd try a simple direct conversion. I have fond memories of building and playing with a DC receiver back in the late 1970's using a LM1496 chip as a mixer. I decided it was time to move to 40 meters which is a great band for CW.
The transmitter consists of just the driver (Q2) and power amplifier (Q3) stages from the Universal QRP Transmitter by Wes Hayward, W7ZOI as described in QST April 2006. This article is freely downloadable from the ARRL even for non-members. I've found this to be a great design to use as a general purpose power amplifier. It's very simple and stable. I've built 80 meter and 40 meter versions now and both have "just worked" without any hassle at all. I'm using BD139 transistors for both Q2 and Q3 because the 2SC5739 is no longer available. See my previous post about my experience with this design on 80 meters.
For the receiver, I followed the very simple direct conversion design using an NE602 and LM386 as described in the first chapter of Experimental Methods in RF Design aka EMRFD by Wes Hayward, Rick Campbell KK7B and Bob Larkin, W7PUA. I later looked at Wes' Micromountaineer transceiver design from QST July 2000 and found the receiver to be pretty much identical. If you're an ARRL member you can download the original article from arrl.org but Wes also generously makes the schematic downloadable from his web site.
They are both driven by my DDS-60 and Arduino based VFO. The Arduino also provides timing for semi break-in keying and generates the audio sidetone. The software has been enhanced to provide the required shift and RIT functionality.
Most of what I had to figure out was around how to do the transmit / receive switching. For simplicity, I decided to stay with a mechanical relay and semi break-in (QSK) keying. Semi break-in is where it switches to transmit automatically on key down but stays on transmit for a time out period (in my case 750 ms) after the key is released. This means that it tends to stay permanently on transmit while you're sending. Full break-in is where the switching is fast enough so that the receiver comes back on between dits and dahs. That's more difficult to do properly and an unnecessary challenge for this project.
The CW keying is feed to an Arduino input. The Arduino implements the timeout delay and outputs a transmit / receive logic signal. Switching transistors take care of the voltage translation between the transceiver's 12 volt levels and the Arduino at 5 volts.
Some timing calculations were in order to ensure that we weren't going to clip the first CW element too much while we switch from receive to transmit. A rule of thumb is that one element time (i.e, one dit) in ms is 1200 / speed in wpm. 40 wpm means 30 ms dits. The slowest part is the relay. Other delays are probably insignificant in comparison. The datasheet for the relay I bought from Mouser says 7 ms switching time. So, if you're sending at 40 wpm, the first 30 ms dit is somewhat clipped. I doubt that I ever send above about 20 wpm so I feel comfortable with it and the signal sounds good. If you're into high speed CW then you might have to do something different such as the method used in the Micromountaineer which does not use a relay.
The relay is DPDT. i.e., it has two sets of contacts. One is used for the antenna. I decided to use the other contacts to prevent the RF drive coming on until the relay has switched and we can be sure that the antenna is connected to the transmitter. I don't know if this is really necessary but it seems like a simple way to avoid that few ms which would occur when the transmitter is keyed on with no load before the relay has switched.
I've taken the receiver muting and sidetone injection straight from the Micromountaineer except that I didn't bother with the MOSFET switch in front of the NE602. That seemed unnecessarily since I'm switching the antenna with the relay so the receiver is disconnected during transmit. I am however using the two MOSFETS to block any noise from the NE602 during transmit. The sidetone comes from the Arduino as a 5 volt square wave so it needs to be well attenuated before being fed to the LM386. I used a trimpot to adjust the sidetone volume. It sounds fine to me but if you prefer something closer to a clean sine wave then I'm sure a better low pass audio filter could be designed.