Introducción

Cuando tenemos un microcontrolador con un pin configurado como entrada, si no conectamos nada a este pin, es considerado como “flotante”, es decir no es un cero ni tampoco un 1, a este “estado lógico especial” se le llama estado de alta impedancia que (para este tutorial bastará pensar la impedancia como una resistencia). Al no tener conectado nada al pin, solo está el aire conectandolo a Vcc y tierra, por lo que el voltaje en el pin estará flotando en algún punto entre 0 y Vcc, esta es la base del estado de alta impedancia.

Si recordamos que los ceros y unos que programamos en los microcotroladores en realidad son niveles de voltaje (generalmente un cero son 0V y un uno 5V o 3.3V, aunque en algunos casos es al revés) podemos comprender que el micro no podrá distinguir si en el pin hay un 1 o un 0. Para evitar esta situación ambigua se utilizan las resistencias de pull-up o pull-down para llevar el nivel de voltaje en el pin a 5V o 0V respectivamente. Además la resistencia debe ser tal que la corriente que circule por ella sea pequeña. Las resistencias de pull-up se usan en la mayoría de las líneas lógicas de entrada, como líneas I2C, de reset o similares. Un ejemplo es el uso de resistencias de pull-up junto a un botón.

boton

Si analizamos el circuito anterior, podemos fijarnos que si el interruptor (botón) está abierto, dado que el pin de entrada tiene una alta resistencia (típicamente del orden de 100k o 1MOhm) circulará una pequeña corriente, con lo que la caída de voltaje en la resistencia de pull-up será pequeña, dejando al pin en un estado alto.

En cambio, si cerramos el interruptor (botón), se ve que el pin quedará conectado directamente a tierra, siendo su voltaje 0V. Pero en esta situación la resistencia queda conectada entre Vcc y tierra, así que debemos tener cuidado de no escoger una resistencia demasiado pequeña, para que no circule demasiada corriente por ella.

Ahora tenemos que escoger: ¿qué resistencia usar? Hay dos respuestas a esta pregunta, la primera es fácil y rápida: 10kOhm, la segunda algo más complicada, pero nos permitirá comprender mejor el funcionamiento de los pines de los micros, así que también es más entretenida. Consideramos que tenemos que cumplir dos condiciones:

  • Cuando se presiona el botón, el pin se conecta a tierra, quedando en estado bajo, acá el valor de la resistencia regula cuánta corriente circulará por la misma, por lo que queremos una resistencia alta, para que esta corriente sea pequeña.
  • Si no se presiona el botón, el pin es levantado hacia 5V por la resistencia (de aquí viene el nombre pull-up), por lo que necesitamos una resistencia chica para que la caída de voltaje en ella sea pequeña también y el pin tenga un voltaje cercano a 5V.

Para la primera condición no queremos una resistencia demasiado pequeña, porque sino circularía mucha corriente, que se traduce en potencia disipada en forma de calor, cosa que siempre tratamos de evitar, como hemos dicho en el tutorial de potencia y disipación térmica.

botonresistencia

La regla general para la segunda condición es usar una resistencia de pull-up 10 veces mas chica que la resistencia (impedancia) propia del pin, sabemos que ésta va entre 100k y 1MOhm. Si nos fijamos en el circuito mostrado más arriba, vemos que cuando el interruptor (botón) está abierto, se forma un divisor de voltaje en el pin, por esta razón si la resistencia de pull-up es demasiado grande, por ejemplo imaginemos tiene el mismo valor que la resistencia interna del pin, entonces 5 el voltaje del mismo será la mitad de Vcc y nuestra resistencia de pull-up no servirá. La regla de 10 veces mas pequeña viene del límite que tiene típicamente un circuito lógico para “entender” un 1 en un pin, que no siempre es 5V, pudiendo ser 4.8V por ejemplo.

Finalmente debemos tener en cuenta dos cosas, la primera es el hecho que muchos micros traen resistencias pull-up habilitadas internamente, por lo que se debe buscar en el datasheet como habilitar o deshabilitar los mismos dependiendo de la aplicación, en general vienen habilitados de fábrica. Otro factor a considerar es que los pines son alimentados internamente mediante un condensador, que en conjunto con la resistencia de pull-up formará un circuito RC pasa-bajos, que atenúa las altas frecuencias ya que mientras mayor resistencia de pull-up, más tiempo le toma al condensador descargarse a través de ella. Si se tiene una señal que cambie rápidamente, por ejemplo una comunicación USB debe tenerse especial cuidado con este tema, que puede limitar la velocida máxima a la que puede cambiar de estado el pin.

Ejemplo

Supongamos que queremos limitar la corriente que circula a 1mA cuando el botón es presionado, y que Vcc=5V. ¿Qué resistencia tenemos que usar?

La respuesta es simple, por ley de Ohm tenemos:

calculo_ejemplo