Interconnexion 5V / 3.3V
From Eric
Contents |
Introduction
Il y a quelques années, les problèmes de conversion de niveaux se posaient lorsqu'on cherchait à faire cohabiter des composants CMOS (série CDXXXX) et des composants bipolaires (TTL de la série 74XXX) ou lorsqu'on souhaitait communiquer en RS232. Aujourd'hui, il arrive très fréquemment que l'on soit amené à faire cohabiter des composants alimentés en 3.3V avec des composants alimentés en 5V. C'est notamment le cas lorsque l'on souhaite utiliser le microprocesseur à des niveaux de fréquence qui requièrent une alimentation 5V.
Le document 3V Tips 'n Tricks de Microchip présente les différentes solutions possibles, leurs avantages et leurs inconvénients. On trouvera ci-après quelques informations complémentaires glanées ici et là (et dont certaines sont redondantes avec le document de Microchip).
Connexion 5V <=> 3.3V
Signal unidirectionnel, de 3.3V vers 5V
Il n'y a normalement pas de problème car 3.3V est généralement considéré comme un niveau haut (Atmel : 0.6 Vcc = haut). Il est cependant préférable de consulter la datasheet des composants. DAns le cas contraire, on peut utiliser un transistor bipolaire en collecteur commun (mais il y a alors inversion des signaux) ou en base commune (voir ci-après).
Signal unidirectionnel, de 5V vers 3.3V
- Utilisation d'un diviseur de tension à résistances. Un couple de résistances de 10K et 15K font l'affaire. Attention car le niveau va dépendre du courant utilisé par l'entrée 3.3V.
- Utilisation d'une série de diode (0.6V de chute de tension par diode standard)
- Utilisation d'un transistor bipolaire. (Schéma récupéré à l'adresse [1]).) Attention car les signaux sont alors inversés. Pour éviter cette inversion, on peut utiliser un schéma en base commune. Voir l'exemple suivant, récupéré sur le blog de Silicium628 :
- Utilisation d'un optocoupleur : (Schéma récupéré à l'adresse [2].)
- Utilisation d'une diode zéner à 3.3V
- Utilisation d'une diode selon le schéma suivant : l'entrée 3.3 V est reléie au +3.3V par une résistance de pull-up (par ex. 10K) et à la sortie en 5V via le pole positif d'une diode. Lorsque la sortie 5V est HIGH, la diode est polarisée en inverse ; aucun courant ne circule, l'entrée 3.3V voit 3.3V via le pull-up. Lorsque la sortie 5V est LOW, elle tire l'entrée 3.3V vers LOW. Attention, le niveau bas sera à la valeur de la chute de tension dans la diode, soit 0.6V pour une diode "normale" et 0.3V pour une diode Shottky.
- Utilisation d'une diode d'écrétage (clamping) et d'une résistance. La diode peut être intégrée à l'entrée du composant en 3.3V.(Attention : j'ai utilisé cette technique et j'ai observé de grosses perturbations sur l'alimentation. Ce problème est bien identifié dans le document de Microchip qui préconise l'utilisation d'un transistor : A noter que le niveau haut n'est toujours pas à 3.3V, mais à 3.3V+0.7V=4.0V.
- Utilisation d'un composant de conversion de niveau tels les HCF40109ou SN741VC425 (8 voies)/ Voir aussi le 74HC4050, le 74LVC244A, le MC14504BCP.
Signal bidirectionnel
Le cas se présente notamment sur un bus I2C.
- Utilisation d'un FET. L'approche est décrite (ici). Elle est mise en opeuvre par Sparkfun dans le module appelé Logic Level Converter. Voici quelques schémas :
(schéma récupéré à l'adresse [3])
(schéma récupéré à l'adresse [4])
- Utilisation d'un composant de conversion bidirectionnel (MAX3390, MAX3373,..., voir par exemple chez Maxim).
- Utilisation d'un convertisseur de voltage (TXB0108PW)
Références
Voir les sites :