Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Energie > Adapter les niveaux électriques

Adapter les niveaux électriques

samedi 7 juillet 2012, par Julien H.

Si vous avez réussi à fournir une alimentation à chacune des cartes de votre robot, bravo ! Mais peut-être certaines cartes doivent-elles communiquer ensemble ? Et là, il faut faire attention à ne pas provoquer d’incident avec un risque de griller les composants les plus sensibles.

Le problème

Le cas le plus fréquent est la connexion d’un capteur fonctionnant en 5 volts sur une carte programmable fonctionnant en 3.3 volts. Nous ne referons pas l’histoire mais vous pouvez consulter cet article de 2008 sur les différentes tensions. On mentionnera juste que les circuits à tension TTL (5 volts) ont été suivis de circuits à tension CMOS (3.3 volts) pour des raisons de consommation et de miniaturisation. D’ailleurs les processeurs des ordinateurs puissants sont déjà à des tensions inférieures (1.8 volts) pour permettre de faire passer plus d’informations sur une plus petite surface sans échauffement et en minimisant les parasites.

Le cas que nous allons présenter est une communication I2C entre une carte Arduino et une carte Raspberry Pi. Il y a un piège : la carte RPi s’alimente aussi en 5 volts, on pourrait donc croire que l’on va relier les pattes du connecteur d’extension correspondant à l’I2C aux pattes I2C de l’AVR de la carte Arduino. Ce serait pareil pour l’UART (liaison série).

Que Nenni ! Les signaux GPIO sont en 3.3 volts, qui est la tension de la puce ARM11 qui équipe la Raspberry Pi et sur laquelle ces signaux sont connectés. Il y a bien une conversion du 5 volts en 3.3 volts pour l’alimentation, mais toute la logique est ensuite en 3.3 volts. Cet article est donc valable pour tous ces autres signaux.

Ce qu’il faut faire

 Relier les masses : obligatoire.
 Relier les tensions : seulement pour alimenter la carte fille, sauf si elle dispose déjà de sa propre alimentation.
 Relier les signaux : c’est l’objet de cet article.

Notez bien qu’il ne faut pas relier le 5V de la Raspberry Pi au 5V de l’Arduino ni le 3.3V de la Raspberry Pi au 3.3V de l’Arduino. Ce n’est pas de l’informatique, c’est de l’électronique ;)

Une solution toute faite

Pour moins de 2 euros (mais il faut prendre en compte les frais de port), un petit circuit est proposé par Sparkfun. Ce sont de simples transistors mais avec une belle astuce pour proposer l’adaptation des tensions électriques sur deux pattes avec un seul transistor.

L’utilisation de cette carte sera présentée lors de nos ateliers, et dans un article dédié au circuit Logic Level Converter.

Autres solutions

Cet article a pour but d’identifier le problème et de définir plusieurs solutions : si vous en connaissez, surtout si elles sont pas chères et faciles à mettre en oeuvre, contactez-nous pour en faire profiter le plus de personnes.

Vos commentaires

  • Le 20 novembre 2017 à 11:07, par Mathieu En réponse à : Adapter les niveaux électriques

    Bonjour,
    Moi j’utilise un transistor NPN en branchant le signal du raspi sur la base, +5V sur le collecteur, entrée du circuit à piloter sur l’émetteur.
    Il me semble ainsi que le circuit à piloter reçoit l’image en 0/5V de la sortie raspi 0/3V3. Rassurez moi :)
    Merci,
    Mathieu.

    • Le 17 décembre 2017 à 22:04, par Eric P. En réponse à : Adapter les niveaux électriques

      Bonsoir,
      Ca fonctionne effectivement, mais le chip mentionné dans l’article est bi-directionnel (il contient en fait une parie de transistors montés tête-bêche en gros). Or pour de l’adaptation de signaux sur des bus I2C ou SPI, il faut que chacun des protagonistes en communication puisse générer des signaux et donc modifier l’état de la ligne bu-tension.
      Cordialement
      Eric

    Répondre à ce message

  • Le 10 juillet 2012 à 01:05, par Stephan En réponse à : Adapter les niveaux électriques

    Il existe une solution encore moins chère utilisable dans de nombreux cas : le pont diviseur. Cela consiste à mettre en série 2 résistances, par exemple 1.8K et 3.3K entre la sortie 5V d’un microcontroleur (par exemple) et la masse, puis de relier le point milieu au dispositif travaillant en 3.3V.
    Pour ce qui est du sens inverse de communication, le plupart des dispositifs travaillant en 5V valideront une tension de 3.3V sur une entrée comme un niveau logique haut. C’est à ce niveau là qu’il peut y avoir incompatibilité.

    • Le 10 juillet 2012 à 10:49, par Julien H. En réponse à : Adapter les niveaux électriques

      Bien vu. Cependant il faut s’assurer que la patte du micro-contrôleur utilisée comme entrée de 3.3 volts sans adaptation ne passe pas en sortie à 5 volts lors du démarrage de la puce ou suite à une erreur de programmation.

      C’est le problème qu’on a pu voir sur certains forums pour des dispositifs avec une liaison série logicielle (software serial) sur des pattes d’un AVR servant à sa programmation (SPI : MISO/MOSI).

    • Le 13 juillet 2012 à 14:01, par ? En réponse à : Adapter les niveaux électriques

      Effectivement, une erreur de programmation peut causer des dégats.
      On pourra s’affranchir de ce risque en mettant une diode zener entre la sortie 3.3V et la masse, puis en ajoutant une résistance entre cette meme sortie et l’entrée de l’autre microcontrolleur, le tout pour une somme inférieure à 5 centimes !

    • Le 13 juillet 2012 à 14:13, par Julien H. En réponse à : Adapter les niveaux électriques

      Merci pour la solution. Cependant dans notre activité amateur, il ne faut pas regarder le coût des composants nus, mais le temps passé à chercher un circuit, à chercher les composants, à les placer sur un circuit.

      Donc tant qu’on ne me montre pas un schéma complet, avec la référence des composants à acheter, je reste dans le doute et je perds mon temps.

      Par exemple, quelle puissance, quelle tension pour la zener ? Je la branche dans quel sens ? Quelle valeur de résistance ?

    • Le 15 juillet 2012 à 19:25, par Laurent Ba. En réponse à : Adapter les niveaux électriques

      Pour ceux qui gravent des circuits plus vite que leurs ombres, (personne se sent visé ?). La solution avec des mosfets m’a l’air bien aussi. En meme temps l’I2C c’est de Monsieur Philips, une doc Philips c’est donc pas mal :).
      http://www.google.fr/url?q=http://www.adafruit.com/datasheets/an97055.pdf&sa=U&ei=8g3_T_W7LYqi0QXJ5uWOBw&ved=0CBkQFjAD&usg=AFQjCNFNA8dUhm0_yEMqC_8GplXURewgfQ

    • Le 15 juillet 2012 à 19:35, par Julien En réponse à : Adapter les niveaux électriques

      Merci. Il existe une fonction "lien hypertexte (optionnel)" ci-dessous pour pouvoir mettre un lien :)

    • Le 15 juillet 2012 à 19:44, par Laurent Ba. En réponse à : Adapter les niveaux électriques

      oups :) , en effet c’est mieux.

    • Le 15 juillet 2012 à 20:54, par ? En réponse à : Adapter les niveaux électriques

      Je reviens sur les solutions proposées à base de résistances et de zener. Après une longue réflexion, la solution la plus simple (peut-etre pas opérationnelle dans 100% des cas) consiste d’une part à mettre un pont diviseur constitué de 2 resistances (3.3K et 1.8K) afin de ramener à 3.3V un signal 5V, et d’autre part pour le sens inverse, l’entrée d’un µcontrolleur alimenté en 5V considerera une tension de 3.3V sur une de ses entrées comme un signal logique haut. Julien nous faisait remarquer qu’un grave problème pouvait survenir en cas d’erreur de programmation, dans le cas où la suposée entrée se trouverait momentanement en sortie. Ce problème est aussi vrai meme si les 2 dispositifs fonctionnent avec la meme tension. La solution consiste à mettre entre la sortie 3.3V de la bestiole n°1 et l’entrée 5V de la bestiole n°2 une résistance de 2.2K, laquelle limitera le courant à 2mA en cas d’erreur. Conclusion : 3 résistances suffisent dans la plupart des cas à interfacer une entrée + une sortie sur deux dispositifs avec tensions d’alim différentes.

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.