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
-
40 MHz : signal carré, 1.4V crête à crête.
-
25 MHz : Signal sinusoïdal, 0.85 V crête à crête sur charge 50 ohms, environ 1,5 mW disponible..
-
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