Objectifs pédagogiques

Les principaux objectifs de ce sujet de travaux pratique sont de découvrir :

  • le condensateur polyester et son utilisation pour lisser les sauts de tension ;
  • le référencement du potentiel des entrées logiques d'une carte de développement, typiquement une Arduino Uno R3, à l'aide de résistors dits de tirage – pulldown et pullup ;
  • les phénomènes de rebond électrique lors d'un appui sur un bouton‑poussoir ou plus généralement la fermeture ou l'ouverture d'un contact électrique ;
  • et les moyens matériels et logiciels pour remédier à ces phénomènes adventices.

Un objectif secondaire réside aussi dans la prise en main et l'utilisation d'un oscilloscope USB, typiquement un Digilent Anolog Discovery AD3 et son application associée WaveForms.

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

  • en électrocinétique (notions de tension, de circuit, de masse, cf. le cours de Sciences de l'Ingénieur , partie II, pp. 5 à 6) ;
  • en informatique (constitution d'un code source, fonctionnement temps‑réel d'une carte à microcontrôleur – cf. module C , parties C1C2).

Mise en situation

Tous les exercices sont à traiter en laboratoire de physique avec de véritables composants électroniques et, pour étudier leurs caractéristiques, des instruments de mesure (multimètre, oscilloscope).

Matériel d'expérimentation

Ce matériel est fourni dans une boîte de TP pour chaque binôme. Il est à remettre dans le même état rangé en fin de séance. Il comprend :

  • une carte Arduino Uno R3 ou équivalente (microprocesseur à cœur AVR 8 bits – cf. le cours, chap. C1‑III ), avec un cordon USB pour son alimentation électrique et sa liaison au poste de travail (PC) ;
  • une platine d'essai (breadboard) de taille moyenne (2 × 30 colonnes de puits de connexion et 2 × 2 lignes communes d'alimentation) ;
  • divers fils de connections de type jumper à connecteurs Dupont mâles, ou de type cavalier ;
  • quatre résistors graphite/céramique 1/4 W max. de valeur ohmique nominale 220 Ω, 4,7 kΩ, 10 kΩ et 1 MΩ ;
  • deux condensateurs à film polyester métallisé de capacité nominale 10 nF et 100 nF ;
  • une led rouge d'intensité lumineuse maximale 20 mcd, à lentille ⌀5 mm ;
  • un bouton‑poussoir monostable à 1 contact NO (normally open), 2 × 2 broches.

Instruments de mesure

Les instruments de mesure nécessaires sont à disposition sur les établis :

  • un multimètre numérique portatif true RMS AC+DC ;
  • un oscilloscope numérique USB 2 voies (cf. la photo ci‑contre du Digilent Anolog Discovery AD3 à titre d'exemple).

Les cordons de mesure sont fournis avec le matériel de TP (notamment deux jeux de cordons rouge/noir à connecteurs mixtes « banane-Dupont » spécialement préparés). Ils doivent être remis en place de façon ordonnée 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_P1-3, 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.
  • Tout écart important des mesures par rapport aux valeurs de référence doit conduire à une remise en cause des mesures.
  1. Condensateur de lissage
    1. Sur le poste de travail, dans le répertoire de TP, créer un répertoire de projet nommé squareSignal et dedans un fichier homonyme squareSignal.ino. L'ouvrir avec l'application Arduino IDE et y copier‑coller le programme ci‑dessous.
    2. const uint8_t SIGNAL_PIN = 7;
        
      const uint32_t HALF_PERIOD_MICROS = 15000; // in microseconds
        
      void setup()
      {
        pinMode(SIGNAL_PIN, OUTPUT);
      }
        
      void loop()
      {
        digitalWrite(SIGNAL_PIN, HIGH);
        delayMicroseconds(HALF_PERIOD_MICROS);
        digitalWrite(SIGNAL_PIN, LOW);
        delayMicroseconds(HALF_PERIOD_MICROS);
      }
      
      Téléverser le programme dans la carte et sassurer que l'opération s'est achevée avec succès (cocher préalablement les paramètres d'information « Show verbose » dans le menu File/Preferences…). Débrancher la carte
    3. Préalablement au câblage du montage de la question suivante, avec le multimètre portatif et en s'aidant de la platine d'expérimentation, mesurer les caractéristiques suivantes, en reportant au fur et à mesure les valeurs sur la feuille de calcul (lignes 45) :
      • la capacité C de chaque condensateur (ces valeurs sont‑elles conformes à leur spécification de qualité ? – cf. la lettre « J » ou « K » inscrite après leur capacité ) ;
      • la résistance R du résistor de 10 kΩ utilisée pour le montage.
    4. Réaliser le montage – un classique circuit RC série – conformément à la représentation schématique ci‑contre, avec le condensateur de 100 nF et en utilisant la voie nº 1 de l'oscilloscope.
    5. Attention ! Sur un oscilloscope numérique isolé comme ceux de la série AD de Digilent, il est recommandé de raccorder le connecteur de retour de la voie utilisée (typiquement repéré 1‑ pour la voie nº 1) au connecteur GND de l'oscilloscope et de la carte à microcontrôleur. On utilise alors 3 fils de l'oscilloscope (1+, 1-, GND) et non pas seulement 2 comme représenté sur la figure ci‑contre.
      Appeler l'enseignant pour valider le montage. Puis rebrancher la carte Arduino, raccorder l'oscilloscope au poste de travail et de lancer son application – typiquement, WaveForms (cf. le logo ci‑contre, à trouver dans le panneau de lancement du poste de travail).
    6. Sur l'application, mettre en service l'oscilloscope : sélectionner l'équipement raccordé au poste de travail, ouvrir une fenêtre « scope ». Ensuite :
      • supprimer l'affichage de la voie nº 2 (non utilisée pour le moment) ;
      • cliquer sur le bouton Run pour activer l'oscillographie ;
      • paramétrer la synchronisation (en anglais, trigger) en mode automatique sur front montant avec un niveau de déclenchement de 1 V (on peut le faire en glissant vers le haut le triangle pointant sur la graduation à droite de l'écran) ;
      • paramétrer l'amplification pour afficher l'amplitude de tension du signal sur la quasi‑totalité de l'écran ;
      • paramétrer la base de temps pour afficher au moins 4 périodes du signal ;
      • configurer une mesure définie verticale (menu Measurements, bouton Add) pour relever la valeur du niveau haut (Maximum) de la tension du signal  ; reporter cette valeur sur la feuille de calcul (cellule G4).
    7. Afin d'observer la phase de charge du condensateur, modifier l'amplification (Range) et la position verticale (Offset) de la voie, ainsi que la base de temps, en exploitant au maximum les dimensions de l'écran. À l'aide des curseurs en X (cf. le schéma de principe ci‑contre), mesurer la durée ΔX nécessaire pour atteindre 95 % du niveau haut de tension du signal (cette valeur est donnée par la cellule H4 de la feuille de calcul).
    8. Remarque. Avec l'application WaveForms, il est également possible (et assez commode) d'utiliser l'outil de mesure rapide (cf. la capture d'écran ci‑contre).
      Comparer cette durée avec la valeur théorique de  (cellule J4), sachant que τ = RC est la constante de temps du circuit.
    9. Recommencer les mesures avec le condensateur de 10 nF sans modifier le programme. Qu'observe‑t‑on quant à la durée de charge du condensateur, et pourquoi ?
  2. Bouton‑poussoir en entrée numérique
    1. Sur le poste de travail, dans le répertoire de TP, créer un répertoire de projet nommé digitalInput et dedans un fichier homonyme digitalInput.ino. Y copier‑coller puis téléverser dans la carte Arduino le programme ci‑dessous.
    2. const uint8_t LED_PIN    = 2;
      const uint8_t BUTTON_PIN = 8; 
      
      void setup()
      {
        pinMode(LED_PIN, OUTPUT);
        digitalWrite(LED_PIN, LOW);
        pinMode(BUTTON_PIN, INPUT);
      }
      
      void loop()
      {
        digitalWrite(LED_PIN, digitalRead(BUTTON_PIN));
      }
      
      Le programme est‑il correctement codé ? En quoi consiste‑t‑il ? (cf. chap. C2‑VIII ). Que doit‑il se passer selon que l'on appuie ou non sur le bouton ?
    3. Préalablement au câblage, positionner le bouton‑poussoir au centre de la platine d'essai. Avec le multimètre portatif en mode testeur de continuité, identifier les pôles du bouton qui sont reliés entre eux par paires. Tester son bon fonctionnement (on doit avoir la continuité entre les pôles opposés appuyant sur le bouton).
    4. Débrancher la carte puis réaliser le montage conformément à la représentation schématique ci‑contre, avec le résistor de 4,7 kΩ monté en pulldown mais d'abord sans raccorder le multimètre portatif. Appeler l'enseignant avant de rebrancher la carte au poste de travail.
    5. Ôter le résistor de 4,7 kΩ puis mettre la carte Arduino sous tension. Quel est l'état de la led (éteint, allumé, fluctuant) selon que l'on appuie ou non sur le bouton ? (Toucher les conducteurs pour vérifier la stabilité de l'état de la led.)
    6. Raccorder le multimètre mais sans le mettre en service. Quel est maintenant l'état de la led selon que l'on appuie ou non sur le bouton ?
      Tourner le sélecteur du multimètre pour mesurer la tension à l'entrée nº 8. À nouveau, quel est l'état de la led selon que l'on appuie ou non sur le bouton ? Relever alors les valeurs de la tension affichée par le multimètre au bout de 5 secondes – composantes DC, AC et AC+DC.
      Recommencer les mêmes observations et mesures avec un résistor de 1 MΩ. Conclure puis débrancher la carte et mettre hors‑service le multimètre.
    7. Sur le poste de travail, écraser la ligne nº 13 du programme avec celle ci‑dessous. Quelle modification présente‑t‑elle ? Quelle conséquence cette modification aura‑t‑elle sur le fonctionnement du programme ?
    8.   digitalWrite(LED_PIN, !digitalRead(BUTTON_PIN));
      
      Téléverser le programme dans la carte.
    9. Débrancher la carte puis modifier le montage conformément à la représentation schématique ci‑contre, avec le résistor de 4,7 kΩ monté en pullup. Appeler l'enseignant avant de rebrancher la carte au poste de travail et de remettre en service le multimètre.
    10. Effectuer les mêmes observations et mesures qu'à la question 2.d, ainsi qu'avec le résistor de 1 MΩ. Le fonctionnement du système est‑il satisfaisant ?
    11. Quel peut être l'avantage du montage du bouton‑poussoir avec un résistor de pullup plutôt qu'avec un résistor de pulldown ?
    12. Retirer le résistor de pullup du montage puis, dans le programme, modifier la configuration de la broche d'entrée du bouton en adoptant, à la ligne nº 8, le mode INPUT_PULLUP.
    13. Téléverser le programme ainsi modifié et tester le bon fonctionnement du bouton en contrôlant les valeurs de tension (comme à la question 2.d) selon que le bouton est appuyé ou non.
  3. Rebonds sur fronts montants ou descendants
    1. Sur le poste de travail, dans le répertoire de TP, créer un répertoire de projet nommé bistableCommand et dedans un fichier homonyme bistableCommand.ino. Y copier‑coller puis téléverser dans la carte Arduino le programme ci‑dessous.
    2. const uint8_t LED_PIN    = 2;
      const uint8_t BUTTON_PIN = 8; 
      
      void setup()
      {
        pinMode(LED_PIN, OUTPUT);
        digitalWrite(LED_PIN, LOW);
        pinMode(BUTTON_PIN, INPUT_PULLUP);
      }
      
      bool previousButtonLevel = HIGH;   
      bool currentButtonLevel  = HIGH;
       
      void loop()
      {
        previousButtonLevel = currentButtonLevel;
        currentButtonLevel  = digitalRead(BUTTON_PIN);
      
        if (currentButtonLevel == LOW && previousButtonLevel == HIGH) { // falling edge
          digitalWrite(LED_PIN, !digitalRead(LED_PIN));
        }
      }
      
      En quoi ce programme consiste‑t‑il ? (cf. chap. C2‑VIII ). Que doit‑il se passer lorsque l'on appuie sur le bouton ?
    3. Débrancher la carte puis réaliser le montage conformément à la représentation schématique ci‑contre, en utilisant respectivement les voies nº 1 & 2 de l'oscilloscope fourni pour observer la tension aux broches 8 et 2 de la carte. Appeler l'enseignant avant de rebrancher la carte au poste de travail et mettre en service l'oscilloscope.
    4. Quel est l'état de la led au début de l'exécution du programme (avant tout appui sur le bouton‑poussoir) ? Effectuer quelques appuis sur le bouton pour vérifier le bon fonctionnement du programme.
    5. Paramétrer l'oscilloscope en mode Trigger: Normal sur front descendant (falling edge) du signal de la voie nº 1 (entrée du bouton) avec un niveau de 3 V, afin qu'il se déclenche automatiquement à chaque d'un appui sur le bouton‑poussoir. Si l'oscilloscope dispose de cette fonctionnalité, installer une fenêtre de zoom de la zone de front descendant du signal, comme sur la capture d'écran ci‑dessous.
    6. Effectuer une série de 100 appuis sur le bouton en comptant attentivement :
      • le nombre de fois quand un ou plusieurs rebonds se produisent, en distinguant selon que les rebonds se produisent lors de la pression ou du relâchement du bouton ;
      • le nombre de dysfonctionnements constatés dans la commande de la led.
      Reporter ces valeurs sur la feuille de calculs.
    7. Placer un condensateur de 10 nF en dérivation du bouton‑poussoir, comme représenté sur le schéma de principe ci‑contre (pas besoin de fil, car dans la réalité, l'écartement des broches du condensateur est le même que pour le bouton). Appuyer sur le bouton RESET de la carte. Quel est l'état de la led au début de l'exécution du programme ?
    8. Recommencer les manipulations et observations de la question 3.d. Que peut‑on conclure quant à l'efficacité de cette précaution matérielle pour éliminer les problèmes de rebonds ?
    9. Ôter le condensateur puis télécharger le fichier d'archive contenant un programme multi‑fichiers au lien suivant . Extraire ce programme, l'ouvrir avec l'application Arduino IDE et le téléverser dans la carte.
    10. Recommencer les manipulations et observations de la question 3.d. Que peut‑on conclure quant à l'efficacité de cette précaution logicielle pour éliminer les problèmes de rebonds ?
      * Consulter le code du programme et répondre aux questions ci‑dessous.
      • Dans la fonction loop, quelles sont les fonctions de la bibliothèque LogicalSignal qui sont appelées ?
      • Laquelle de ces fonctions met en œuvre le filtre anti‑rebond ?
      • Quelle est la valeur de la temporisation durant laquelle les rebonds sont ignorés après qu'un front soit détecté ?