¿Cuáles son los mecanismos que funcionan en los circuitos de resistencia pull-up o pull-down con botones pulsadores y un GPIO?

Tengo una duda con respecto al GPIO (de una placa Arduino por ejemplo). ¿Cómo funciona exactamente cuando lo usas como pin de entrada? ¿Cuáles son los mecanismos en funcionamiento cuando lo usa en circuitos de resistencia pull-up y pull-down con botones? He leído algunos tutoriales pero no dan una explicación profunda de los mecanismos, o me perdí por completo los puntos que estaban haciendo. La mayoría de los tutoriales dicen cosas como (en un ejemplo desplegable): “Cuando se presiona el botón, conecta el pin de entrada directamente a tierra. La corriente fluye a través de la resistencia a tierra, por lo que el pin de entrada lee un estado bajo” ( https://learn.sparkfun.com/tutorials/pull-up-resistors ). Pero en un circuito de resistencia desplegable con botones, el pin de entrada también está conectado a tierra cuando se presiona el botón y la entrada es alta en ese caso.

Además, una explicación de referencia no parecería funcionar, porque en el caso de un ejemplo desplegable, ¿cómo sabe cuál es el valor alto/bajo cuando ha presionado el botón antes de conectar la fuente de alimentación? Incluso una explicación de umbral no parece explicarlo por completo, me parece que el voltaje en el circuito en su conjunto está por encima de 2.5 V tanto en estado presionado como no presionado, cuando se usa o hay una resistencia de 5V Vcc y 10kOhm. un error en mi forma de pensar acerca de esto?

Las explicaciones de los electrodos que solo viajan a través del camino de menor resistencia también parecen ser correctas. Incluso si esto fuera cierto, esto no explica el comportamiento en el circuito desplegable, porque nunca habría ninguna entrada cuando conectaría una resistencia de 10 kOhm a tierra (antes del botón pulsador). Dado que esto es más bajo que la impedancia del pin de entrada (100k-1MΩ). Los componentes dividen la corriente según sus resistencias recíprocas (I1 / I2 = R2 / R1). Incluso puede verlo cuando conecta un LED al sitio de tierra del circuito, que está encendido cuando presiona el botón y la entrada indica ALTO. ¿En el caso pull-up I1 / I2 = R2 / R1 explica el comportamiento,

Me parece que tiene algo que ver con el hecho de que la conexión que no tiene resistencia entre el pin de entrada (y el pin de tierra o fuente de alimentación) determina el estado cuando ambos tienen un circuito cerrado. Pero cuál es el mecanismo. ¿La unidad GPIO (en estado de entrada) contiene una especie de condensador que "transmite" la carga a la fuente de alimentación cuando está directamente conectado a ella (tirón más grande con mayor voltaje) y contiene la carga por más tiempo (o carga reemplazada más rápido) cuando está conectado directamente a tierra y, por lo tanto, influye en el circuito interno? ¿O tiene algo que ver con la diferencia de potencial entre los lados de una resistencia y, de ser así, cómo lee esto el pin de entrada?

Entiendo el hecho de que use una conexión a tierra al pin de entrada (en un circuito desplegable) porque de lo contrario el pin de entrada estaría influenciado por el ruido (estático) y una resistencia porque de lo contrario habría una conexión directa entre el Vcc y tierra, y esto daría lugar a un cortocircuito. Entonces esta parte se puede omitir en la respuesta. Por supuesto, puede agregar esto en su respuesta para otros usuarios que buscan una respuesta al respecto.

Espero que alguien pueda darme una explicación (en profundidad) de cómo funcionan estos circuitos.

No me queda claro qué es exactamente lo que estás preguntando. ¿Pull-up, pull-down, secuencia entre botón y encendido?
No estaba preguntando por la secuenciación que yo conocía.
"Majenko, no Google" y "hobbs" han respondido perfectamente a mi pregunta. Gracias por intentar ayudar.
También John R. Strohm también me ayudó con mi pregunta (sin olvidar a nadie).

Respuestas (3)

Un pin GPIO, cuando está en modo INPUT, puede considerarse como una resistencia muy grande conectada a tierra. El pin GPIO está interesado en el voltaje que atraviesa esta resistencia. Tome el siguiente circuito por ejemplo:

esquemático

simular este circuito : esquema creado con CircuitLab

El Arduino ve una lógica ALTA cuando el voltaje en el nodo etiquetado como GPIO está en, o cerca de, V C C (en este caso 5V). Se ve un BAJO cuando el voltaje en GPIO está en o cerca de 0 V .

Con el interruptor SW1 abierto, solo hay dos resistencias en juego: el pull-up y la resistencia del puerto GPIO interno. Entonces, usando matemáticas simples, podemos calcular el voltaje que habría en GPIO.

Primero calculamos la relación de las dos resistencias, usando R 2 R 1 + R 2 , y luego multiplíquelo por el voltaje, que es 5 V . Entonces tenemos la suma:

10 , 000 , 000 10 , 000 + 10 , 000 , 000 × 5

Por supuesto, podemos simplificar eso haciendo la suma y luego cancelando los ceros finales por encima y por debajo de la línea:

10 , 000 , 000 10 , 010 , 000 × 5
1 , 000 1 , 001 × 5

Y entonces la respuesta sale como 4.995 V - casi el completo 5 V . Entonces, Arduino lo ve como ALTO, ya que está por encima de su "umbral alto de lógica de entrada", también conocido como V I H en hojas de datos.

Entonces, ¿qué sucede ahora cuando presionamos el botón? Bueno, básicamente creamos un cortocircuito en la resistencia GPIO interna. Así que ahora podemos ignorar por completo esa resistencia, ya que esencialmente hemos puesto un cable a través de ella para cortocircuitarla.

Así que ahora nuestra suma cambia ligeramente, ya que R 2 es ahora 0 Ω (la resistencia del cable en cortocircuito R 2 ).

0 0 + 10 , 000 × 5 = 0 V

Y por supuesto, 0 V está por debajo del "umbral bajo de la lógica de entrada", o V I L .

Otra forma de verlo es que el GPIO, cuando se presiona el botón, se conecta directamente a tierra . Sin cantidad de ajustes de la resistencia R 1 cambiará alguna vez el hecho de que el voltaje a tierra es 0 V . La única forma de cambiar eso es haciendo un cortocircuito. R 1 así que eso se convierte 0 Ω también, y luego básicamente ha hecho un cortocircuito en su batería, y todos sus cables ahora se han derretido.

Como referencia, aquí hay parte de la Tabla 28.2 de la hoja de datos ATMega328P que detalla los umbrales de voltaje de entrada:

ingrese la descripción de la imagen aquí

Podemos ver allí la V I L y V I H voltajes para el 2.4 V 5.5 V V C C rango enumerado como 0.3 V C C y 0.6 V C C respectivamente. Ahora, esto no se refiere a 0.3 V y 0.6 V , sino 0.3 × V C C y 0.6 × V C C .

Si V C C es 5 V , entonces V I L es 0.3 × 5 = 1.5 V , y V I H es 0.6 × 5 = 3 V .

Entonces, cualquier voltaje visto en el pin GPIO que está debajo 1.5 V está registrado como un BAJO lógico, y cualquier voltaje vea que está por encima 3 V se registra como una lógica ALTA.

Gracias por su respuesta detallada. Realmente me ayudó. Fue realmente extraño que miré por encima del hecho de que básicamente estaba ocurriendo un cortocircuito (en la parte GPIO del circuito) en la carcasa cerrada. Nunca se mencionó, en los tutoriales que vi. Tal vez pensaron que todos los que leyeran o miraran los tutoriales lo notarían automáticamente. Que sería obvio, quiero decir.

Además, una explicación de referencia no parecería funcionar, porque en el caso de un ejemplo desplegable, ¿cómo sabe cuál es el valor alto/bajo cuando ha presionado el botón antes de conectar la fuente de alimentación? Incluso una explicación de umbral no parece explicarlo por completo, me parece que el voltaje en el circuito en su conjunto está por encima de 2.5 V tanto en estado presionado como no presionado, cuando se usa o hay una resistencia de 5V Vcc y 10kOhm. un error en mi forma de pensar acerca de esto?

Hay un gran error en tu pensamiento sobre esto. Cuando no se presiona el botón, el pin se conecta a 5V a través de una resistencia de 10k y a tierra a través de la gran resistencia del circuito de entrada del chip. Dado que la caída de voltaje es proporcional a la resistencia, el chip está cayendo ~ 5V, la resistencia de 10k está cayendo ~ 0 y el voltaje en el pin está muy cerca de 5V.

Cuando se presiona el botón, el pin se conecta a 5V a través de una resistencia de 10k y a tierra a través del interruptor (que es de ~0 ohmios) en paralelo con el chip (que no hace ninguna diferencia). Ahora la resistencia de 10k está cayendo ~5V, el interruptor está cayendo ~0 y el voltaje en el pin está muy cerca de 0.

Los pull-downs son iguales, solo que al revés. El pin está conectado a tierra a través de cierta resistencia y normalmente se lee bajo, pero si está conectado a 5 V a través de una ruta de resistencia mucho más baja, el voltaje en el pin estará cerca de 5 V y se leerá alto.

Los umbrales son fijos. Puede encontrarlos en la hoja de datos de su chip, pero una guía aproximada para CMOS es que una entrada superior al 70 % de Vcc es alta, una entrada inferior al 30 % de Vcc es baja y cualquier valor intermedio no es confiable. Algunos chips pueden tener una zona "no confiable" más pequeña, pero si puede diseñar al 30% y al 70%, no debería tener problemas.

Gracias por responder a mi pregunta. Si tuviera que escribir los cálculos de lo que escribiste, ¿sería como lo siguiente en el ejemplo desplegable? R1 = 10 k ohmios; R2 = 1 M ohmio; R3 = alrededor de 0 ohmios -- Cálculo de R total: R1 + (R2 * R3 / R2 + R3) = R total; 10k + ~ 0 = ~10k. Proporción de voltaje a través de R1: (R1 / R1 + R2,3) * V ; (10k / 10k + ~0) * 5; ~1 * 5 = ~5; ¿O estos cálculos no se aplican aquí?
Para aclarar, R1 sería el pull up y R2 la resistencia interna del GPIO y R3 la ruta desde el botón a tierra. Entonces habrá, - para agregar a lo que dije en el comentario anterior -, Vcc - Caída de voltaje R1 = Voltaje en el pin GPIO; 5 - ~5 = ~0 voltaje en el pin GPIO.

Primero, un pin GPIO funciona al detectar el voltaje en el pin. Normalmente solo detectan la lógica "1" (generalmente alta, cerca del riel de suministro, en estos días) o la lógica "0" (generalmente baja, cerca de tierra, en estos días). Los detalles exactos de la lógica 1 y la lógica 0 dependen del hardware del microcontrolador real y se especifican en la hoja de datos del microcontrolador.

Los pines GPIO presentan una impedancia bastante alta al mundo exterior. Verifique la hoja de datos para el valor "exacto". Atado al riel de suministro positivo a través de una resistencia limitadora de corriente, con un interruptor conectado y abierto, lo que tiene es esencialmente una resistencia a tierra muy grande. Fluye muy poca corriente, lo que significa que hay muy poca caída de voltaje en la resistencia limitadora de corriente, y el pin GPIO ve un alto voltaje (cerca del riel positivo).

Ahora, cuando el interruptor está cerrado, el interruptor cortocircuita el extremo frío de la resistencia limitadora de corriente a tierra. La corriente fluye y se desarrolla una caída de voltaje a través de la resistencia. Esto pone el pin GPIO en el potencial de tierra.

Recuerda, la Ley de Ohm es tu AMIGA.