Un adaptador de niveles lógicos es un circuito que traduce señales entre dominios de tensión diferentes sin superar los límites de entrada ni perder margen lógico.
Conviven placas que trabajan a 5 V con microcontroladores y sensores de 3,3 V. Antes de unirlos necesitamos comprobar tanto la tensión máxima admisible como los umbrales de entrada.
¿Qué pasa si conectas el pin de transmisión (TX) de un Arduino (5V) al pin de recepción (RX) de una Raspberry Pi (3.3V)? Puedes dañar la Raspberry Pi porque sus GPIO no admiten directamente 5 V.
Para evitarlo, necesitamos adaptar el nivel lógico con una topología adecuada al sentido y la velocidad de la señal.
El problema: “1” no siempre es igual a “1”
En el mundo digital, un “1” lógico es voltaje alto. Pero, ¿cuánto de alto?
- Lógica de 5 V: un nivel alto se encuentra dentro de un intervalo definido por el receptor, no tiene que medir exactamente 5 V.
- Lógica de 3,3 V: ocurre lo mismo; debemos comparar
y del emisor con y del receptor.
El problema es unidireccional pero grave:
- 3,3 V
5 V: puede funcionar si la salida alta mínima supera el umbral alto máximo exigido por la entrada. Hay que comprobar ambas hojas de datos. - 5 V
3,3 V: solo puede conectarse directamente si la entrada está declarada como tolerante a 5 V. De lo contrario, superar su máximo puede dañarla.
Solución A: el divisor de tensión
Si solo necesitas enviar una señal desde 5V hacia 3.3V (unidireccional) y la señal no es muy rápida (como una UART lenta o una señal de control de un relé), no necesitas comprar nada. Dos resistencias bastan.
Queremos bajar de Vin = 5V a Vout = 3.3V. Usando la fórmula:
Si elegimos:
- R1 (arriba):
- R2 (abajo, a tierra):
¡Perfecto! Con una resistencia de
Limitaciones: Esto NO sirve para I2C (que necesita ir y volver). Y si las resistencias son muy grandes, la señal se deformará a altas velocidades por culpa de la capacidad parásita (efecto filtro paso bajo).
Solución B: el módulo conversor (la opción estándar)
Seguro que has visto esas plaquitas rojas o azules minúsculas que venden por muy poco dinero. Tienen pines marcados como HV (High Voltage) y LV (Low Voltage).
Estos módulos están pensados principalmente para líneas open-drain, como I2C.
- HV: Conectas aquí los 5V y las señales de 5V.
- LV: Conectas aquí los 3.3V y las señales de 3.3V.
- GND: ¡Debes unir las masas de ambos sistemas aquí!
Ventaja: son bidireccionales en buses open-drain. Para señales push-pull rápidas, SPI o algunas UART suele convenir un buffer o transceptor diseñado para esa dirección y velocidad.
Cómo funciona la conversión bidireccional
Dentro de la plaquita hay un MOSFET de canal N y dos resistencias de pull-up (una a cada dominio) por canal.
Es un circuito ingenioso que usa el MOSFET no como amplificador, sino como puerta de paso inteligente.
El funcionamiento se basa en comparar voltajes:
- Estado de reposo (nadie habla): Las resistencias pull-up mantienen ambos lados en alto (3.3V en un lado, 5V en el otro). El MOSFET está cortado. Todo tranquilo.
- El lado 3.3V baja a 0V (envía un “0”): El diodo interno del MOSFET conduce y baja el lado de 5V. Además, el MOSFET se activa y conecta ambos lados a tierra.
- El lado 5V baja a 0V (envía un “0”): El diodo del MOSFET bloquea, pero el voltaje de Gate hace que el MOSFET conduzca, arrastrando el lado de 3.3V a tierra.
Básicamente, si alguien pone un 0 en cualquier lado, el 0 se transmite al otro lado. Si nadie pone nada, ambos lados se quedan en su voltaje alto respectivo.
¿Cuál elijo?
- Si vas de 3.3V a 5V, generalmente no necesitas nada (o un simple buffer).
- Si vas de 5V a 3.3V (señal lenta): divisor de tensión.
- Si es I2C o señales rápidas: módulo level shifter.