¿Qué es un level shifter?
Un adaptador de nivel (level shifter) es un componente que permite convertir señales lógicas de distintos niveles de tensión. Es un dispositivo muy útil en un procesador como Arduino.
Como sabemos, los procesadores operan en distintos voltajes, siendo los más habituales 5V, 3.3V y, en menor medida, 2.8 y 1.8V. Tradicionalmente los modelos de Arduino más frecuentes son de 5V. Sin embargo, la mayoría de procesadores modernos (Arduino Due, STM32, ESP8266, ESP32, Raspberry Pi) operan 3.3V.
Por otro lado, el resto de dispositivos electrónicos que normalmente empleamos (sensores, controladores, displays) también operan a distintas tensiones nominales, principalmente 5V y 3.3V.
Para poder conectar dispositivos digitales de distintas tensiones nominales es necesario adaptar los niveles de tensión. De lo contrario lo más probable es que nuestro montaje no funcione, e incluso que dañemos algún dispositivo.
Existen muchas formas de hacer la adaptación de niveles de tensión. Desde soluciones sencillas, como usar un divisor de tensión, a integrados específicos que permiten altas velocidades de conmutación en ambas direcciones.
Uno de los más habituales es emplear un simple transistor, que es una solución sencilla, de alta velocidad, y bidireccional.
Sin embargo, también existen módulos comerciales e integrados para la adaptación de nivel. Normalmente es más sencillo y barato usar un level shifter comercial que construir el nuestro a partir de los componentes electrónicos.
Estos módulos para adaptación de nivel integran distintos número de canales bidireccionales, generalmente dos, cuatro u ocho.
La velocidad de conmutación de estos módulos es lo suficientemente rápida para permitir usarse en la adaptación de tensión de señales de comunicación, como puerto serie (UART), I2C o SPI, siempre que dispongamos de canales suficientes para todas las líneas de comunicación.
Precio
Un módulo level shifter (adaptador de nivel) es un dispositivo muy barato. Podemos encontrar un módulo level shifter de 4 canales bidireccionales por 0,25€ en vendedores internacionales de Ebay y Aliexpress.
Esquema de montaje
La conexión de un level shifter (adaptador de nivel) es sencilla. Por lo general tenemos dos lados diferenciados, uno para el dispositivo de mayor tensión (identificado con HIGH) y uno para el dispositivo de menor tensión (identificado con LOW).
Por un lado debemos conectar las GND de ambos dispositivos a GND de la placa en los respectivos lados del adaptador de final. GND tiene que ser común para ambos dispositivos, por lo que GND de ambos lados de la placa normalmente están unidos internamente.
En caso de duda, medir continuidad con un polímetro en ambos lados del adaptador de nivel.
Por otro lado, debemos proporcionar las dos tensiones de referencia de ambos dispositivos al level shifter. Para esto tenemos el pin HV, para la tensión Vcc del dispositivo de tensión mayor, y LV para Vcc del dispositivo de menor tensión.
- Por ejemplo, si tenemos una placa Arduino a 5V y un sensor de 3.3V, podemos usar la salida de 3.3V de Arduino para alimentar el lado de baja tensión del adaptador de nivel.
- Otro ejemplo, si tenemos una placa con un procesador 3.3V que alimentamos a 5V porque la placa tiene un regulador interno, podemos conectarla a un sensor de 5V sacando la salida de 5V de alimentación.
Finalmente, usamos tantos pines GPIO (canales) como necesitemos. Los canales son bidireccionales, y funcionan tanto para señales digitales, como analógicas, o sistemas de comunicación (UART, I2C, SPI).
El comportamiento en una u otra dirección viene determinado por el estado de los pines en ambos dispositivos (definido como entrada, salida, alta impedancia, etc), como también ocurre cuando están conectados por un cable.
Descarga el código
Todo el código de esta entrada está disponible para su descarga en Github.