GPSDO pour ADALM-PLUTO
et autres applications nécessitant une fréquence de référence.

 

La nécessité d'avoir une fréquence de référence pour synchroniser toutes nos applications radio n'est pas nouvelle. Tout le monde a en tête les stations WWV. Avec les satellites GPS est apparue de nouveaux moyens d'obtenir ces fréquences de référence avec des oscillateurs asservis par la méthode appelée GPSDO comme « GPS disciplined oscillator ». On obtient avec cette méthode une fréquence très précise qui va nous servir à piloter nos équipements.

L'apparition pour le marché des drones de modules GPS à très bas prix nous permet maintenant d'imaginer un système simple et peu onéreux pour piloter un ADALM-Pluto par exemple.

Ce transceiver de développement, très utilisé sur QO-100, est équipé d'un TCXO peu stable qui ne permet pas un trafic précis sur notre satellite.

On peut remplacer le TCXO 40 MHz d'origine par un plus stable mais les modèles disponibles dérivent malgré tout un peu et nécessitent donc un recalage régulier du transceiver.

On trouve des solutions commerciales qui règlent définitivement ce problème comme le GPSDO « Leo-Bodnar », mais ces types de GPSDO dépassent largement les 150 €.

 

 

 

D’où l'idée de réaliser nous même un pilote stabilisé par GPS.

On peut changer la fréquence de l'horloge ainsi que la source d’horloge du Pluto en modifiant des données dans le firmware, mais seulement à partir de la version D de l’Adalm-Pluto.

 

 

Une fois le driver spécifique du Pluto installé, avec un terminal Putty par exemple, se loguer sur l’adresse IP locale du Pluto, 192.168.2.1, login ‘root’ et mot de passe ‘analog’.

Pour visualiser la source de l’horloge, taper la commande :

#fw_printenv refclk_source

Pour passer en horloge externe :

#fw_setenv refclk_source external

Et ne pas oublier de faire un reset ensuite pour prendre en compte la modification :

#pluto_reboot reset

 

Une autre variable permet permet de corriger la fréquence du TCXO si celle-ci n’est pas correcte.

#fw_setenv xo_correction 39999750 // par exemple

#pluto_reboot reset

Si vous pilotez votre Pluto avec le GPSDO 40 MHz vous devez l'indiquer au Pluto :

#fw_setenv xo_correction 40000000

#pluto_reboot reset

 

Une autre variable permet permet de corriger la fréquence du TCXO si celle-ci n’est pas correcte.

#fw_setenv xo_correction 39999750 // par exemple

#pluto_reboot reset

Vérifier ensuite par la commande :

#fw_printenv xo_correction

Pour vérifier la prise en compte de la fréquence de l'horloge.

Vous pouvez aussi changer carrément de fréquence par la commande :

#fw_setenv ad936x_ext_refclk_override '<25000000>'

#pluto_reboot reset

 

Pour passer à une fréquence de 25 MHz par exemple.

Mais d'après les retours d'expériences des uns et des autres glanés sur le net, il ne faut pas descendre trop cette fréquence sous peine de voir se dégrader la qualité du signal émis. Alors autant rester si possible sur une horloge externe sur la fréquence d'origine.

 

 

L’injection de l’horloge peut se faire facilement comme sur cette photo (DD8ZX) grâce à de petits câbles IPX/SMA que l’on peut très facilement approvisionner sur le NET.

 

Pour les versions antérieures du Pluto, la modification est plus chirurgicale puisqu’il faut couper l’alimentation du TCXO et injecter par une petite capacité le signal externe.

 

Vous trouverez les détails de cette modification sur le site de F5UII.

Le schéma

Voulant donc piloter un Pluto en 40 MHz externe, je me suis inspiré de descriptions faites par d'autres OM comme F8CJS ou F1CJN pour définir le schéma suivant.

 

Nous partons d'un VCXO 40 MHz choisi pour ses caractéristiques de faible bruit de phase.

ASVV-40.000MHZ-N102-T

VCXO, 40MHZ, 7 mm X 5 mm, CMOS/TTL

Après mise en forme par des portes 74LV14, nous disposons d'un niveau suffisant sur la première sortie à 40 MHz. Il faut une amplitude crête à crête de 600mV pour piloter correctement le Pluto.

 

Une division par 4 de la fréquence avec des bascules 74LV74 permet de disposer, après filtrage, d'un signal sinusoïdal à 10 MHz.

 

Les deux décades du 74HC390 en série divisent la fréquence à 100 KHz vers l'entrée d'une porte OU exclusif 74HV86 qui compare ce 100 KHz à celui provenant d'un module GPS NEO-M8N.

 

Après intégration, la tension d'erreur est rebouclée sur l'entrée de contrôle du VCXO pour assurer l'asservissement du 40 MHz sur la fréquence issue du GPS.

D’autre part, une seconde intégration de cette tension est faite par la porte U2D afin de donner l’information à l’Arduino qui en déduira le verrouillage du VCXO et allumera la LED « LOCK » D5. Le software original de F1CJS a été modifié en conséquence pour donner cette indication de verrouillage. L’affichage Lock/Unlock est aussi indiqué sur l’afficheur OLED. Ces deux messages alternent pendant la phase de verrouillage, qui dure au minimum une minute, avant de se stabiliser sur « Lock » une fois ce verrouillage effectif.

 

Une extension 25 MHz optionnelle, à partir de l’harmonique 5 du premier diviseur à 5 MHz, est aussi implantée. Ce signal peut permettre de piloter une tête LNB classique.

 

 

 

Niveaux de sortie

  1. 40 MHz : signal carré, 1.4V crête à crête.

  2. 25 MHz : Signal sinusoïdal, 0.85 V crête à crête sur charge 50 ohms, environ 1,5 mW disponible..

  3. 10 MHz : signal sinusoïdal, 2,7 V crête à crête sur charge 50 ohms, environ 20 mW disponible.

 

Réalisation pratique :

Liste des composants

Quantité
Référence
Valeur
Type
Référence fabriquant
 
 
 
 
 
3
C1,C16,C18
100µF
Tantale
 
1
C14
47µF
SMD 0805
 
1
C25
10µF
Tantale
 
1
C21
10µF
SMD 0805
 
1
C4
6.8µF
 
 
3
C23,C24,C27
1µF
Céramique
 
11
C5,C6,C7,C8,C9,C13,C15,C17,C19,C20, C170
100nF
SMD 0805
 
1
C22,C61
10 nF
SMD 0805
 
1
C11
470pF
SMD 0805
 
1
C26
1nF
SMD 0805
 
2
C10,C12
270pF
SMD 0805
 
2
C110,C120
120pF
SMD 0805
 
2
C3,C2
100pF
SMD 0805
 
4
C60,C130,C140,C150
18pF
SMD 0805
 
1
D2
1N4007
 
 
1
D5
LED
 
 
1
GPS1
NEO M8N
GPS Aliexpress
GPS NANO 8M
1
JP1
LCD 4x20
LCD I2C Aliexpress
ou OLED 1,3" 4 pin
1
JP2
JACK ALIM
 
 
2
J2,J1
SMA
Coudée, ici type 12 ou 14
 
1
J10
Prise IPX
CONNECTEUR IPEX
Montage SMD
4
L10, L20, L30, L40
2,2µH
Murata
 
3
L2,L1,L4
1µH
Murata
LQH31MN1R0K03L
1
L3
60nH
Coilcraft
1008CT-600XGLB
1
Q10
BFR93 ou eq.
 
 
1
R1
470K
SMD 0805
 
2
R14,R15
47K
SMD 0805
 
1
R4
22K
SMD 0805
 
3
R2,R18,R19
10K
SMD 0805
 
1
R13
1K
SMD 0805
 
5
R7,R11,R12,R16,R110
470
SMD 0805
 
2
R5,R120
330
SMD 0805
 
1
R130
220
SMD 0805
 
1
R6
180
SMD 0805
 
3
R8,R9,R10
150
SMD 0805
 
1
R111
51
SMD 0805
 
1
U1
74HC390
74HC390 Farnell
MC74HC390ADG
1
U2
74HC86
MC74HC86ADG Onsemi
MC74HC86ADG
1
U3
74LV74
74LV74 Farnell
74LV74D,112
1
U4
74LV14/SO
74LV14 Farnell
74LV74D,112
1
U5
VCXO 40 MHz
VCXO ABRACON
ASVV-40.000MHZ-N102-T
1
U6
ARDUINO NANO
Arduino  Chinois
Modèle 5V
1
U7
78M09
Régulateur 9V
L78M09ABDT-TR
1
U8
78M05
Régulateur 5V
L78M05ABDT-TR
1
U9
3.3V/SOT23
Régulateur 3,3V
XC6206P332MRN
 
 
 
 
 

 

Circuit imprimé

 

 

Vue de dessus

 

Le module Arduino-Nano et le module GPS sont implantés sur la face « BOTTOM » d’un circuit imprimé de 100 x 82 mm.

 

Les composants de la logique sont tous en CMS et les deux modules GPS et Arduino sont montés en « pick-up » au dessous du circuit imprimé.

 

Le module d’affichage OLED se monte directement sur la face « bottom », à plat ou vertical en fonction du connecteur droit ou coudé monté sur l’afficheur. Si cette disposition ne vous arrange pas, vous pouvez toujours utiliser une nappe pour le fixer à l’endroit souhaité.

Assemblage

Dans un premier temps, souder uniquement les composants d’alimentation, les régulateurs U7, U8 et U9 ainsi que les condensateurs associés.

Mettre sous tension et vérifier toutes les alimentations 9, 5 et 3,3V. Si ces tensions sont correctes, vous pouvez souder le reste des composants CMS. Terminer par le montage du GPS et de l’Arduino-Nano.

Une fois l’Arduino programmé, le verrouillage du GPSDO est acquis au bout d’une minute environ après la mise en route. La tension de contrôle du VCXO se situe alors autour de 1,71 V.

 

 

 

 

 

 

Vous remarquerez sur le circuit imprimé double face le module VCXO complètement isolé, ceci pour éviter que des courants de masse dégradent le bruit de phase, la pastille sur laquelle est monté le VCXO étant un « cul de sac ».

 

Le GPS NEO-M8

 

Originalement développé par Ublox, ce module fait l'objet de nombreuses copies sur le marché chinois.

On trouve ce genre de GPS assemblé pour moins de 10 €.

 

Le firmware natif de ce module GPS délivre en standard une référence de fréquence à 1 Hz faisant clignoter une LED. Par la connexion série sur ce module, nous allons « reprogrammer » le récepteur GPS par l'envoi d'une commande de type « UBX-CFG-TP5 » afin qu'il délivre une fréquence de 100 KHz et non 1 Hz. C'est le rôle du petit module Arduino-Nano, équipé d'un logiciel spécifique de F1CJN qui écrira à chaque mise sous tension dans les registres internes du GPS le rapport de division nécessaire pour générer la fréquence 100 KHz de référence dont nous avons besoin pour notre comparaison. Cette option de reconfiguration systématique par un module Arduino inclus sur la carte a été choisie pour rendre le GPSDO entièrement autonome.

Il existe de nombreuses versions clonées de ce module GPS NEO M8. Ce sont très souvent des versions M7 modifiées et rebaptisées M8 sans scrupule. Elles conviennent parfaitement, mais ne pas commander des versions antérieures, M7 ou M6 car elles ne pourront pas générer le signal à 100 KHz nécessaire à notre synchronisation du VCXO.

 

Arduino-Nano, alimentation 5V

Il était possible d’implanter un processeur ATMEGA328 sur la carte GPSDO mais on trouve des modules Arduino-nano assemblés, avec ses barrettes HE10, pour moins de 3€. L’approvisionnement des composants périphériques, interface de programmation et connecteurs divers dépasserait largement ce prix là. Le choix a été vite fait.

 

A ce stade, il faut implanter le programme sur l'Arduino-Nano.

Après avoir installé sur votre PC le pack IDE Arduino , raccordez le module Arduino-Nano sur votre PC avec un cordon Mini-USB ou Micro-USB selon les modèles.

Il doit être reconnu comme un port COMx. Si ce n'est pas le cas, vous devez installer le driver Windows du périphérique CH340,

Charger le programme .INO ainsi que les librairies indiquées dans le code INO dans l'environnement IDE puis compiler et téléverser le binaire dans le module Arduino-Nano.

Vous pouvez ensuite monter le module sur la carte GPSDO.

 

Si le but de notre GPS dans le montage est de nous délivrer un signal de référence servant à synchroniser notre VCXO. Il serait dommage de nous priver des autres informations que nous donnent les trames GPS reçues, à savoir notre position géographique et donc notre QRA Locator, l’heure et le nombre de satellites utilisés pour le traitement avec un minimum de 4 et un maximum de 12 (le nombre de satellites reçus étant bien supérieur). Vous pouvez donc connecter en option un afficheur rattaché à l’Arduino qui visualisera ces données.

En l’absence de reprogrammation du GPS par le code de l’ARDUINO, la LED du GPS clignotera à 1 Hz et restera fixe à demi-luminosité indiquant la sortie du signal à 100 KHz.

F1CJN qui a écrit le programme d’origine avait prévu un afficheur LCD 4x20 lignes.

 

 

 

Il est également possible d'utiliser des afficheurs LCD 4x16 lignes, en changeant deux variables dans le code de l'Arduino (cette modification est commentée dans le code source).

 

- Fixez l'adresse I2C du LCD, lignes 69 ou 70 :

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address 0x27

ou bien

LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address 0x3F

 

- Fixez le nombre de caractères par ligne, ligne 107 ou 108 :

lcd.begin(16,4); // initialize the lcd for 16 chars 4 lines and turn on backlight

lcd.begin(20,4); // initialize the lcd for 20 chars 4 lines and turn on backlight

 

J’ai rajouté les routines pour pouvoir utiliser un afficheur OLED, beaucoup plus petit et moins cher, entre 2 et 3 € en version 1,3 pouce, I2C, 4 pins.

 

 

Vous pouvez connecter l’un ou l’autre de ces afficheurs sur le connecteur approprié implanté sur la carte. Attention, si les 4 signaux sont compatibles, ils ne sont pas dans le même ordre sur le connecteur. Un repérage sérigraphié indique sur quelle pin du connecteur vous devez raccorder votre afficheur, LCD ou OLED.

 

Après avoir réalisé de nombreux essais pour rechercher en vain une compatibilité d'usage sur différents afficheurs OLED (identiques d'aspect), il apparait que les contrôleurs internes sont différents sur des fabrications semblables ! Il a donc été nécessaire d’inclure plusieurs librairies et écrire dans le code source des séquences d’initialisation différentes, à valider selon les modèles.

Ces deux séquences sont commentées dans le fichier .INO.

 

- Fixez la librairie et l'adresse I2C de l'OLED, lignes 47 à 63 :

 

// Librairie et adresse OLED version 1

//************************************

#include "SSD1306Ascii.h"

#include "SSD1306AsciiWire.h"

#define I2C_ADDRESS 0x3C // 0x3C ou 0x78

#define RST_PIN -1

SSD1306AsciiWire oled; //

 

// Librairie et adresse OLED version 2

//************************************

#include "SSD1306Ascii.h"

#include "SSD1306AsciiAvrI2c.h"

#define I2C_ADDRESS 0x3C

#define RST_PIN -1

SSD1306AsciiAvrI2c oled;

 

- Fixez l'init en fonction du contrôleur OLED, lignes 118 à 134 :

 

// ---si problème d’affichage, commenter éventuellement ces 5 lignes et décommenter les 5 suivantes -/*...*/

 

// Init OLED version 1

//********************

#if RST_PIN >= 0

oled.begin(&SH1106_128x64, I2C_ADDRESS, RST_PIN);

#else // RST_PIN >= 0

oled.begin(&SH1106_128x64, I2C_ADDRESS);

#endif // RST_PIN >= 0

*/

 

// Init OLED version 2

//********************

#if RST_PIN >= 0

oled.begin(&Adafruit128x64, I2C_ADDRESS, RST_PIN);

#else // RST_PIN >= 0

oled.begin(&Adafruit128x64, I2C_ADDRESS);

#endif // RST_PIN >= 0

 

 

Le prototype.

 

 

 

Le module GPS est équipé d’une antenne « patch » en céramique. Les données reçues sont valides dès la réception de 5 ou 6 satellites et il est possible que l’antenne intégrée ne soit pas assez sensible si elle est mal dégagée. Dans ces conditions, on peut toujours raccorder une antenne GPS externe que l’on trouve sur le net pour moins d’un euro, équipée d’une prise SMA.

 

 

Le module GPS est équipé d’une antenne « patch » en céramique. Les données reçues sont valides dès la réception de 5 ou 6 satellites et il est possible que l’antenne intégrée ne soit pas assez sensible si elle est  mal dégagée. Dans ces conditions, on peut toujours raccorder une antenne GPS externe que l’on trouve sur le net pour moins d’un euro, équipée d’une prise SMA.

 

 

Mesures

 

 

 

Conclusion

Ce GPSDO peu couteux convient parfaitement aux utilisateurs de QO-100 pour piloter le Pluto et la tête LNB, mais aussi les autres équipements ayant besoin d’une référence à 10 MHz.

Je peux fournir facilement des circuits imprimés nus.

Un pré montage des composants CMS peut être envisageable en fonction de la quantité. Mais les Arduino, modules GPS et autres accessoires GPS seront à approvisionner individuellement.

 

Références :

Driver Adalm Pluto : https://github.com/analogdevicesinc/plutosdr-drivers-win/releases

 

Driver de communication Arduino-Nano : https://sparks.gogo.co.nz/assets/_site_/downloads/CH34x_Install_Windows_v3_4.zip

 

Environnement de développement pour Arduino-Nano : https://www.arduino.cc/en/software

 

Site F5UII : https://www.f5uii.net/transmit-datv-over-qo100-with-sdr-adalm-pluto-f5oeo-plutodvb/2/

 

GPSDO F8CJS : https://sites.google.com/site/f8cjsradioamateur/techniques/gpsdo-une-r%C3%A9f%C3%A9rence-10mhz-gps-low-cost

 

F1CJN-F8KBF : http://f6kbf.free.fr/hyper.html

 

VCXO ABRACON ASVV-40 : https://fr.farnell.com/abracon/asvv-40-000mhz-n102-t/vcxo-40mhz-7-mm-x-5mm-cmos-ttl/dp/2888647