¿Cuáles son los mecanismos que funcionan en un circuito de resistencia de pull-up o pull-down con un botón y un GPIO?

1

Tengo una pregunta relacionada con el GPIO (por ejemplo, de una placa Arduino). ¿Cómo funciona exactamente cuando lo usas como un pin de entrada? ¿Cuáles son los mecanismos en funcionamiento cuando lo usa en un circuito de resistencia de pull-up y pull-down con un botón? 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 de pull-up), “Cuando se presiona el botón, se 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 ”( enlace ). Pero en los circuitos de resistencia desplegable con pulsadores, el pin de entrada también se conecta a tierra cuando se presiona el botón y la entrada es alta en ese caso.

La explicación de la línea de base tampoco funcionaría, porque en el caso de un ejemplo de recuperación, ¿cómo sabe cuál es el valor alto / bajo cuando presiona el botón antes de conectar la fuente de alimentación? Incluso una explicación de umbral no parece explicarlo completamente, el voltaje en el circuito en su conjunto me parece estar por encima de 2,5 V tanto en estado empujado como no empujado, cuando se usa una resistencia de 5 V Vcc y 10kOhm o está ahí ¿Un error en mi forma de pensar sobre esto?

Las explicaciones de los electrodos que solo viajan a través de la vía 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 se conectara una resistencia de 10 kOhm al suelo (antes del botón pulsador). Dado que esta es menor 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 se lee en ALTO. En el caso de pull-up I1 / I2 = R2 / R1 explica el comportamiento, ya que no hay resistencia en paralelo a la resistencia del GPIO y debido a la conexión donde no hay resistencia, la resistencia es despreciable (al menos en un corto distancia), todo el flujo de corriente va directamente al suelo?

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 conexión a tierra o alimentación) determina el estado cuando ambos tienen un circuito cerrado. Pero cual es el mecanismo. ¿La unidad GPIO (en estado de entrada) contiene un tipo de condensador que "transmite" la carga a la fuente de alimentación cuando está conectada directamente a ella (extracción más grande con mayor voltaje) y contiene la carga por más tiempo (o la carga reemplazada es más rápida) Cuando está directamente conectado a tierra, ¿influye el circuito interno? ¿O tiene algo que ver con la diferencia de potencial entre los lados de una resistencia, y si es así, cómo lee esto el pin de entrada?

Comprendo el hecho de que en el uso de una conexión a tierra al pin de entrada (en un circuito desplegable) porque de lo contrario el pin de entrada se vería afectado 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 resultaría en un cortocircuito. Así que 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 me pueda dar una explicación (en profundidad) de cómo funcionan estos circuitos.

    
pregunta A_Person

3 respuestas

5

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

simular este circuito : esquema creado usando CircuitLab

Arduino ve una lógica ALTA cuando el voltaje en el nodo etiquetado GPIO está en, o cerca de, \ $ V_ {CC} \ $ (en este caso, 5V). Se ve una BAJA cuando el voltaje en GPIO está en o cerca de \ $ 0V \ $.

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 sería en GPIO.

Primero calculamos la relación de las dos resistencias, usando \ $ \ frac {R2} {R1 + R2} \ $, y luego lo multiplicamos por el voltaje, que es \ $ 5V \ $. Así que tenemos la suma:

$$ \ frac {10,000,000} {10,000 + 10,000,000} × 5 $$

Por supuesto, podemos simplificar eso haciendo la adición, y luego eliminando los ceros finales arriba y debajo de la línea:

$$ \ frac {10,000,000} {10,010,000} × 5 $$ $$ \ frac {1,000} {1,001} × 5 $$

Y así, la respuesta sale como \ $ 4.995V \ $ - prácticamente la totalidad de \ $ 5V \ $. 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_ {IH} \ $ en las hojas de datos.

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

Así que ahora nuestra suma se modifica ligeramente, ya que \ $ R2 \ $ es ahora \ $ 0 \ Omega \ $ (la resistencia del cable en corto \ $ R2 \ $).

$$ \ frac {0} {0 + 10,000} × 5 = 0V $$

Y, por supuesto, \ $ 0V \ $ está por debajo del "umbral bajo de lógica de entrada", o \ $ V_ {IL} \ $.

Otra forma de verlo es que el GPIO, cuando se presiona el botón, está conectado directamente a tierra . Ninguna cantidad de ajustes de la resistencia \ $ R1 \ $ cambiará el hecho de que el voltaje en tierra es \ $ 0V \ $. La única forma de cambiar eso es mediante el cortocircuito \ $ R1 \ $ para que también se convierta en \ $ 0 \ Omega \ $, y luego, básicamente, haya hecho un cortocircuito en la batería y todos los cables se hayan fundido.

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

Podemos ver los voltajes \ $ V_ {IL} \ $ y \ $ V_ {IH} \ $ para el rango \ $ 2.4V - 5.5V \ $ \ $ V_ {CC} \ $ listado como \ $ 0.3V_ {CC} \ $ y \ $ 0.6V_ {CC} \ $ respectivamente. Ahora, esto no se refiere a \ $ 0.3V \ $ y \ $ 0.6V \ $, sino a \ $ 0.3 × V_ {CC} \ $ y \ $ 0.6 × V_ {CC} \ $.

Si \ $ V_ {CC} \ $ es \ $ 5V \ $, entonces \ $ V_ {IL} \ $ es \ $ 0.3 × 5 = 1.5V \ $, y \ $ V_ {IH} \ $ is \ $ 0.6 × 5 = 3V \ $.

Por lo tanto, cualquier voltaje que se vea en el pin GPIO que está por debajo de \ $ 1.5V \ $ se registra como una lógica BAJA, y cualquier voltaje que se vea por encima de \ $ 3V \ $ se registra como una lógica ALTO.

    
respondido por el Majenko
1
  

La explicación de la línea de base tampoco funcionaría, porque en el caso de un ejemplo de recuperación, ¿cómo sabe cuál es el valor alto / bajo cuando presiona el botón antes de conectar la fuente de alimentación? Incluso una explicación de umbral no parece explicarlo completamente, el voltaje en el circuito en su conjunto me parece estar por encima de 2,5 V tanto en estado empujado como no empujado, cuando se usa una resistencia de 5 V Vcc y 10kOhm o está ahí ¿Un error en mi forma de pensar acerca de esto?

Hay un error masivo en tu forma de pensar acerca de 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 resistencia muy grande de los circuitos 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 es muy cercano a 5V.

Cuando se presiona el botón, el pin se conecta a 5V a través de una resistencia de 10k, y se conecta a tierra a través del interruptor (que es ~ 0 ohms) 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 es muy cercano a 0.

Los menús desplegables son iguales, solo en reversa. El pin está conectado a tierra a través de cierta resistencia, y normalmente se lee bajo, pero si está conectado a 5V a través de una ruta de resistencia mucho más baja, el voltaje en el pin estará cerca de 5V 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 por encima del 70% de Vcc es alta, una entrada por debajo del 30% de Vcc es baja y cualquier cosa intermedia no es confiable. Es posible que algunos chips tengan una zona "no confiable" más pequeña, pero si puede diseñar al 30% y al 70%, no debería tener problemas.

    
respondido por el hobbs
0

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

Los pines GPIO presentan una impedancia bastante alta para el mundo exterior. Compruebe 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 muy grande a tierra. Fluye muy poca corriente, lo que significa que hay una pequeña 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. Los flujos de corriente, y una caída de voltaje se desarrolla a través de la resistencia. Esto pone el pin GPIO al potencial de tierra.

Recuerda, la Ley de Ohm es tu AMIGO.

    
respondido por el John R. Strohm

Lea otras preguntas en las etiquetas