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 :
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.
- Condensateur de lissage
- Sur le poste de travail, dans le répertoire de TP, créer un répertoire de projet nommé
squareSignalet dedans un fichier homonymesquareSignal.ino. L'ouvrir avec l'application Arduino IDE et y copier‑coller le programme ci‑dessous. - 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
4&5) : - 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.
- 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.
- 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
Runpour 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 (celluleG4). - 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 enX(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 celluleH4de la feuille de calcul). - 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 ?
- Bouton‑poussoir en entrée numérique
- Sur le poste de travail, dans le répertoire de TP, créer un répertoire de projet nommé
digitalInputet dedans un fichier homonymedigitalInput.ino. Y copier‑coller puis téléverser dans la carte Arduino le programme ci‑dessous. - 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).
- 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.
- Ô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.)
- 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 ?
- 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.
- 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 ?
- 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. - Rebonds sur fronts montants ou descendants
- Sur le poste de travail, dans le répertoire de TP, créer un répertoire de projet nommé
bistableCommandet dedans un fichier homonymebistableCommand.ino. Y copier‑coller puis téléverser dans la carte Arduino le programme ci‑dessous. - 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.
- Paramétrer l'oscilloscope en mode
Trigger: Normalsur 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. - 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.
- 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 ?
- Ô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.
- Dans la fonction
loop, quelles sont les fonctions de la bibliothèqueLogicalSignalqui 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é ?
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);
}
File/Preferences…). Débrancher la carte
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.
J4), sachant que τ = RC est la constante de temps du circuit.
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));
}
digitalWrite(LED_PIN, !digitalRead(BUTTON_PIN));
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));
}
}