8 votos

Conectar el pulsador a una clavija del controlador

Este problema tiene décadas de antigüedad pero no veo una respuesta directa a él en este sitio. Quiero lo siguiente:

enter image description here

Este circuito sólo permite comprobar el estado del botón desde el interior del microcontrolador. No es nada del otro mundo. Mis preguntas:

  1. ¿Hay algo mejor que este sencillo diseño?
  2. ¿Es el valor de la resistencia de 100 kilo ohmios adecuado para los dispositivos CMOS de nuestros días, como el dsPIC30FXXXX y no una aplicación de alta potencia?

6voto

AndroidUser Puntos 26

En primer lugar, muchos microcontroladores y controladores de señales digitales tienen resistencias pull up internas. Aquí hay un ejemplo, un Atmel ATMega164. ATMega164p GPIO port

Normalmente habrá un registro que permita activar y desactivar los pull ups internos. Debido a las variaciones en el proceso de fabricación, estos pullups internos vienen en un rango muy amplio, y no son una buena opción si necesitas un control muy estrecho sobre el consumo de corriente en aplicaciones de ultra bajo consumo. Si es importante mantener un bajo número de componentes, esta es una manera fácil de hacerlo. Utilizar pull ups internos para el debounce por hardware no sería una buena idea, ya que no es posible predecir su valor exacto.

Si el 100 \$k\Omega\$ valor es adecuado depende. Si sólo se trata de un interruptor que será accionado periódicamente por un usuario, entonces 100 \$k\Omega\$ sería una buena opción para minimizar el consumo de energía. Para las cosas que van a cambiar más rápidamente, como los codificadores rotativos, el proceso que yo seguiría es

  1. Encuentre la corriente máxima de caída en la hoja de datos
  2. Calcular un valor de pull up utilizando la ley de Ohm
  3. Elija una resistencia de tamaño estándar un poco más grande, en función de la velocidad realmente necesaria
  4. Prueba y comprueba si el tamaño de la resistencia elegida da los tiempos de subida y bajada requeridos
  5. Ajustar en consecuencia

Por lo tanto, si la corriente máxima de disipación por pin GPIO fuera de 10 mA y operara a 5V: \$R=\dfrac{V}{I}=\dfrac{5V}{10mA}=500\Omega\$ . Mantener este valor R lo más pequeño posible permitirá obtener los bordes más afilados y las frecuencias de conmutación más altas.

5voto

ianb Puntos 659

EDITAR - el comentario que hice a continuación tenía la intención de seguimiento de lo que Olin había dicho más tarde sobre el circuito con un condensador para supuestamente añadir debounce. ¡Lo siento parece aparecer en el lugar equivocado - tal vez alguien puede arreglar esto porque estoy obviamente demasiado ciego o estúpido para ver cómo debería haber hecho!

Estoy de acuerdo con Olin: no proporciona un buen rebote. También añadiría que un cortocircuito en el condensador puede causar una gran oleada de corriente que puede reiniciar el microprocesador si la disposición de la placa de circuito impreso no es realmente buena. Algunos interruptores necesitan una corriente de humectación para funcionar correctamente y de forma fiable y 100k puede ser demasiado alto para algunos interruptores (especialmente los de membrana).

4voto

Karthik Puntos 66

Se puede ser más simple que eso.

Sólo tienes que utilizar una resistencia interna de pull-up/pull-down en tu microcontrolador.

100k es adecuado, pero los pullups internos podrían ser un poco más bajos en algunos MCUs, por ejemplo en el AVR atmega8 es de 30-80kOhm para el pull-up de reset y 20-50kOhm para todos los demás pines de E/S.

4voto

RelaXNow Puntos 1164
  1. ¿Hay algo mejor que este sencillo diseño?

    No se puede responder mejor sin criterios específicos para medir, que no has proporcionado. En la mayoría de los casos, la topología que muestras está bien. Dos variaciones podrían ser "mejores" dependiendo de la situación:

    Muchos microcontroladores tienen pullups internos en algunos de sus pines. Estos están pensados exactamente para este tipo de situaciones. La resistencia es entonces interna al micro y se configura un bit en algún lugar para habilitarla. La única parte externa que se requiere es el propio pulsador.

    Otra variante útil a tener en cuenta es para los diseños de baja potencia en los que el botón puede ser un interruptor que puede estar cerrado durante largos períodos de tiempo. En este caso se quiere minimizar la corriente media a largo plazo a través de la resistencia de pullup. Lo haces tan grande como sea posible, pero hay límites para eso y desventajas para hacerlo demasiado grande. En lugar de eso, enciendes el pullup por sólo unos pocos µs a la vez para tomar una lectura del botón. Si compruebas el botón cada 1 ms y el pullup está encendido durante 10 µs, entonces la corriente media del pullup se reduce 100 veces. Con una resistencia externa utilizas otro pin para conducir el lado superior del pullup. Con un pullup interno, lo habilitas/deshabilitas en el firmware según sea necesario.

  2. ¿Es el valor de la resistencia de 100 kilo ohmios adecuado para los dispositivos CMOS de nuestros días, como el dsPIC30FXXXX y no una aplicación de alta potencia?

    Ya he respondido a esto ampliamente aquí .

0voto

Passerby Puntos 28913

¿Mejor que ese simple diseño? Sí. Ponle un tapón y tendrás un simple interruptor de hardware sin rebote.

enter image description here

El condensador sería una tapa de cerámica común de 0,1uf. La resistencia sería una de 10k. Este sitio tiene todos los detalles del porqué. En resumen, un circuito de rebote evita que el microcontrolador registre falsamente varias pulsaciones cuando se pulsa el botón. La configuración de la resistencia/condensador suaviza el rebote mecánico del botón para que sea una transición constante.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X