Étiquette : firmware

Notre banc d'essai et de calibrage : le GPSDO BH3SAP (boîtier noir) relié au Raspberry Pi (boîtier officiel) et à l'Icom IC-9700 pour un calage ultra-précis à 1296.885 MHz

Calibrer parfaitement l’IC-9700 sur 1296 MHz avec un GPSDO : Modification du firmware et menu caché

Il y a quelque temps, je vous présentais sur le blog mon installation GPSDO pour stabiliser nos émetteurs-récepteurs. Si vous l’utilisez avec un Icom IC-9700, vous avez probablement remarqué un phénomène agaçant sur la bande des 23 cm (1296 MHz) : même avec un excellent signal de référence externe 10 MHz, l’architecture interne du synthétiseur de l’Icom laisse souvent un léger décalage résiduel, parfois de l’ordre du kilohertz.

Voici la méthode complète pour corriger définitivement ce problème. Elle se déroule en deux étapes : l’alignement interne du poste, puis la modification chirurgicale du firmware de notre GPSDO (à base de STM32) directement depuis un Raspberry Pi.

1. Le menu de service de l’IC-9700 (Alignement REF)

Avant de toucher au GPSDO, il faut aligner la référence interne du transceiver. Icom a caché ce réglage dans un menu d’alignement de service.

  • Le shunt matériel : Prenez une fiche jack 3.5 mm stéréo et réalisez un court-circuit (shunt) entre la pointe (Tip) et la masse (Sleeve). Insérez cette fiche dans la prise REMOTE à l’arrière du poste éteint.
  • L’allumage : Maintenez simultanément les touches MENU et FUNCTION enfoncées, puis appuyez sur le bouton POWER.
  • Le poste démarre en mode d’alignement. Vous pouvez maintenant ajuster le réglage « REF » pour vous approcher au maximum de la fréquence exacte.

Cependant, sur 1296 MHz, la résolution de ce réglage matériel interne n’est parfois pas suffisante pour obtenir un centrage absolu. C’est là que la modification logicielle du GPSDO entre en jeu pour le réglage ultra-fin.

2. Le secret de la synchronisation : Modifier le code source du GPSDO

Pour compenser l’erreur résiduelle de l’IC-9700, nous allons volontairement décaler la fréquence du GPSDO de quelques fractions de Hertz pour que le poste lise exactement la bonne fréquence finale.

Le cœur de l’asservissement PID de notre GPSDO open-source se trouve dans le fichier src/frequency.c. Le microcontrôleur STM32 tourne à 70 MHz (le 10 MHz de l’oscillateur multiplié par 7). La boucle de régulation cherche par défaut à verrouiller exactement 70 000 000 de cycles par impulsion 1PPS reçue du satellite.

Sachant qu’une modification d’1 cycle dans le code du STM32 déplace la fréquence d’environ 18,5 Hz sur la bande 1296 MHz, on peut calculer un offset sur mesure.

Ouvrez le fichier src/frequency.c et cherchez la ligne 49 :

C

// Ligne d'origine :
int32_t error = frequency - 70000000;

Si votre IC-9700 affiche une fréquence trop haute et que vous voulez la faire baisser (par exemple, pour annuler un décalage de 70 Hz, soit environ 4 cycles), il faut accélérer très légèrement le 10 MHz du GPSDO en augmentant la consigne :

C

// Nouvelle consigne avec l'offset compensatoire :
int32_t error = frequency - 69999950;

À l’inverse, si vous devez faire monter la fréquence lue sur le poste, diminuez cette valeur (ex: 70000054).

3. Compilation et flashage depuis le Raspberry Pi

Tout le traitement se fait depuis un Raspberry Pi relié en SWD (via ses broches GPIO) au STM32 du GPSDO. Une fois le fichier frequency.c sauvegardé avec votre nouvel offset, placez-vous dans votre répertoire de compilation (le dossier build) et lancez la recompilation :

Bash

make

Une fois le firmware gpsdo.elf généré, la commande magique pour flasher le STM32 en utilisant OpenOCD et les GPIO du Pi est la suivante :

Bash

sudo openocd -f interface/raspberrypi-swd.cfg -c "transport select swd" -f target/stm32f1x.cfg -c "init" -c "halt" -c "flash write_image erase gpsdo.elf" -c "reset run" -c "exit"

Laissez ensuite l’OCXO de votre GPSDO chauffer et stabiliser sa boucle thermique pendant quelques minutes. Le signal sur le waterfall de l’IC-9700 va glisser doucement pour venir se centrer avec une précision chirurgicale sur le 1296 MHz.

4. Le matériel utilisé pour cette expérimentation

Pour ceux qui souhaitent reproduire cette configuration ou s’en inspirer, voici le matériel qui compose l’installation technique détaillée dans cet article :

  • Le Transceiver : Un Icom IC-9700, un poste fantastique mais dont l’architecture de référence demande parfois ce genre de petites astuces sur les bandes hautes.
  • Le GPSDO : Un modèle open-source architecturé autour du BH3SAP, embarquant un microcontrôleur STM32F103 (le fameux « Blue Pill ») pour piloter l’OCXO et générer le 10 MHz.
  • Le Cerveau et Programmateur : Un Raspberry Pi. Il sert à la fois d’environnement de compilation (CMake / Make) et de programmateur matériel. Ses broches GPIO, couplées au logiciel OpenOCD, remplacent avantageusement une sonde ST-Link pour flasher le STM32 en direct via le protocole SWD.
  • La Mesure (Optionnelle mais recommandée) : Un fréquencemètre Oritel SA FA 125, utilisé en amont pour valider la stabilité absolue de la référence 10 MHz sortant du GPSDO.
  • L’Outil maison : Une simple fiche jack stéréo 3.5 mm « sacrifiée » avec un shunt soudé entre la pointe et la masse, indispensable pour basculer le 9700 en mode service.

73 de F4IAA !