Rappel des cours
-
Tout savoir sur les condensateurs
-
Les potentiomètres
-
Les diodes
-
Le Microcontrôleur PIC 16F876A
-
Circuits à diodes
Principe de fonctionnement du montage électronique :
Plusieurs techniques sont disponible dans la littérature pour la mesure de la capacité plus au mois compliquées. La plus part de ses méthodes nécessitent soit la connaissance de fréquence avec précision ou une calibration manuelle.
Méthode ampèremètre-voltmètre :
Le principe de la méthode consiste d’imposer une tension sinusoïdal à une fréquence fixe àla borne du condensateur puis mesurer le courant efficace. L’impédance égale à 1/(cw) en module égale le rapport entre la tension et le courant en valeurs efficaces.
Dans cette technique il faut connaitre trois paramètres : La fréquence, la tension et le courant qui n’est pas évident à mettre en ouvre !
Pour plus des renseignements sur les autres méthodes, pour pouvez télécharger le fichier PDF suivant : Cours Mesure Capacité
Méthode pont diviseur des capacités :
C’est une méthode originale très simple à mettre en œuvre, elle est semblable à la méthode utilisée dans le projet Ohmmètre Numérique Le circuit de base est un pont diviseur de capacité !
Avec C_REF la capacité de référence connue est fixe avec une grande précision. C_MES : la capacité à mesurée. La tension Vin est un tension sinusoïdal à fréquence fixe, la précision de fréquence n’a pas trop d’importance. La tension d’entrée doit être inférieur à 5V (valeur maximale). Pour simplifié les calculs, on prend C_REF =C1, C_MES=C2.
On constate dans l’équation (1) que la capacité C2 (C_MES) ne dépend que de la tension d’entrée, la tension de sortie et la capacité de référence C1. La formule montre que la capacité C2 est indépendante de la fréquence ! C’est cette équation qu’on va implémenter dans le microcontrôleur.
Le microcontrôleur PIC16F877A fait l’acquisition des des tensions Vin (AN0) et Vout (AN1), puis il calcul la valeur maximale des deux signaux ensuite déduire la capacité C2 en utilisant l’équation (2).
Remarque :
Le circuit de mesure n’est pas protéger contre les surtensions ainsi que l’alternance négative de la sinusoïde peut détruire le port du microcontrôleur 🙁 . Voila un petit montage qui permet d’écrêter la tension à +/-5V puis supprimer l’alternance négative.
Le circuit est robuste, il permet de faire les mesures même si le signal est distordu tant qu’il est périodique (signal écrêté) !
- Vin0 : La tension sinusoïdal d’entrée du montage non protégée de fréquence fixe
- Vin : La tension d’entrée du pont protégée
- Vout : La tension de sortie du pont
- R1 : Résistance de la protection des diodes
- D1, D2 : Diode Zener Pour limiter la tension à +/-4.7V
- D3 : Diode de suppression de l’alternance négative
- C2 : Capacité de référence
- C2 : Capacité à mesurée
Absence de D3 : Vin = 10v AC, f=50Hz :
On constate que le micro est bien protégé contre la surtension, par contre l’alternance négative est encore présente !
Présence de D3 : Vin = 10v AC, f=50Hz :
Présence de D3 : Vin = 4v AC, f=50Hz :
Programme MikroC :
#define C2 1e-6
#define Ref_ADC 5.0
#define Max_ADC 1023.0
#define Init_Vlaue 0.0
#define Count_Max 256
/* LCD pinout settings */
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;
// Pin direction
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;
double Capa_uF=0.0;
double Max_Vin=0.0;
double Max_Vout=0.0;
double ADC_Volt=0.0;
unsigned int Data_ADC=0;
long Count_Perdiode=0;
long i=0;
char Capa_F_Char[16];
char Max_Vin_Char[16];
char Max_Vout_Char[16];
void main()
{
// Initialisation LCD, ADC
Lcd_Init();
ADC_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1, 5, "Capacitence");
Lcd_Out(2, 16, "uF");
TRISA = 0xFF;
TRISB = 0x00;
PORTB=0x00;
PORTB=0x00;
ADCON1=0x00;
while(1)
{
// Mesure de la valeur maximale de la tension d'entrée (Vin)
Data_ADC= ADC_Read(0);
ADC_Volt =(double)Data_ADC * Ref_ADC/Max_ADC;
if( ADC_Volt>= Max_Vin) Max_Vin= ADC_Volt;
FloatToStr(Max_Vin, Max_Vin_Char);
// Mesure de la valeur maximale de la tension de sortie (Vout)
Data_ADC= ADC_Read(1);
ADC_Volt =(double)Data_ADC * Ref_ADC/Max_ADC;
if( ADC_Volt>= Max_Vout) Max_Vout= ADC_Volt;
FloatToStr(Max_Vout, Max_Vout_Char);
// Calcul de la valeur de la capacité C1 en uF
Capa_uF = 1e6*C2*((Max_Vin/Max_Vout) - 1.0);
FloatToStr(Capa_uF, Capa_F_Char);
// Mise à jour des valeurs maximales
Count_Perdiode++;
if( Count_Perdiode == Count_Max)
{
Max_Vout =Init_Vlaue;
Max_Vin = Init_Vlaue;
Count_Perdiode=0;
}
// Affichage
Lcd_Out(2,3,Capa_F_Char);
Lcd_Out(2, 16, "uF");
Lcd_Out(2,12," ");
}
}
Commentaires sur le programme :
- La valeur Max_Count permet de définir une période de réinitialisation des valeurs maximales des tensions mais pourquoi faire ? Le programme permet de garder en mémoire les valeurs maximales des tensions, si par exemple une excursion est apparue peut générer une fausse mesure d’ou l’intérêt de définir une période de mise à zéro. Vous pouvez augmenter la valeur pour augmenter la période de réinitialisation
- La capacité C1 est fixée à 1uF, vous pouvez changer la valeur à condition de changer la valeur externe de C2. Le choix de sa valeur dépend de la valeur de C1, de préférence plus proche de C2 pour gagner en précision.