VictorJAM.zapto.org
Electrónica  Arduino 

2023-01-22

Convertidores de Nivel.

Al principio nos encontrábamos que solo teníamos circuitos lógicos que solo trabajan a 5V, pero actualmente nos encontramos que tenemos circuitos que trabajan a 3V3 o incluso menos. Algunos de estos circuitos son capaces de aceptar voltajes superiores a los 3V3, los que vulgarmente llamamos "tolerantes a 5V". Aun así nos encontramos que hay circuitos que no son tan tolerantes y es necesario realizar una adaptación de niveles de 5V a 3V3.

Independientemente del tipo señal que viaje por estos cables podemos establecer tres tipos de conexiones:

  • Salida de 3V3 a entrada de 5V.
  • Salida de 5V a entrada de 3V3.
  • Bidireccional entre 5V y 3V3.

Para estudiar estas tres posibilidades tenemos que tener en cuenta como funcionan los niveles de tensión.

En ambas señales, a partir de los dos voltios se define la señal como alto (HIGH), pero teniendo en cuenta que si a una entrada de 3V3 le metemos una de 5V el pin se quemará. En ambas señales un nivel bajo (LOW) se acepta como una tensión inferior a 0.8V.

Salida de 3V3 a entrada de 5V.

Cuando la salida de un dispositivo es a 3V3 se puede conectar directamente a la entrada de 5V sin problemas, dado que la tensión supera los 2V el dispositivo de 5V reconocerá un valor HIGH. igual ocurre con valor lógico LOW.

Salida de 5V a entrada de 3V3.

En este caso hemos de tener precaución ya que si el dispositivo de 3V3 no es tolerante a 5V podremos dañarlo. Aquí tendremos que usar un adaptador de niveles.

En este caso el adaptador de niveles mas sencillo es un simple divisor de resistencias.

Cuando la tensión pase por las resistencias se dividirá entre ellas, tan solo hemos de ajustar los valores para que en el punto medio haya 3.3V o menos. El valor de las resistencias debe ser tal que no exceda los limites de corriente que el pin del microcontrolador puede entregar.

Una corriente de 1mA puede ser un valor suficiente, Si fijamos esta corriente y aplicamos la ley de ohm la resistencia R2 debe valer 3k3 y la resistencia R1 1k7, siendo el valor mas cercano 1k8 en el estándar.

Bidireccional de 5V a 3V3.

En este caso el pin de 5v va a actual como entrada o salida y el pin de 3v3 como salida o entrada. En este caso hemos de recurrir a un circuito más complejo.

Para este circuito se puede usar un mosfet tipo N como 2n7000 o el bs170.

¿Como funciona el circuito? En este caso podemos tener cuatro condiciones posibles:

El dispositivo de 3V3 transmite y esta en estado HIGH mientras que el de 5V recibe.

La salida lógica de 3V3 está conectada a la fuente (S) del mosfet y se encuentra a nivel alto. Por lo tanto la diferencia de tensión entre fuente y puerta (G) es de 0V porque también la puerta se encuentra a 3V3 gracias a la resistencia de pull-up de 10K conectada directamente a la alimentación de 3V3. Con una caída de tensión fuente-puerta de 0V el mosfet no conduce por lo tanto la entrada lógica de 5V se encuentra a 5V gracias a la otra resistencia de pull-up de 10K conectada directamente a la alimentación de 5V.

El dispositivo de 3V3 transmite y está en estado LOW mientras que el de 5V recibe.

La salida lógica de 3V3 está conectada a la fuente del mosfet y se encuentra a nivel bajo (negativo). Por lo tanto la diferencia de tensión entre fuente y puerta es de 3V3 porque la puerta está conectada a positivo de 3V3. Con una caída de tensión fuente-puerta de 3V3 el mosfet es un corto y fuerza la entrada lógica de 5V también a negativo.

El dispositivo de 5V transmite y esta en estado HIGH mientras que el de 3V3 recibe.

La salida lógica de 5V se encuentra a nivel alto por lo tanto el mosfet no conduce y la entrada de 3,3V también estará a nivel alto gracias a la resistencia de pull-up de 10K conectada directamente a la alimentación de 3,3V.

El dispositivo de 5V transmite y esta en estado LOW mientras que el de 3V3 recibe.

Con la salida lógica de 5V a nivel bajo, el diodo interno del mosfet (diodo de substrato entre fuente y drenaje) empieza a conducir porque está correctamente polarizado (el positivo de fuente lo obtiene gracias a la resistencia de pull-up conectada a 3,3V) y por lo tanto fuerza la entrada de 3V3 a nivel bajo, en realidad a 0,7V, que es la caída de tensión del diodo.

Módulos adaptadores de nivel

Para los aficionados al cacharreo, que nos gusta jugar con Raspberry, Arduino y demás placas de desarrollo nos hemos encontrado infinidad de veces que hemos querido conectar una placa con otra que funciona a distinto voltaje, así que los fabricantes desarrollaron módulos para adaptar los niveles.

El módulo más básico está diseñado siguiendo el circuito de transistores mosfet del apartado anterior. Generalmente, suele venir con 4 circuitos independientes que nos permiten conectar cuatro pines diferentes. Esta cantidad suele ser más que suficiente para conectar el bus SPI, I2C o incluso el UART.

Suele venir en formato dip para que podamos pincharlo en nuestras placas y los lados se identifican por H y L, siendo H (high) el lado de alto voltaje (+5V); y L (low) que se corresponde con el bajo voltaje (+3V3).

Los pines H y L se enumeran de tal forma que el pin Hx se corresponde al voltaje Lx. Además debemos conectar ambas alimentaciones en los pines HV (5V) y LV (3V3). No podemos olvidar de conectar ambas masas (GND).

Para aplicaciones que requieran mas de 4 pines, podemos recurrir a módulos con el chip TXB0108. Dicho chip es un convertidor de nivel de ocho canales que recurre a una circuitería más compleja que un simple transistor.

Este tipo de módulos nos puede servir para conectar por ejemplo un display de un NOKIA 5110 a nuestro Arduino, simplificando la circuitería.


Recomendaciones

En internet suelen rondar imágenes de circuitos en los que un dispositivo de 5V conecta sus pines directamente a otro de 3V3 usando solo una simple resistencia de 1K. Aunque la mayoría de las veces puede funcionar, puede ocurrir que quememos el dispositivo de 3V3. La mejor opción es usar un adaptador de niveles con mosfets.

De igual manera ocurre cuando usamos el divisor de resistencias, pero hemos de tener claros que el de alto voltaje va a funcionar como salida y el de bajo voltaje como entrada. Ante la duda, igualmente usar un adaptador a base de transistores.

Y por último, hay que saber si ciertamente el dispositivo de 3V3 voltios es realmente "tolerante" a 5V y recurrir a un adaptador si no estamos seguros

Hay que tener en cuenta otro detalle y es que muchos módulos externos funcionan con 3V3 pero los venden en módulos con una fuente de tensión que reduce los 5V y tienen también en el interior adaptadores de nivel permitiendo la conexión directa a nuestro microcontrolador de 5V. Un ejemplo de ello son las pantallas OLED que se conectan por I2C.


Referencias

Inventable: adaptadores de nivel entre 5V y 3.3V.

Luis Llamas: adaptar 3.3V a 5V (y viceversa) en Arduino con level shifter

 

BS170 datasheet.

2N7000 datasheet.

BSS138N datasheet.

txs0108e datasheet.