GPIO y niveles lógicos de 3,3 V
Un sensor de barrera entrega una salida digital de 5 V y quieres leerla con una GPIO de la Raspberry Pi, que solo tolera 3,3 V. Diseña un divisor de voltaje con resistencias comerciales y comprueba que el nivel alto siga siendo válido.
Cómo se resuelve
- 1Antes que nada, lo que está en juego: las GPIO de la Raspberry Pi NO son tolerantes a 5 V. No hay diodo de protección hacia los 3,3 V como en otras placas; meterle 5 V daña el pin o el chip completo, y no hay reparación posible.
- 2Un divisor de dos resistencias da Vsal = Ventrada × R2/(R1 + R2), con R1 arriba (del sensor al nodo) y R2 abajo (del nodo a tierra). Queremos que 5 V se conviertan en algo por debajo de 3,3 V.
- 3La relación necesaria es R2/(R1 + R2) ≤ 3,3/5 = 0,66. Se buscan valores comerciales que cumplan con algo de margen: R1 = 1,8 kΩ y R2 = 3,3 kΩ.
- 4Se comprueba: Vsal = 5 × 3,3/(1,8 + 3,3) = 5 × 3,3/5,1 = 5 × 0,6471 = 3,235 V. Queda justo debajo de los 3,3 V, con margen suficiente.
- 5Falta verificar que ese nivel se lea como un 1 lógico. La hoja de datos del BCM garantiza el nivel alto desde 1,3 V, y la regla de diseño conservadora es apuntar a 0,6 × 3,3 = 1,98 V o más: los 3,235 V superan de sobra cualquiera de los dos umbrales.
- 6Última comprobación, la corriente que se le pide al sensor: I = 5 V / (1,8 kΩ + 3,3 kΩ) = 5/5.100 = 0,98 mA. Cualquier salida digital la entrega sin problema, y es lo bastante baja como para no calentar nada.
Respuesta: Divisor con R1 = 1,8 kΩ del sensor al pin y R2 = 3,3 kΩ del pin a tierra. La GPIO recibe 3,235 V, se lee como nivel alto y el sensor solo entrega 0,98 mA.
El error de siempre: Montar el divisor al revés, con 3,3 kΩ arriba y 1,8 kΩ abajo: daría 5 × 1,8/5,1 = 1,76 V. Ese valor está apenas por encima del umbral garantizado y por debajo del 0,6 × 3,3 = 1,98 V con el que se diseña, así que se queda sin margen: basta con que el sensor no entregue los 5 V exactos bajo carga, o con algo de ruido en el cable, para que la entrada empiece a leer alto o bajo según el momento. El otro error, más grave, es dar por hecho que la Pi aguanta 5 V porque un Arduino UNO sí lo hace: son chips distintos, y en la Pi eso se paga con la placa. Y ojo: el divisor sirve para bajar de 5 V a 3,3 V en una ENTRADA; para el camino contrario, o para I2C y SPI, se necesita un conversor de nivel bidireccional, no un divisor.
