Compteur de fr�quence 1Hz-100Mhz avec afficheur LCD et interface RS232

ArticleCategory: [Choose a category, do not translate this]

Hardware

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Guido Socher

en to fr Iznogood

AboutTheAuthor:[A small biography about the author]

Guido aime Linux, non seulement parce qu'il est int�ressant d'en d�couvrir les immenses possibilit�s mais aussi pour les personnes qui sont impliqu�es dans sa conception.

Abstract:[Here you write a little summary]

Cet article continue la s�rie sur le micro-contr�leur AT90S4433. Je vous sugg�re de lire les articles pr�c�dents sur la programmation d'Atmel :
  1. Comment installer et utiliser l'environnement de d�veloppement d'AVR sous Linux et comment construire le programmateur :
    March 2002, Programmer le micro-contr�leur AVR avec GCC
  2. Comment cr�er votre propre circuit imprim� :
    Mai 2002, Un panneau de contr�le LCD pour votre serveur Linux
Cette fois, nous concevons un compteur de fr�quence capable de mesurer les fr�quences de 1Hz � 100MHz. Vous pouvez aussi l'utiliser pour simplement compter les �v�nements, comme le nombre de personnes ayant travers� la rue (tout ce qui est g�rable sous forme d'impulsion num�rique). Le syst�me poss�de un afficheur LCD et une interface RS232 pour r�cup�rer les r�sultats du comptage sous Linux.

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

Introduction

La fr�quence d'une onde sinuso�dale ou carr�e est exprim�e en nombre d'oscillations par seconde. De mani�re � d�terminer la fr�quence d'un signal continu, il suffit de compter ces oscillations. De cette mani�re, nous d�terminons la fr�quence de la premi�re harmonique d'un signal oscillant de mani�re continue. Pour mesurer les fr�quences d'un � son � non continu, il faut un analyseur de spectre. C'est n�anmoins un autre type de mat�riel. Ce que nous concevons ici est un compteur de fr�quence pour les signaux oscillants de mani�re continue. Nous supposons que le signal ne change pas sa fr�quence pendant un intervalle donn� durant lequel nous faisons son �chantillonage.

Notre compteur de fr�quence fonctionne en 2 �tapes :
  1. Il supprime toute composante continue du signal et la convertit en une onde carr�e par l'utilisation d'un comparateur de tension.
  2. Il compte le nombre d'impulsions par heure et le divise par cet intervalle.

Ce qu'il vous faut

Pour construire le compteur de fr�quence, vous avez besoin des composants suivants :

1 x micro-contr�leur Atmel At90S4433
1 x support IC 28 broches 7,25 mm
2 x supports IC 16 broches
1 x support IC 1 broche
1 x support IC 14 broches
Il n'y a pas de supports IC pour les MAX903 et 74F74. Il faut les souder directement sur la carte !
1 x MAX232
1 x quartz 4,194304MHz
1 x DEL (verte)
1 x transistor PNP BC557
4 x condensateurs 1uF (non polaris�)
2 x condensateurs c�ramique 27pF
4 x mini condensateurs c�ramique 10nF
3 x mini condensateurs c�ramique 100nF
1 x mini condensateur c�ramique 200nF
1 x mini condensateur c�ramique 470nF
2 x r�sistances de 470 Ohm
1 x r�sistance de 470K
2 x r�sistances de 100 Ohm
3 x r�sistances de 1k
5 x r�sistances de 10k
3 x r�sistances de 47K
1 x r�sistance de 220 Ohm
3 x r�sistances de 4K7
1 x r�sistance de 3k3
1 x r�sistance de 2k2
1 x r�sistance de 47 Ohm
1 x potentiom�tre de 4K7 (aussi petit que possible) ; si vous voulez, vous pouvez remplacer ce potentiom�tre par une paire de r�sistances. Ce potentiom�tre est utilis� pour initialiser le contraste du LCD. Pour mon affichage LCD, une 100 Ohm et une 1K fournissent un bon contraste.
1 x diode zener 4.3V
2 x boutons petit contact
1 x condensateur 470uF (non polaris�)
1 x condensateur 4,7uF non polaris�)
1 x diode 1N4001
1 x 74HC02, TTL IC
1 x 74F74, TTL IC rapide
1 x 74HC390, TTL IC
1 x LM393, comparateur de tension
1 x MAX903, comparateur de tension rapide, en bo�tier plastique 8 broches, vous pouvez le commander directement sur www.maxim-ic.com dans le cas o� vous ne pouvez pas le trouver chez votre revendeur du coin.
1 x 7805, r�gulateur 5V
1 x afficheur LCD de 2 lignes de 20 caract�res compatible HD44780. Avec ou sans r�tro-�clairage (16 broches ou 14)

Tous les afficheurs LCD que j'ai vus avec des connecteurs 14 ou 16 broches �taient compatibles HD44780. Vous pouvez aussi utiliser des afficheurs de 3 ou 4 lignes mais vous devrez un peu modifier le logiciel.

En plus, vous aurez besoin de fils, de connecteurs (BCD, alimentation, RS232) et d'un transformateur 9V ou d'une alimentation de 150mA. Vous pouvez obtenir des alimentations tr�s bon march� qui se branchent directement sur une prise et qui s'utilisent pour tout type d'�lectronique grand public.

Sch�ma et circuit

J'ai utilis� eagle pour Linux afin de concevoir le sch�ma et le circuit. Le programme a eu quelques probl�mes pour comprendre que toutes les broches d'alimentation du circuit sont en 5V. Vous obtiendrez donc quelques erreurs si vous lancez la v�rification. La conception est n�anmoins correcte.
Le sch�ma (cliquez dessus pour une image plus grande) :
[Schematic]

Le circuit (cliquez dessus pour pour avoir une image plus grande) :
[board]


Le circuit est sp�cialement con�u pour les amateurs d'�lectronique. Seule la couche bleue est con�ue pour �tre grav�e en tant que circuit imprim�. Les lignes rouges sont les fils. Il est beaucoup plus facile et moins m�ticuleux de faire un circuit imprim� simple face. Vous pouvez disposer les fils (en rouge) de mani�re � ce qu'ils soient le plus courts possible, ce que je n'ai pas r�ussi � faire avec eagle.
La disposition du circuit avec un fond blanc pour une meilleure impression : carte sur fond blanc (Note: ce n'est pas le fichier dont vous avez besoin pour faire un circuit imprim�.)

Les fichiers eagle sont tous inclus dans le logiciel (linuxfreqcount-0.4) que vous pouvez t�l�charger � la fin de l'article.

Comment �a marche ?

Le micro-contr�leur AT90S4433 poss�de deux compteurs internes. L'un d'eux fait 16 bits et l'autre 8 bits. Nous utilisons le compteur 8 bits pour g�n�rer une base de temps appropri�e � partir de la fr�quence du quartz de l'AT90S4433. Dans ce but, nous utilisons un quartz de 4194304Hz et nous incr�mentons le compteur 8 bits via un diviseur interne 1/256 (voir le t�l�chargement de la fiche technique de l'AT90S4433, � la fin de l'article). Le compteur 8 bits est configur� pour g�n�rer une interruption lors du d�bordement. En d'autres termes, nous obtenons une base de temps de 4194304Hz / (256 * 256) = 64Hz. En utilisant une variable de boucle, nous g�n�rons depuis cette fonction des appels � intervalles de 1Hz ou de 64Hz.

Maintenant, nous avons une fonction qui est appel�e � des intervalles de 1Hz ou 64Hz selon le mode de fonctionnement de notre compteur. Tout ce que nous devons faire maintenant est de lire le compteur 16 bits depuis cette fonction et d'afficher le r�sultat. Le compteur 16 bits (broche PD5 sur le micro-contr�leur) obtient ses informations d'impulsion � partir du signal que nous souhaitons mesurer.

Le micro-contr�leur �chantillonne les signaux d'entr�e pour les synchroniser avec son horloge interne. En fonction du th�or�me d'�chantillonnage, nous pouvons donc mesurer un signal ayant au maximum la moiti� de la fr�quence du quartz. C'est la limite th�orique. En pratique, nous pouvons mesurer des signaux jusqu'� 1,5 MHz avec le micro-contr�leur.

Pour mesurer des fr�quences plus �lev�es, il nous faut un �talonneur/diviseur. C'est ce que proposent les circuits 74F74 et 74HC390. Le 74F74 est utilis� comme rapide diviseur 1/4 asynchrone et le 74HC390 est un diviseur 1/25. Nous ne pouvons pas utiliser le 74HC390 directement comme un 1/100 car il ne peut traiter plus de 25MHz.

Le circuit poss�de deux entr�es. Une par le diviseur 1/100 et une entr�e directe. En fonction de la fr�quence du signal que vous souhaitez mesurer, vous utilisez une des deux lignes d'entr�e (pas les deux).

Si vous �tes seulement int�ress�s par les fr�quences jusqu'� 1.5 Mhz (i.e., pour faire des mesures de fr�quence d'un amplificateur audio), vous pouvez aussi fabriquer une version simplifi�e du compteur en abandonnant les MAX903, 74F74 et 74hc390. Vous pouvez toujours utiliser le m�me logiciel et le m�me circuit int�gr�.

L'objectif des deux comparateurs de tension (MAX903, haute vitesse et LM393) est d'amplifier les signaux et de g�n�rer des signaux d'ondes carr�es � partir, par exemple, de signaux d'ondes sinuso�dales.

Une attention particuli�re a �t� n�cessaire pendant la conception et l'�laboration du circuit imprim� afin d'�viter les oscillations du comparateur � proximit� du seuil. Il est � noter que le MAX903 est r�ellement un comparateur � tr�s haute vitesse. Si vous utilisez un signal d'entr�e tr�s bruyant, par exemple, un signal de 100KHz modul� avec un bruit � 1MHz, vous compterez alors quelques impulsions de 1 MHz lorsque le signal de 100KHz croise le niveau du 0 V.
La r�sistance de 220K sur le MAX903 �vite jusqu'� un certain point l'influence du bruit en fournissant un retour positif. Vous ne devriez pas, n�anmoins, alimenter le compteur avec des signaux bruyants.

Le micro-contr�leur peut �tre pilot� par une RS232 et par deux boutons poussoir (bouton remise � z�ro et mode de changement de comptage).

Les deux canaux d'entr�e sont combin�s par une porte OR (74hc02). La porte OR supprimera bien s�r le signal d'entr�e si vous d�connectez l'entr�e 1/100 alors qu'il y a encore un � 1 � logique sur la ligne de sortie du 74hc390. Le 74hc390 est alors remis � � 0 � (broche 2) lorsque vous changez le mode de comptage ou lorsque vous pressez le bouton de remise � z�ro.

Le logiciel

Le logiciel du micro-contr�leur initialise deux compteurs en mode interruption. La mani�re de le faire est tr�s bien d�crite dans la fiche technique de l'AT90S4433 (voir les r�f�rences). Vous devez d�finir un jeu de registres. C'est important mais assez ardu. Je ne vais donc pas le reproduire ici. La plupart de la logique du compteur de fr�quence est impl�ment�e dans le fichier linuxfreqcount.c. Tous les autres fichiers sont des � biblioth�ques � pour les LCD, UART, etc.... Lors de l'�criture de logiciel pour le micro-contr�leur, vous devez faire attention � ne pas utiliser plus de 128 octets de Ram. C'est tout ce que nous avons. Il est donc pr�f�rable d'�viter les appels de fonctions imbriqu�es avec beaucoup de param�tres. Les drapeaux et les variables globales sont plus adapt�s.

Lorsque les registres du compteur sont configur�s correctement alors la fonction SIGNAL(SIG_OVERFLOW0) est appel�e avec des intervalles de 64 Hz. Ici, nous lisons le compteur 16 bits et initialisons un drapeau (hflag) pour pouvoir traiter le r�sultat du compteur avec la fonction handlecounterresult(). Avec une fr�quence de porte de 1Hz, nous pouvons utiliser le r�sultat du compteur directement, mais avec une porte dont le temps d'ouverture est de 1/64 de seconde, nous devons multiplier le r�sultat par 64. Les op�rations math�matiques r�alisables avec le micro-contr�leur sont assez limit�es (nous n'avons pas d'entiers 32 bits comme dans un processeur Pentium). Heureusement, multiplier par 64 correspond simplement � six d�calages � gauche (6 fois shift left). Nous stockons le r�sultat dans des variables de 3 x 8 bits (counterval[3]).

Nous avons maintenant la valeur du compteur correcte sous forme de repr�sentation 24 bits. De mani�re � l'afficher, il est n�cessaire de le convertir en ASCII d�cimal. Printf serait capable de le faire mais nous ne l'avons pas car cela d�passerait nos possibilit�s de m�moire. Pour convertir le binaire en d�cimal, nous divisons le nombre 24 bits par 10 avec retenue. Les retenues sont des nombres d�cimaux. Notre processeur ne sait pas traiter les 24 bits, nous g�rons donc le nombre par blocs de 8 bits (fonction divby10()). Ajouter la valeur ASCII z�ro � chaque chiffre nous permet d'avoir enfin, une repr�sentation ASCII de notre nombre (fonction longtoascii()).

Cette chaine ASCII peut �tre envoy�e par la ligne RS232 � l'afficheur LCD.

R�aliser le circuit imprim�

Le paquetage logiciel contient un fichier postscript (linuxfcount.ps) pour le circuit imprim�. Je trouve personnellement que les pastilles sont un peu trop petites. Je vous recommande donc de les agrandir avec un marqueur avant de graver le circuit. La marche � suivre pour r�aliser le circuit chez soi est d�crite dans l'article : Mai 2002, Un panneau de contr�le LCD pour votre Serveur Linux. Quelques lecteurs m'ont indiqu� que le spray de Kontakt Pausklar-21 est difficile � obtenir. A la place, nous pouvons utiliser du p�trole, comme celui utilis� dans les lampes. Vous devez nettoyer le p�trole avec un peu de savon avant de placer votre circuit dans le d�veloppeur.

Comment construire un bo�tier pour notre compteur de fr�quence ?

[final case, open] [wooden frame] Un probl�me majeur pour les amateurs d'�lectronique est habituellement le bo�tier contenant les circuits fabriqu�s. Les bo�tiers pr�-construits en aluminium sont assez chers. Travailler des feuilles de m�tal avec pr�cision est aussi tr�s difficile. J'ai trouv� une solution bon march� � l'aspect professionnel. J'utilise du bois de sapin pour les cot�s et le fond qu'il est possible de peindre pour lui donner un aspect assez cossu. Utilisez de la peinture soluble dans l'eau, � usage int�rieur. Pour la fa�ade, le dessus et le dessous, j'utilise des plaques de m�tal et elles n'ont pas besoin d'�tre pli�es. Il faut simplement les couper � la bonne taille. Vous pouvez voir sur l'image de droite � quoi ressemble la partie en bois. Sur la gauche, vous pouvez voir la bo�te termin�e (le dessus est manquant).

Assembler la carte

[circuit] Lors de la soudure des composants sur le circuit, vous devez faire attention � la zone haute fr�quence (MAX903 et 74F74 avec des r�sistances et des condensateurs). Je recommande habituellement d'utiliser des supports pour circuit car cela facilite la recherche de pannes mais ces deux circuits ne doivent pas en utiliser afin de r�duire les effets parasites ind�sirables. Les condensateurs de d�couplage entre la masse et l'alimentation doivent �tre en c�ramique. Leur valeur peut �tre comprise entre 10nF et 100nF.

C'est le circuit le plus complexe qui ait �t� con�u dans LinuxFocus. Je vous recommande de le construire par �tapes et de v�rifier si les diff�rents composants fonctionnent :
  1. Soudez d'abord les composants n�cessaires � l'alimentation (7805, etc...) sur la carte et v�rifiez que tout fonctionne.
  2. Soudez tous les composants sur la carte mais n'enfoncez que le micro-contr�leur dans son support.
  3. Le paquetage linuxfreqcount-0.4 inclut un programme, avr_led_lcd_test.c, pour tester le micro-contr�leur, la LED et le LCD. Chargez-le. Branchez le c�ble du programmateur comme d�crit dans le premier article sur l'AVR (Mars 2002, Programmer le micro-contr�leur AVR avec GCC) et tapez ensuite � make testload � pour charger le logiciel avr_led_lcd_test du paquetage linuxfreqcount-0.4. La LED doit clignoter et le LCD doit afficher le texte � Hello �.
  4. Ins�rez tous les circuits dans leur support. Chargez le logiciel (make load). Testez d'abord la partie basse fr�quence puis la haute fr�quence. Vous avez besoin d'un oscillateur comme source de fr�quence (pr�f�rez un signal de sortie sous forme d'onde carr�e).

Utiliser le compteur

Le compteur peut op�rer dans diff�rents modes :
  1. comptage continu
  2. comptage de fr�quence avec une porte de fr�quence � 1 Hz. Dans ce mode, vous pouvez mesurer les fr�quences jusqu'au maximum du compteur 16 bits, 65535 Hz ou 6553500 Hz avec un diviseur 1/100.
  3. comptage de fr�quence avec une porte de fr�quence de 64 Hz. Dans ce mode, vous pouvez compter les fr�quences jusqu'� 1,5 MHz ou 100 MHz avec un diviseur 1/100.
[ASCII commands via rs232]
Interface de commande ASCII RS232.
Vous pouvez changer le mode via le bouton mode ou via l'interface RS232 avec des commandes ASCII. L'interface de commande ASCII RS232 fonctionne comme d�crit dans l'article Mai 2002, Un panneau de contr�le LCD pour votre serveur Linux. Les commandes disponibles sont d�crites dans le fichier README.commands.

La LED verte indique lorsque la porte est ouverte. Cela signifie que les impulsions peuvent entrer dans le compteur et y �tre compt�es.

Le second bouton est celui de remise � z�ro. Il peut �tre utilis� pour remettre � z�ro le compteur (principalement pour le mode comptage) et pour choisir entre la multiplication par 100 et l'affichage normal. Dans le mode multiplication par 100, le r�sultat affich� doit �tre multipli� par 100. De cette mani�re, vous n'avez pas de calcul mental compliqu� � effectuer :-). C'est utile lorsque vous utilisez le diviseur 1/100.

Quelle pr�cision ?

Tout compteur num�rique a une limite de pr�cision de +/-1. Le dernier chiffre variera un peu m�me si vous avez un signal d'entr�e tr�s stable. Si la fr�quence de la porte est de 64 Hz, alors le r�sultat est multipli� en interne par 64, ce qui signifie que la pr�cision est de +/-64. De la m�me mani�re, le diviseur 1/100 influence la pr�cision du r�sultat. Le compteur est n�anmoins tr�s bon. Le principal probl�me est la d�rive en temp�rature du quartz 4194304 Hz. Les quartz oscillent plus lentement lorsqu'ils sont plus chauds. C'est physique et vous pouvez seulement �liminer le probl�me en contr�lant exactement la temp�rature.

Il est possible de calibrer le compteur si vous trouvez un bon signal de r�f�rence. Vous pouvez le calibrer logiciellement en ins�rant des petits d�lais dans la fonction handlecounterresult(). J'ai compar� les r�sultats du compteur avec un signal de r�f�rence et mon compteur �tait assez exact. C'est la raison pour laquelle les d�lais de calibration sont en commentaires dans le code source. Vous pouvez aussi influencer un peu la fr�quence du quartz en changeant un des condensateurs de 27pF (vous devez tester les 10pF, 50pF, etc..).

Pour une utilisation personnelle normale, il n'y a pas besoin de calibrer quoi que ce soit. Les quartz de 4194304 Hz sont tr�s pr�cis.

Le compteur en service.

Vous avez ici la photo finale du compteur en op�ration :
[the frequency counter]

Pour une �tude approfondie

Dans cet article, aucun logiciel d'application n'est fourni pour �valuer automatiquement les r�sultats sous Linux. On peut imaginer, par exemple, que vous utilisiez ce compteur de fr�quence pour mesurer la vitesse du vent dans des zones �loign�es ou tout autre �v�nement pouvant �tre traduit en fr�quences num�riques. Ecrire des logiciels sous Linux qui font de la mesure de temps tr�s long n'est pas tr�s difficile. Vous pouvez par exemple modifier les programmes perl de l'article Mai 2002, Un panneau de contr�le pour votre serveur Linux. Si vous �tes seulement int�ress�s dans l'enregistrement des r�sultats dans un fichier, vous devez alors utiliser les commandes :

ttydevinit /dev/ttyS0
cat /dev/ttyS0 > votre_fichierlog.txt

Ceci suppose que le compteur est connect� sur COM1 (=ttyS0).
C'est facile, n'est-ce pas :-)?

R�f�rences