Dernière mise à jour :
10/03/2009
Présentation
Fréquencemètre de "petites dimensions", simple et peu
coûteux à réaliser, basé sur un PIC 16F648A
cadencé à 4 MHz. Ce fréquencemètre est capable de mesurer la fréquence
d'un signal rectangulaire au format TTL, comprise entre 100 Hz et 10
MHz, avec une base de temps paramétrable à 1 ms, 5 ms, 10 ms, 50 ms,
100 ms, 500 ms ou 1 s.
Pour disposer d'une entrée un peu plus universelle, merci de vous
reporter aux page
Etage
d'entrée 001 pour fréquencemètre ou
Etage
d'entrée 002 pour fréquencemètre. Voir aussi page
fréquencemètre
005,
qui décrit un modèle de performances à peu
près équivalentes, basé sur un code logiciel
proposé par un développeur de l'équipe
MikroElektronica. Ce fréquencemètre est à n'en pas
douter, un peu plus simple à réaliser que mes deux
premiers
fréquencemètre
001 et
fréquencemètre
003...
Schéma
Le schéma qui suit montre la section Comptage et
affichage, c'est à dire le fréquencemètre en lui-même. L'absence d'un
étage d'entrée spécifique impose que le signal à mesurer soit de type
TTL, c'est à dire dont l'amplitude soit de 0V / +5V.
Comptage
La fonction de comptage consiste,
comme son nom l'indique, à compter le nombre de fois où l'entrée
recevant le signal à mesurer (ici le port RB6), passe de l'état bas à
l'état haut
(l'inverse pourrait aussi être vrai, peu importe). Pour cela il existe
plusieurs solutions :
-
soit on utilise des interruptions déclanchées par les changements
d'état sur la borne d'entrée utilisée pour recueillir le signal à
mesurer, chacune de celles-ci incrémentant un compteur;
-
soit on place le PIC en mode "comptage externe" et le compteur interne
est directement incrémenté par les impulsions du signal à mesurer.
La seconde solution a été retenue, et le logiciel du PIC exécute
donc les fonctions suivantes :
-
Analyse des entrées sur lesquelles sont raccordés les boutons poussoirs
de changement de valeur de la base de temps, afin de voir si
l'utilisateur souhaite en changer.
- Remise à zéro du compteur interne, qui travaille sur 16 bits et dont
la valeur ne peut excéder 65535.
-
Mise en route du comptage, pendant une durée égale
à la valeur de la base de temps sélectionnée
(fenêtre de comptage).
- Blocage du compteur.
Lecture de la valeur du compteur et affichage sur l'écran LCD.
Base de temps
Pourquoi
permettre à l'utilisateur la modification de la valeur de la base de
temps ? Cela est directement lié au principe de comptage adopté ici, et
est très simple à comprendre. Pour l'expliquer, prenons deux exemples.
Exemple 1 - Signal à mesurer = 8 KHz
(8000 Hz)
Supposons
que la base de temps soit de 1000 ms (une seconde), qui correspond donc
au temps pendant lequel on laisse aller les impulsions du signal à
mesurer vers le compteur. Une fréquence de 8 KHz signifie que le nombre
de transitions état bas vers état haut du signal mesuré est de 8000 par
seconde (si on compte tous les changements d'état - bas vers haut et
haut vers bas, on passe à 16000 transitions par seconde). Le compteur
est de type 16 bits, ce qui signifie qu'il est capable de compter de 0
à 65535, et qu'au delà de cette valeur max il repasse à zéro. Si on
compte le nombre de transitions bas-haut (fronts montants) que le
compteur a ingurgité, on tombe sur la valeur de 8000, il n'a pas eu le
temps de faire un "tour complet" (d'aller jusqu'à sa valeur max). En
résumé, la valeur lue correspond à la réalité.
Exemple 2 - Signal à mesurer = 80 KHz
(80000 Hz)
Supposons
maintenant que le signal à mesurer présente une fréquence dix fois plus
élevée, s'élevant ainsi à 80 KHz, et que la base de temps soit toujours
de 1000 ms. Que se passe-t-il ? Avant même que la fenêtre de comptage
se soit refermée au bout de la seconde, le compteur à déjà fait un
tours complet, puisque 80000 impulsions est un nombre supérieur à la
capacité de comptage du compteur qui pour rappel est de 65535. A la
65536 ème impulsion d'entrée, le compteur est remis à zéro et continue
tranquilement son comptage, puisque tel est son rôle. Après 14465
nouvelles impulsions, la fenêtre de comptage se referme, on lit la
valeur du compteur, qui est de 14465. Bref, on lit une fréquence de
14,465 KHz alors que la fréquence d'entrée est de 80 KHz. La mesure est
totalement fausse et on ne peut évidement pas l'accepter comme telle.
La solution ? Réduire la durée de la fenêtre de comptage (durée pendant
laquelle le compteur est actif) pour ne pas laisser le temps
au compteur de "déborder". Ainsi, en divisant par dix la durée de
comptage (en la passant à 100 ms), et pour une même fréquence du signal
à mesurer, le compteur va s'incrémenter d'une valeur dix fois moindre.
En clair, pour une fréquence de 80 KHz, le compteur va s'arrêter sur
une valeur de comptage de 8000, au bout des 100 ms de durée de
comptage. Voilà qui nous satisfait, puisque pour retrouver notre
fréquence réelle, il suffit de multiplier la valeur du compteur par
dix. Simple et efficace... mais dix fois moins précis !
Limites de la méthode employée
Voilà
donc les limites du système : plus on va réduire la
durée de la fenêtre de comptage, et plus la
précision
unitaire sera
faible. La précision en
pourcentage
quant à elle ne sera pas affectée dans le même rapport, puisqu'en
divisant par dix la durée de comptage, on perd un chiffre
significatif, et la précision relative est dix fois moindre. On
peut affirmer que l'on a une précision identique quand on dit que
l'on peut mesurer une fréquence de 10 KHz à 1 Hz près, et quand on dit
que l'on peut mesurer une fréquence de 100 KHz à 10 Hz près, car dans
les
deux cas la précision relative est de 0,01 %. Mais la
précision
réelle de la mesure diffère selon la fréquence du signal d'entrée. Si
on mesure un signal de 10 Hz avec une base de temps de 1000 ms, la
précision n'est absolument sans aucun rapport avec celle que l'on a en
mesurant un signal de 10 KHz avec cette même base de temps de 1000 ms.
- Signal mesuré 10 KHz / base de temps 1000 ms : précision 1 Hz, soit
0,01 %
- Signal mesuré 1 KHz / base de temps 1000 ms : précision 1 Hz, soit
0,1 %
- Signal mesuré 100 Hz / base de temps 1000 ms : précision 1 Hz, soit 1
%
- Signal mesuré 10 Hz / base de temps 1000 ms : précision 1 Hz, soit 10
%
- Signal mesuré 1 Hz / base de temps 1000 ms : précision 1 Hz, soit 100
%
Pour
les deux derniers cas, je vous laisse juge de la réelle utilité d'une
telle mesure... Pour avoir une précision de 0,01 % avec un signal de 10
Hz, il faudrait adopter une base de temps de... pas mal de secondes (je
vous laisse faire le calcul, qui est très simple) ! Voilà pourquoi j'ai
volontairement limité la valeur de la fréquence minimale mesurable avec
ce fréquencemètre, une précision qui dépasse 1 % est pour moi non digne
d'être prise en compte pour un appareil de ce type. On accèpte plus
facilemet 5 % de tolérance avec un fréquencemètre à aiguille, mais ce
type d'équipement devient tout de même une denrée rare et n'est
plus vraiment justifiable quand on voit ce qu'on peut faire avec
quelques euros...
Quelle base de temps employer ?
La
réponse est évidente avec un minimum de logique, si on a compris ce qui
a été dit juste avant : si le compteur déborde (dépasse sa capacité de
comptage max de 65535), c'est que la durée du comptage est trop longue
et doit donc être réduite. En résumé, si la fréquence du signal
d'entrée dépasse 65 KHz (j'ai arrondi), la base de temps de 1000 ms ne
convient plus et on doit passer à la valeur inférieure, qui est de 500
ms. Cette dernière permet un comptage juste tant que la fréquence du
signal d'entrée ne dépasse pas 130 KHz, valeur à partir de laquelle on
doit à nouveau réduire la durée de la base de temps, par exemple à 100
ms, valeur qui permet de repousser la fréquence mesurable
à 650 KHz. Etc...
Les valeurs de base de temps que l'on peut sélectionner avec ce
fréquencemètre sont les suivantes :
- 1000 ms / Freq max mesurable = 65 kHz
- 500 ms / Freq max mesurable = 130 kHz
- 100 ms / Freq max mesurable = 650 kHz
- 50 ms / Freq max mesurable = 1,3 MHz
- 10 ms / Freq max mesurable = 6,5 MHz
- 5 ms / Freq max mesurable = 13 MHz
- 1 ms / Freq max mesurable = 65 MHz
En
pratique, cette dernière valeur de base de temps ne me donne pas
satisfaction, c'est pourquoi je donne une valeur de fréquence mesurable
qui s'arrête à 10 MHz.
A retenir
: pour un maximum de précision, la base de temps doit être la plus
importante possible, sans pour autant laisser le compteur déborder.
Affichage
L'affichage est confié à un afficheur LCD de 2 lignes de 16
caractères, permettant de connaitre à tout instant la valeur de la base
de temps sélectionnée et la valeur de la fréquence mesurée.
Code binaire et code source
Le
code binaire compilé (*.hex) et le code source de ce fréquencemètre
sont disponibles dans l'archive suivante.
Fréquencemètre
004 - 16F648A - 10/03/2009
Si vous souhaitez recevoir par la poste un PIC
préprogrammé et prêt à utiliser, merci de
consulter la page
PIC - Sources.
Remarque :
Pourquoi un 16F648A et non un 16F628A ? Tout simplement parce que mon
code, peu optimisé, produit un fichier hex trop volumineux pour
le 16F628A, et j'ai donc du utiliser la version avec un peu plus de
mémoire interne. Tout simplement ! Cela signifie aussi que vous
ne pouvez pas le compiler avec la version démo de MikroPascal,
dont la taille de code est limitée à 2 KO.
Circuit imprimé
Non réalisé.
Historique
10/03/2009- Première mise à disposition.