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
3em 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 |
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:
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
La voila !
source C18 : 18F_Capacim_ICM7555_CCP1_20Mhz_RS232_LCD_120102.c
Chargeur : 18F_Capacimetre_2012.hex
autres : LCD2x16.h
Mode d'emploi
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: |
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
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
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
![]() |
![]() |
18F_Capacimetre.DSN | Tableau de mesures |
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