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]
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 :
- 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
- 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]
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 :
- Il supprime toute composante continue du signal et la convertit en une
onde carr�e par l'utilisation d'un comparateur de tension.
- 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) :
Le circuit (cliquez dessus pour pour avoir une image plus grande) :
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 ?
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
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 :
- Soudez d'abord les composants n�cessaires � l'alimentation (7805, etc...)
sur la carte et v�rifiez que tout fonctionne.
- Soudez tous les composants sur la carte mais n'enfoncez que le micro-contr�leur
dans son support.
- 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 �.
- 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 :
- comptage continu
- 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.
- 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.
|
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]](../../common/images/article253/inoperation_small.jpg)
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