Peter DK7IH is a master of compact homebrew transceivers. I’ve been reading his excellent blog where he chronicles more than half a dozen homebrew HF transceivers and related projects. Most are compact SSB superhet transceivers with digital VFOs, AGC, metering and PAs in the range 5 to 50 watts. A few of these rigs are just so remarkably tiny I wonder how he has the persistence and patience, not to mention how he gets them stable. With Peter’s fine examples in my head, I started daydreaming about a compact SSB/CW transceiver, hoping to go a fair bit smaller than my slightly chunky attempt at a hand-held from last year.
This project was to be an exercise in compact physical, electrical and RF layout and construction. Some of the techniques I’ve found useful in my earlier projects would assist. It was designed and built in modules, some of which, with overlay boards, became assemblies — the VFO/BFO/controller, receiver/exciter, bandpass filters and switching, low pass filters and switching, and a T/R relay/power regulator and RF sampling board. In each case, the board was designed to fit snugly in the compact chassis, and the necessary parts squeezed in. In some cases, double sided boards with components on both sides, mounted vertically and spaced off an angle aluminum divider aids physical robustness and screening.
The complete circuits:
- The transceiver proper, with mixers, IF, filters and transmitter PA — SP6-DK7IH;
- The digital parts, Arduino Nano, si5351, and control circuitry — SP6-DK7IH – Page2.
VFO / BFO / Controller / Keyer
I started with the Arduino /si5351 module, built onto an angle aluminium front panel. The Arduino and si5351 provide the VFO, 12MHz BFO, all supervision and control functions, and a CW semi-breakin keyer. The screen is a 128×64 SSD1306 OLED.The primary challenge with this module was to minimize physical size and make it all fit in the 32mm height. A lot of sketching led to a custom PCB with 0.1 inch header sockets for OLED, si5351 breakout and Nano, as well as a discrete MMBT2222 buffer amp on the CW carrier. This unit measures 95x32x45mm and gets its own video and write-up here.Adding support for an OLED display into my SummitProwler script involved a fair amount of code refactoring, some of which was overdue. Each of my transceiver projects has its own #define label which allows the pre-processor to select the appropriate code blocks for that particular rig. I will continue to refine this common script and put latest versions on github.
Receiver / Exciter module
Peter DK7IH has several rigs that use the symmetrical SA612 architecture, where a pair of relays route receive and transmit signals between two SA612 Gilbert Cell mixers. This is an established pattern, used the Peregrino and other rigs. I stole ideas from two of Peter’s designs, adding dual date MOSFET gain stages (an RF and two IF stages) in the receiver signal path.My experience with dual SA612 receivers on the HF bands is that they lack gain. Two additional gain stages should suffice. I reserved board space for two, thinking I’d use one in the IF and one in the RF signal paths. The Exciter board was made in my usual fashion — hand-drawn with various marker pens on a cleaned PCB blank, etched, cleansed again, and sprayed with matt clear enamel.
Settling on the receiver’s gain distribution was experimental. I populated the Exciter board, containing the SA612 mixers and relays, electret microphone amp, two dual gate MOSFET gain stages, socketed 12MHz homebrew crystal filter, AGC, and the audio chain. Room was reserved for the transmitter pre-driver and driver. A lot of the radio right there, courtesy of this very compact 2 x SA612 architecture.During development, I hooked both MOSFET gain stages in, either side of the crystal filter. Both were running at moderate gain, 10 to 12 dB. With no RF amplifier, the receiver sounded lively on all bands 80 to 20m. I experimented with un-tuned drain loads and source bypassing to achieve moderate IF stage gain with stability.
Band Pass Filter module
Next, I designed the Band Pass Filter board to host four two-pole BPFs with T/R switching and a trailing dual gate MOSFET amplifier stage. I chose the QRP Labs BPF designs for 80, 40, 30 and 20 meters, being the four HF bands that carry a reasonable amount of SSB and CW traffic in VK.Each filter was individually characterised and adjusted by sweeping the band on the VFO’s 10kHz step. The lower three bands give about 4 to 500kHz before receiver gain noticeably drops off. Twenty is narrower, about 150kHz, which could be re-tuned, if my personal homebrew energy levels permit down the track. I left it peaking on the lower end of 20m for SOTA CW work.
Hooking this in made the receiver lively and under AGC control, no distortion could be discerned, even on the huge local signals coming off a full sized dipole during evenings on 80 meters.That’s how I ended up with dual gate MOSFET RF and two IF gain stages, in a dual SA612 receiver architecture. I used on-hand junk box MOSFETs — a couple of MFE131s from my youth (probably collected around 1980) and a BF960 (bought early 2000s). There was no science in where these devices were placed, I was simply experimenting, and the results were good!
A narrow single-sided board was made to overlay the MOSFET amplifier side of the BPF board, hosting a PCF8574 demux SOIC IC and four 2N7002 FET relay switches. This board takes 12VDC and an I2C clock/data pair from the Nano and selects the correct BPF. Since these relays draw about 30mA when closed, and the LED around 5mA, the total current drawn is well within the 2N7002’s 300mA Id limit.
12MHz was chosen as the IF for no particular reason other than I could draw from a bag of surface mount crystals on hand. And because a previous transceiver project has proven that 12MHz works fine for a rig covering 80 to 20m. A four pole filter was knocked up in the usual fashion (G3UUR). 100pF capacitors should have resulted in a 3kHz bandwidth, but possibly due to variances in the junk box bag of 12MHz crystals, which spread up to 200Hz apart, the bandwidth is wider, and a bit peaky around 2kHz.The Spectroid plot below shows the 2kHz peak graphically, and no real ‘plateau’ in the receiver’s audio spectrum. Could do better. But it allowed for testing and debugging. I’ll rebuild this filter later. The filter was made shielded and pluggable on 0.1″ header pins to allow replacement.
Driver / PA
The room on the Exciter board near the SA612 receive/transmit mixer was populated with a small ‘drop-in’ board hosting the transmitter driver (BFU590GX) and PA (IRF510). This irregular shaped board has its origins in a change of mind — the space on the exciter board was originally etched for just the pre-driver and driver, but upon closer inspection, I realised I could fit the PA FET as well. So an overlay board was made up for the available space.
The BFU590GX driver is a ‘modern’ replacement for the venerable (but forty year old) 2N3866 or 2N5109. It has an unusual pin arrangement, three pins and a flange– the two outer pins are emitter, base in the middle, flange is the collector. It is designed to heatsink to the copper plane. The IRF510 is placed so that its flange can be bolted to an angle aluminium divider running between the Exciter and BPF boards.The IRF510’s drain is brought out to the DC socket on the rear panel before the 7812 12 volt regulator. This allows use of a LiFePO4 4S (12.8V), LiPo 4s (14.8V) or LiPo 5S pack (18.5V). At 20V, the single IRF510 delivered 10 watts or more, and should be reliable as long as I don’t mistreat it. The driver runs cool at all times but the IRF510 got really hot at these higher voltages, so the excess heat needed to be taken care of — more on this later.
I tested the driver/PA on the bench, using a 2N3904 crystal oscillator and buffer as a signal source. Finding that this little PA module was stable, 160 to 20m, from 1 to 10 watts output, made me happy. Further tests gave predictable but interesting results.The first table illustrates the gain characteristics of the crystal oscillator, driver and PA , at 7MHz, with DC supply voltage varying from 12 to 18 volts. The increasing DC supply voltage was supplied to all stages including the crystal oscillator and buffer, which partly accounts for increased output as the supply voltage is wound up. At 7MHz, I got a clean 8 watts from the single IRF510. Needless to say, it gets quite hot very quickly at this power level and 100% duty cycle.
|DC V||Drive (Vpp)||Driver out (Vpp)||Driver gain (dB)||PA output (Vpp)||PA power||Overall gain (dB)|
The next table shows the gain characteristics of the driver and PA from 160 to 20m on a fixed 13.8 volt supply. The drop in the 2N3904 crystal oscillator output (and presumably the actual crystals themselves) with frequency is noteworthy. Different crystals would have given more or less output — I did not take the time to experiment:
|Band||Drive (Vpp)||Driver out (Vpp)||Driver gain (dB)||PA out (Vpp)||PA power||Overall gain (dB)|
Both the driver stage and the complete PA strip (driver, IRF510 PA) maintain their gain (18dB, 42dB) from 12 to 18 volts. In both cases, gain drops off with increasing frequency, which is a known characteristic of the IRF510 when used in its basic single-ended configuration. Higher drive at 7MHz and above from the exciter (rather than from a test oscillator) will improve things.
LPF and T/R Relay boards
Hosting the driver/PA stages on the Exciter board meant that only two more boards were needed, one with the four LPFs and relay switching logic, and a second board mounted on the rear panel for the T/R antenna relay, RF sampling, and DC power regulation.
The LPFs reproduce the W3NQN design, see QRPLabs LPF kit page for the link. The T37-2 and T37-6 toroids are good for 10 watts of RF power.The LPF relays each have a 2N7000 switch that connects to another PCF8574. Independent BPF and LPF control allows the script to drop out the LPF relay when the transmitter is inactive, a feature in my script that saves 35mA (one relay current load) in one of my earlier transceivers.
Boxing, socketry, switchery
I made up an ‘angle and sheet’ chassis with aluminium angle pieces for back panel and sides, and a 1.5mm base panel. The rear panel mounts the BNC antenna socket, DC socket, and two keyer memory push-buttons. Space is quite limited.
A compact box made including a loudspeaker difficult, so I dropped it. On the shack bench, a decent quality comms extension speaker provides good sounding audio. In a noisy environment, earbuds deliver a good sound.
Final wiring and debugging
Assembly was a process of interactively building in and wiring up features. Having a well worked Arduino script to use makes this easy, as you connect up Nano pins, things– like the keyer, s-meter, T/R switching — all start to work, usually with only minor if any script tweaks. All code specific to this transceiver is wrapped with #ifdef SP_VI #endif preprocessor directives. This keeps the script common to all my transmitters, receivers and transceivers.
The transmitter came together well, but two problems had to be overcome. Firstly, the SSB signal on the output of the BPF amplifier stage was dirty. It took me a while to discover the cause. The BFU590GX driver has two inputs — one from the transmit BPF amp stage for the SSB drive, and the other from a gain stage on si5351 CLK#1 which is keyed CW generated directly at the transmit frequency (the CW drive). In SSB transmit mode, this CW amp was left on, and despite the fact that CLK#1 is disabled for SSB, it was picking up micro-volts of stray BFO and VFO signal from the si5351 bay, amplifying this RF jumble, and dropping 50mV of it onto the base of the driver.When I added a mode switch to only apply 12v to the CLK#1 amp stage in CW mode, the problem disappeared. It’s obvious if you think about it. A 20dB gain stage a few cm away from +3dBM clocks, of course it’s going to amplify the noise it hears.
The physical switch was later replaced with a high-side DC switching pair (BC846, BD140) wired directly to a spare Nano digital pin, with the Carrier Oscillator buffer as its load. When the paddle is pressed, the script engages transmit, and raises this pin, turning on the buffer, a fraction of a second later.
SSB vs CW drive levels
The second transmitter problem was uneven outputs between CW and SSB. RF power output on 80m was 9 watts CW and 3 watts SSB (reducing to 6 watts CW and 1 watt SSB on 20m). Measuring the drive levels to the BFU590GX driver revealed a huge difference, several volts p-p of CW carrier versus 150mV of SSB. Some difference is inevitable if you use separate paths for CW and SSB, but clearly the SSB drive was at least 15dB too low.
I experimented with the BPF amplifier’s MOSFET drain transformer, replacing the bifilar centre-tapped arrangement with a 10T:3T transformer, both on FT37-43s, which made little difference. Increasing the MOSFET stage’s gain might have helped, but it is shared with the receiver, and the receiver gain distribution was about right.
So I opted to make up another gain stage, with a 2N3904, a pre-driver in the transmit signal path, between MOSFET amp and the BFU590GX driver. I made this on a tiny overlay board, just 18x10mm, substituting a tiny BN-43-2402 for the FT37-43 (5T:2T). It worked perfectly on the bench, delivering 23dB gain at 12v and 20mA.
The transmitter now had too much gain on SSB, breaking into oscillation in the sections of 80 and 40m where the BPFs peaked. Winding the mic gain back didn’t solve the problem. After some more hours of fiddling around, a ferrite bead with two turns of fine wire on gate 1 stabilized it.
One more transmit bug, a big squeal in the speaker when switching from receive to transmit. The TDA2003 audio amp is always powered on, but the BC547 audio preamp draws from the +12v receive line. Powering the TDA2003 on receive only causes other problems due to the charge and discharge times for some big electrolytics. I deemed it necessary to keep the audio power amp on during transmit for the sidetone which you really want to have in earphones, and injected before the volume control. So powering it down on transmit was not an option.
I realised that the squeal disappeared as the mic gain was turned down. A 2N7000 mute switch across the mic gain control didnt work. Then it occurred to me that the electret mic could be disabled by removing bias. So the bias line was lifted from +12v Tx and connected to a spare Arduinio digital pin. When the PTT is pressed, the script does the usual T/R switching, waits a hundred milliseconds, then raises the digital output to put bias on the mic. This slightly unconventional mechanism well and truly cured it.
At the Homebrew Group’s April 2019 meeting (Amateur Radio Victoria) Rob VK3MQ brought along his spectrum analyser and we measured the rig’s spectral signature. The 7Mhz carrier is shown below. There is nothing much at all above the fundamental, proving the LPF is doing it’s thing, and a series of 2MHz spikes at -45dB below the fundamental. Other than the 3.5MHz band (where the second harmonic was -40dB) the other bands were similar. Of interest is the spike series at 2 MHz intervals, origin unknown, but not related to the VFO.
A ‘gumption trap’ is a term coined by author Robert Pirsig to describe an aspect of working with your mind and hands that frustrates, or erodes your energies. Gumption traps are often due to bad design, or point to opportunities for better design. It’s worth thinking about these situations when they occur because they are prompts for better homebrewing.
One gumption trap I fell into concerned reading the paddle. This employed the old trick of using Arduino’s analog input to read the voltage from a string of pushbuttons with resistors forming a voltage divider. It’s handy because you can get 4 to 6 buttons with one Arduino analog input. It’s fiddly because if you don’t align the range test values, the buttons can stop working or the circuit can behave unpredictably. I’ve used this mechanism half a dozen times but never has it given me grief like on this project.The keyer, which reads only three values (left, right or open) was randomly generating a dash when the paddle’s dot arm was pushed. Not always, just occasionally. One occasional dash, followed by the expected string of dots. Monitoring the analogRead() return values, the rogue dash was a legitimate dash, a number exactly in the middle of the range. There was no pattern I could discern. I changed the resistor values, thinking it might be a problem due to the relative position of the dot and dash numeric ranges. Made no difference.
Finally, after a number of hours’ gumption loss, I scrapped the resistive voltage divider and hardwired the paddle onto two unused digital pins. This was only possible because the OLED connects with I2C, freeing up six digital pins normally used for parallel LCD data and control lines. ‘Backpacking’ an LCD would similarly free up pins. It occurred to me that multiplexed pushbuttons used elsewhere (band change, for example) do misread sometimes, with no harmful results. But there is no room for error with a keyer.
Another afternoon was lost to landing two of the I2C devices on the same address 0x3C with unpredictable effects. After a good break I returned to the bench and discovered the address clash within minutes.
With the little transceiver mostly finished, and unable to get out to a SOTA summit due to other commitments, I took it out for a field test to a park bench on The Diamond Creek Trail, north of Edendale Farm (Sunday April 14th 2019) on a beautiful 23 degree C mid-autumn afternoon. With my 40-30-20m trap dipole (with 80m tails) on a squid pole, I played radio from twilight thru to about 8pm on 40m and 80m CW. Video highlights are included in the feature video at the top of this post.
The highlight was working KA6BIM (Oregon, USA, received 599, a contest report!). A bit later, ZL2RX (559) on 40m CW just after sunset. Then a bit later again, ZL3XX and VK2CCW on 80m CW (both 339). The place was RF quiet, except when a Metro train rolled past on the Eltham to Diamond Creek rail line, about 200m away, which raised an S9 RF hash for about 30 seconds. There were no issues whatsoever, the rig performed exactly as expected.
On a summit
On Sunday April 28, 2019, I took the little rig up to Mt Dandenong VK3/VC-025), 630 meters, 2 points, Melbourne’s closest SOTA summit on the east side. Starting early, going on air around 0830, both weather and HF band conditions were fairly poor, but despite constant drizzle and rain, I got the requisite four contacts (559 from Ian VK5CZ, 559 Steve VK7CW, 5×9 from Peter VK3PF, 419 from xxxx VK3KTT, 5X9 from VK2UH). With the summit qualified, the little rig was christened Summit Prowler 6!
Post build reflection
This project consolidated my approach to homebrewing transceivers. Not much in this little rig is new, but the compact size enforced a design constraint and a focus that helped with many of the choices. The ‘gainy’ receiver is lively and fun to use, and with the help of the AGC works on a short run of hookup wire or a full sized dipole.
A few potential improvements come to mind. One is to consider eliminating the physical T/R relay and use solid state T/R switching instead. This may necessitate a number of 2N7000 muting FETs spread around the receiver. An idea for a rainy day.Another is to replace the BPF and small signal T/R relays with a modern RF switch. I’ve used the SA630D for this in the past. Glenn VK3PE is experimenting with a new RF microwave switch () in a BPF board. I’m keenly awaiting the results of his experiments.
Solid state BPF and low level T/R RF switches like these would have many advantages, including cutting current consumption by 60 to 70mA, and eliminating the 2N7000 relay drivers and relays, allowing even smaller modules.Finally, this was my first transceiver build with my Siglent CML1102 digital storage scope in the shack, and using it has been a joy! Compared to my old 30 year old cheapie analog scope, it’s been like turning a light on in a dark room. Why didn’t I get one of these earlier?
This project used parts from my junk box and also from the usual suppliers — Jaycar, Altronics, Minikits, element14, eBay.
None of the stages are critical and common-sense component substitutions will work throughout.
Peter DK7IH’s Micro42 circuit and details here.
Raduino circuit is here.
My code is here.
If you want to build something like this, in part or as a whole transceiver, in a large or compact style, do post a comment and let us know how you progress.