07/12/2011
rev 20/04/2012

Capacimetre Ultra Simple basé sur un circuit Monostable de duree creneau de sortie f(R.C.)

Derniere ? Version : Monostable ICM7555 CMOS et mesure avec Mode CAPTURE CCP1 et Timer1 + Timer3 sur LCD et RS232
1ere version avec R=392K
2em version avec R=1.2Mohms
3
em version avec R=2.2Mohms et AUTOCAL

Apres plusieurs configurations d'essais , voir resumé ci dessous :
Je peux fournir les detaisl si quelqu'un est interressé !
car je les ai enlevés pour alleger cette presentation

SN 74121 TTL 74HCT123 CMOS 74HCT123 ICM 7555
mesure de la duree de pulse via Timer1
en mode pooling sur RB0
Mesure Timer1 via Interruption sur RB0
Mesure du timer1 via CAPTURE CCP1
Mesure du timer1 via CAPTURE CCP1
dynamique de mesure trop faible
Nombre de counts maxi limite par
Rmax=40K

Meilleure dynamique avec Rmax=150K
Le Mode interruption entraine une
perte de precision sur faibles capa

Amelioration du nombre de counts pour
faible capacite.
Gestion des debordements Timer
Rajout d'une commutation de gamme
par depassement de 1.000.000 de counts
Circuit plus performant permettant l'usage de R=390K ( maxi possible 10 Momhs)
Gestion des debordements Timer
Bonne resolution pour faibles capa.
Plus grande dynamique possible.
Rajout du Timer3 pour changement de gamme lié à la duree de mesure.
10 nF à plus de 2200 µF 1nF à plus de 2200 µF 100pF à plus de 2200 µF 1pF à plus de 2200 µF
 

images/Nokia_1.jpg

images/Nokia_2.jpg


Usage monostable ICM7555 et mode Capture CCP1 du 18F

Choix hardware final : ICM7555
et choix software :

Armement interruption CCP1 sur front descendant (fin du monostable)
Init Timer 1 à 0 (soit 65536)
Le monostable est armé par la sortie RA3 : tres courte impulsion de commande, qui fait basculer la sortie monostable de 0 à 1.
Le timer1 est utilisé pour chronometrer la duree la pulse de sortie monostable, reliée à RC2, et via la fonction
CAPTURE mode CCP1 du 18Fxxxx , en interruption, ce qui permet un transfert immediat de lecture du timer
dans le registre CPP1 , via le Hardware interne du PIC.

De plus le signal de sortie monostable est envoyé aussi sur RB0, que l'on surveille , juste apres
l'armement du monostable et on entre dans une boucle sans fin sur le test de RB0,
dans laquelle on compte le nombre de debordement du timer1
Des que RB0 retombe à zero, le front descendant de RC2 deroute sur le traitement IT CCP1
dans lequel on recupere la valeur Timer1 (TimeEcoule ) en counts,
apres retour au main programme, on sort de la boucle de test RB0, puisque RB0=0
et on rajoute le cumul des debordements timer1
OverTime = 65536 * j (Nb de debordements)
Il n'y a plus de temps perdu au traitement soft, meme si on doit gerer l'interruption lié au flag CCP1 !
Le nombre total de count correspondant à la duree du monostable, donc f(Cx) devient
Total= OverTime+TimeEcoulé !
La resolution est alors TRES GRANDE ! et permet ainsi que discriminer jusqu'au PicoFarad .

Artifices d'amelioration:
*
Test sur la stabilité du ZERO au lancement du programme.
Un capa TALON de 100pF est connectée en permanence sur le monostable ,pour masquer les capa parasites.
On test si la valeur lue est à +-5 sur 287counts (R=390K , Tamb à 20°C)
Attention la valeur 287 est celle obtenue avec MON Condensateur de 100pF +-10%! mais peu importe la valeur exacte!
Si le resultat du test Zero est "BAD" l'affichage sur LCD se fera en ?? au lieu de l'unite nF ou uF

* Pour augmenter la dynamique de mesure SANS TROP DE DELAI DE MESURE
Rajout d'une commutation de gamme : 390K -> 2,7K => mesure 144 fois plus rapide !
Une premiere mesure sur Cx est faite, sur la gamme 1 ( avec R=390K ) et on utilise le Timer3
dans la boucle de fond attente RB0=0 pour changer de gamme si la duree de mesure (Timer3) depasse 50x65536*8*0.2µS
soit ~5,2 secondes, sinon il faudrait attendre plus de 15 Minutes pour 1 mesure sur 2200µF
Apres quoi , chaque valeur est mesurée 10 fois, la moyenne des 10 mesures , et affichée en counts
et en nanoFarads (nF) ou en microFarads (uF) suivant la gamme.
* Indication de la stabilite de mesure : affichage du (Maxima-Minima)/Moyenne , exprimé en %


Usage monostable ICM7555 et mode Capture CCP1 du 18F

Ce circuit est le plus elaboré et precis, à ne pas confondre avec le NE555 classique!.
Les courbes de tempo en fonction de R et C demontrent clairement le plus, apporté par ce circuit
Il est possible d'utiliser des Resistances jusqu'à l'ordre de 10 Mohms



schema de principe et mesures:

schema gamme 1 gamme 2
schema de principe Gamme 1 : 10pF à 2,2µF Gamme 2 : 4.7 à plus de 2200µF

Les resultats detailles des differents essais et mesures :Pic18F_capacimetre.xls
Les coefficients de calibration sont issus de la regression lineaire sous Excel.


Ainsi R gamme 1 passe à 392K (essai ok avec 1.5Mohm!)
Ce qui permet d'installer en fixe une capa TALON de 100pF servant de base ZERO.
Le mode CCP1 (entree RC2) est utilisé conjointement avec RB0 , et le Timer1 16 bits
dont on surveillera (comptera) les débordements , permet une tres grande dynamique de mesure
Le timer 3 ,de 16 bits est aussi utilisé pour permettre un changement de gamme automatique si la duree de mesure
depasse 50 fois (65536 * 8*0.2µS) soit ~5,2sec , afin de ne pas attendre plusieurs minutes si on commence
à mesurer avec un gros condensateur!
Gamme 1 avec R=392K 0,1% soit de 0,001 nF à 2200,000nF

version RS232 (only)
source C18 :
18F_Capacim_ICM7555_CCP1_20Mhz_RS232_111226.c
Chargeur :
18F_Capacim_ICM7555_CCP1_20Mhz_RS232_111226.hex


Rajout de l'interfacage LCD2x16car .

Schema :
18F_Capacimetre.DSN

Schema Interface ICM7555 version AUTOCAL


La voila !
source C18 : 18F_Capacim_ICM7555_CCP1_20Mhz_RS232_LCD_120102.c
Chargeur :
18F_Capacimetre_2012.hex
autres : LCD2x16.h

Mode d'emploi

Presentation Presentation Check du Zero
Affichage message de presentation Affichage message Gamme Le Test de stabilite du ZERO à +- 5 counts n'est fait qu'au lancement du programme sur la moyenne de 10 mesures.
Affiche "OK" ou "BAD"
Attente Mesure Mesure SANS Cx
On attend ensuit l'appui du BP Start pour demarrer une serie de mesure
la premiere mesure est faite sur la gamme 1 R=392K (avec lancement simultanné du Timer3). si Tempo Timer3 depassee, on passe automatiquement sur la Gamme2 avec R=2.7K soit de 2.7µF à >2200µF
Suivant la gamme , on applique le bon coefficient pour la mise à l'echelle des counts afin d'afficher la mesure directement
en nanoF , ou en MicroFarad., donc digit extreme droite => +-1pF sur la gamme NanoFarad.
Si le test stabilité est
BAD, affichage de ??
au lieu de l'unite.
10 mesures succesives sont faites,
pour calcul sur la moyenne.
un calcul de stabilite (Maxi-Mini)*100/Moyenne ,donc en %
est envoyé sur RS232 pour controle stabilte.
dans l'exemple ci-dessus on n'a pas connecté Cx , on mesure donc ZERO ! et attente appui sur BP start
2em mesure Mesure de 2,2 uF condo de 2,2 uF
Attente appui BP start pour le
Lancement mesure avec Cx= 2,2µF
Message attente appui sur start pour prochaine mesure, afin de garder affichée la derniere mesure , ici 2,167µF autre mesure sur le meme 2,2µF,
faite 24H apres !
ecart < 0.04%
condo de 2000 uF condo de 2000 uF  
Mesure sur un 2000 µF
Affichage 5eme mesure (en counts )
1 mesure en 6,4 sec
resultat : 2086µF
apres 64 secondes!
 


Cette derniere version est la plus precise, ou plutot la plus fidele , parmi celles testées
N'importe comment je n'ai pas de condensateur etalon ou suffisament precis pour ameliorer l'etalonnage.
Resolution sur gamme 1 : +- 0.5 picoFarad
Resolution sur la gamme 2 : +- 0.5nF
Pour l'instant c'est MA SOLUTION pour pouvoir trier ou appairer correctement des condensateurs
ou determiner la valeur de ceux qui sont mal, ou pas du tout marqués.

Remarque sur les platines d'essai LAB-500 :
J'ai lu dans ce post http://www.electro-tech-online.com/microcontrollers/119900-pic-based-high-resolution-cap-meter-3.html#post986498
ayant trait justement à un capacimetre pouvant descendre au 1/100em de pF,
qu'une erreur de lecture : 107pF lu pour 22pF installé serait du à la capacite parasite des colonnes de cablages de la LAB-500
ce qui rendait souvent impossible la mise en oscillation du quartz associé au PIC.. ????
Je n'ai jamais eu de souci de quartz , meme avec 20Mhz encadré de 2x22pF...
J'ai donc fait des mesures sur ma platine LAB-500 ou est cablé mon prototype ICM7555 et la capacité à mesurer : nommee Cx

En temps normal, je n'ai rien en colonne 1 et colonne 3, la colonne 2 sert à placer la Capa Cx à Mesurer.

Sans Capa Cx:
Mesure entre colonne 1 et colonne 2 : 3pF
Mesure entre colonne 2 et colonne 3 : 3pF
Mesure avec colonne 1 et 3 reliees et colonne 2 => 7pF

Ce qui est coherent avec le resultat d'un autre interlocuteur qui annonce 3,1pF entre colonnes et NON PAS 87 pF !
Mon capacimetre n'est donc pas si mal , meme avec une resolution moins bonne que celui du post ci dessus.

Version avec R=1,2M au lieu de 390K pour la 1ere gamme

Rev 16/02/2012
R Gamme1 = 1,2Mohms au lieu de 392 K sur ICM7555
pour faire une calibration ;
recuperer les valeurs moyennes (cumulees sur 10 mesures) sur le terminal RS232 !
et ensuite lancer une regresion lineaire pour calculer la pente et l'offset de calibration
à renseigner ICI dans le source:

#define CZero_Max (860+4)*10
#define CZero_Min (860-4)*10
#define CZero_Anomalie 860+10
#define Gamme1_X 0.00016103
#define Gamme1_Offset -0.138
#define Gamme2_X 0.000069
#define Gamme2_Offset 0.04


Ici 860 est le nombre de count que j'ai obtenus avec C zero= mon condo de 100pF , valeur de base à +-10% !.
On declare la mesure instable si la mesure C zero deborde de +- 4 counts. ( Visu de ?? sur LCD au lieu de l'unite nF ou MicroF)
La valeur Czero_Anomalie permet de detecter si on a oublié d'enlever un condo à mesurer , lors d ela mise sous tension

Toutes les mesures indiquees sur le LCD sont issues de la moyenne de 10 mesures.
Gamme 1 : avec R=1,2MohmsK 1pF a 1000nF avec une résolution +-0,16pF
je n'ai pas pour autant rajouté de digit de mesure..Restons en à l'affichage limité au pF (0,001 nF) affiché.
vu que j'ai deja 2pF de capacite parasite VISIBLE sur ma Breadboard ..


On n'a pas encore le 1/10 de pF , mais bon ..
Gamme 2 inchangée avec R=2.7K 1µF a > 2000µF resolution +-0,1nF

source C18 : 18F_Capacim_ICM7555_CCP1_20Mhz_RS232_LCD_120216.c
Chargeur _
18F_Capacimetre_2012_1_2M.hex

 

Version avec R=2,2M pour la 1ere gamme et AUTOCAL .

Rev 18/02/2012
R Gamme1 = 2,2Mohms sur ICM7555
pour faire une calibration ;
recuperer les valeurs moyennes (cumulees sur 10 mesures) sur le terminal RS232 !

Le fait d'augmenter la resolution dans un rapport de 2200k/392k= ~24 fois ,
entraine aussi une augmentation de l'instabilité relative , c'est
pourquoi j'ai rajouté l'AUTO-CALIBRATION pour annuler la derive d'offset et de gamme.

Parametres de calibration
à renseigner ICI dans le source:

Nota:
il est possible de demarrer avec ces parametres par defaut, effectuer les mesures pour en deduire les nouveaux parametres par defaut.
Grace à l'autocalibration , on peut meme mesurer avec un quartz de 10MHz au lieu de 20MHz ! meme si on a le defaut BAD ou ?? affiché


#define CZero 1720 // correspond au nombre de count Timer pour Capa Zero (~100pF + capa parasite relais CALIB)
#define CZero_Max (CZero+20)*10 // tolerance superieure de Czero, cumulé sur 10 mesures !
#define CZero_Min (CZero-20)*10 // tolerance inferieure de Czero, cumulé sur 10 mesures !
#define CZero_Anomalie CZero+40 // pour Tester Anomalie condo present a la mise sous tension
#define Gamme2_X 0.000069 // definition en dur dans le programme
#define Gamme2_Offset 0.04 // definition en dur dans le programme

// les parametres Gamme 1 sont calcules automatiquement dans la phase CALIBRATION Gamme1
// au demarrage du programme ou sur demande via appui sur BP_CAL RA1
// Avec cette configuration Hardware, les coeff devraient etre autour de ces valeurs ci-dessous
float Pente=0.00008251;
float Zero=17189.0;
float Decalage=-0.14183402;

Ici la valeur de 1720 est le nombre de counts que j'ai obtenus avec C zero= mon condo de 100pF (à +-10%) + capa parasite contact relais CALIB.
On declare la mesure instable si la mesure C zero deborde de +-20 counts. ( avec Visu de ?? sur LCD au lieu de l'unite pF ou nF)
La valeur Czero_Anomalie permet de detecter si on a oublié d'enlever un condo à mesurer , lors de la mise sous tension

Toutes les mesures indiquees sur le LCD sont issues de la moyenne de 10 mesures.
Gamme 1 : avec R=2,2Mohms : Mesure de 0.1pF a 570nF avec une résolution +-0,082pF
L'affichage de fait donc en pF sur la gamme 1 et en nF sur la gamme 2..
La Gamme 2 ne comporte pas d'auto-etalonnage vu l'influence tres minime du decalage de zero..et debute maintenant à 600nF


Affichages supplementaires

Presentation Mesure pour compensation  du ZERO
Zero OK dans les limites imposees et STABLE Calibration sur C=470nF
Moyenne mesuree sur 470nF  5.699.892 counts ! Mesure lancee sur un 270nF
Resultat mesure C=270nF sur un condensateur noté 270nF :
3.200.689 counts
Mesure= 263.844 nF

en fin de mesure , la derniere mesure reste affichée, en attente appui sur BP Start qui activera le message
"Insert Cx Appuyer sur Start"

Software:
source C18 : 18F_Capacim_ICM7555_CCP1_20Mhz_RS232_LCD_Auto_120218.c
Chargeur _
18F_Capacimetre_Autocal.hex

Hardware et Mesures

Schema Capacimetre ICM7555 Mesures pour Calibration
18F_Capacimetre.DSN Tableau de mesures


Bill .Of .Material



Le resultat global devrait encore plus precis avec un ZOLI circuit imprimé.
En cours d'etude !...

Fichier ARES : Capacimetre_.LYT


Ameliorations possibles :
Zero et Calibration lancée toutes les x minutes , en se servant de Timer3.
Evaluer et compenser les derives en fonction de la temperature.
AUTOCAL sur gamme2 avec un condo etalon de 1000µF.. à suivre pour les courageux.

Je pourrais me contenter de cette version, MAIS avec ceci , je ne peux pas mesurer les SELFS !!
donc
A SUIVRE
avec LC_Meter



Retour à l'index general