Electronique > Réalisations > Affichage / Mesures > Fréquencemètre 005

Dernière mise à jour : 14/05/2017

Présentation

Fréquencemètre de "moyennes dimensions", simple et peu coûteux à réaliser. Bien que basé sur un PIC 16F628A, 18F2420 ou 18F2520 et cadencé à 4 MHz, 8 MHz ou 16 MHz, le code utilisé est totalement différent de celui mis en oeuvre dans mon fréquencemètre 004, et la base de temps est ici figée à 100 ms pour toute la gamme de mesure, qui s'étend de 10 kHz à 20 MHz (en-dessous de 10 kHz c'est instable, et à 27 MHz ça fonctionne encore bien). Trois versions sont proposées, une seule fonctionnelle :
- Schéma 005 : version avec PIC 16F628A - simulation OK mais ne fonctionne pas bien en pratique.
- Schéma 005b : version avec PIC 18F2420 - simulation OK mais pas testé pratiquement.
- Schéma 005c : version avec PIC 18F2520 - simulation OK et testé OK.
L'étage d'entrée est identique pour les trois versions et fonctionne bien, testé pratiquement avec succès par au moins deux personnes (en plus de moi).

Avertissements

Avant d'aller plus loin...

Remerciements

Le code logiciel utilisé pour ce fréquencemètre est basé sur une librairie mise gracieusement à disposition par yo2lio (pseudo d'un des membres de l'équipe de développement MikroElektronica), que je remercie chaleureusement.
The PIC code used here for the frequency measurement is based on a library written by yo2lio (from MikroElektronica team), that I thanks a lot for this works and for allowing me to use it for this electronic application.
Annonce sur forum MikroElektronica
Librairie "Frequencemetre" de yo2lio que j'ai utilisée

Schéma 005 - Avec 16F628A

L'étage d'entrée est la partie qui contient le plus de composants, les fonctions de comptage et d'affichage étant assurées par un petit PIC associé à un afficheur LCD de 2 lignes de 16 caractères.

frequencemetre_005

Etage d'entrée
Voir descriptif à la page Etage d'entrée 001 pour fréquencemètre.

Comptage et affichage
Je vais être franc : comme le code logiciel utilisé ici n'est pas de moi et qu'il contient de l'assembleur, je ne maîtrise rien du tout. Bonne excuse pour laisser traîner ce projet qui ne fonctionne pas bien... du côté où je ne comprend rien. Voir les versions suivantes, plus prometteuses.

Schéma 005b - Avec 18F2420

Même chose mais cette fois avec un microcontrôleur de la famille 18F, j'ai là encore utilisé la librairie de yo2lio dans sa version pour PIC18 (fichier frecv_lib_P18 disponible sur son site).

Simulation effectuée avec succès mais circuit pas testé en grandeur nature. Voir circuit 005c avec 18F2520, qui lui a été testé.


frequencemetre_005b

L'étage d'entrée vu avant convient tout autant pour cette version 005b.

Schéma 005c - Avec PIC18F2520

Eh bien voilà, il n'aura fallu qu'un peu plus de deux ans pour ressortir ce montage de sa boîte. Et encore, si on ne m'avait pas relancé sur le sujet, il y serait sans doute encore. Bref, circuit testé en vrai et ça donne enfin un truc à peu près potable, voir résultats affichés un peu plus loin, au paragraphe Prototypes.

frequencemetre_005c

Aucun changement lourd dans le logiciel, j'ai simplement changé le type de PIC pour passer du 18F2420 au 18F2520.

Prototypes

Deux prototypes réalisés sur plaque d'expérimentation sans soudure, avec liaison directe vers la platine EasyPic4 (pour tests avec PIC 16F628A) et EasyPic7 (pour tests avec 18F2520).

Mon prototype circuit 005 (avec 16F628A)
Comme dit en début d'article, montage pas vraiment fonctionnel, surtout sur les fréquences basses (affichage très instable).

frequencemetre_005_proto_001a frequencemetre_005_proto_001bfrequencemetre_005_proto_001c

Lors de mes secondes manips sur ce projet (30/08/2009), j'en ai profité pour essayer un afficheur LCD 4 x 20 charactères, récupéré sur une vieille machine.

frequencemetre_005_proto_001d frequencemetre_005_proto_001e

La valeur "19000" sur la deuxième photo est codée en dur, ce n'est pas une valeur comptée. Mais peu importe, le but était de vérifier le bon fonctionnement de cet afficheur, dont je n'ai trouvé aucun document technique, faute de référence précise (je suis parti de l'hypothèse que le brochage était standard et identique à mon afficheur 2 x 16 caractères).

Mon prototype circuit 005c (avec 18F2520)
Circuit fonctionnel, testé avec ma platine EasyPic7 et une petite plaque sans soudure pour faire l'interface avec l'afficheur LCD et ajouter un oscillateur à quartz intégré (pour tests), les deux platines sont reliées par des connecteurs 10 points et câbles en nappe.

frequencemetre_005c_proto_001a frequencemetre_005c_proto_001b

Quartz de 4 MHz, 8 MHz et 16,384 MHz (et non 16,000 MHz, voir remarque plus loin) pour les diverses vitesses d'horloge prévues.

frequencemetre_005c_proto_001c frequencemetre_005c_proto_001d frequencemetre_005c_proto_001e

Remarque importante concernant les tests avec horloge PIC à 16 MHz : comme je n'ai pas remis la main sur mon quartz de 16 MHz, j'ai fait mes premiers tests "16 MHz" avec un oscillateur à quartz externe de 16,000 MHz, dont la sortie était simplement reliée à la broche RA7/CLKI du PIC, la broche RA6/CLKO étant laissée en l'air, configuration horloge en mode Quartz HS (High Speed et non Hors Service).

frequencemetre_005c_proto_001f

Ca marchait bien par moment et pas à d'autres, l'écran LCD affichait parfois de drôles de choses et pas seulement pour l'affichage de la valeur de fréquence (sans doute une instabilité liée à la longueur des fils, je n'ai pas investigué plus avant). Du coup, je me suis rabattu sur l'usage d'un quartz 16,384 MHz disposé directement sur la platine de développement et là tout fonctionnait bien, mais évidement avec un décalage de la valeur affichée puisque les compensations logicielles sont calculées pour une fréquence de 16 MHz. J'ai toutefois décidé d'indiquer dans le tableau récapitulatif les valeurs mesurées en appliquant un coefficient correcteur de 1,024 (16,384 / 16,000), mais bien sûr je me le permet en précisant que ce n'est pas la bonne méthode à suivre et qu'elle permet juste de voir que ça fonctionne aussi à cette fréquence de "16 MHz".

Sources de signal à mesurer
J'ai utilisé des oscillateurs à quartz intégrés standards (non compensés en température) de différentes valeurs : 8,192 MHz, 12,288 MHz, 16 MHz et 27 MHz. La première chose que j'ai faite est d'en prendre un au hasard (allez, le 12,288 MHz) et de voir ce qu'affichaient mes appareils de mesure.

frequencemetre_005c_proto_001g frequencemetre_005c_proto_001h frequencemetre_005c_proto_001i frequencemetre_005c_proto_001j frequencemetre_005c_proto_001k

Pour les fréquence plus basse, j'ai utilisé l'oscillateur 8,192 MHz que j'ai fait suivre par un compteur / diviseur à plusieurs sorties de type CD4040.

Méthodologie des tests
Je ne suis pas un professionnel de la mesure et mes fréquencemètres Racal-Dana et Microwave sont vieux et n'ont pas subi de recalibrage depuis plus de 10 ans. Le Racal-Dana a tendance à afficher une valeur un poil inférieure à la réalité, mais ça reste dans le domaine du supportable. J'utilise ces appareils en connaissance de cause et je ne recherche jamais une précision au Hz. De temps en temps je compare les résultats qu'ils donnent avec mon plus récent Centrad GF265 dont j'utilise l'entrée compteur externe (mais ce dernier ne peut grimper très haut en fréquence). J'ai le gros avantage de disposer de plusieurs appareils et même s'ils ne sont pas tout frais, c'est bien pratique en cas de doute. Les indications qui font suite sont données à titre d'information. Bien entendu, j'ai laissé chauffer les bouzins au moins une heure avant de m'en servir (attente de la stabilisation thermique de l'oscillateur de référence).

Freq d'entrée 18F2520 / 4 MHz 18F2520 / 8 MHz 18F2520 / 16 MHz
B = 1,333 kHz C = 0,800 kHz C = 1,700 kHz C = 1,177 kHz
B = 42,660 kHz C = 41,020 kHz C = 41,060 kHz C = 42,752 kHz
B = 682,566 kHz C = 683,350 kHz C = 683,190 kHz C = 683,018 kHz
B = 1,365134 MHz C = 1,366870 MHz C = 1,366710 MHz C = 1,365575 MHz
A = 8,192 MHz
B = 8,190715 MHz
C = 8,191990 MHz C = 8,191980 MHz C = 8,191959 MHz
A = 12,288 MHz
B = 12,287342 MHz
C = 12,290530 MHz C = 12,290510 MHz C = 12,289280 MHz
A = 16,0000 MHz
B = 15,999966 MHz
C = 16,002550 MHz C = 16,002540 MHz C = 16,003819 MHz
A = 27 MHz
B = 26,999892 MHz
C = 27,002870 MHz C = 27,002870 MHz C = 27,003432 MHz
A = fréquence théorique / attendue du signal à mesurer (valeur spécifiée sur l'oscillateur externe)
B = valeur affichée par mon fréquencemètre Racal-Dana
C = valeur affichée par le fréquencemètre 005c

Sans trop de surprise, baisse de la précision et affichage moins stable sur les basses fréquences (< 10 kHz), ce qui est logique vu que la durée de la fenêtre de mesure reste constante (100 ms) sur toute la plage de mesures. Les valeurs affichées par le fréquencemètre à PIC sont sensiblement égales quel que soit la fréquence d'horloge utilisée (4, 8 ou 16 MHz). On pourrait se dire, à la vue de ces chiffres, que la précision n'est pas terrible. Et pourtant... si on regarde ce qu'on obtient avec source 8,192 MHz et horloge PIC à 8 MHz, on constate que l'écart entre valeur attendue et valeur affichée n'est pas si grand :
A = 8,192000 MHz
C = 8,191980 MHz
A-C = 0,000020 MHz soit seulement 20 Hz !
De même pour la source 27 MHz et horloge PIC à 8 MHz :
A = 27 MHz
C = 27,002870 MHz
A-C = -0,002870 MHz soit seulement -2,8 kHz !
Dans le domaine des fréquences élevées (> 100 kHz) on reste avec une précision bien inférieure à 0,1% et pour les fréquences inférieures la précision reste inférieure à 1%. Pas si mal que ça, non ?

Prototype de Guillaume
Guillaume, qui s'est appuyé sur les mêmes schéma et code, fait le même constat que moi : le fréquencemètre n'est guère utilisable en dessous de 10 kHz, même si un moyennage des dernières valeurs mesurées arrange un peu les choses.

gene_pwm_004_proto_gjfr_001a gene_pwm_004_proto_gjfr_001b gene_pwm_004_proto_gjfr_001c

La dernière photo fait état de ce qui ressemble à un bug (absence de valeur de fréquence en Hz). Cet affichage est sans doute lié au remplacement du transistor FET 2N4416 par un bipolaire 2N2222 à 5 broches...

Prototype de Alain
Version 005c (avec 18F2520) réalisée avec quartz 8 MHz.

frequencemetre_005c_proto_aa_001a frequencemetre_005c_proto_aa_001b

Très jolie mise en boîte, merci Alain !

Logiciel du PIC

Le code binaire compilé (*.hex) et le code source de ce fréquencemètre sont disponibles dans l'archive suivante. Pour des questions de droit d'auteur, je n'ai pas inclus la librairie de yo2lio dans l'archive zip, vous devez la récupérer sur le lien cité en début d'article (elle n'est requise que si vous souhaitez modifier et recompiler le code source).
Fréquencemètre 005 - 16F628A
Fréquencemètre 005b - 18F2420 - (16/12/2012)
Fréquencemètre 005c - 18F2520 - (14/05/2017)
Pour les versions avec PIC 18F2420 et 18F2520, trois fichiers compilé vous sont gracieusement proposés :
- electronique_frequencemetre_005x_18f2x20_xtal_04.hex : pour usage avec quartz 4 MHz
- electronique_frequencemetre_005x_18f2x20_xtal_08.hex : pour usage avec quartz 8 MHz
- electronique_frequencemetre_005x_18f2x20_xtal_16.hex : pour usage avec quartz 16 MHz
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Circuit imprimé

Non réalisé pour les deux versions.

Historique

14/05/2017
- Recompilation des fichiers de la version 005c (18F2520) pour quartz 4 MHz, 8 MHz et 16 MHz. Je m'étais un peu mélangé les pinceaux lors des précédentes compilations de 2012 (merci à Alain pour son oeil attentif). Le code source est inchangé.
- Ajout photo prototype de Alain, que je remercie pour ses retours.
23/12/2012
- Ajout photos du prototype de Guillaume, que je remercie.
16/12/2012
- Finalisation des tests avec un PIC 18F2520, je n'ai pas retrouvé mon 18F2420 :-(
18/04/2010
- Mise à disposition du code logiciel pour PIC 18F2420.
30/08/2009
- Suite à message de Michel, j'ai ressorti le montage 005 (version avec PIC 16F628A) et ai confirmé le mauvais fonctionnement du logiciel du PIC qu'il a mis en évidence. Toutes mes excuses pour les tests insuffisants que j'avais menés avant de mettre en ligne ce projet.