miércoles, 26 de noviembre de 2014

Resistencias pull-up y pull-down

Hola de nuevo,


Después de unas entregas de toma de contacto, es hora de avanzar un paso más. Hasta ahora, hemos conseguido que nuestra placa haga lo que le hemos dicho, pero no ha habido interactuación. Le cargamos un programa, y desde el momento que lo recibe lo ejecuta indefinidamente, hasta que la desconectamos de la alimentación. Es decir, no podemos decidir cuándo ejecutar o parar la aplicación.
En esta entrada veremos cómo comunicarnos con el Arduino a través de unos pulsadores.

Pero antes de nada… sí exacto, un poco de teoría.

Cuando queremos comunicarnos a través de un pulsador, lo que acaba recibiendo nuestra placa son “0” ó “1”.  Pero conseguir esto no es tan sencillo como conectar un pulsador entre la alimentación y nuestra entrada, puesto que cuando no estuviese pulsado nuestro Arduino no recibiría un “0”, sino un estado indeterminado que lo haría inestable e impredecible.


Por lo tanto, necesitamos fijar un valor en la entrada digital para tener un valor por defecto. Para tal fin se usan dos tipos de montaje.

La resistencia “pull-up”, que establece un nivel alto (1) en reposo. Veamos el montaje:



En este caso, con el pulsador abierto, no hay paso de corriente y la entrada digital ve directamente la fuenta de alimentación, es decir los 5V (1).
Cuando pulsamos el interruptor, cerramos el circuito y por tanto la entrada digital está directamente conectada a masa (0). La resistencia es necesaria en este montaje para no cortocircuitar la fuente.


La resistencia “pull-down”, que establece un nivel bajo (0) en la entrada digital en estado de reposo y un nivel alto (1) cuando pulsamos. Este es el montaje más habitual. Un ejemplo:



El funcionamiento en reposo, con el interruptor abierto no hay paso de corriente, por tanto no hay caída de potencial en la resistencia y la entrada digital “ve” masa, es decir está a “0”. Cuando pulsamos y cerramos el circuito, se produce una caída de tensión en R1 por el paso de la corriente. Esta caída de tensión , que son los 5V directos de la fuente es lo que ve nuestra entrada digital, y por tanto estará a “1” mientras esté pulsado.

En este tipo de montajes se suele usar resistencias de 10K para controlar el consume de corriente del circuito.


El pulsador es una chapa metálica, que al pulsarla flexa y toca los contactos cerrando el circuito. Pero al liberarlo normalmente se producen unos rebotes, que en aplicaciones de precisión puede provocar “falsos positivos”. Para estos casos, se mejora el circuito añadiendo un pequeño condensador entre la entrada y masa. De esta forma:





En este montaje el condensador se carga cuando pulsamos, y al dejar de pulsar “filtra” los rebotes del contacto metálico. El inconveniente es que deberá descargarse el condensador para que el Arduino pueda obedecer a otra pulsación.

Se puede considerar que la entrada estará otra vez a un nivel 0, después de 5 veces la constante de tiempo de descarga del condensador. Si usamos una R de 10K y un condensador de 100nF, sería:


T = R x C = 10.000 x 0.00000001 = 0,1 ms Constante de carga

                5 T = 0,5 ms  Tiempo necesario entre pulsaciones


Obviamente, 0,5 milisegundos entre pulsaciones es un tiempo más que aceptable y que podemos dar por válido.


De todas maneras para nuestros ejemplos no montaremos ningún condensador, puesto que los tiempos de ejecución del programa superan el posible transitorio producido por el rebote del pulsador.

En la próxima entrada programaremos el Arduino para leer entradas.

No hay comentarios:

Publicar un comentario