lundi 25 avril 2011

Fréquencemètre basé sue le pic 16F648A





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.

Le 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. ICI

                                                                                                                jouini anis

0 commentaires:

Enregistrer un commentaire