Les ateliers du labx : 1 - l’oscilloscope numérique

30
21
nov.
2016
Do It Yourself

Cette dépêche propose de passer en revue un des ateliers du hackerspace L@Bx concernant l’oscilloscope numérique : son bon usage & son utilité. Un oscilloscope est un appareil qui mesure une tension par rapport au temps. C’est l’outil indispensable de l’électronicien, il permet de visualiser l’allure d’un signal :

  • une commande de servomoteur ;
  • une trame UART ;
  • etc.

Après quelques rappels de base en électricité, nous verrons dans cet article comment fonctionne un oscilloscope numérique et quelques cas d’utilisation de recherche d’erreurs dans une carte Arduino.

Sommaire

Les ateliers du L@Bx — 1 - l’oscilloscope numérique

Rappel de quelques bases sur la physique : tension, courant, loi d’Ohm et fréquence

Qu’est‐ce qu’une tension ?

La tension c’est une différence entre deux potentiels. C’est une valeur qui est imposée par les composants (voir leurs spécifications) : moins ça ne fonctionne pas, trop ça crame.

Qu’est‐ce que le courant ?

Le courant électrique est par analogie comme le débit d’eau. Il se mesure en Ampère (A) à l’aide d’un ampèremètre ou multimètre. Il correspond au nombre de charges électriques circulant dans la section d’un fil électrique par seconde ; ce qui correspondrait par analogie au nombre de voitures circulant pendant une seconde sur une section d’autoroute.
Contrairement à la tension, nous ne pouvons pas contrôler le courant, le courant est imposé par le circuit, comme la charge d’un moteur ou la taille de la SDRAM dans notre µC.

La loi d’Ohm ?

Donc dans un montage, nous avons une valeur que nous contrôlons, la tension. Et une valeur imposée par le circuit, le courant. Si on réalise le rapport entre la tension et le courant, nous avons la charge R que l’on exprime en ohms.
Et voici La LOI électrique qui fait tout : la loi d’Ohm, soit : U = R × I

Signal quoi ? (périodique)

Signal pPériodique
Un signal périodique est un signal composé d’un motif qui se répète sur un temps donné.

Quelques exemples de signaux périodiques :

Commande PWM
Permet de commander la vitesse d’un moteur à courant continu en faisant varier la tension moyenne du moteur.
Commande de servomoteur
Commande de servomoteur, la largeur de l’impulsion détermine l’angle de la commande.

Signal non périodique

Nous avons aussi des signaux non périodiques comme :

  • les rebonds d’un capteur de fin de course : rebond fin de course
  • consommation de l’Arduino ;
  • trame de communication série ;
  • mesure analogique d’un capteur ;
  • etc.

Oscilloscope numérique

le rigol DZ1054

Fonctionnement

Un oscilloscope numérique dispose d’un convertisseur analogique‐numérique, qui convertit le signal analogique en valeur numérique. Cette valeur numérique est stockée dans une mémoire. L’ensemble des données stockées est l’image numérique du signal. Ensuite, il nous faut un moyen de visualiser cette mémoire, comme un écran ou une interface USB qui se connecte à un PC.

Modes de Fonctionnement

Mode continu

L’oscilloscope enregistre en continu le signal ; quand la zone mémoire est pleine l’enregistrement recommence au début. Ce mode est parfait pour les signaux périodiques.

Mode Stockage

Dans ce mode l’oscilloscope enregistre le signal et s’arrête quand sa mémoire est pleine. Ce mode est parfait pour les signaux non périodiques.

Utilisation de l’oscilloscope pour mesurer un signal

Le trigger

Le trigger (déclencheur) est un composant fondamental de tous les oscilloscopes. Il permet le déclenchement de l’acquisition du signal sur un événement :

  • vous choisissez la voie 1, 2, 3 ou 4 ;
  • vous choisissez le type d’événement front montant ou front descendant ;
  • vous réglez le seuil de déclenchement.
Le PWM de l’arduino

La fréquence du PWM est de 100 Hz, la tension max est de 5 V.
Réglage du l’oscilloscope :

  • base de temps de 2 ms par division, pour avoir deux périodes à l’écran ;
  • sensibilité verticale d’1 V par division ;
  • trigger détection du front montant, déclenchement à 1 V.
Comment mesurer un courant

Un oscilloscope mesure une tension, comment mesurer un courant simplement ? Il y a une relation entre le courant et la tension il s’agit de loi d’Ohms : U = R × I. Dans votre montage, en ajoutant une résistance précise de faible valeur et en mesurant la tension aux bornes de la résistance, vous obtiendrez l’image du courant.

fonction XY de l’oscilloscope

On peut visualiser un signal par rapport au temps ou par rapport à un autre signal. Ce mode permet de tracer une caractéristique du courant, la tension d’un composant ou de tracer un déphasage de deux signaux.

Rappel sur les bus de communication UART, I2C et SPI

UART

L’UART est une méthode de communication point à point, utilisée par les MODEM 56k connectés sur la prise DB-9 de nos ordinosaure.

Mais cette méthode est encore très utilisée :

  • la communication entre Arduino et PC ;
  • le port de débogage de cartes Linux embarquées, comme la RPI ;
  • le port de débogage des box.

L’UART a quatre paramètres :

  • le baud rate, nombre de bits par seconde ;
  • le nombre de bits de stop (1, 1.5 ou 2) ;
  • la parité (0, 1 ou pas de parité) ;
  • le nombre de bits de données : 7 ou 8.

Dans la très grande majorité des cas (personnellement, je n’ai pas trouvé d’autre cas) :

  • il y a 8 bits de données ;
  • pas de bit de parité ;
  • 1 bit de stop ;
  • le baud rate varie entre 9 600 bauds et 115 200 bauds.

Avec un oscilloscope, on peut déterminer cette vitesse.

Temps de transmission d'un bit

Mesurer le temps de transmission du plus petit bit, s’il mesure 104 µs
le baud rate est de 1/104 µs, soit 9600 bauds.

Utilisation de l’oscilloscope pour écouter deux Arduino discuter

Vous pouvez faire discuter deux Arduino ensemble avec leurs UART. ATTENTION, n’utilisez pas le moniteur série de l’IDE d’Arduino !

  • Connecter le TX d'un Arduino sur le RX de l'autre
  • Connecter le RX sur le TX de l'autre
  • Connecter une sonde de l’oscilloscope sur le TX
  • Connecter une sonde de l’oscilloscope sur le RX
  • et écouter visualiser …

I²C

Le bus I²C est un bus de communication inventé par Philips. Le bus est composé de trois fils : un fil pour l’horloge (SCL), un fil pour les données (SDA) et un fil pour la masse (ground).

Le fil qui transporte l’horloge est ce qui permet de fixer la vitesse de communication de votre bus I²C. Il est imposé par le maître ; oui, car l’I²C est un bus de communication de type maître‐esclave, avec la possibilité d’avoir plusieurs maîtres.

Il est massivement utilisé même dans votre ordinateur. Il est extrêmement pratique pour faire de la mesure avec des capteurs car, avec seulement trois fils, nous pouvons avoir une centaine de capteurs.
Les capteurs I²C ont obligatoirement un microcontrôleur qui se charge de convertir le signal analogique de la mesure en signal numérique transférable par bus I²C. Un capteur ne peut pas émettre d’alerte, il doit attendre une requête du maître. Ce bus est assez lent, il n’est pas adapté pour faire des gros transferts.

Recherche d’erreurs

Si votre Arduino n’arrive pas à lire votre capteur de pression ou si les valeurs sont aberrantes, vous pouvez, avec l’oscilloscope, visualiser la trame émise. La procédure est de :

  • connecter une sonde sur le fil SDA ;
  • connecter une sonde sur le fil SCL ;
  • mettre un trigger front descendant sur le SDA ;
  • vérifier si la trame émise correspond à la trame programmée : Trame observée avec un oscilloscope

SPI

Le SPI est un bus maître‐esclave, composé de trois fils, plus un fil par esclave. L’adressage des esclaves est réalisé par un signal électrique. Pour chaque esclave, nous avons quatre fils :

  • SCLK — Serial Clock, horloge (généré par le maître) ;
  • MOSI — Master Output, Slave Input (généré par le maître) ;
  • MISO — Master Input, Slave Output (généré par l’esclave) ;
  • SS — Slave Select, actif à l’état bas (généré par le maître).

Et pour le maître nous avons :

  • SCLK ;
  • MOSI ;
  • MISO ;
  • nombre d’esclaves × SS.

Le SPI permet des transferts plus rapides, on l’utilise pour connecter de la mémoire vive à des microcontrôleurs. Mais, pour chaque esclave, nous devons ajouter un fil supplémentaire et utiliser des GPIO en plus.
Il y a une petite technique pour optimiser le nombre de GPIO à utiliser, nous pouvons utiliser un démultiplexeur ou décodeur d’adresses :

  • pour 2 GPIO, nous pouvons adresser 4 esclaves ;
  • pour 3 GPIO, nous pouvons adresser 8 esclaves ;
  • etc.
Recherche d’erreurs

Si votre Arduino n’arrive pas à lire votre capteur de pression ou si les valeurs sont aberrantes, vous pouvez, avec l’oscilloscope, visualiser la trame émise. Il faut :

  • connecter une sonde sur le fil MOSI ;
  • connecter une sonde sur le fil MISO ;
  • connecter une sonde sur le fil SCLK ;
  • connecter une sonde sur le fil SS ;
  • mettre un trigger front descendant sur le SS correspondant à votre capteur ;
  • vérifier si la trame émise correspond à la trame programmée.

SPI vu au scop

Pour conclure

Un oscilloscope est un outil vraiment très utile, voire indispensable si l’on souhaite progresser en électronique et systèmes embarqués. Mais, c’est un investissement, de 50 € à… ouh là là !…

Pour écouter des trames série vous pouvez utiliser le bus pirate, un très bon projet à matériel libre. Vous pouvez aussi vous fabriquer un oscilloscope avec votre carte son. Eh oui, la carte son est un convertisseur analogique numérique, mais vous ne pourrez pas visualiser des signaux qui ont une fréquence supérieure à 44 kHz.

Aller plus loin

  • # Analyseur logique

    Posté par  (site web personnel) . Évalué à 8.

    En plus du Bus Pirate, il y a aussi l'Open Bench Logic Sniffer chez dangerous prototypes, il est assez utile pour analyser des trames.

    D’ailleurs, pourrais tu me donner le modèle de ton oscillo à 50€ ?

    S'il y a un problème, il y a une solution; s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

  • # Précisions

    Posté par  . Évalué à 3.

    Un bit physique n'est pas toujours un niveau de tension (haut ou bas). Il est défini dans certains systèmes par exemple, des systèmes qui communiquent par radio par une durée différente au niveau haut pour le un par rapport au zéro. Par exemple, on pourrait avoir un valeur zéro pour un niveau de tension à 3V pendant moins de 100 µs. Le valeur un serait défini par 400 µs au niveau de tension haut.

    Autre chose. TRÈS IMPORTANT : avant de brancher un oscilloscope sur un appareil, bien vérifier que sa masse n'est pas connectée à la terre comme relativement souvent ou que le point de tension à mesurer est bien isolé du secteur ! Ce n'est pas toujours le cas. Sinon, la carte sera détruite et il y a risque d'électrocution. La solution est d'utiliser un oscilloscope isolé de la terre directement ou bien par un appareil spécial.

    Petite erreur de typo : Remplacer « Un capteur ne peux pas » par «Un capteur ne peut pas».

    • [^] # Re: Précisions

      Posté par  (site web personnel) . Évalué à 4.

      Petite erreur de typo : Remplacer « Un capteur ne peux pas » par «Un capteur ne peut pas».

      Corrigé, merci.

    • [^] # Re: Précisions

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      Un "bit physique" ça ne veut pas dire grand chose. On parle plutôt de "symboles" pour les communications. Ces symboles pouvant comporter plusieurs bits dans certains cas, par exemple, 4 niveaux de tension utilisés pour 00, 01, 11, 10. On trouve souvent cela en communications par ondes radio, avec des modulations comme FSK, QAM, etc.

      On trouve encore d'autres encodages sur les disquettes ou disques durs, ainsi que sur les CD-ROM.

    • [^] # Re: Précisions

      Posté par  . Évalué à 3.

      Autre chose. TRÈS IMPORTANT : avant de brancher un oscilloscope sur un appareil, bien vérifier que sa masse n'est pas connectée à la terre comme relativement souvent ou que le point de tension à mesurer est bien isolé du secteur ! Ce n'est pas toujours le cas.

      Comment faire chez sois alors? Les Oscilloscopes fournissent un connexion à part pour la mise à terre?

      • [^] # Re: Précisions

        Posté par  (site web personnel, Mastodon) . Évalué à 5.

        Si tu ne sais pas le faire, il vaut mieux éviter de mesurer des trucs reliés au secteur :)

        Le problème se pose quand on mesure quelque chose d'alimenté directement en 220V. Dans ce cas il faut isoler le circuit que l'on mesure à l'aide d'un transformateur d'isolement. Il marche comme une alimentation à transformateur, mais sans faire de conversion de tension (donc il rentre du 220V, et il ressort du 220V).

        • [^] # Re: Précisions

          Posté par  . Évalué à 4.

          Le dernier oscillo que j'ai eu entre les mains, c'était en 1995 à peu près. Et jamais je n'ai eu le moindre soucis pour mesurer quoi que ce soit branché sur le secteur. Pourtant c'était un oscillo d'occasion vraiment tout ce qu'il y a de plus ordinaire.

          Il avait quelque chose de particulier ?

          • [^] # Re: Précisions

            Posté par  . Évalué à 4.

            Coup de chance. Je vois qu'on aime le risque :)).

            Justement à cette époque, la très grande majorité des oscillos courants avaient la masse connectée à la terre, même des oscillos numériques comme ceux de Tektronix. J'en ai encore au boulot dans un coin.

            J'ai réellement vu des cartes partir en fumée pour cette raison par des utilisateurs distraits. Je confirme : le risque est réel. Donc bien vérifier son schéma avant de brancher… et son oscillo.

            Une autre solution en dehors du transfo d'isolement, c'est la sonde différentielle avec une tension nominale maximale suffisante, souvent 600 V.

          • [^] # Re: Précisions

            Posté par  (site web personnel, Mastodon) . Évalué à 2.

            Ah oui, je n'ai pas précisé: si on alimente une carte électronique avec un transformateur 220>12v (par exemple), ce dernier joue très bien le rôle de transformateur d'isolement, et en général il n'y a pas de connexion à la terre. Du coup, pas de problème dans ce cas.

  • # I²C est multi-master

    Posté par  . Évalué à 7.

    Un capteur ne peut pas émettre d'alerte, il doit attendre une requête du maître.

    Même si ça n'est pas forcément beaucoup utilisé, l'I²C peut être utilisé avec plusieurs maîtres, et donc un capteur pourrait envoyer une alerte. Ça n'est pas géré sous Linux par exemple, qui ne peut que être master sur un bus, mais le protocole l'autorise. J'ai souvenir d'avoir vu des bouts de patchs traîner pour gérer le mode esclave sous Linux, je ne sais pas ce qu'il en est récemment.

    • [^] # Re: I²C est multi-master

      Posté par  . Évalué à 3.

      Oui cela est possible. J'ai réalisé ce genre de montage avec deux µC qui souhaitaient interroger les mêmes capteurs.
      En général les capteurs qui communiquent en I2C fournissent un GPIO pour faire une alerte.
      Le masteur programme des seuils, quand ces seuils sont atteints ils le signal avec le GPIO qui peut être branchée sur une interruption du masteur.
      mais cela fait beaucoup de fils à router

      • [^] # Re: I²C est multi-master

        Posté par  . Évalué à 3.

        C'est possible sans GPIO supplémentaire, hein : il suffit juste que l'esclave « prenne » la ligne comme un master. Ça marche sans rien de plus.

  • # Petite question

    Posté par  . Évalué à 1.

    Tant qu'on parle d'oscilloscope j'ai une petite question :
    où peut-on trouver une sonde qui puisse mesurer un champ électrique ?

    je m'explique : si par exemple j'ai 2 pistes espacées de 1cm sur un circuit imprimé, si j'envoie un signal sinusoidal d'amplitude 1mV, j'aimerais pouvoir observer que le champ électrique à proximité du circuit imprimé est bien un champ électrique sinusoidal de 100mV/m, et le visualiser sur l'oscilloscope.

  • # Quelques inexactitudes

    Posté par  (site web personnel) . Évalué à 0.

    C'est un article assez synthétique, pour les motivés et curieux sans la formation adéquate pour agir seuls.

    Concernant le bus i2c, c'est deux fils pour le bus SDA/SCL. Et bien sur les deux interfaces doivent utiliser une masse commune.
    Il s'agit surtout d'un bus maître—N esclaves. Chaque interface dispose d'une adresse sur le bus qui est utilisée pour le premier octet émit lors de la requête.
    Ce n'est pas faux de dire que le bus est multi-maîtres (on peut changer le mode du contrôleur quand on le souhaite) mais je n'ai jamais vu ce cas d'utilisation. Mais pour que ça marche : à un instant T il y a un seul maître et plusieurs esclaves qui écoutent.

    On aurait pu être plus quantitatif et expliquer pourquoi ce type de bus peut être espionné par un oscilloscope , en parlant des bandes passantes et des taux d'échantillonnage des oscilloscopes. Connaître les performances plancher pour espionner des bus ce n'est pas un luxe (surtout que dans les commentaires on parle d'oscilloscope bon marché).

    Pour le bus SPI je cite "Pour chaque esclave, nous avons quatre fils ".
    Je ne suis par sûr de la formulation. Mais dans la mesure ou l'esclave ,s'il n'est pas sélectionné place ses E/S en haute impédance, il peut partager les lignes du bus avec les autres esclaves.

    J'aurai aimé aussi voir un cas pratique de diagnostic d'un problème de communication SPI avec l'oscillo : erreur de réglage du déphasage CPOL/CPHA, erreur réglage taille du mot ou de l'endianness.

    Enfin, hormis pour des cas vraiment brouillés, l'usage d'un analyseur logique serait plus indiqué pour observer la comme. D'ailleurs sur la capture l'oscillo propose cette fonctionnalité. Mais ce n'est pas une fonctionnalité 'de série'.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.