Table des matières

Détecteur d'inductance mutuelle

1. Introduction

Ce document décrit un dispositif avec microcontrôleur permettant de détecter et de mesurer un couplage par inductance mutuelle entre une bobine et un autre circuit.

Le fonctionnement repose sur un oscillateur LC. Il est décrit dans Détecteur d'inductance mutuelle.

Lorsqu'un courant induit se développe à proximité de la bobine de l'oscillateur LC, sa fréquence d'oscillation augmente légèrement. Nous réalisons la détection de cette variation de fréquence au moyen d'une boucle à verrouillage de phase à oscillateur numérique. L'oscillateur commandé en tension (OCT) est réalisé par un Arduino, ce qui permet d'accéder directement à la fréquence.

Le dispositif permet aussi de détecter la présence d'un matériaux ferromagnétique à proximité de la bobine.

2. Dispositif électronique

Le signal à analyser est une oscillation quasi sinusoïdale fournie par l'oscillateur LC. Le signal délivré par l'OCT numérique est binaire (signal carré). Le détecteur de phase peut être réalisé de deux manières :

L'inconvénient de la première méthode, outre son coût plus élevéà cause du multiplicateur, est sa sensibilité à l'amplitude en sortie de l'oscillateur, diminue lorsqu'une inductance mutuelle est présente. Nous optons donc pour la seconde solution.

image/svg+xml Ve L1 r1 C R 10 V -10 V Vs 4,7 kΩ 10 kΩ Ra Rb TL 081 1000 Ω 1,0 μF 4,7 kΩ D11 A0 GND 5 V Arduino MEGA R1 R2 C uf ud 47 mH 8,5 Ω Filtre 10 V -10 V TL 081 33 kΩ 10 kΩ 100 kΩ 1,92 V TLV2372 5 V 47 kΩ 47 kΩ Comparateur 4030 XOR u1 u2 Oscillateur LC Ve Vo Décaleur

Le fonctionnement de l'oscillateur LC et du couplage inductif avec un autre circuit est décrit dans détecteur d'inductance mutuelle.

Cet oscillateur utilise un ALI alimenté en +10/-10 V. La tension Ve (entrée du filtre LC et sortie de l'ALI) est donc une tension alternative de valeur moyenne nulle, dont l'amplitude est d'environ 4 V. Cette amplitude dépend du réglage du gain de l'ampliticateur et de la présence plus ou moins grande d'une induction mutuelle. L'information qui nous intéresse dans ce signal est sa fréquence, qui est extraite au moyen d'une boucle à verrouillage de phase. Le décaleur est un montage ALI de type inverseur qui effectue une petite atténuation de l'amplitude et applique un décalage de tension (offset) de 2,5V. La tension Vo(t) a donc une valeur moyenne égale à uref=2,5;V et ne dépasse jamais 5 V ni de descend en-dessous de 0. Si l'amplitude en sortie de l'oscillateur est plus grand, il suffit de changer la résistance 33;kΩ et d'ajuster le potentiomètre afin que la valeur moyenne en sortie soit toujours 2,5V.

Le comparateur permet d'obtenir un signal binaire (niveaux 0 et 5 V) à partir du signal de l'oscillateur. Il est réalisé au moyen d'un ALI pleine échelle (rail to rail) TLV2372 alimenté en 0-5 V par l'Arduino. L'utilisation d'un comparateur à collecteur ouvert est aussi possible, et certainement souhaitable si la fréquence de l'oscillateur LC est très élevée. En principe, le signal en sortie du comparateur doit avoir un rapport cyclique exactement égal à 1/2. Si ce n'est pas tout à fait le cas, il suffit de corriger avec le potentiomètre du décaleur.

La porte OU-exclusif, aussi alimentée par l'Arduino, permet de faire la détection de phase entre le signal délivré par L'Arduino sur sa sortie D11 et la sortie du comparateur. La sortie de la porte est envoyée dans un filtre passe-bas. les valeurs employée ici sont R1=10, C=1μF et R2=0. Elles devront bien sûr être adaptées à la fréquence de l'oscillateur, qui est ici d'environ 730Hz. La sortie du filtre est envoyée sur l'entrée analogique A0 de l'Arduino. Cette tension sert à commander la fréquence du signal binaire en sortie D11.

3. Programme Arduino

Le rôle du programme Arduino est d'implémenter un OCT numérique. Il utilise pour cela le Timer 1 et l'entrée A0 du convertisseur A/N. Le fonctionnement de cet OCT est expliqué en détail dans boucle à verrouillage de phase à oscillateur numérique.

Soit fo la fréquence de l'oscillateur LC en l'absence de circuit secondaire et To la période correspondante. Avec les valeurs indiquées sur le schéma ci-dessus, cette fréquence est 733Hz.

La présence d'un objet métallique ou d'une bobine secondaire fermée à proximité de la bobine engendre une variation de fréquence positive, ou négative si l'objet est ferromagnétique. Notons Δf la variation de fréquence (positive ou négative) que l'on souhaite pouvoir détecter. Dans un premier temps, il faut régler le gain de l'amplificateur de l'oscillateur (au moyen du potentiomètre de la rétroaction) afin que les oscillations soient maintenues pour toutes les positions du circuit secondaire prévues. Ce réglage permet aussi d'estimer Δf.

La pulsation du signal en sortie de l'OCT (sortie D11 de l'Arduino) est :

ω2=ω0+Ko(uf-uref)(1)

Le comparateur de phase (porte XOR et filtre passe-bas) réalise l'opération suivante :

uf=Kd(φ1-φ2)(2)

Dans le cas présent où la porte XOR fonctionne en 0-5 V, on a :

Kd=5π=1,6Vrad-1

Pour que la boucle reste verrouillée dans la gamme de fréquence voulue, il faut que :

Ko>20πΔf(3)

Il faudra donc choisir le gain de l'OCT, c'est-à-dire Ko, en fonction du niveau de perturbation auquel on soumet l'oscillateur. Si Δf est faible, une valeur de Ko juste suffisante (avec une marge de sécurité) est souhaitable car elle donnera le maximum de sensibilité. Si Δf est plus grand, il faut bien sûr augmenter le gain de l'OCT afin de maintenir le verrouillage de la boucle dans toute la plage de fréquences.

La fonction setup effectue la configuration du Timer 1, qui permet de réaliser l'OCT. Le gestionnaire d'interruption est appelé avec une périodicité To. Son rôle est de mettre à jour la fréquence du signal généré par le Timer 1 en fonction de la tension présente sur l'entrée A0. La variable icr_11 contient la valeur maximale atteinte par le compteur. La fréquence du signal peut être calculée à partir de icr_11. C'est ce que fait la fonction loop, toutes les 500 ms.

arduinoOCT.ino
#include "Arduino.h"
volatile uint16_t icr_1, ocra_1, icr_11, ocra_11;
volatile int16_t input=0;
uint32_t period1;
uint16_t diviseur[6] = {0,1,8,64,256,1024};
uint8_t d1,d4,d3;
float Th;
float Go;

float fo = 731; // fréquence de référence
float Ko = 40.0; // gain de l'OCT (en rad/V/s)

void setup() {
  Serial.begin(115200);
DDRB |= 1 << PORTB5; // OC1A (timer 1) configurée en sortie (D11)

cli(); // désactivation des interruptions
// Configuration de l'OCT
// Oscillation générée avec Timer1 (sortie D11)
TCCR1A = 0;
TCCR1A |= (1 << COM1A1) ;// clear OC1A on compare match when up-counting, reset OC1A on compare match when down-counting
TCCR1B = 1 << WGM13; // phase and frequency correct pwm mode, top = ICR1
period1 = 1/fo*1e6; // période en microsecondes
d1 = 1;
icr_1 = (F_CPU/1000000*period1/2/diviseur[d1]); // valeur maximale du compteur, pour définir la période
Th = 1.0/(F_CPU/1000000/diviseur[d1]); // période de l'horloge (en us)
Go = 5.0*Ko/(2*PI*1024)*period1*1e-6;
ocra_1 = icr_1/2; // rapport cyclique = 1/2
ICR1 = icr_1;
OCR1A = ocra_1;
TIMSK1 = 1 << TOIE1; // overflow interrupt enable
TCCR1B |= d1; // déclenchement du compteur avec choix du diviseur d'horloge


// configuration de l'ADC
ADCSRA = 0;
ADCSRA |= (1 << ADEN); // enable ADC
ADCSRA |= 0 ; // prescaler
ADCSRB = 0;
ADMUX = 0b01000000 | 0; // REFS0 et ADC0
ADCSRA |= 0b01000000; // start ADC
sei();// activation des interruptions
}

// Changement de la fréquence de l'OCT à chaque cycle
ISR(TIMER1_OVF_vect) { // Timer 1 Overflow interrupt
  input = ADCL | (ADCH <<8);
  icr_11 = 1.0*icr_1/(1+Go*(input*1.0-512));
  ocra_11 = icr_11/2;
  ICR1 = icr_11;
  OCR1A = ocra_11;
  ADCSRA |= 0b01000000; // start ADC
}

void loop() {
  delay(500);
  float f = 16e6/(icr_11*2*diviseur[d1]);
  Serial.print(f); Serial.println(" Hz"); 
}
    	   

4. Test

Le programme Arduino permet de suivre la variation de fréquence lorsqu'une bobine (en circuit fermé) est approchée de la bobine de l'oscillateur LC, ou bien lorsqu'eun pièce métallique est introduite dans la bobine.

Il faut remarquer que la fréquence de l'OCT, qui est l'information qui nous intéresse, est mise à jour à la fréquence de l'oscillateur. Il sera donc possible de stocker la fréquence dans un tampon afin d'obtenir un signal de fréquence échantillonné, à une fréquence d'échantillonnage de l'ordre de 500 Hz ou plus (sous réserve que la partie logicielle suive).

Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.