Du quartz nu au pseudo-TCXO#

Pourquoi#

Le Raspberry Pi 5 n’embarque aucun oscillateur de qualité métrologique : un quartz nu (XO) cadence le SoC, sans le moindre circuit de compensation en température. Les mesures de ce serveur le confirment : environ 3,8 ppm d’écart de fréquence entre 38,5 et 57,5 °C, avec des pentes locales de 0,06 à 0,2 ppm/°C selon la zone. C’est un ordre de grandeur au-delà de ce que tolérerait la spécification d’un TCXO, et c’est cohérent avec la courbe en S caractéristique d’un quartz à coupe AT (une inflexion a d’ailleurs été observée vers 38,5-39 °C).

Ce chapitre récapitule comment les étapes de ce guide, prises ensemble, reconstruisent en logiciel ce que le « TC » d’un TCXO fait en matériel, puis situe le résultat dans la hiérarchie des oscillateurs, coût compris.

Comment : les cinq étapes du pseudo-TCXO#

Rien ici n’est nouveau : chaque étape renvoie à un chapitre déjà appliqué. C’est leur combinaison qui constitue le pseudo-TCXO.

  1. Mesurer avant d’agir. La journalisation log tracking measurements tempcomp (chapitre Chrony) fournit des couples température/fréquence horodatés : la matière première de tout le reste. Sans plusieurs jours de données, aucune des étapes suivantes ne peut être calibrée honnêtement.
  2. Supprimer le cycling du ventilateur. Le profil PWM à 4 paliers avec hystérésis larges, actif en continu dès 40 °C (chapitre Firmware), fige le point de fonctionnement thermique au lieu de laisser la température osciller au gré d’un thermostat marche/arrêt.
  3. Isoler le quartz. La mousse polyuréthane entre le quartz et le boîtier lisse les transitoires rapides. Contrepartie mesurée : elle retarde aussi la réponse du quartz par rapport à la sonde du SoC, ce qui rend trompeuses les mesures prises pendant un choc thermique (chapitre Chrony, section tempcomp).
  4. Tenir une consigne (optionnel). La charge CPU contrôlée ntpheat (chapitre Stabilisation thermique) vise une température fixe au prix d’environ 1 W permanent ; ce guide la laisse désactivée par défaut.
  5. Compenser le résidu. La directive tempcomp et sa table de points, reconstruite quotidiennement par tempcomp-refit (chapitre Chrony), retranchent la part prévisible de la dérive avant même que la boucle de discipline n’ait à la corriger.

Résultat mesuré en production : Residual freq de l’ordre de 0,01 à 0,02 ppm (chapitre Vérification chrony) et RMS offset passé de ~1,7 µs à ~0,2-0,4 µs sur les premiers relevés (des instantanés, à confirmer dans la durée).

Courbe de compensation thermique déployée par tempcomp-refit, correction en ppm selon la température du SoC.
Table tempcomp réellement déployée (35 points). La correction décroît de façon monotone mais pas parfaitement lisse (le bruit de mesure ponctue la pente, cf. « n'est pas une parabole propre »), passe par zéro vers 55,5 °C, et une marge plate est ajoutée aux deux bornes au-delà de la plage effectivement mesurée (38,5 à 58,5 °C) pour empêcher chrony d'extrapoler sans plafond au-delà du dernier point fiable.

La hiérarchie des oscillateurs#

FamillePrincipeTenue en température (ordre de grandeur)Coût indicatifSans modification matérielle ?
XO (celui du Pi 5)quartz nuquelques ppm à quelques dizaines de ppm sur 0-70 °C (mesuré ici : ~3,8 ppm sur 19 °C)< 1 €déjà en place
TCXOquartz + circuit de compensation intégré±0,1 à ±2,5 ppm sur -30/+85 °C2 à 20 €non
OCXOquartz maintenu dans un four thermostaté±0,001 à ±0,01 ppm50 à 300 €, plus 1 à 3 W de chauffe permanentenon
CSAChorloge atomique miniaturisée (césium)~±0,0005 ppm4 000 à 6 000 €, ~120 mWnon
Rubidium (RbXO)référence atomique Rb disciplinant un quartz~±0,0001 ppm500 à 2 000 €, ~10 Wnon
**Pseudo-TCXO **XO + ventilation à paliers + isolation + tempcomp~0,01 à 0,02 ppm de résiduel après compensation (Residual freq, mesuré à +0,016 ppm en production)~0 € de matériel en plus (le ventilateur sert déjà)oui

Deux lectures de ce tableau :

  • En stabilité brute, le pseudo-TCXO ne joue pas dans la cour des OCXO et des références atomiques, et n’y prétend pas. Sa borne réelle est ailleurs : le PPS GNSS ramène l’horloge sur l’heure vraie en permanence, l’oscillateur local n’a besoin d’être bon qu’entre deux corrections, soit quelques secondes.
  • En coût marginal, il est imbattable : tous les composants existaient déjà (le ventilateur est nécessaire de toute façon, la sonde thermique du SoC est de série), il ne reste à investir que du temps de mise au point, réutilisable à l’identique sur n’importe quel autre Pi.

Un meilleur oscillateur ne remplacerait pas le GNSS : il ne connaît pas l’heure, seulement la cadence. Son vrai apport serait le holdover, la capacité à rester juste pendant une panne GNSS prolongée. Avec le pseudo-TCXO, le mode orphelin (chapitre Chrony) dégrade honnêtement le stratum ; avec un rubidium, le serveur tiendrait des jours en dérivant de quelques microsecondes. C’est ce critère, et lui seul sur ce projet, qui justifierait de monter en gamme.

Erreurs à éviter#

  • Comparer des chiffres de datasheet à des mesures de terrain. Le tableau mélange par nécessité des spécifications constructeur (TCXO, OCXO, CSAC) et des mesures réelles (XO du Pi, pseudo-TCXO). Une spécification est une enveloppe garantie au pire cas, une mesure est un point dans des conditions données : les ordres de grandeur sont valides, les comparaisons fines n’auraient pas de sens.
  • Oublier que la sonde mesure le SoC, pas le quartz. Toute la compensation repose sur /sys/class/thermal/thermal_zone0, à distance du cristal et derrière la mousse. En régime stable, l’écart est un simple décalage que la table absorbe ; pendant un transitoire rapide, les deux températures divergent et les mesures deviennent trompeuses.
  • Croire le travail terminé. Un quartz vieillit (dérive lente, de l’ordre du ppm sur la première année, puis décroissante) : c’est précisément pourquoi la table tempcomp est recalculée en continu, et relue à chaque redémarrage, plutôt que figée à la première calibration.

Vérifier#

# Le résidu après compensation : Residual freq doit rester proche de 0
chronyc -h /run/chrony/chronyd.sock tracking | grep -E "Residual|Skew|RMS"

# La compensation appliquée en continu (colonne Comp., non nulle)
tail -5 /var/log/chrony/tempcomp.log

📚 Pour aller plus loin

  • John R. Vig, Quartz Crystal Resonators and Oscillators, A Tutorial : la référence libre et encyclopédique sur les courbes fréquence/température des coupes de quartz (dont la cubique de la coupe AT), le vieillissement et les familles d’oscillateurs.
  • Chapitres liés : Firmware (profil ventilateur), Stabilisation thermique (ntpheat), Chrony (tempcomp et sa table dynamique).