Une fois n’est pas coutume, cette publication aborde surtout des notions théoriques, pour expliquer la performance d’un microcontrôleur pour mesurer la fréquence d’un signal directement ou réciproquement.
- La mesure directe de la fréquence signifie que nous comptons les fronts d’onde qui se présentent pendant une durée d’une seconde. Ceci nous donne la mesure directe du nombre de répétitions du signal pendant une seconde, exprimée en fréquence (notée f).
- La mesure réciproque de la fréquence signifie que l’on mesure la durée d’une période du signal (notée p), exprimée en secondes.
L’objectif de cet exposé est de présenter les limites de résolution et d’exactitude de ces méthodes et de présenter la manière de mesurer des fréquences sur une très large bande. Vous voudrez peut-être passer la section purement théorique et accéder directement à l’expérience théorique.
Théorie de base de la fréquence par rapport à la période
Techniques de calcul en utilisant un microcontrôleur
Mesurer la fréquence par mesure directe
Mesurer la fréquence par mesure réciproque
Limites
1) Fréquence maximale
2) Exactitude
3) Résolution
Expérience théorique
Hypothèses opérationnelles
1) Résolution et domaine de fonctionnement pour les mesures directes
2) Résolution et domaine de fonctionnement pour les mesures réciproques
3) Résolution et domaine de fonctionnement par mesures directes + réciproques
4) Prise en compte des limites de fréquence maximale et d’exactitude des mesures
5) Etendre le domaine de fonctionnement
6) Propositions de nombre de chiffres affichés
Application concrète
Théorie de base de la fréquence par rapport à la période

En théorie on peut calculer la fréquence à partir de la période (durée d’un cycle) et réciproquement la période à partir de la fréquence avec la fonction:
f = 1 / p dont la fonction réciproque est p = 1 / f
Par exemple un signal de 10 Hz à une période de p = 1/10 = 0.1 seconde.
Techniques de calcul en utilisant un microcontrôleur
Le premier problème lorsque l’on utilise un microcontrôleur c’est que nous n’avons pas accès à une référence précise du temps. Mais nous disposons du nombre de coups de l’horloge qui cadence le microcontrôleur qui ont lieu pendant que l’on mesure le signal.
Mesurer la fréquence par mesure directe
Puisque nous savons que notre microcontrôleur est cadencé, par exemple, à 10 MHz, lorsque nous avons compté 10 000 000 coups d’horloge, nous savons qu’une durée d’approximativement 1 seconde est passée. Donc il nous suffit de:
- commencer à compter les coups d’horloge du mcu (microcontrôleur) dans un compteur (disons le “compteur 1”)
- compter tous les fronts d’onde du signal que nous voyons sur une broche (dans le “compteur 2”)
- lorsque le compteur 1 atteint 10 000 000, on arrête de compter les fronts dans le compteur 2.
Le nombre accumulé dans le compteur 2 nous donne directement la fréquence du signal. Par exemple compteur 2 = 1000 correspond à une fréquence de 1 KHz et une période de 1/ 1000 = 0.001 seconde.
Mesurer la fréquence par mesure réciproque
Nous pouvons approximer la période du signal en secondes par la fonction
p = nombre de coups d’horloge (qui ont lieu pendant une période du signal) / fréquence de l’horloge
Il nous suffit de:
- commencer à compter dans un compteur les coups d’horloge lorsque l’on voit un front du signal
- arrêter de compter les coups d’horloge dès que l’on voit un autre front du signal
Par exemple si nous comptons 1000 coups d’horloge entre deux fronts de l’onde, c’est à dire au cours d’une période du signal, on mesure la période p = 1000 / 10 000 000 = 0.0001 seconde.
Et l’on en déduit la fréquence f = 1/0.0001 = 10 KHz
Limites
Mais ces techniques ont des limites:
1) Fréquence maximale
Lorsque l’on fait la mesure directe il n’est pas possible de compter les fréquences supérieures à la moitié de la fréquence d’horloge du microcontrôleur. Ceci est dû au Théorème de Nyquist. (Voir l’explication complète mais fort complexe sur Wikipedia).
Dans notre exemple, la fréquence maximale qui peut être mesurée est de 10/2 = 5 MHz.
Mais, on peut “tricher” un peu en utilisant un diviseur. C’est un composant externe au microcontrôleur qui va précompter le signal. Il émet un front à chaque fois qu’il voit un certain nombre binaire de fronts d’onde sur son entrée. Dans notre exemple si nous ajoutons un diviseur 16:1 nous pouvons alors compter jusqu’à 16 x 5 = 80 MHz
Les circuits intégrés 74HC93, 74VHC4040 sont des modèles communs de diviseurs (il y en a beaucoup d’autres).
2) Exactitude
Nous avons expliqué que notre connaissance du temps dépend de la fréquence d’horloge du microcontrôleur. Malheureusement cette horloge n’est pas parfaite. C’est un oscillateur qui vibre à une fréquence proche de la fréquence désirée (10 MHz dans notre exemple). Mais son erreur d’exactitude engendre autant d’erreur dans nos calculs. Cette erreur peut s’exprimer en ppm. Si l’erreur de l’horloge est de 1 part par million, cela signifie que notre estimation d’une seconde peut être fausse au maximum de 1/1000000 de seconde. Tous les calculs seront faux de 1 ppm. Ceci créé une incertitude sur le 7ème chiffre de nos calculs.

TCXO en boitier CMS
Cette erreur d’exactitude d’environ 1 ppm (sur la valeur absolue de la fréquence + autant à cause de la variation en fonction de la température et en fonction du vieillissement du composant) est ce que l’on peut obtenir de mieux en utilisant composant TCXO de dernière génération, petit et économique. C’était plutôt environ 50 ppm il y a quelques années. Pour atteindre une meilleure exactitude il faudrait utiliser un composant, voir un circuit complet, gros et coûteux.
Mais nous devons aussi considérer le fonctionnement du mcu (temps de propagation des signaux en interne et gestion de ces signaux) et le fait que ces calculs s’appuient sur un code informatique qui s’exécute dans le mcu (avec des délais d’exécution et éventuellement des mises en files indiennes lorsque l’on traite des interruptions). En conséquence un oscillateur avec une erreur de 1 ppm est un bon choix et nous aurions beaucoup de mal à obtenir une meilleure exactitude globale avec ces techniques simples de calcul.
Lorsque l’on accumule les diverses sources d’erreur le total est forcément plus grand que 1 ppm et non constant sur toute la bande de fréquences à mesurer. Mais nous n’entrons pas dans les détails for compliqués et mal définis.
Nous considérons donc que l’erreur d’exactitude globale de notre montage (fréquence + variation en température + vieillissement + erreurs de calculs) est inférieure à 10 ppm (soit 6 chiffres de résolution de l’affichage).
Mais, pour compenser au final une partie de cette erreur, le programme peut inclure un procédé d’étalonnage. Ceci peut nous permettre de réduire l’erreur totale à moins de 1 ppm (7 chiffres de résolution d’affichage) lorsque l’appareil est calibré.
3) Résolution
Nous avons un autre problème fondamental. Puisque nous mesurons le temps en nombre de coups d’horloge, nous utilisons des données entières. Nous ne pouvons mesurer plus finement qu’un coup d’horloge. Ceci engendre une terrible limitation à notre approximation de la fréquence.
- Lorsque l’on mesure la fréquence directement, la résolution correspond au comptage d’un front du signal. L’équation qui définit la résolution en terme de nombre de chiffres significatifs affichés est Res = log(freq) +1
- Par exemple si l’on mesure un signal de 10 KHz, on voit apparaitre l’erreur de résolution sur le 5ème chiffre seulement!
- Lorsque l’on mesure la fréquence de manière réciproque, la résolution correspond au comptage d’un coup d’horloge sur le nombre de coups d’horloge du mcu pendant une période du signal. Ceci est exprimé par l’équation Res = log( f_horloge / f_signal ) +1
- Par exemple si l’on mesure un signal de 10 KHz l’erreur de résolution apparait sur le 4ème chiffre seulement!
Ceci nous montre que la mesure directe de fréquence à une résolution acceptable uniquement pour les hautes fréquences alors que la mesure réciproque de fréquence à une résolution acceptable uniquement pour les basses fréquences. Donc, si nous voulons créer un compteur qui couvre de quelques hertz à plusieurs mégahertz, il faut:
- Mesurer la fréquence par mesure réciproque pour les basses fréquences
- Mesurer la fréquence par mesure directe pour les hautes fréquences
Expérience théorique
Hypothèses opérationnelles
Ayant vu les aspects théoriques nous savons que notre méthode de mesure est limitée. Nous devons prendre en compte ces paramètres:
- Nous utiliserons un microcontrôleur cadencé par un TCXO de 16 MHz avec une erreur d’exactitude de 1 ppm, et d’autres sources d’erreur pour un total de 10 ppm.
- Ceci nous donne une limite théorique de la fréquence maximale mesurable par notre mcu à 8 MHz (Théorème de Nyquist). Mais nous allons utiliser un diviseur externe 16:1 pour augmenter cette limite à 16*8 = 128 MHz.
- Nous voudrions avoir la meilleure résolution possible et en tous les cas de au moins
- 4 chiffres sur les basses fréquences (sous 10 KHz)
- 5 chiffres sur les hautes fréquences (au-dessus de 10 KHz)
1) Résolution et domaine de fonctionnement pour les mesures directes
Comme nous l’avons vu la résolution exprimée en chiffres significatifs à l’affichage Res = log(f_mcu_clock/f) + 1 est dessinée sur ce graphique

Résolution et domaine de fonctionnement pour les mesures directes
La zone verte est le domaine de fonctionnement en basse fréquences. C’est la surface entre le minimum de 4 chiffres de résolution que nous avons fixé et la résolution théorique maximale. Lorsque l’on mesure les fréquences entre 1 Hz et 10 KHz nous sommes certains d’obtenir au moins la résolution que nous voulons.
- On peut obtenir jusqu’à (un peu plus de) 8 chiffres de résolution lorsque l’on mesure un signal de 1 Hz avec notre microcontrôleur cadencé à 16 MHz.
- Mais l’on voit que cette résolution tomberait à seulement (un peu plus de) 1 chiffre à 10 MHz. Donc ce n’est pas adapté à la mesure des hautes fréquences.
2) Résolution et domaine de fonctionnement pour les mesures réciproques
Comme nous l’avons vu la résolution exprimée en chiffres significatifs Res = log(freq) +1 est dessinée sur ce graphique

Résolution et domaine de fonctionnement pour les mesures réciproques
La zone verte est le domaine de fonctionnement en hautes fréquences. C’est la surface entre le minimum de 4 ou 5 chiffres de résolution que nous avons voulu et la résolution maximale théorique. Lorsque l’on mesure les fréquences entre 1 KHz et la fréquence maximale nous sommes certains d’obtenir au moins la résolution voulue.
- En pure théorie nous pouvons aller jusqu’à 10 chiffres de résolution lorsque l’on mesure un signal de 1 GHz. Mais notre microcontrôleur cadencé à 16 MHz ne le permettra pas (voir la suite).
- Mais nous voyons aussi que la résolution tomberait à seulement 1 chiffre à 1 Hz. Donc ce n’est pas approprié pour la mesure des basses fréquences.
3) Résolution et domaine de fonctionnement par mesure directe + réciproque

Résolution et domaine de fonctionnement par mesure directe + réciproque
Lorsque l’on utilise les deux méthodes on peut étendre le domaine d’opération depuis les très basses fréquences jusqu’aux très hautes fréquences. Nous avons:
- Jusqu’à 8 chiffres de résolution à 1 Hz.
- Jusqu’à 10 chiffres de résolution à 1 GHz.
- Toujours un minimum garanti de 4 à 5 chiffres comme nous l’avons défini.
4) Prise en compte des limites de fréquence maximale et d’exactitude des mesures

Résolution et domaine de fonctionnement par mesure directe plus réciproque en considérant les limites de fréquence maximale et d’exactitude
Ajoutons maintenant les contraintes que nous avons expliquées concernant la fréquence maximale mesurable et l’erreur d’exactitude des mesures. Le domaine de fonctionnement s’en trouve nettement affecté:
- La ligne jaune est la limite d’exactitude. On l’estime constante sur toute la bande de fréquences. Il y aura toujours une certaine imprécision à partir du 6ème chiffre affiché. Donc on élimine du domaine tout ce qui est au-dessus de 6 chiffres.
- La ligne violette est la limite de la fréquence maximale mesurable par notre microcontrôleur.
Nous voyons une nette réduction du domaine de fonctionnement. Mais nous maintenons nos objectifs minimaux de résolution. Donc nous pouvons fabriquer un fréquencemètre fonctionnant selon nos spécifications sur la bande de 1 Hz à 8 MHz.
5) Etendre le domaine de fonctionnement
Nous avons expliqué qu’il est possible de repousser la limite de la fréquence maximale mesurable en utilisant un diviseur. Et nous pouvons aussi repousser la limite de l’inexactitude en étalonnant l’appareil. Voici ce que l’on peut obtenir

Résolution et domaine de fonctionnement par mesures directes et réciproques en prenant en comptes les limites de fréquence et d’exactitude mais avec un diviseur et un étalonnage
Le fait d’utiliser un diviseur 16:1 permet d’augmenter la limite maximale de fréquence et donc d’étendre le domaine de fonctionnement de 1 Hz à 128 MHz.
On utilise le diviseur en deux temps 4:1 à partir de 5 MHz et 16:1 à partir de 20 MHz. Donc, bien que l’utilisation du diviseur réduise la résolution, celle-ci (ligne bleue foncée) reste au-dessus de la limite due à l’erreur d’exactitude (jaune) et préserve le domaine de fonctionnement.
Après étalonnage nous espérons réduire l’erreur d’exactitude de 10 ppm à moins de 1 ppm au mieux, ce qui nous donne un peu de marge (zone vert amande) dans le domaine de fonctionnement.
Dans cette publication nous avons montré que les performances de mesure directe et réciproque d’une fréquence par un microcontrôleur dépend beaucoup de la fréquence de l’horloge du microcontrôleur et de sa précision. Mais nous avons aussi montré des techniques pour améliorer les performances.
6) Propositions de nombre de chiffres affichés
Maintenant que nous connaissons le profil de la résolution, nous pouvons choisir d’afficher un nombre de chiffres significatifs. Nous allons donc définir la résolution de l’affichage.
Si nous préférons rester certain de n’afficher aucun chiffre approximatif, nous pouvons utiliser le profil suivant:

Propositions de nombre de chiffres affichés, instrument non étalonné
Ce profil nous garantit que nous n’afficherons pas de valeurs biaisées sur toute la bande de fréquence, bien que l’appareil ne soit pas calibré. Nous n’utilisons pas toutes les possibilités de haute résolution en basse fréquence car un utilisateur non averti pourrait trouver étrange de voir une baisse du nombre de chiffres dans les moyennes fréquences
Mais si nous sommes prêt à prendre le risque d’afficher des valeurs légèrement biaisées à certaines fréquences (entre 5 KHz and 10 KHz), et si l’instrument est calibré, nous pourrions aussi utiliser un profil comme celui-ci:

Propositions de nombre de chiffres affichés, instrument étalonné en exploitant la haute résolution en basse fréquences
Ce profil nous donne la résolution maximale possible sur toute la bande de fréquences.
Application concrète
Ces 4 techniques (mesure directe, mesure réciproque, diviseur et étalonnage) sont utilisées dans le Fréquencemètre compatible Arduino.