ik1xpv hamradio software & hardware

PScope a useful tool

To refine and measure the hardware and software performance of SDRs similar to BBRF103 there is an excellent software tool developed at the time by Linear Technology, today Analog Devices.

PScope allows you to quickly evaluate the performance of ADC chips.

undefined

I recommend the web page PScope: High-Speed ADC Data Collection Software on the Analog site where there is also a link to download installation file http://ltspice.analog.com/software/ltcps.exe it is free.

The video is also on youtube

The application has a help file and Analog Devices presents a PScope-Basics  page.

When used with ADC development boards the program requires specific drivers but can be installed without any driver.
It is possible to input the data we want to measure through a file that has a specific format that I tried to emulate by replicating the header of the file.
The files have the extension .adc
Our program, in my case ExtIO.dll will call my PScopeShot function specifying the name of the file that will be created, a title, a short description, the sample rate, the data pointer, their length.

Let's start with an example.
I'm trying to figure out if the performance of my RF103 prototype (an HF-only version of BBRF103 with minor modifications) can be improved in hardware or software.

In the Extio.dll in the debugging configuration I have activated the possibility to replace the data generated by the ADC with a virtual buffer that contains the samples of a 16 bit sinusoid sampled and explored at the desired frequency.

In the initialization procedure of the dll I added the code:


#ifndef _NO_PScope_ACTIVE_
/* Virtual sine generator test PScope
*/
unsigned int kidx = 0;
float samplerate = adcfixedfreq;
unsigned int mdf = Xfreq * ((double) 65386000.0/samplerate); // freq correction
short* testdata = (short *) malloc(RF_TABLE_SIZE * sizeof( short)); // test buffer data
unsigned int numsamples = global.transferSize/sizeof(short);
for (unsigned int n =0; n < numsamples; n++ )
{
kidx %= RF_TABLE_SIZE;
testdata[n] = sine_table_16bit[kidx] ;
kidx += mdf;
}
PScopeShot("VirtualSineWave.adc", "RF103_7a", "VirtualSineWave.adc input virtual test 16 bit sine", testdata, samplerate, numsamples );
free (testdata);
#endif // _PScope_ACTIVE_
...

 The PscopeShot procedure is defined as


int PScopeShot(const char * filename, const char * title2, const char * title1, short * data, float samplerate, unsigned int numsamples )
{
FILE *fp;
fp = fopen(filename, "w+");
fputs("Version,115\n", fp);
fprintf(fp, "Retainers,0,1,%d,1024,0,%f,1,1\n",numsamples,samplerate );
fputs("Placement,44,0,1,-1,-1,-1,-1,88,40,1116,879", fp);
fputs("WindMgr,7,2,0\n", fp);
fputs("Page,0,2\n", fp);
fputs("Col,3,1\n", fp);
fputs("Row,2,1\n", fp);
fputs("Row,3,146\n", fp);
fputs("Row,1,319\n", fp);
fputs("Col,2,1063\n", fp);
fputs("Row,4,1\n", fp);
fputs("Row,0,319\n", fp);
fputs("Page,1,2\n", fp);
fputs("Col,1,1\n", fp);
fputs("Row,1,1\n", fp);
fputs("Col,2,425\n", fp);
fputs("Row,4,1\n", fp);
fputs("Row,0,319\n", fp);
fprintf(fp,"DemoID,%s,%s,0\n", title1, title2 );
fprintf(fp,"RawData,1,%d,16,-32768,32767,%f,-3.276800e+04,3.276800e+04\n", numsamples,samplerate);
for (unsigned int n = 0; n < numsamples; n++ )
{
fprintf(fp, "%d\n", data[n]);
}
fputs("end\n", fp);
return fclose(fp);
}

 The acquired file of the virtual generator signal when loaded in PScope File menu draws:

undefined

 No bad for a 16bit software table lookup implementation!

 undefined

Here the picture of the HDSDR output when we select the RF virtual tone generator. It’s very similar to PScope analysis and result. 

In a second test I forced the software DDC input samples to a constant value, a DC component.


short anyvalue = 0x5aC3;
for (unsigned int n =0; n < numsamples; n++ )
{
testdata[n] = anyvalue;
}
PScopeShot("VirtualDClevel.adc", "RF103_7a", "VirtualDClevel.adc input virtual test DC value", testdata, samplerate, numsamples );

 The PScope analysis shows no noise component as we have a perfect stable input virtual level.

undefined

SNR not available as there as noise is absent.

In the HDSDR world we get:

undefined

This only verifies that there are no noise components added by the DDC.

 

 

BBRF103  posts 

BreadBoard RF103          20 June, 2017

Some variations of ExtIO_sddc.dll architecture        31 August, 2017   

Troubleshooting BBR103          22 September, 2017

BBRF103 and ExtIO.dll ver. 0.96 get 32 MHz span    1 March, 2018

R820T2 update - BBRF103_2 PCB           10 April, 2018

BBRF103 - Band L reception                   26 May, 2018

Just another BBRF103 version                14 August, 2018

BBRF103-2 RC3 is here!                         1 September, 2018

BBRF103 Construction notes                   4 May, 2019

BBRF103 Some measurements               20 May, 2019

Receivers similar to BBRF103 ?               08 June, 2020

PScope a useful tool                              19 June, 2020

Receivers similar to BBRF103 ?

Some receivers with an architecture similar to BBRF103 appeared in the web during this look down time.
I tried to contact the authors not for copyright issues, being BBRF103 completely open source but to exchange some experiences. A contacted person wrote me that the project is new and fully original, but I think I reached the re-seller and not the designer.
So I signal my interest in talking with the real authors of the devices.
I list the devices with links to images that are in these weeks at the following links. 

If someone has a review or any other info please send it to me.

Thanks, everyone,  ik1xpv AT gmail DOT com

Update 15 August, 2020

- If you want to give a try to BBRF103 software with these receivers, here the compiled ExtIO_sddc.dll : v.0.96 (HF only) and v.0.98 (HF and VHF).

The Dragonfly RX-666 SDR © Bjarne Mjelde, arcticdx.blogspot.com

 

Update 19 August, 2020

- The RX888 SDR – Up Close Photos at  https://swling.com/blog/2020/08/the-rx888-sdr-up-close-photos/

- The RX-888 Team sent me the link to they RX-888 software at

https://drive.google.com/file/d/1hqV2-ZCl1iDz7IvOsBS-YR5XGLpOd6ER/view?usp=sharing

 

 

RX-888 

source: 

http://www.radioscanner.ru/forum/topic46950-28.html

https://twitter.com/fei666888

undefined

http://www.radioscanner.ru/uploader/2020/ezawtqsueaeoa-z.jpg

 

undefined

http://www.radioscanner.ru/uploader/2020/78934789iw.jpg

 

undefined

http://www.radioscanner.ru/uploader/2020/ezawdhruwaaz-gq.jpg

 

 RX-666 ?

source: 

TAOBAO    https://item.taobao.com/item.htm?spm=2013.1.w4023-1262356524.17.4ea334a9ZaAa2W&id=617774885587

 

Aliexpress https://www.aliexpress.com/item/4001080658440.html?spm=a2g0o.detail.1000023.9.6ccb4491vlqtWJ 

 

undefined

https://img.alicdn.com/imgextra/i2/22088642/O1CN01wrOfUF2Di5PDC8KRa_!!22088642.jpg

undefined

https://img.alicdn.com/imgextra/i4/22088642/O1CN017bLC3v2Di5OpbZuEj_!!22088642.jpg

undefined

https://img.alicdn.com/imgextra/i3/22088642/O1CN01B86EWy2Di5P6pKtn4_!!22088642.jpg

 

undefined

https://img.alicdn.com/imgextra/i3/22088642/O1CN01hqZ7N92Di5OrG2ydq_!!22088642.jpg

 

BBRF103  posts 

BreadBoard RF103          20 June, 2017

Some variations of ExtIO_sddc.dll architecture        31 August, 2017   

Troubleshooting BBR103          22 September, 2017

BBRF103 and ExtIO.dll ver. 0.96 get 32 MHz span    1 March, 2018

R820T2 update - BBRF103_2 PCB           10 April, 2018

BBRF103 - Band L reception                  26 May, 2018

Just another BBRF103 version                  14 August, 2018

BBRF103-2 RC3 is here!                         1 September, 2018

BBRF103 Construction notes                   4 May, 2019

BBRF103 Some measurements               20 May, 2019

Receivers similar to BBRF103 ?               08 June, 2020

PScope a useful tool               19 June, 2020

 

CNC laser modifications

The starting point is the CNC in figure:

undefined

The manual refers to it as CNC2-Axis-4030B and the laser module power is declared 2500 mW.

undefined

After the kit assembly I started testing operation.  I was a little disappointed as I was not able to cut poplar playwood of 3mm thickness.
I had some better result with the modification here following.

 

1 SAFETY

The light from the laser module is dangerous and may permanently damage the eyes of the user or persons close to it.

- Operate the unit only when everybody is equipped with protective glasses.

When the machine is power on the laser is dangerous also when is stopped as for a software or hardware fault it could light the laser.

- Keep the laser machine power off when not needed.

The laser “burns” the target material to engrave or cut it. Some setting of engraving or cutting can cause fires.

- Operate the laser with an operator ready to stop it and extinguish eventually fire.

During cutting of material some smoke is generated. Some material may generate poison fume that are dangerous.

- Use the machine at open air or well ventilated room.

I prefer to engrave and cut just natural soft wood. Wood is easy to take fire, pay attention.

- Remember that you are responsible for the safety of your actions.

 

2 INSTALLATION

I made a table for the CNC unit using three IKEA LACK table and some aluminum profile.
Here after some pictures:

undefined

A sheet of iron 0.6 mm thick protects the IKEA LACK table surface. Magnets are used to fix the target to the table and to keep protection panels in place. The front panel has an acrylic orange transparent window to monitor the laser operation, nevertheless use always protection glasses too.
I plan to add air blower to ventilate the cabinet.

 

2 FOCUS

The laser module has adjustable focus deep moving the lens into a 9mm threated tube. The lens module theads movement is contrasted by a spring.

The lens mount of the 2500mW laser module showed some slack. In addition, the lens vibrates during normal operation of the laser module.

I modified the lens module to a fixed one inserting some spacer (2.5 mm thick in my case) and screwing the lens to the spacer.

 

undefined

 

 The spacer thickness defines the focal length. A higher focus distance causes a wider focus spot size and a wider depth of focus.

undefined

The distance between the laser module aluminum profile bottom plane and the focal plane is about 67 mm in my setup. To evaluate the depth of focus I made some cuts and analyze a section of the cut:

 

undefined

 

The limit I reached is a cut of 8mm with an estimated width of 0.25 mm with speed of F100 with three or more passes.

In a second test I cut some figures using a speed of F100 and S1000 with 8 passes to obtain a clean cut on 8mm poplar plywood. Air assist is needed to get the result.

 

undefined

 

Use the lens with a fixed focus requires to adapt the height of the target plane accordingly.
I decided to modify the laser fixing to add air assist. A screw was added to the top to adjust the height of laser over the plane as described in the following.

3 AIR ASSIST

Compressed air can be supplied from a variety of air compressors. There are many factors to consider when selecting an air source for laser material processing, noise other than the air cleanliness and oil and moisture content.
I decided to use a simple blower on the laser head. The air will flow into the laser diode aluminum profile cooling it and will be forced by a nozzle to the laser cutting area.

undefined

I carefully dismounted the laser and the electronics control board. Two blowers (12V -15mm thickness) are mounted on the top of the aluminum laser profile, while a cone nozzle is fixed al the bottom to force the air coaxial to the laser. I made test with 4, 6, 8, 10 mm air nozzle and 6 mm seems the best to me.

undefined

 

The base to which the laser is screwed slides on the front plexiglass plane with four flexible skids that reduce backlash according to the Z axis and a screw allows the laser position to be corrected up to 20 mm high.

The electronics that powers the laser is mounted with some spacer on the left while a DC-DC module is added on the right to power the blowers with 14.5V instead of 12V nominal, it increases the air flow a little bit.

 

undefined

I wired the module 12V power with bigger wires to decrease the voltage drop. The switching regulator in the laser power control should compensate the thinner wires drop, nevertheless it seems to me that it improves the laser performance.

You can find my 3D files in https://www.thingiverse.com/thing:4204645

The design is specific for the CNC2-Axis-4030B model, nevertheless ideas can be improved and generalized.

undefined

 undefined

 

CNC Xaxis carriage tension adjust:  https://www.thingiverse.com/thing:4188039

undefined

 

CNC belt tensor: https://www.thingiverse.com/thing:4188852

undefined

 

BBRF103 Some measurements

In the construction of BBRF103 the evaluation kit of Cypress for the FX3 is used as it is and the ADC printed circuit board is realized with 2 layers as a compromise to reduce the cost of realization.

I try to evaluate now with homemade measurements how close the performance is and how good it is.

Let's start with a few readings from the technical data sheet of the LTC2217 (https://www.analog.com/media/en/technical-documentation/data-sheets/2217f.pdf )

"(pag 1) ...The LTC2217 includes 81.3dBFS Noise Floor and 100dB spurious free dynamic range (SFDR)

(pag 24) … Digital Output Randomizer
Interference from the ADC digital outputs is sometimes unavoidable. Interference from the digital outputs may be from capacitive or inductive coupling, or coupling through the ground plane. Even a tiny coupling factor can result in discernible unwanted tones in the ADC output spectrum.
By randomizing the digital output before it is transmitted off chip, these unwanted tones can be randomized, trading a slight increase in the noise floor for a large reduction in unwanted tone amplitude.
The digital output is “Randomized” by applying an exclusive-OR logic operation between the LSB and all other data output bits. To decode, the reverse operation is applied; that is, an exclusive-OR operation is applied between the LSB and all other bits. The LSB, OF and CLKOUT output are not affected. The output Randomizer function is active when the RAND pin is high.

undefined

(pag 25)... Internal Dither
The LTC2217 is a 16-bit ADC with a very linear transfer function; however, at low input levels even slight imperfections in the transfer function will result in unwanted tones.
Small errors in the transfer function are usually a result of ADC element mismatches. An optional internal dither mode can be enabled to randomize the input location on the ADC transfer curve, resulting in improved SFDR for low signal levels.
As shown in Figure 15, the output of the sample-and-hold amplifier is summed with the output of a dither DAC. The dither DAC is driven by a long sequence pseudo-random number generator; the random number fed to the dither DAC is also subtracted from the ADC result. If the dither DAC is precisely calibrated to the ADC, very little of the dither signal will be seen at the output. The dither signal that does leak through will appear as white noise. The dither DAC is calibrated to result in typically less than 0.5dB elevation in the noise floor of the ADC as compared to the noise floor with dither off, when a suitable input termination is provided (see Demo Board schematic DC996B).

undefined

".

I made a sinusoidal generator using an old 10MHz TCXO followed by a ladder quartz filter made with cheap 10MHz quartz.

I calibrated the TCXO at 9.9981 MHz to pass through the quartz filter.
Before the filter, an SBF5089Z amplifier allows to obtain after the filter a level of +2dBm on 50 Ohm.
Finally, a series of resistive attenuators allows you to adjust the output level.
The aim is to obtain a generator with good dynamics and low noise. The result has 2nd and 3rd harmonic level at -50dB.

Here are a few measures

BBRF103 HF antenna is connected to the attenuator output.
BBRF103 control panel allows to activate dither and randomize.

 

Hereafter the level is -1dBFS, DITH and RAND are active.

undefined

High resolution image link

 

Hereafter the same -1dBFS level, DITH and RAND are OFF

undefined

High resolution image link

With strong and stationary signals the interference of the data bus is evident and the use of dither and randomize is effective.
Referring to the ADC datasheet with reference to these approximate measurements, it seems to me that the current layout of the 2-layer PCB and the adc databus, which also continues in the evaluation PCB of the FX3, worsen the spurious performance by 10-15 dB compared to the optimal layout of the PCB.

It would be possible to realize a single multilayer PCB including FX3 and ADC with better performances following the datasheet's layout indications.

 

BBRF103 Construction notes

These days I assembled a second prototype of BBRF103 receiver.  Here are some notes. 

Power supply

I made a different power harness. The purpose is to allow the circuit to be powered by the USB cable with VBUS or via a separate 5Volt power connector.

So far in the diagrams of BBRF103 the input of the 5V power supply to the PCB is taken from the VBUS of CYUSB3KIT-003.

I noticed on my two prototypes some problem related to the intervention of the protection circuit (U11 sheet 2 of 8, CYUSB3KIT scheme) on the Cypress plate and caused by the current increase required in some phases of power-up of the PCB BBRF103 and R820T2 use.

I modified the input of the 5Volt and connected it upstream of the protection circuit using the J3 jumper as a connector.

The scheme is as follows:

undefined

undefined

The current consumption of complete BBRF103 using Tuner R820T2 is about 530mA at 5Vdc.

undefined

From left to right

- 5Volt dc external input (optional)

- latched pushbutton VBUS / extenal 5V

- USB3 connector

- ON / OFF

 

Shielding box

The box used is made of aluminum, it has dimensions 100x76x35mm, currently at Banggood it is available only in a golden color. The surface is brushed and treated with an insulating process so it is necessary to sandpaper the contact surfaces to obtain an electrical contact when it closes.

In the grooves on the long sides I inserted after scratching the rail a strip of Desoldering Copper Wick as a contact gasket.

undefined

Heat dissipation

The ADC LTC2217 and the tuner R820T dissipate more than one Watt in heat. To keep the temperature of the chips lower, I tried two passive aluminium heat sinks that lead the heat to the aluminium box, which acts as a heat sink, reducing the temperature of the chips by 20-30° C.

undefined

undefined

 undefined

The radiators are fixed with some M2 nylon insulating screws and nuts. I used a slightly modified PCB from BBRF103-2 layout.

Stand alone static current test

Assembling the pcb I have tried a simple method to verify errors of power supply rails.

Each block of the circuit is powered separately through a filter inductor. So not mounting these components it is easy to measure the current absorbed by various blocks on the PCB BBRF103-2 before connecting the CYUSB3KIT-003 board.

Here is a table with the measured power consumption of three blocks in a static way.
I have not mounted FL1, FL2, FL3.
I connected a 5Volt /500mA power supply to the LDO power supply of the plate and
I measured the current at the unassembled inductors by injecting an external voltage, getting:

Block Current Measuring point
Oscillator SI5351 15-16 mA FL3 / external power supply 3.3V
Tuner R820T2 80-85 mA FL2 / external power supply 3.3V
ADC LTC2217 269-210 mA FL1 / external power supply 5V (ADC gets 3.3V via LDO)


In case, inspect the component mounting and check the welds with a microscope or lens.

 

Home ← Older posts