Objectifs pédagogiques

Les principaux objectifs de ce sujet de travaux pratique sont :

  • d'expérimenter la mise en œuvre de la conversion analogique numérique (CAN) sur une carte à microcontrôleur ;
  • d'évaluer les caractéristiques du convertisseur à approximations successives intégré dans le microcontrôleur de la carte Arduino Uno.

C'est aussi l'occasion de découvrir un composant électronique : le potentiomètre, qui permet à l'utilisateur de faire varier de façon continue une consigne exprimée par une tension d'entrée analogique.

Pour traiter ce sujet de travaux pratiques, il est recommandé d'avoir des connaissances minimales :

  • sur les types de données entiers et décimaux élémentaires utilisables dans le programme téléversé sur la carte à microcontrôleur (cf. les chap. C3‑II  et C3‑V ) ;
  • sur les résistors et notamment leur montage en pont diviseur de tension ;
  • sur la conversion analogique numérique (cf. chap. C3‑VII ).

Mise en situation

Montage expérimental

Tous les exercices sont à traiter en laboratoire de physique avec de véritables composants et instruments de mesure, constituant le montage électronique expérimental reproduit schématiquement sur la figure ci‑dessous (NB : la modélisation du montage faite sous Tinkercad a pour seul but d'obtenir cette schématisation du circuit, car les performances en simulation de l'application sont insuffisantes pour observer les phénomènes physiques consécutifs aux manipulations proposées).

Ce montage, à ne pas réaliser immédiatement, nécessite :

  • une carte Arduino Uno R3 ou équivalente (microprocesseur à cœur AVR 8 bits), avec un cordon USB pour son alimentation électrique et sa liaison au poste de travail (PC) ;
  • une platine d'essai (breadboard) de taille moyenne ;
  • un potentiomètre rotatif 10 tours à bouton gradué (50 divisions par tour) et compte‑tour, de résistance totale 10 kΩ ;
  • un résistor graphite/céramique 1/4 W max. de valeur ohmique nominale 100 kΩ (non représenté ci‑contre car utilisé seulement à l'exercice 3) ;
  • divers fils de connections de type jumper à connecteurs Dupont mâles ;
  • un multimètre numérique portatif (avec une résolution d'au moins 40 000 points pour obtenir des mesures de tension avec une précision meilleure que 1 mV) et des cordons de mesure spéciaux banane‑Dupont pour le raccorder à la platine d'essai.

Les composants sont fournis dans une boîte de TP pour chaque binôme. Tout ce matériel doit être remis soigneusement à l'état initial en fin de séance.

Travail demandé

Effectuer les manipulations en veillant au respect de l'ordre des opérations.

Concernant les câblages, veiller au respect des couleurs des fils de connexion et des résistances.

Sur le poste de travail, enregistrer au fur et à mesure les fichiers dans un répertoire de TP nommé TP_P2-1, lui‑même placé dans un répertoire principal nommé PHYSIQUE, lui‑même placé dans le dossier personnel d'étudiant.

  • En particulier, il faut y placer la feuille de calculs téléchargeable au lien suivant  ; elle est à compléter avec les mesures physiques demandées en cours d'expérimentation.
  • De plus, les fichiers de code source Arduino doivent être placés chacun dans un répertoire de projet homonyme (same basename, cf. chap. C2‑I C).

Attention !

  • Pour des questions de sécurité, le téléversement du programme dans la carte à microcontrôleur doit être effectué avant le câblage du montage. Sinon, on risque d'avoir un comportement inattendu et indésirable du montage lors du raccordement de la carte au poste de travail dû à l'exécution d'un programme installé auparavant..
  • Sur les diagrammes de la feuille de calcul, les courbes vertes représentent les valeurs théoriques attendues. Tout écart important des mesures par rapport aux valeurs de référence doit conduire à une remise en cause des mesures.

Répondre sur cahier ou fichier de texte aux questions qui nécessitent une explication littérale.

  1. Découverte du potentiomètre  –  Fonction caractéristique
    1. Raccorder temporairement les 3 fils de connexion du potentiomètre sur respectivement 3 colonnes différentes de puits de la platine d'essai. À l'aide du multimètre réglé en position ohmmètre (Ω), identifier alors les bornes du potentiomètre ① (première extrémité du résistor bobiné interne), ② (curseur mobile), ③ (deuxième extrémité du résistor bobiné interne) – et donc les couleurs des fils auxquels elles sont raccordées.
    2. Pour comprendre comment est constitué ce composant, on pourra se reporter à cette vidéo Y.
    3. Mesurer la résistance entre les bornes ① et ② (curseur) du potentiomètre à chaque tour entier du bouton rotatif, en prenant soin de lire attentivement les unités affichées par l'instrument (ne pas confondre les kΩ et les Ω !) Saisir les valeurs en kΩ dans les cellules C4 à C14 de la feuille de calcul.
    4. Compte‑tenu des mesures obtenues, à quel intervalle de valeurs de résistance correspond approximativement une rotation de un tour sur le bouton gradué ? Et pour une division ?
    5. Observer le diagramme de la fonction caractéristique du potentiomètre (résistance selon de l'angle de rotation effectué sur le bouton). Cette fonction est‑elle linéaire ?
    6. Pourquoi la résistance n'est‑elle pas nulle au point zéro de la course du bouton ?
    7. Mettre le multimètre hors service pour économiser sa batterie et rembobiner le potentiomètre en début de course dans le sens horaire (au zéro du premier tour).
  2. Tracé macroscopique de la fonction de transfert du CAN 
    1. Sur le poste de travail, dans le répertoire de TP, créer un répertoire de projet nommé adcStudy et dedans un fichier homonyme adcStudy.ino. Ouvrir ce fichier avec l'application Arduino IDE et, dans l'éditeur de code, copier‑coller le programme de lecture d'une tension analogique ci‑dessous.
    2. const int8_t POTENTIOMETER_PIN = A0;
      
      void setup()
      {
        Serial.begin(115200);
        Serial.println();
        Serial.flush();
        delay(1000);
      }
      
      void loop()
      {
        Serial.println(analogRead(POTENTIOMETER_PIN));
        delay(1000);
      }
      
      Raccorder la carte au poste de travail puis, dans le menu Outils de l'application, sélectionner le type de carte et le port USB de connexion. Téléverser le programme et s'assurer que l'opération s'est bien déroulée (cocher préalablement les paramètres d'information « Show verbose » dans le menu File/Preferences…). Débrancher la carte
    3. Câbler le montage du TP représenté schématiquement supra  mais au poste de travail. Appeler l'enseignant pour vérification avant toute mise en service.
    4. Rebrancher la carte au poste de travail. Dans l'application Arduino IDE, ouvrir le moniteur série (bouton en haut à droite de la fenêtre – cf. l'icône en figure ci‑contre et le chap. C3‑X C). Dans le menu à droite dans la barre de commande du moniteur, régler la vitesse de transmission en baud de la liaison série conformément à celle codée dans le programme (cf. la ligne nº 5). Vérifier alors que :
      • la valeur 0 s'affiche de façon répétée lorsque le bouton du potentiomètre est en début de course ;
      • la valeur 1023 s'affiche de façon répétée lorsque le bouton du potentiomètre est en fin de course.
      C'est le nombre en sortie du CAN de la carte Arduino, qu'on note Ns (cf. chap. C3‑VII C)).
      Également, relever la valeur de la tension Umax lorsque le potentiomètre est en fin de course. Reporter cette valeur dans la cellule C17 de la feuille de calcul. Vérifier alors que toutes les cellules de couleurs vertes s'affichent sans erreur et que les courbes de référence de numérisation de la tension apparaissent en vert sur les diagrammes.
    5. Compte tenu du nombre de tours de la course du potentiomètre et du nombre de divisions par tour sur la graduation du bouton :
      • À quel intervalle de valeurs de Ns correspond approximativement une rotation de un tour sur le bouton gradué ? À quel intervalle de tension cela correspond‑il ?
      • À quel intervalle de valeurs de Ns correspond approximativement une rotation de une division sur le bouton gradué ? À quel intervalle de tension cela correspond‑il ?
      * Pourquoi la tension mesurée au début de la course est‑elle absolument nulle alors que la résistance du potentiomètre est elle‑même non nulle ? (cf. question 1.3 supra )
    6. Remettre le potentiomètre dans sa position initiale (bouton en début de course dans le sens horaire). Effectuer les mesures demandées du nombre en sortie Ns du convertisseur (affiché dans le moniteur série) en ajustant le bouton du potentiomètre et en lisant l'affichage du multimètre, pour cibler approximativement (cf. la remarque ci‑dessous) les valeurs de consigne de la tension d'entrée Ue inscrites dans le tableau. Compléter les lignes 22 à 32, colonnes B et C, de la fiche de calcul.
    7. Remarque. Dans l'ajustement du potentiomètre, le plus important n'est pas d'obtenir les valeurs de consigne « rondes » pour Ue (0,500 V – 1,000V – etc. au mV près) mais des valeurs assez proches (à ±0,01 V près) pour lesquelles le nombre en sortie Ns du convertisseur est stable.
      De plus, il est impératif de ne pas toucher au montage une fois que la valeur de la tension d'entrée Ue est ajustée. En effet, déplacer les fils de connexion provoquer des variations des résistances de contact sur la platine d'essai et nuit à la stabilisation des valeurs de Ue et Ns.
      Enfin, la mesure dont la consigne est 5 V doit être obtenue avec le bouton complètement en fin de course, car elle doit correspondre à la tension de pleine échelle de la carte. En effet, c'est sur la base de cette mesure que la valeur du quantum de conversion est déterminée sur la feuille de calcul, et utilisée à l'exercice suivant.
    8. Au regard des mesures obtenues et de l'allure du diagramme de la fonction de transfert, que peut‑on conclure en termes de défauts macroscopiques potentiels du CAN du modèle de carte Arduino expérimenté ? (cf. le cours, chap. C3‑VII C)
  3. Étude microscopique des seuils de la fonction de transfert
    1. Débrancher la carte du poste de travail et modifier le câblage en rajoutant un résistor de 100 kΩ en série entre la borne ③ du potentiomètre et la broche 5V de la carte Arduino. Appeler l'enseignant pour valider ce montage.
    2. Sur le poste de travail, dans le répertoire de TP, créer un répertoire de projet nommé adcStepStudy et dans ce répertoire un fichier homonyme nommé adcStepStudy.ino. Y copier‑coller le programme de détection des seuils du CAN ci‑dessous :
    3. const int8_t POTENTIOMETER_PIN = A0; 
      
      void setup()
      {
        Serial.begin(115200);
        Serial.println();
        Serial.flush();
        delay(1000);
      }
      
      const int NB_OF_READING = 50;
      
      void loop()
      {
        long sumOfValues = 0;
        for (int i = 1; i <= NB_OF_READING; i++) {
          sumOfValues += analogRead(POTENTIOMETER_PIN);
          delay(20);
        }
        float meanValue = sumOfValues / (float) NB_OF_READING;
      
        if (abs(meanValue + 0.5 - ceil(meanValue)) < 0.1) { // step detection criteria
          Serial.print("Step ");
        }
        else {
          Serial.println(int(round(meanValue)));
        }
      }
      
      Rebrancher la carte au poste de travail et téléverser le programme.
    4. En partant du début de la course dans le sens horaire, tourner très lentement le bouton du potentiomètre jusqu'à ce que l'indication « step » s'affiche aussi régulièrement que possible dans le moniteur série. Relever alors la valeur de la tension d'entrée Ue sur le multimètre et la saisir dans la cellule B40 de la feuille de calcul. C'est le seuil de la marche nº 1 de la fonction de transfert du CAN.
    5. Compléter également la valeur nulle attendue pour la marche nº 0 (cellule B39)
      Recommencer cette procédure de mesure pour les valeurs 2 à 10 de Ns (cellules B41 à B49).
    6. Au regard des dernières mesures et de celles de l'exercice 2, que peut‑on conclure en termes de défauts potentiels du CAN du modèle de carte Arduino expérimenté ? (cf. le cours, chap. C3‑VII C)
    7. * Analyser le code source du programme de détection de seuils.
      • Quel est le rôle des lignes nº 5 à 20 ?
      • Comment la détection d'un seuil est‑elle déterminée ? (cf. la ligne nº 22)
      • On s'appuiera sur la représentation graphique générique de la marche de hauteur k de la fonction de transfert, donnée dans le cours, chap. C3‑VII C et sur la documentation de la fonction ceil (cf. chap. C2‑IV C) issue du module de bibliothèque standard cmath C++.