Analogique et MLI. Gestion de ces signaux - PlaisirArduino
Mention légal| Contact

Analogique et MLI. Gestion de ces signaux

Gestion d'un signal analogique et MLI

Introduction

Au travers de ce tutoriel, nous allons exploiter un signal analogique en entrée pour piloter en sortie PMW dit MLI en français Modulation de Largeur d'Impulsion.

Le but est de faire varier la luminosité d'une LED en agissant sur un potentiomètre. Pour cela nous allons utiliser:potentiometre

  • Une carte Adruino UNO.
  • Un potentiomètre de 10Kohm.
  • Une résistance de charge de 220ohm.
  • Une LED de couleur rouge.

LED et résistance

Pour comprendre la gestion PWM, il faut tout d’abord faire un petit rappel. Vous découvrirez plus de détail, en cliquant ici.

Les branchements.

Commençons par examiner la platine Arduino UNO :

  • Nous avons 12 broches configurables en entrées ou sorties repérées de 2 à 13. Seules les broches PMW repérées avec ce symbole "~" configurées en sorties modulerons une longueur d'impulsion numérique MLI calculée sur une résolution numérique de 8bits qui représente une plage de 0 à 255 points de mesure. Ce procédé simule un signal de sortie analogique mais qui en fait n'en n'est pas un. Donc nous utiliserons la broche 3, repéré par le sigle "~" (PMW).
  • Il y a également 6 broches d'entrées, repérées de A0 à A5, spécifiquement conçues pour le traitement des signaux de tensions analogiques allant jusqu'à 5V max. Elles exploitent un convertisseur analogique/numérique d'une résolution numérique de 10 BITS qui représentent une plage de 0 à 1023 points de mesure. C'est pour cela que nous utiliserons l'une de ces broches pour raccorder notre potentiomètre, à l'occurrence A0.

signal-analogique-schemaNe surtout pas dépasser la tension de 5V max si celle-ci est externe à la carte Arduino.

Le programme.

Déclarations.

En premier lieu, nous déclarons nos variables.

01-signale-analogiqueConfigurations.

Nous établissons ensuite nos configurations.

  • Pour un retour visuel des valeurs exploitées au moniteur série, nous paramétrons la Vitesse du port série.
  • Nous configurons en mode sortie la broche utile au pilotage de la LED.

NOTE: il faut souligner qu'il n'est pas nécessaire de configurer une broche d'entrée analogique quant elle est utilisée pour ce type de signal.

02-signale-analogique

Test.

Pour s'assurer que tout fonctionne correctement, il faut tester nos configurations et nos équipements Cela évite de chercher un bogue dans le  programme alors que c'est l'équipement qui est en cause.

Premièrement nous testons la LED. Nous l'activons trois fois pour la contrôler visuellement.

Deuxièmement, pour contrôler le potentiomètre nous utilisons la fonctions analogRead (); qui lit la valeur de tension à la broche sélectionnée et la convertit en chiffre entier de 0 à 1023, puis nous positionnons le potentiomètre en butée mini (gauche) ou maxi (droite)  et effectuons une lecture de notre signal à l'un de ces deux points.  On teste ensuite que la valeur lue correspond bien à 0 (mini) ou à 1023 (maxi) à l'un de ces deux points. Si ce n'est pas le cas, il y a un problème de branchements.

analogRead(Broche à lire);  //Ou variable affectée à la broche.

03-signale-analogiqueVous constaterez l'utilisation de while(1) dans le test qui stoppera l'évolution du programme. En effet dans le cas ou un défaut de lecture est vrais lors du test il faudra donc relancer le programme par un re-set sur la platine ou un téléversement.

Note: Dans ce programme, nous n'avons pas d'initialisation à effectuer.

Programme principal.

Nous décomposons le programme principal en quatre parties.

  1. La déclaration des variables locales.
  2. L'acquisition du signal.
  3. Le traitement du signal.
  4. L'exploitation du signal.

Déclarations.

04-signale-analogiqueAcquisitions.

Ensuite, nous réalisons la lecture de la valeur du potentiomètre par la fonction analogRead(); et chargeons la valeur acquise dans la variable de traitement  (V.T.)  "val_potar" .

05-signale-analogiqueTraitement des signaux.

Une fois la valeur chargée, nous pouvons la manipuler. A cette étape nous allons convertir, mettre à l'échelle et limiter les signaux.

Conversion

Tout d'abord, pour une exploitation plus parlante de notre projet au travers du moniteur série, il est utile de connaître la valeur de tension équivalente de la donnée brute. En d'autres termes, convertir la donnée brute en volt.

  • Donc nous allons diviser la tension de service aux bornes du potentiomètre par le nombre de points de lecture. Soit 5Volts divisés 1024 points. Ce qui nous donne un coefficient "K" de conversion que l'on applique par multiples à notre donnée brute. (48.82*10e-3). Après cela nous connaissons théoriquement la valeur de tension appliquée à l'entrée analogique.

06-1-signale-analogiqueNote: Par ailleurs, vous pouvez vous brancher en parallèle au signal de sortie du potentiomètre un appareil de mesure. Néanmoins, des écarts sont à noter et à corriger si nécessaire.

La tension de service est la tension maximum qui sera appliquée à l'entrée analogique.

Ne surtout pas dépasser la tension de 5V maxi si celle-ci est externe à la carte Arduino.

Mise à l'échelle.

Ensuite, il va nous falloir réaliser une concordance entre le signal d'entrée et de sortie. Malgré cela, elles n’ont pas la même échelle de mesure car un signal PWM en sortie est de 255 points et que le signal analogique d'entrée est de 1024 points.

  • La fonction map(); nous aide à réaliser une mise à l'échelle du signal d'entrée avec le signal de sortie. De sorte que nous obtenons une corrélation entre le signal d'entrée et de sortie.

map (VT* , mini VT, maxi VT, mini VS*, maxi VS); //Format de la fonction.

*VT = Variable de traitement *VS = Variable de Sortie.

06-2-signale-analogiqueNous obtiendrons donc 255 points en sortie pour 1023 point en lecture d'entrée.

Limitation.

Certains projets ont des butées mécaniques de fonctionnement qu'il ne faut surtout pas atteindre par risque de casse ou blocage.  Par conséquent, il ne faut pas dépasser certaines valeurs de pilotage en sortie. C'est pour cela que nous utilisons la fonction  constrain(); qui nous aide à effectuer cette opération.

Toutefois, constrain de l'anglais veux dire LIMITER. Nous réalisons donc par cette fonction une mise en butée du pilotage électrique.

constrain(*VT, mini , maxi ); // *VT Variable de traitement.

06-3-signale-analogiqueCONSEIL: Nous pouvons appliquer cette limitation à deux endroits du programme. Soit au signal d'entrée ou au signal de sortie. Il est sécurisant de le faire en sortie car une erreur de traitement (calcul) de la valeur du signal dans le programme  peut avoir des valeurs non acceptables pour vos projets.

Les valeurs de limitations du signal de sortie se détermine par des relevés ou des calculs effectués par vos soins et en connaissance du projet.

La mise en butée du signal d'entrée peut aussi être directement réalisé dans la fonction  map(); avec les paramètres de sorties mini et maxi.

Conversion

Pour les même raison que le signal analogique d'entrée, il nous est utile de connaître la valeur en tension équivalente à la donnée brute d'exploitation en sortie. Nous opérons une conversion comme décrit plus haut mais avec une résolution de 255 points.

  • Il faut également diviser la tension de service aux bornes du potentiomètre par le nombre de points de résolution de lecture. Soit 5 Volts divisés par 255 points. Cela nous donne un coefficient "K" de conversion que l'on applique par multiples à notre donnée brute de sortie. (195.3*10e-3).
    Grâce à cela nous connaissons théoriquement la valeur de tension appliquée à la sortie pour le  pilotage.

L'exploitation

Finalement, une fois le signal traité, nous l’intégrons à la fonction  analogWrite(); pour appliquer la consigne de pilotage.

07-signale-analogiqueLa LED s'allume en fonction de la valeur traitée.

En conclusion, nous constatons que la valeur de tension appliquée à la LED ne dépassera pas les 4,10V. Le signal de sortie étant mis en butée mini et maxi, la valeur de sortie n'atteindra jamais 0V et 5V. Nous voyons ci-dessous le résultat du traitement signal par le moniteur série.

08-signale-analogiqueSi l'on voulait, nous pourrions même limiter la tension de pilotage à 2V pour se passer de la résistance de charge de la LED.

Vous connaissez à présent les bases et quelques outils utiles pour l'exploitation d'un signal analogique en entrée et modulé en sortie.

Découvrez et exploitez le signal analogique en téléchargeant les sketchs référents de ce sujet.

++ Petit plus ce programme exemple n'est pas visuellement confortable pour une exploitation via le moniteur série. C'est pour cela que nous vous proposons aussi un programme évolué "Signale_analogique_EVO" de cet exemple qui n'affiche que la valeur actualisée lors d'un changement de valeur au potentiomètre. Vous le trouverez dans la rubrique téléchargement.++.

MERCI.

PlaisirArduino/tutoriel.

FIN.


Recevez gratuitement les codes sources de PlaisirArduino

Amusez-vous tout de suite avec les entrées/sorties de votre carte Arduino Uno

Vous y retrouverez : des scketchs, des schémas et des PDF