dimanche 15 septembre 2019

NanoVNA

Un 'Vector Network Analyzer' à 40.00 euros sur eBay... Ce petit bidule 'stand alone' permet de mesurer la réflexion (S11) et la transmission de signaux entre 50 kHz et 900 MHz.

Mesure en transmission d'un filtre 'SAW' passe-bande 433 MHz.

Le nanoVNA est équipé d'un petit 'touchscreen' mais on peut également communiquer via le port USB (USBc). Sur Linux, on peut utiliser 'minicom -D /dev/ttyACM0', par exemple. Et sur Windows, 'putty'.

L'interface est bien conçue. CH0 mesure la réflexion (S11) et CH1, la transmission (S21) en valeur imaginaires. On définit la plage de fréquences (sweep) qui sera divisée en 101 points. On peut afficher 4 traces. Pour chaque trace, on peut choisir le canal, le type d'affichage (logmag, smith, phase), etc...

Via le port USB, on a une console série dans laquelle on peut taper des commandes et afficher les résultats. Ainsi, par exemple, on peut facilement obtenir les mesures en transmission entre 400 et 500 MHz.
ch> sweep 400000000 500000000 101
ch> data 1
-0.004106074 0.001582601
-0.004401572 0.001613250
-0.004341298 0.001819048
-0.004164417 0.001013602
-0.006044433 0.001735574
...
Un petit script PERL vite écrit, convertit les valeurs en dB :
#!/usr/bin/perl
$f0 = 400.0; $f1 = 500.0;
$inc = ($f1 - $f0) / 101;
$df = 0;
while ($line = <STDIN>)
 {
 chomp $line;
 ($a, $b) = split /\s/,$line;
 $mag = sqrt ($a*$a + $b*$b);
 if ($mag == 0) {$mag = 0.001;}
 printf("%6.2f\t%f\n", $f0 + $df, 20*log($mag)/log(10.0));
 $df += $inc;
 }
et on obtient le même graphe que l'écran du nanoVNA avec gnuplot :
gnuplot <<END
set term png size 1200,800
set output 'S21-logmag.png'
set title 'S21-logmag of a "NMRF FBp - 433s" filter'
set xlabel 'Frequency (MHz)'
set ylabel 'S21 dB'
plot 'S21-logmag' with lines
END
Graphe calculé à partir des données obtenues via l'interface série.

C'est magique!

Quelques exemples pour la route :
ch>
ch> help
Commands: help exit info echo systime threads reset freq offset time dac saveconfig
 clearconfig data dump frequencies port stat sweep test touchcal touchtest pause
 resume cal save recall trace marker edelay 

ch> info
Kernel:       4.0.0
Compiler:     GCC 5.4.1 20160919
Architecture: ARMv6-M
Core Variant: Cortex-M0
Port Info:    Preemption through NMI
Platform:     STM32F072xB Entry Level Medium Density devices
Board:        NanoVNA
Build time:   Aug  2 2019 - 16:40:01

ch> trace
0 LOGMAG CH0 1.000000000 7.000000000
1 LOGMAG CH1 1.000000000 7.000000000
2 SMITH CH0 1.000000000 0.000000000
3 PHASE CH1 1.000000000 4.000000000
ch> trace 99
trace {0|1|2|3|all} [logmag|phase|smith|linear|delay|swr|off] [src]
ch> trace 1 phase 0                                                                
ch> trace                                                                          
0 LOGMAG CH0 1.000000000 7.000000000                                               
1 PHASE CH0 1.000000000 4.000000000                                                
2 SMITH CH0 1.000000000 0.000000000                                                
3 PHASE CH1 1.000000000 4.000000000
                                               
ch> sweep                                                                          
400000000 500000000 101                                                            
ch> sweep 420000000 440000000 101                                                  
ch> sweep                                                                          
420000000 440000000 101                                            
ch>

ch> data 1                                                                         
-0.004733881 0.003933506                                                           
-0.004605576 0.004513134                                                           
-0.004246967 0.003887655                                                           
-0.004040227 0.003405604                                                           
-0.003938771 0.004323835                                                           
-0.004104804 0.004129481
...
data0 pour les mesures de réflexion, data 1 pour la transmission. Après, ce sont les données de calibration.

Quelques liens