Conexión del botón pulsador a un pin del controlador

8

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

Este circuito solo permite verificar el estado del botón desde el interior del microcontrolador. Nada sofisticado. Mis preguntas:

  1. ¿Hay algo mejor que este diseño simple?
  2. ¿El valor del resistor de 100 kilo ohms es adecuado para nuestros dispositivos CMOS de días, como dsPIC30FXXXX y no es una aplicación de alta potencia?
pregunta Kirill Kobelev

5 respuestas

6

Primero, muchos microcontroladores y controladores de señales digitales tendrán resistencias internas de levantamiento. Aquí hay un ejemplo, un Atmel ATMega164.

Por lo general, habrá un registro que permite activar y desactivar las activaciones internas. Debido a las variaciones en el proceso de fabricación, estos controles internos vienen en un rango muy amplio, y no son una buena opción si necesita un control muy estricto sobre el consumo de corriente en aplicaciones de potencia ultra baja. Si mantener un recuento de componentes bajo es importante, esta es una manera fácil de hacerlo. No sería una buena idea utilizar los recursos internos para la eliminación de hardware, ya que no es posible predecir su valor exacto.

Depende de si el valor de 100 \ $ k \ Omega \ $ es adecuado. Si solo es un interruptor que un usuario cambia periódicamente, entonces 100 \ $ k \ Omega \ $ sería una buena opción para minimizar el consumo de energía. Para las cosas que se van a cambiar más rápidamente, como los codificadores rotatorios, el proceso por el que pasaría es

  1. Encuentre la corriente máxima de sumidero en la hoja de datos
  2. Calcule un valor de recuperación utilizando la Ley de Ohm
  3. Elija un resistor de tamaño estándar, algunos tamaños más grande, dependiendo de la velocidad realmente necesaria
  4. Pruebe y vea si el tamaño de resistencia elegido proporciona los tiempos de subida y caída requeridos
  5. Ajusta en consecuencia

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

    
respondido por el Matt Young
4

Puedes ser más simple que eso.

Simplemente use una resistencia interna de pull-up / pull-down en su microcontrolador.

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

    
respondido por el miceuz
1
  1. ¿Hay algo mejor que este diseño simple?


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

    Muchos microcontroladores tienen detectores internos en algunos de sus pines. Estos son para exactamente este tipo de situación. La resistencia es interna al micro y se configura un poco en algún lugar para habilitarlo. La única parte externa requerida es solo el pulsador.

    Otra variante útil a tener en cuenta es para diseños de baja potencia en los que el botón podría ser un interruptor que puede cerrarse durante largos períodos de tiempo. En ese caso, usted desea minimizar la corriente promedio a largo plazo a través de la resistencia de extracción. Usted lo hace lo más grande posible, pero hay límites y desventajas por hacerlo demasiado grande. En su lugar, encienda el pullup solo unos pocos µs a la vez para leer un botón. Si comprueba el botón cada 1 ms y el pullup está activado durante 10 µs, entonces la corriente de pullup promedio se reduce en 100x. Con una resistencia externa, usas otro pin para conducir el lado superior del pullup. Con un pullup interno, lo habilita / deshabilita en el firmware según sea necesario.

  2. ¿El valor del resistor de 100 kilo ohms es adecuado para los dispositivos CMOS de nuestros días, como dsPIC30FXXXX y no es una aplicación de alta potencia?


    Ya he respondido esto en detalle aquí .

respondido por el Olin Lathrop
0

¿Mejor que ese simple diseño? Sí. Lánzale un límite y tienes un simple conmutador de hardware con rebote.

Elcondensadorseríaunatapadecerámicacomúnde0.1uf.Laresistenciaseríaun10k. Este sitio tiene todos los detalles sobre por qué. En resumen, un circuito de rebote evita que el microcontrolador registre falsamente varias pulsaciones al presionar el botón. La configuración de Resistencia / Condensador suaviza el rebote mecánico del botón para que sea una transición constante.

    
respondido por el Passerby
0

EDITAR: el comentario que hice a continuación estaba destinado a hacer un seguimiento de lo que Olin había dicho más tarde sobre el circuito con un condensador para supuestamente agregar rebote. Lo siento, parece que aparece en el lugar equivocado, ¡tal vez alguien pueda arreglar esto porque obviamente soy demasiado ciego o estúpido para ver cómo debería haberlo hecho!

Estoy de acuerdo con Olin, no ofrece una buena opción de rebote. También agregaría que cortocircuitar el condensador puede causar una gran oleada de corriente que puede reiniciar el microprocesador si la disposición de PCB no es realmente buena. Algunos interruptores necesitan una corriente de humectación para funcionar correctamente y de manera confiable, y 100k pueden ser demasiado altos para algunos interruptores (especialmente los interruptores de membrana).

    
respondido por el Andy aka

Lea otras preguntas en las etiquetas