C’est une structure de compteur nommée « réciproque » dans la littérature (voir références). Cette structure effectue toujours une mesure de N périodes du signal à l’entrée, puis selon le cas, on calculera la fréquence ou la période afin de garantir une très bonne précision.
Chaque signal Fq et Fx (ou Fx/prediv) alimente un compteur après avoir été autorisé par une porte. On peut faire les mesures avec les deux signaux Fx et Fq non corrélés, ni rephasés, la mesure est appelée « asynchrone ».
La porte est armée par le signal « Enable » et s’ouvre sur le premier front descendant de Fx. Elle se fermera sur le premier front descendant suivant la disparition du signal « enable ».
A la fin de la mesure, le compteur Nx contient le nombre de périodes du signal d'entrée qui correspond à la durée de la porte.
Le compteur Nq contient très exactement un nombre = Fq*Nx/Fx, et on pourra calculer Fx = Fq * Nx/Nq
et c'est là où on voit tout le potentiel de cette méthode, car la durée de la porte n'intervient plus directement.
Pour des signaux de fréquence faible, Nx sera assez petit, voire égal à 1, mais Nq sera énorme, et l'opération gardera sa précision.
Pour des signaux de fréquence élevée, Nx va augmenter et devenir très fort (1000 pour un signal de 1000Hz avec une porte de 1sec), et l'opération gardera encore toute sa précision.
Une troisième compteur « N3 » est ajouté pour permettre la mesure de phase, de rapport cyclique ou de durée d’impulsion. Il totalise une fréquence Fq seulement lorsque le signal Fx est à 1 (durée T+x).
On peut aussi rephaser Fx sur Fq, ce qui permet de ne pas avoir d’erreur technologique (la fameuse erreur +/-1) sur les compteurs, dans ce cas on est en mode « synchrone ».
Une fois le cycle accompli,
- le compteur Nq contient Tgate * Fq . SI Nq déborde, la fréquence Fx est trop basse.
- le compteur Nx contient Tgate * Fx, nombre entier de périodes Fx . Si Nx déborde, la durée de porte est trop gande.
- le compteur N3 contient Nx * Fq * T+x . Si N3 déborde, la durée de porte est trop gande.
On peut calculer :
- Frequence Fx = Prediv * Nx * Fq / Nq
- Période Px = Nq / ( Prediv * Nx * Fq )
- Impulsion posistive T+x = N3 / ( Prediv * Nx * Fq )
- Rapport cyclique RCx = 100 * N3 / NQ
- Phase Phx = 360 * N3 / NQ
On prévoit 4 canaux d’entrée.
Les entrées A et B sont analogiques, avec un trigger de schmitt réglable en
seuil.
L’entrée C est logique avec des seuils TTL.
La dernière entrée est une VHF/UHF qui alimente directement un prédiviseur.
En interne, on fabrique un signal A→B, avec un circuit détecteur de phase comme celui utilisé dans les PLL. Ce signal permettra de mesurer la phase entre A et B, mais aussi l’intervalle de temps entre A et B.
Dans ce premier cas, les signaux Fx et Fq ne sont pas corrélés, et on n’utilise pas le compteur N3. La mesure n’utilise que Nx et Nq.
Algorithme
Dans ce deuxième mode, on utilise un compteur N3 qui totalise une fréquence Fq seulement lorsque Fx=1, cela permet d’avoir accès à des informations de rapport cyclique, phase ou impulsion.
Afin de minimiser l’erreur dûe à l’asynchronisme entre Fx et Fq, les signaux Fx est rephasé par une bascule pilotée par Fq.
Sur l’exemple, ci contre, en supposant que Fq=1 on applique les formules de base :
En asynchrone
En synchrone
Donc globalement, les mesures synchrones sont plus précises, car on échange une précision de +/-1 sur Nq ou N3, par un erreur de 1 période de Fq sur la mesure de pulse ou de période.
Algorithme
Dans ce troisème mode, on fait une mesure de temps basée sur un comptage dans le compteur N3, c’est à dire autorisé par le signal Fx (« Gated »).
Normallement, à la fin de la mesure, Nx doit être égal = 1.
La durée du pulse vaut N3 / (Nx * Fq)
Ce mode s’adresse en priorité à des signaux apériodiques.
Il n’est pas nécessaire de calculer une échelle, ou des multiplicateurs.
Algorithme
|
Dans ce cinquième mode, l’instrument totalise les impulsions et affiche la valeur du compteur,, jusqu’à ce qu’une touche soit activée.
Mode |
>--->--->---> Suite des tâches>--->--->---> |
||||||||
0 |
Asynchrone |
Frequence + Période |
Reset counters, FF |
Set enable Wait Gate=1 |
Wait Tgate |
Reset Enable Wait gate=0 |
Post increment |
Compute F |
Compute P |
1 |
Synchrone |
Fréquence + rapport cyclique |
Reset counters, FF |
Set enable Wait Gate=1 |
Wait Tgate |
Reset Enable Wait gate=0 |
Post increment |
Compute F |
Compute Dcycle |
2 |
Synchrone |
Fréquence + phase |
Reset counters, FF |
Set enable Wait Gate=1 |
Wait Tgate |
Reset Enable Wait gate=0 |
Post increment |
Compute F |
Compute Phase |
3 |
Synchrone |
Période + pulse |
Reset counters, FF |
Set enable Wait Gate=1 |
Wait Tgate |
Reset Enable Wait gate=0 |
Post increment |
Compute P |
Compute Pulse |
4 |
Gated |
Intervalle de temps |
Reset counters, FF |
Set enable Wait Gate=1 |
Wait Tgate |
Reset Enable Wait gate=0 |
Post increment |
Compute Time |
|
5 |
Compteur |
L’implantation de ce genre de processus dans un microcontrolleur est simple, il suffit de trouver une astuce pour disposer de 3 compteurs de grande largeur.
Un micro-controlleur de la série 80C32 offre 3 compteurs 16 bits, accessibles de l’extérieur.
Il suffit de les faire précéder d’un diviseur 8 bits, et de les faire suivre par un compteur logiciel 8 bits pour disposer de 3 compteurs 32 bits.
On utilise la technique de post-incrément qui consiste à avoir un diviseur externe, précédent un compteur interne. A la fin de la mesure, on applique à l’entrée du diviseur externe une série d’impulsion jusqu’à le faire déborder. Il suffit de compter le nombre d’impulsion appliquée pour en déduite l’état orginal.
Exemple de code :
reset NQLL |
||||||
reset NXLL |
|
|||||
reset N3 |
||||||
loop: |
1 |
A=TF2||TF1||TF0 |
||||
1 |
A=not A |
|||||
2 |
pulse EXTINC |
|||||
1 |
dec N |
|||||
1 |
A=A or TF2||TF1||TF0 |
|||||
2 |
si A (T0) eq 0 alors T0 vient de tomber |
|||||
NQLL = N |
||||||
2 |
si A (T1) eq 0 alors T1 vient de tomber |
|||||
NXLL = N |
||||||
2 |
si A (T2) eq 0 alors T2 vient de tomber |
|||||
N3LL = N |
||||||
2 |
si N>0 goto loop |
|||||
Avec ce code, la durée maximale du post incrément = 256*14 = 3584 uS
En utilisant de la technologie HCMOS, on peut considérer une fréquence maximale de l’ordre de 30MHz. On sélectionne un oscillateur standard Fx=24MHz.
La largeur des compteurs sera préférentiellement multiple de 8 bits. La largeur de Nq conditionne la fréquence Fx minimale, car dans ce cas, la durée de la porte va faire exactement une période Fx donc Nqmax = Fq/Fxmin. Avec 24MHz et 16bits, Fxmin=366 Hz trop fort, avec 24 bits Fxmin=1,4 Hz trop fort, avec 32 bits Fxmin=5.6 mHz acceptable. On choisit une largeur de 32 bits pour Nq.
L’analyse du bilan d’erreur va déterminer le nombre de digits
L’erreur s’exprime : dFx/Fx = dFq/Fq + dNx/Nx + dNq/Nq |
Min |
Max |
|
Précision sur Fq |
Un oscillateur à Quartz ordinaire va présenter une précision de l’ordre de 10-5, on peut améliorer d’un facteur 10 avec une conception plus fine. Au delà, il faudra utiliser une régulation ou une compensation de température. |
10-6 |
10-5 |
Comptage Nx |
Par construction, Tgate est toujours un multiple parfait de 1/Fx. Donc il n’y a pas d’erreur sur Nx. |
0 |
0 |
Comptage Nq |
Les signaux Fx et Fq étant asynchrones, le nombre Nq est entaché d’une erreur de +/- 1. |
1/Nqmax |
1/Nq |
Affichage |
L’erreur d’arrondi à l’affichage est d’une ½ unité, soit 0.5/Fx. Si on a une gamme automatique (de 1000 à 9999 pour 4 digits), on a toujours au moins Nda-1 digits donc l’erreur maximale est au minimum de 0.5 10-Nda et au maximum de 5 10-Nda . |
0.5 10-Nda |
5 10-Nda |
Calcul |
On peut se débrouiller pour que la précision de calcul et donc le nombre de digits calculés soit strictement supérieurs au nombre de digits affichés Nda. Moyennant cette condition, ce poste d’erreur devient négligeable sur le bilan global. |
epsilon |
epsilon |
Tgate |
1/Nq en ppm |
Nda équivalent |
0,0625 |
0,667 |
6,2 |
0,125 |
0,333 |
6,5 |
0,25 |
0,167 |
6,8 |
0,5 |
0,083 |
7,1 |
1 |
0,042 |
7,4 |
2 |
0,021 |
7,7 |
4 |
0,010 |
8,0 |
8 |
0,005 |
8,3 |
16 |
0,003 |
8,6 |
32 |
0,001 |
8,9 |
64 |
0,001 |
9,2 |
128 |
0,000 |
9,5 |
La largeur de porte minimale, conditionne la valeur de Nq minimale, et on peut exprimer cette précision de comptage 1/Nq en nombre de digits équivalent. On constate qu’en dessous de 0,5 seconde de porte, la précision 1/Nq passe en dessous de celle d’un affichage de 7 digits.
En considérant une durée minimale de porte de 0,250 seconde, la valeur minimale de Nq est de 6000000, soit une erreur de 0.167 ppm, du même ordre que celle amené par un affichage à 7 digits.
On voit bien qu’on a interet à toujours avoir une très grande valeur de Nq, pour minimiser le terme 1/Nq, au moins qu’il soit du même ordre que dFq/Fq, donc avec une valeur minimale de Nq toujours supérieure à 106 par exemple.
Moyennant cette hypothèse et celle relative aux nombre de digits calculés, le seul poste d’erreur est relatif à la précision d’affichage. 6 digits vont amener une erreur maximale de 5 ppm, comparable à celle d’un quartz dans un oscillateur standard. On choisit 7 digits (erreur max de ½ ppm) pour que cette précision soit bien en dessous de celle du quartz.
Le compteur peut mesurer une fréquence aussi basse que 6mHz, et moyennant l’usage d’un prédiviseur, on peut envisager de monter jusqu’à plusieurs GigaHertz. Dans ces conditions on identifie 13 gammes.
En dessous de 1 Hz, on va privilégier le traitement sur la période, au dessus ce sera la fréquence. En fait on constate dans le tableau ci-dessous qu’une zone d’égale précision entre fréquence et période (7 digits affichés) existe sur les échelles 0 et 1, c’est à dire entre 0.1 Hz et 10 Hz.
Fréquence |
Période |
|||||||
Echelle |
Gamme |
Mult. |
Format |
Unité |
Gamme |
Mult. |
Format |
Unité |
-2 |
1.000 0 mHz : 9.999 9 mHz |
109 |
7.4 |
mHz |
100.000 0 s : 999.999 9 s |
106 |
7.4 |
s |
-1 |
10.000 0 mHz : 99.999 9 mHz |
109 |
7.4 |
mHz |
10.000 00 s : 99.999 99 s |
107 |
7.5 |
s |
0 |
100.000 0 mHz : 999.999 9 mHz |
109 |
7.4 |
mHz |
1.000 000 s : 9.999 999 s |
108 |
7.6 |
s |
1 |
1.000 000 Hz : 9.999 999 Hz |
108 |
7.6 |
Hz |
100 000.0 us : 999 999.9 us |
109 |
7.1 |
us |
2 |
10.000 00 Hz : 99.999 99 Hz |
107 |
7.5 |
Hz |
10 000.0 us : 99 999.9 us |
109 |
7.1 |
us |
3 |
100.000 0 Hz : 999.999 9 Hz |
106 |
7.4 |
Hz |
1 000.0 us : 9 999.9 us |
109 |
7.1 |
us |
4 |
1 000.000 Hz : 9 999.999 Hz |
105 |
7.3 |
Hz |
100.0 us : 999.9 us |
109 |
7.1 |
us |
5 |
10 000.00 Hz : 99 999.99 Hz |
104 |
7.2 |
Hz |
10.0 us : 99.9 us |
109 |
7.1 |
us |
6 |
100 000.0 Hz : 999 999.9 Hz |
103 |
7.1 |
Hz |
1.0 us : 9.9 us |
109 |
7.1 |
us |
7 |
1 000 000 Hz : 9 999 999 Hz |
102 |
7.0 |
Hz |
0.1 us : 0.9 us |
109 |
7.1 |
us |
8 |
10.000 00 MHz : 99.999 99 MHz |
10 |
7.5 |
MHz |
0.0 us |
109 |
7.1 |
us |
9 |
100.000 0 MHz : 999.999 9 MHz |
1 |
7.4 |
MHz |
0.0 us |
109 |
7.1 |
us |
10 |
1 000.000 MHz : 9 999.999 MHz |
0,1 |
7.3 |
MHz |
0.0 us |
109 |
7.1 |
us |
Le controle de l'appareil se fait via 4 touches (droite/gauche, bas/haut) et d'un afficheur LCD.
On se déplace dans des menus avec
1er menu, sélection du mode de fonctionnement :
MODE 0 asynchro Freq+Per |
MODE 1 synchrone Freq+Dcycle |
MODE 2 synchrone Freq+Phase |
MODE 3 synchrone Per+Pulse |
MODE 4 Time interval |
MODE 5 counter |
2ème menu, sélection de l'entrée :
Input A |
Input B |
Input C |
Input A to B |
Input VHF |
3ème menu, sélection de la polarité :
Polarity + A to B |
Polarity - B to A |
4ème menu, sélection de la durée de mesure :
Gate 0.1s |
Gate 0.25s |
Gate 0.5s |
Gate 1s |
... |
Gate 128s |
4ème menu, sélection du type d'armement :
Arming auto |
Arming auto |
Type d'affichage selon le mode, on essaye d'utiliser au mieux les 2 fois 16 caracteres disponibles sur l'afficheur LCD :
...123.456 7 Hz ...123.456 7 µs |
...123.456 7 Hz 99.999 % |
...123.456 7 Hz 359.999 ° |
...123.456 7 µs ...123.456 7 µs |
NX=1234 123.456 789 01 s |
1 234 567 890 |
L'appareil dispose de 4 entrées :
Les signaux A, B, C et HF alimentent aussi des LED pour montrer l'activité du signal en face avant.
La partie logique est directement issue du schéma bloc du compteur.
Un multiplexeur HC151 en entrée sélectionne les signaux à mesurer. Dans l'ordre : C, B, A, A>B, HF. Des canaux libres sont possibles et la fréquence d'horloge Fq est cablée sur la dernière entrée pour un autotest. Ce multiplexeur délibre gratuitement le signal et son complément.
Le deuxième multiplexeur HC151 sélectionne le signal ou son complément, ainsi que le signal resynchronisé ou son complément.
Le troisième multiplexeur HC153 est le multiplexeur de mesure qui va aiguiller Fq, Fx ou une clock du microcontrolleur vers les 3 compteurs Nq, Nx et N3, chacun réalisés par 1 compteur 8 bits HC393.
L'horloge est réalisé par un générateur autonome 24MHz.
Un registre série CMOS 4094 reçoit les informations du CPU sous forme série pour controller la carte.
3 leds signalent l'activité : une pour le signal AtoB, une pour signaler que l'armement est actif, la dernière pour indique une mesure en cours (présence de Fq sur l'entrée du compteur Nq).
La sélection des modes est fait comme suit :
Mode |
signal TI |
signal ASYN |
0 asynchrone, mesure Frequence + Période | 0 |
1 |
1 synchrone, mesure Fréquence + Rapport cyclique | 0 |
0 |
2 synchrone, mesure Fréquence + Phase | 0 |
0 |
3 synchrone, mesure Période + Impulsion | 0 |
0 |
4 intervalle de temps | 1 |
1 |
si Pol=0, mesure d'une impulsion positive, si Pol=1, mesure d'une impulsion négative
Le CPU est standard, basé sur un 80C32