BTS Mesure BTS Mesure
DébutTP 1UARTLED RGBBilanCapteursDataloggingStationUltrasonCAN seriePontRégulationCO2

Objectif : Mise en œuvre d’un CAN série

Piloter un CAN série intégré avec un protocole de communication SPI.

Nous utiliserons le LTC1286 (CAN 12 bits à approximations successives intégré).

Notion de métrologie : erreur de gain, erreur d'offset.


Etape 1 : Câblage du CAN LTC1286
                 Exploitation  du datasheet LTC1286

Etape 2 : Réalisation et test du programme d'acquisition à l'aide des organigrammes fournis

Etape 3 : Evaluation de type A de l'incertitude du LTC1286 pour un étalon proche de 2,5 V

Etape 4 : Etalonnage du LTC1286

Le protocole SPI est une des liaisons série les plus répandues (avec l'I²C et l'UART)
sur des périphériques de types mémoires, horloges temps réelles, potentiomètre numériques…

Nous l'avons déjà utilisé pour la mise en oeuvre d'une carte SD à l'aide de la bibliothèque SPI.
Dans ce TP nous n'utiliserons pas cette bibliothèque (fréquence d'horloge de 4 MHz incompatible avec le LTC1286)

 



1) Câblage du CAN LTC1286 - Exploitation du datasheet

  • VCC = 5V
  • L'entrée  -IN  est mise à la masse.
  • La tension d'entrée sur  +IN  est appelée VIN.
  •  Mettre un condensateur C = 2.2 µF entre la masse et l'alimentation VCC ainsi qu'entre la masse et VREF.
  •  Les broches CLK (SCK <=> D13)  , DOUT (MISO : Master In Slave Out <=> D12)  et  CS (Chip Select ou Slave Select <=>D10)
     sont reliées aux entrées/sorties digitales 13,12 et 10 du microcontrôleur Arduino.

Questions préliminaires

On appelle N2 le mot binaire de 12 bits renvoyé sur la sortie DOUT par le CAN LTC1286.

1.1) Pourquoi est-il recommandé de mettre un condensateur au plus près des broches entre la masse et la tension de référence VREF?

1.2) Déterminer la relation donnant VIN en fonction de N2, VREF  et du nombre de bit du CAN utilisé.

1.3) Préciser la résolution du CAN ainsi que la valeur du quantum q.
        Mesurer au voltmètre le "5V" de l'Arduino. Remplacer VREF par cette valeur.
        Attention sur la figure q et Vin ont été calculés avec un VREF < 5 V...

1.4) En utilisant le datasheet et en ne prenant en compte que l'erreur de gain et d'offset :

  • calculer l'erreur type de gain en % de la pleine echelle ;

  • calculer Vin et son incertitude type lorsque N2=2041 et VREF = 5,00 V;

Évaluation de type B de l'incertitude : l’incertitude type n’est pas déterminée par une étude statistique
mais elle est « estimée » à partir d’informations : certificat d’étalonnage, classe des instruments, documentation constructeur

Exploitation de la documentation constructeur : le datasheet

L'erreur absolue en LSB  = Erreur de gain/2N * N2 + erreur d'offset
erreur en V = erreur en LSB * q

L'incertitude type (TYP, u) correspond à un intervalle de 1σ (écart-type sigma, s) soit un niveau de confiance de 68 % .
L'incertitude max  (MAX) correspond à un intervalle de 4σ soit un niveau de confiance de 99,994 % .
L'incertitude élargie (U) pour un niveau de confiance de 95 % correspond à un intervalle de 2σ.

L'inceritude élargie se note U  (de l’anglais « Uncertainty »)
Le Guide pour l'expression de l'incertitude de mesure (GUM) constitue le document de référence fondamental de la métrologie
Guide to the expression of Uncertainty in Measurement

  • calculer Vin et son incertitude à un niveau de confiance de 95 % lorsque N2=2041 et VREF = 5,00 V;

  • écrire le résultat sous la forme Vin = 2,427 ± 0,003 V  

Pour contrôler et étalonner le LTC 1286 nous allons utiliser le voltmètre de table FI2960 MT.
Voici un extrait de la documentation constructeur :

Soit une mesure de 005,0087 mVDC (6½ digits) sur la gamme 100mV. Comme pour le LTC 1286 on distingue :
    - une erreur de gain en % de la lecture :  0,003%*5,0087 = 0,00015 mV
    - une erreur d'offset en % de la gamme : 0,003%*100 = 0,003 mV
    Pour une erreur absolue de 0,00315 mV. V = 5,0087
± 0,0032 mV

1.5) Quelle est erreur absolue pour une mesure V = 02,4717 V faite par le FI2960MT ?
        V = 2,4717 ± ?
        Que peut-on dire de cette erreur devant celle du LTC1286 ?

1.6) Quel est intérêt d'utiliser un LTC1286 à la place du CAN de l'Arduino ?

 

 2) RÉALISATION ET TEST DU PROGRAMME D'ACQUISITION

Nous n'utilisons pas la bibliothèque SPI car sa fréquence (4MHz) est trop élevée pour le LTC1286 (200 kHz max).

Voici le protocole à respecter d'après le datasheet :

Pour lire le résultat de la conversion il faut :

  • mettre CS à 0 ;
  • envoyer 2 impulsions d'horloge ;
  • puis pour les 12 impulsions d'horloge suivantes,
    après chaque impulsion d'horloge le LTC1286 envoie successivement les bits B11 (MSB) à B0 (LSB);
    chaque bit est lu grâce à la fonction digitalRead() : Dout=digitalRead(12);
    N2 = B11*211+B10*210+...+B1*21+B0*20
  • mettre CS à 1 (fin de la lecture de N2).

Cahier des charges :

2.1) A l'aide des organigrammes ci-contre, construire un programme permettant de communiquer avec le LTC1286.
       La structure du programme comportera :
               - un programme principal
               - une fonction utilisateur Horloge()
               - une fonction utilisateur Acquisition()

  

2.1-a)  Réaliser le sous-programme Horloge et le tester.
            Régler la temporisation pour avoir une fréquence d’environ 10 kHz à 1 kHz près (fmax = 200 kHz d’après le datasheet)

Le chronogramme ci-dessous montre que l'état haut de l'horloge dure 55 µs au lieu de 50 µs. Soit 5 µs de trop   => delayMicroseconds(45);
Le chronogramme ci-dessous montre que l'état bas de l'horloge dure 60 µs au lieu de 50 µs. Soit 10 µs de trop  => delayMicroseconds(40);

2.1-b) Réaliser le sous-programme Acquisition et le tester en lançant une acquisition.

2.1-c) Finir par le programme principal LTC1286, lequel lance des acquisitions en boucle toutes les 500 ms
          et affiche sur le moniteur série : "12    2047    2.427"  soit k  Tab-> N  Tab-> Vin
          k numéro de la mesure tabulation (« \t ») N tabulation (« \t ») Vin (avec 3 chiffres après la virgule et retour à la ligne).
          Dans le setup ajouter :  Serial.println("Mesure \tN \tVin en V");

2.2) Pour une valeur VIN de 2,5 V contrôlée au multimètre de table,
       relever avec l'analyseur logique les signaux CS, CLK et DOUT montrant le cycle complet de l'acquisition d'un mot binaire N2.
       Retrouver à partir de ces chronogrammes, la valeur du mot binaire N2 reçu.
       Mesurer le temps nécessaire à réaliser un cycle acquisition.
       Joindre au compte rendu une capture d'écran des chronogrammes

Evaluation de type A de l'incertitude - Fidélité et justesse.

Evaluation de type A : c’est le cas où l'opérateur réalise une série de mesures répétées dans les conditions de répétabilité.
Elle se fonde sur l’application de méthodes statistiques à une série de valeurs expérimentales répétées.
L’incertitude-type u (ou s) est alors déterminée à partir du calcul de l’écart-type empirique corrigé sn-1

Condition de répétabilité : condition de mesurage dans un ensemble de conditions qui comprennent la même procédure de mesure,
 les mêmes opérateurs, le même système de mesure, les mêmes conditions de fonctionnement et le même lieu,
ainsi que des mesurages répétés sur le même objet ou des objets similaires pendant une courte période de temps

Fidélité : «Étroitesse de l'accord entre les indications ou les valeurs mesurées obtenues par des mesurages répétés du même objet ou d'objets similaires dans des conditions spécifiées » (VIM).

Le défaut de fidélité résulte des erreurs aléatoires.

Le défaut de fidélité sera quantifié par l’écart type de la série de meure.  u = Sn-1

Justesse de mesure : «Étroitesse  de  l'accord  entre  la  moyenne  d'un  nombre  infini  de  valeurs  mesurées répétées  et  une  valeur  de référence » (VIM).

biais de mesure (erreur de justesse) :

Le voltmètre FI2960MT nous donne la mesure de référence = yréférence

Le biais de mesure est une erreur systématique qui peut être corrigée par un étalonnage par exemple.

Loi normale : Lorsque les causes d'incertitudes sont nombreuses, indépendantes, et donnent des erreurs du même ordre de grandeur,
 l'histogramme de répartition de la série de mesures tend vers une courbe de Gauss lorsque le nombre n de mesures tend vers l'infini.

La loi normale n'est caractérisée que par deux paramètres :

  •  m : moyenne (indiquant la valeur centrale)
  •   σ (sigma <=> s) écart-type (indiquant la largeur de la courbe). 

Incertitude élargie U : L’incertitude élargie U est donc obtenue en multipliant l’incertitude-type composée par un facteur k
appelé facteur d’élargissement, qui permet d’obtenir un intervalle correspondant à un niveau de confiance choisi.

Pour une loi de distribution normale (cas le plus fréquent), le facteur d’élargissement k est assimilable au coefficient de Student t.
t est disponible dans la table de Student : il varie selon le nombre de mesures n et le niveau de confiance.

3) Evaluation de type A de l'incertitude du LTC1286 pour un étalon proche de 2,5 V

3.1)  - Réaliser une série de 300 mesures dans les conditions de répétabilité.
        - Arrêter le défilement automatique, sélectionner les 300 premières mesures et les copier ;
          coller les mesures dans un tableau Excel.
        - Rechercher et remplacer tous les . par des , dans Excel.
        - Calculer dans Excel l’écart-type  et la moyenne de cette série de mesure.

3.2)  Tracer l'histogramme de la distribution des mesures à l'aide d'Excel
        Tuto Excel : la fonction matricielle FREQUENCE(tableau_données, matrice_intervalles)
        Joindre l'histogramme à votre compte rendu.
        L'allure de cette distribution suit plutôt quelle loi ?  


3.3)  Calculer le biais de mesure (quantification de l’erreur de justesse)
        Exprimer ce biais en V et en LSB.
        Le LTC1286 est-il juste ? Comment peut-on rendre le LTC 1286 plus juste ?

3.4)  Calculer l’écart-type ufidelité de cette série de mesure.
        Exprimez ufidelité en volt et en LSB.
        En déduire l'incertitude élargie Ufidélité pour un intervalle de confiance de 95%
        Le LTC1286 est-il fidèle ? Comment peut-on rendre le LTC 1286 plus fidèle ?

4) Etalonnage du LTC1286

4.1) Modifier le programme principal afin d’afficher comme résultat la valeur moyenne de 10 acquisitions successives.
       Quelle erreur permet de réduire cette méthode ?

4.2)  Mesurer à l'aide d'un voltmètre de référence la valeur « exacte » de VIN.
        En déduire la tension d'erreur du CAN (différence entre la valeur mesurée et la valeur réelle).
        La tension de référence sera celle du voltmètre FI2960MT.
        Pour chaque mesure calculer l'erreur de mesure.
        Remplir le tableau de mesure suivant :

Référence en Volt

0,5

1

2

3

4

4,5

4.9 

N

 

 

 

 

 

 

 

LTC1286 en Volt

 

 

 

 

 

 

 

Erreur en mV

 

 

 

 

 

 

 

Erreur en LSB

 

 

 

 

 

 

 

4.3) Tracer V(N). Établir son équation.
        Comparer la pente de la droite et le quantum.
        Exprimer cette erreur de gain (pente de la droite) en LSB. Comparer celle-ci à l'erreur de gain annoncée par le constructeur.
        Exprimer la tension d'offset en LSB.
        Comparer celle-ci à l'erreur d'offset annoncée par le constructeur.
        Votre LTC est il dans l'intervalle de confiance de 68%, 95% ou 99,994% ?

4.4) Utiliser l'équation obtenue par l'étalonnage précédant pour calculer Vin en fonction de N2.
        Remplir à nouveau le tableau 2.5) Les erreurs sont-elles réduites ?
        Existe-t-il encore un biais de mesure ?
        Tuto Excel :  la formule matricielle DROITEREG. Ecart type des résidus : u = Sey = Sn-2

5) Il vous reste du temps ?

 Ajouter au montage un écran LCD qui affiche q, N et la tension mesurée

6) Pour aller plus loin.

Il est possible d'utiliser la bibliothèque SPI pour communiquer avec le LTC1286.

Cela permet de communiquer plus vite.

Pour cela il faut :

  • diminuer la fréquence d'horloge (16/4 = 4 MHz par défaut) en dessous de 200 kHz grâce à la fonction :
    SPI.setClockDivider(SPI_CLOCK_DIV128);     // Horloge à 16000/128 = 125 kHz

  • lire l'octet de poids fort et éliminer les 2 bits haute impédance (HI-Z) et le bit nul
    les 3 bits de poids fort sont à éliminer
    (en SPI_MODE0, les bits sont lus sur un front montant d'horloge)
    pour cela nous allons faire un décalage à gauche de  3 bits et garder  les 5 bits à droite
    N1=SPI.transfer(0x00)<<3;

  • lire l'octet de poids faible
    seuls les 7 bits à gauche sont à garder (5+7 = 12 bits) le dernier bit lu est en haute impédance (HI-Z)
    pour cela nous allons faire un décalage à droite de 1 bit et garder  les 7 bits à gauche  :
    N2=SPI.transfer(0x00)>>1;

  • on assemble les 2 octets pour reconstituer le mot transmis
    N1 correspond au 5 bits de poids fort B11 à B7
    il faut déplacer le bit de N1 de rang 7 au rang 11 en le multipliant par 24
    N2 correspond au 7 bits suivants B6 à B0
    N=16*N1+N2;

Voici un programme réalisant ce cahier des charges.

Téléverser ce programme et observer à l'analyseur logique CS (10), MISO (12)  et SCK (13).
Combien de temps faut-il au LTC1286 pour transmettre N ?

Remplacer SPI_CLOCK_DIV128 par SPI_CLOCK_DIV64
Quelle est la nouvelle fréquence d'horloge ?

Le LTC1286 fonctionne-t-il encore correctement ?