First of all: this project aims to achieve a simple, cheap and easy to build HF RTX. It is not about performance. It is a great way to experiment current day MCUs, and their toolchains. 

Nonetheless it is quite good for receiving SSB, AM and CW on the ham bands, broadcast stations and HF services, all of this with an MCU, two bipolar transistors and a few passive components. Transmitting, 4 W CW only, requires one IC and two power MOSFETS . 

Disclaimer: in most of the countries a ham license is required for transmitting, and there are limitations for RX too. Output signal quality, like harmonic content and spurious signal, was never tested. So please comply with the norms of your country. You are on your own, I am not a lawyer. There is also some chance of damage to the USB connected phone. You have been warned, I take no responsibility for anything.

I don’t possess the instruments needed to provide some numbers about the performance. The trade-offs that are implicit in this simple architecture will be shown.

The core of the RTX is the I2PHD’s receiver that you can find, modified for an open toolchain, in my github page. As always, have a look at the original PDF for ARM Radio at weaksignals.com.

Since the original receiver, ARM M4 based, new MCUs based on the M7 architecture appeared.

In particular, STM32H750 sports ADCs that can achieve about 9.5 Msps, and can be overclocked up to 600 MHz. At least in the three samples I tested. YMMV but I feel all of them are stable at this clock speed, at least within common temperature and power supply conditions.

This project started during the first wave of the pandemic, when I had more time than now. The idea was to  have a first version of the PCB, to test different design choices, then design a final PCB. As you have already imagined, I’m still at the first release, partly because of the components shortage.

This is  what I have right now:

- Power supply: everybody has a mobile phone and power is drawn from its USB connector. For transmitting, I measured 4W output power, but the USB cable from the phone is not enough. A second USB cable, connected  to a power bank or a power supply, is used. Of course it is possible to use a computer instead of the phone, and use two of its USB ports.  The PCB can be populated with the voltage regulators needed in case power does not come from USB but from a 12 or 24V power supply. This is required to obtain a higher output power. 

- Human interface: the phone, or PC, runs a serial terminal emulator. A minimal interface runs on the MCU. It shows frequency, signal strength, mode, etc. An ASCII art band scope is provided, cool but not particularly useful. There is a simple CW decoder. Radio can be controlled by the serial terminal’s keyboard, there is a rotary encoder for frequency selection, it is not strictly required. USB communication is done by the MCU acting as a Communication Class Device. No FTDI chips, USB goes straight to the MCU. Beware, the current PCB has the USB connector too far from the edge of the board and it is necessary to trim the cable connector.

- Most of the MCU’s pins are brought to through hole pads. It is a passable breakout board.

- There are several STM MCUs that share the same pinout but differ in Flash an RAM size. Now I’m using a STM32H750, the cheaper one. It was about 5 euros in quantity 1, when it was stocked. There are also newer components, like STM32H730, that are compatible , are faster and have a CORDIC peripheral that could be useful for LO generation.

- Two different RX topologies can be tested. The cheaper one is a quite typical direct sampling SDR. ADCs are limited to 9 MSPS  and reception over 4.5 MHz is achieved by undersampling the signal. This means, for example, that a strong 3 MHz signal can be heard at 7.5 MHz, since the input band pass filter does not provide enough off band attenuation. One could mitigate this problem by having two selectable sampling rates, and choose the least offending one. Dynamic range is affected by oversampling, and the ADCs are quite noisy to start with.

The other topology has a first conversion, in this case performed by a SA612 but for good performance a higher dynamic mixer would be better. Then there is a 10.7 MHz crystal filter, quite economical because it does not need to be sharp, then the MCU samples this IF as described above. Local oscillator is one of the PLLs of the MCU. Frequency steps of the PLL are quite massive, up to some Khz, but since the XTAL filter is wide, it is possible to have a continuous tuning by taking into account the PLL error into the SDR LO.  Until now I never tested this solution, It seems that performance would be better with just a handful of components.

-At first it seemed to be a good idea to use MMIC as preamplifiers: unfortunately they give all kinds of problems in this HF use. For now I use two bipolar transistors in a small board.

- Input filters are not provided on the PCB. For a second release I would provide a way to insert a module on the main board, and swap it when changing the band.

-The transmitter uses a dedicated MOSFET driver component, probably a 74ACT buffer would be enough. Impedance step up is by a PI network. TX frequency is generated by a MCU’s PLL, not all the frequencies are possible. Error is often less than 100 – 200 Hz on 40 meters, it's tolerable. PLL coefficients are found by brute force calculations, Don’t know of an analytical solution to the problem. 

- There is a digital audio power amplifier, it was intended for MW AM transmission, by drain voltage modulation. Never tested, but should go up to 20 W and more.

- I don’t own Matlab and had to convert the script for generating the FFT filter’s windows to Octave. It seems to work but the results should be double checked. Some functions are not exactly the same.