Vous êtes sur la page 1sur 13

Projet électronique : Capacimètre Numérique à base du

microcontrôleur PIC16F877A

Rappel des cours

Tout savoir sur les condensateurs

Les potentiomètres

Les diodes

Le Microcontrôleur PIC 16F876A

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

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é !

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

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.

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

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.

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

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 :

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

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 :

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

Présence de D3 : Vin = 4v AC, f=50Hz :

Programme MikroC :

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

#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;

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

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);

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

// 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," ");

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr


Projet électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A

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.

Télécharger gratuitement le fichier du projet


électronique : Capacimètre Numérique à base du
microcontrôleur PIC16F877A (Schéma ISIS) :
Capacimètre Numérique à base du microcontrôleur
PIC16F877A – ISIS

FPGA | Arduino | Matlab | Cours @ www.electronique-mixte.fr

Vous aimerez peut-être aussi