Sunday, 19 January 2020

Spectrum Analysis

Well,

I've been messing about recently with some inexpensive alternatives to a Spectrum Analyser. I find my Rigol DS-815 one of the best investments I've ever made, it represents excellent value for money. However, its still an expensive purchase and I wondered if the inexpensive alternatives were any good.

First off, I tried one of these that you can source on all good auction sites, here is a link to the device on Amazon:

Without a box

and also:

With a box (if you are posh like me)


They look like the image above and represent exceptional value for money - you couldn't purchase the bits for the price.

Here's my evaluation of the device:


Second I tried an SDRPlay and associated software as a Spectrum Analyser:


Next will be a Red Pitaya... so watch this space.

Sunday, 12 January 2020

STM STM32F103RC8T6 - really?

Well,

On popular auction sites you can find these boards for less than 2 GBP delivered:


They contain (on the underside) a STM32F103RC8T6 processor from ST Microelectronics. Looking at my musings from here, these boards will support the necessary double precision maths and also have the SPI interface needed for frequency synthesyser interfacing - amazing!

These will work with the Arduino IDE with a very small amount of effort.

Assuming you already have the Arduino IDE installed (if not go get it), the steps are:


  1. Go to the Tools -> Boards -> Board Manager and install the Arduino SAM boards (Cortex-M3)
  2. Download the STM32 support package from here.
  3. Unzip the download to create the Arduino_STM32 folder
  4. Copy the Arduino_STM32 folder to My Documents/Arduino/hardware (Note: if the hardware folder doesn't exist you will need to create it).
  5. Navigate to My Documents/Arduino/hardware/drivers/win and run the install_drivers.bat file - right click and run as Administrator
  6. Restart (or start) the Arduino IDE and select "Maple Mini" as your board, "Original" as your bootloader
  7. Attach the board to the PC with a USB cable, you should see a "Maple DFU" device under "libusb-win32 devices"
You could then try this sketch and upload it to the device; please note that at this point you don't have a COM port for the board - it is using the bootloader via the DFU device instead.

Once the sketch is loaded you will then see a COM port "Mapel Serial" which you can now also select in the Arduino IDE tools -> Port.

I've connected my board to my SV1AFN ADF4351 board as follows:

STM32F103RC8T6 Pin 7 -> SPILEA (pin 3)
STM32F103RC8T6  Pin 6 -> SPICLK (pin 1)
STM32F103RC8T6  Pin 4 -> MOSI (pin 4)
STM32F103RC8T6 VCC -> 3V3 (pin 7)
STM32F103RC8T6  GND -> GND (pin 5)

and have run this sketch - seems to work just fine.

I then ran this sketch - and followed the instructions in the Serial Monitor to upgrade the bootloader - once I'd done that I then needed to select Tools -> Bootloader Version -> 2.0 for any future comms with the board.





Thursday, 2 January 2020

More ADF5355

Well,

Following on from my great invention last time, I've been fiddling some more with the ADF5355 that we used here. This will generate RF from 54MHz all the way up to 13.6 GHz (which is simply amazing).

I've done something that feels a little silly, but is working:
  • I have developed some code for the MicroMite to do touch screen control
  • That communicates over a serial connection with a SAMD21 ARM Cortex M0 which does the complex double precision maths needed for the ADF5355
It feels a little silly to be using two processors, but:

  • The MicroMite doesnt support the double precision maths needed for the ADF5355
  • I can't find an easy-to-use library to do the graphics and touch screen gubbins on the SAMD21
So we have two pieces of software.

The ADF5355 board is from Amazon and looks like this:


You can get one here.

If you want to play along at home, I have also developed a macro based excel sheet using VBA to do the maths here; that will calculate the register values for a given target frequency. Once you have those, you could use my simple code to send the register values to the board over SPI. I've used a Arduino Zero clone, which you can get here. We need double precision floating point maths for this job.

This board is supported by the Arduino IDE as-is and looks like this:


The connector labeled ICSP is used for the SPI comms.

Once you understand all that gubbins, you could start to play further. Here's how I've got the bits and bobs hooked up:


The touch screen in the LCD BackPack provides the facility to view the current selected frequency:


and enter a new one:


Once you have entered the required frequency the MicroMite sends the selected frequency as a string to the SAMD21 processor which then does the necessary maths to generate the 13 register values used by the ADF5355 and squirts them over the SPI interface.

The ADF5355 uses a 100 MHz clock which is generated using the ADF4351 from last time which in turn is clocked by the shack 10MHz frequency reference.

The initialisation of the ADF4351 is done by the MicroMite over SPI, the SPI to the ADF5355 is from the SAMD21 processor.

Here is an example of the 13 register values being sent:


and a close up of one of them:

This will need boxing and turning into bench test gear.

I did quite a bit of reading up on the Arduino SPI library during this project; if you are interested in programming the ADF5355, please pay attention to the SPI library calls in this code as good practise.

The Basic code that runs on the MicroMite is here and the code for the SAMD21 (using the Arduino IDE) is here.

I've done a video of all this:



Here is the very lovely Miss Luna Cat who has assisted throughout: