Cómo implementar un botón de usuario filtrado

Quiero agregar un botón de usuario a mi diseño esquemático, así que primero echo un vistazo a lo que considero que podría ser una buena fuente: el esquema de la placa ST Discovery .

Su caso de uso es el mismo que el mío: botón de usuario, configuración del microcontrolador desconocida, Vdd a 3,3 V.

Su botón se ve así:

Esquema del botón de usuario de STM

Creo que entiendo la mayor parte (corrígeme si me equivoco):

  • R35 puede proteger el microcontrolador (es decir, PA0) en caso de que el usuario haya configurado ese pin para que sea una salida (alta/baja) en lugar de una entrada (alta impedancia). De lo contrario, si PA0 está configurado en bajo, presionar el botón podría ser peligroso.
  • R39 reduce la corriente Vdd-GND cuando se presiona el botón (no es necesario desperdiciar corriente).
  • El condensador debería filtrar el rebote del botón y supongo que también debería cargarse/descargarse a través de una resistencia (¿R38?).

Ahora, esto es lo que no entiendo: cuando el botón no está presionado, considerando condiciones estables, a un lado y al otro lado del botón tenemos potencial Vdd y GND, lo mismo con el capacitor. Entonces...? (pensamientos iniciales que sé que deben estar equivocados, pero de todos modos...)

  • Cuando presionamos el botón, ¿no estamos cortocircuitando dos cables a diferentes potenciales sin resistencia en el medio? (3,3 V de la fuente de alimentación con 0 V del condensador)
  • Mi intuición me hubiera llevado a colocar el R38 entre Vdd y el interruptor, en lugar de entre Vdd y el capacitor, pero parece que mi intuición es mala (los ingenieros de STM deben tener razón y yo debo estar equivocado).

Entonces, tal vez lo que sucede es que cuando se presiona el botón, la parte inferior del capacitor (como se dibuja en el esquema) se convierte instantáneamente en 3,3 V y luego la parte superior se convierte en 6,6 V. (y luego se descarga a través de R38)

Si eso es correcto, supongo que si en ese preciso instante soltamos el botón nuevamente (imagínense el botón rebotando), la parte superior del condensador mantiene el potencial de 6.6 V y vuelve suavemente a 3.3 V y la parte inferior mantiene el 3.3 V y va sin problemas también a 0 V? De lo contrario, el antirrebote no funcionaría, ¿verdad?

¿Alguien podría aclarar cómo funciona esto?

"¿No estamos cortocircuitando Vdd con GND sin resistencia en el medio?" ¿No está R39 (a 220k) entre Vdd y GND?
No veo un lado del botón conectado a tierra, lo veo conectado a R39.
@GlenYates, sí, pero la parte inferior del capacitor está a 0 V, ¿y el capacitor no debería actuar como fuente de alimentación? Es por eso que supongo que en realidad "se suma" (¿y luego la parte superior se convierte en 6.6 V?).
El capacitor evita que la diferencia de potencial entre sus terminales cambie instantáneamente. Dado que ninguno de sus terminales está conectado a tierra, no impide que ningún nodo del circuito cambie instantáneamente con respecto a tierra.
@ThePhoton Entonces, la parte superior del capacitor cambia de 3.3 V a 6.6 V instantáneamente, ¿verdad? Como pregunté en mi último párrafo, si ese es el caso, considere una liberación rápida del botón (es decir, un rebote), incluso cuando el interruptor está abierto, ¿los 6.6 V se mantienen en la parte superior del condensador? (y se descarga de nuevo a 3,3 V lentamente) Supongo que esa es la única forma de hacer que funcione el antirrebote...
Se descargará bastante rápido, ya que solo se descarga a través de 100 ohmios.

Respuestas (1)

En primer lugar, tenga en cuenta que el condensador "no está instalado". Por lo tanto, no está montado en los esquemas reales.

¡Pero supongamos que C38 está allí!

R39 reduce la corriente Vdd-GND cuando se presiona el botón (no es necesario desperdiciar corriente).

R39 reduce el voltaje cuando se presiona el botón. También carga el capacitor, cuando sueltas el botón. El valor se elige a) para mantener baja la corriente vcc a tierra, b) para tener una cierta constante de tiempo.

El condensador debería filtrar el rebote del botón y supongo que también debería cargarse/descargarse a través de una resistencia (¿R38?).

El capacitor filtra los rebotes. Cuando presiona el botón, se descarga rápidamente a través de R38. La función de R38 es limitar la corriente de descarga inicial, lo que también podría ser perjudicial para el interruptor (aunque el límite es solo de 100 nF, por lo que tiene una resistencia mínima). También limita la tasa de descarga.

Cuando presionamos el botón, ¿no estamos cortocircuitando dos cables a diferentes potenciales sin resistencia en el medio? (3,3 V de la fuente de alimentación con 0 V del condensador)

No, solo está cortocircuitando el capacitor, a través de R38.

Mi intuición me hubiera llevado a colocar el R38 entre Vdd y el interruptor, en lugar de entre Vdd y el capacitor, pero parece que mi intuición es mala (los ingenieros de STM deben tener razón y yo debo estar equivocado).

La resistencia podría haber estado en serie con el interruptor, pero el capacitor debería haber estado en paralelo a esta serie. (En otras palabras: en sus esquemas, coloque "vdd" a la izquierda de R38). Esto se puede hacer porque R38 es muy pequeño en comparación con R39.

Entonces, tal vez lo que sucede es que cuando se presiona el botón, la parte inferior del capacitor (como se dibuja en el esquema) se convierte instantáneamente en 3,3 V y luego la parte superior se convierte en 6,6 V. (y luego se descarga a través de R38)

Sí, esto es lo que sucede.

Si eso es correcto, supongo que si en ese preciso instante soltamos el botón nuevamente (imagínense el botón rebotando), la parte superior del condensador mantiene el potencial de 6.6 V y vuelve suavemente a 3.3 V y la parte inferior mantiene el 3.3 V y va sin problemas también a 0 V? De lo contrario, el antirrebote no funcionaría, ¿verdad?

No. Para obtener los números, supongamos que es tan rápido que presiona el botón tan rápido que instantáneamente lleva los 3.3V a la terminal inferior y luego los suelta lo suficientemente rápido (eso debería ser en un tiempo mucho más pequeño que R38*C38, es decir, 10us!) para que la tensión del condensador no cambie apreciablemente. Primero, el voltaje del capacitor no puede variar instantáneamente. El potencial de uno de sus terminales puede, pero luego, dado que el voltaje a través del capacitor no puede cambiar instantáneamente, el potencial en el otro terminal cambiará en consecuencia. Cuando presiona el botón, la terminal inferior pasa instantáneamente a 3.3V. El condensador se carga a 3,3V, por lo que la terminal superior pasa instantáneamente a 6,6V. Luego lo sueltas muy rápido. El terminal inferior vuelve a 0V, debido a R39. Si no fuera así, ese potencial sería de 3,3 V, y la corriente fluiría a través de R39. Pero si escribe la ecuación de la malla Vdd-C-R38-R39 (R35 está conectado a una entrada, supongamos que es ideal para que no fluya corriente hacia adentro o hacia afuera), verá que Vdd-Vc es cero, entonces hay cero corriente. Entonces, la terminal inferior de C38 está a 0V.

Finalmente una palabra sobre C38.

Si está presente, cuando encienda el circuito, actuará como si hubiera presionado el botón pulsador, es decir, dará un pulso de alto nivel en PA0. Esto se debe a que el capacitor inicialmente está descargado, por lo tanto, el potencial de las dos terminales tiene el mismo valor (3.3V). Los diseñadores tal vez más tarde se dieron cuenta de que

  1. Ellos no querían tal pulso.
  2. Cualquier rebote se puede realizar en el software.

EDITAR:

Como referencia, aquí hay un estudio de caso sobre los tiempos de rebote de varios conmutadores: http://www.eng.utah.edu/~cs5780/debouncing.pdf

Gracias por la respuesta completa. ¿Puedo suponer, entonces, que el rebote del botón es más lento que 10us? Nunca hice un experimento, así que no sé cuál es el orden de magnitud de un interruptor común que rebota cuando se presiona.
Cada botón (o incluso relé) tiene diferentes tiempos de rebote. Recuerdo que medí algunos con el visor, y los rangos de tiempo iban desde 100us hasta varias decenas de ms. ¡Aquí, en cambio, el autor encuentra que el tiempo de rebote es tan largo como 1/6 de segundo! eng.utah.edu/~cs5780/debouncing.pdf
¡Muchas gracias por la referencia en PDF! ¿Te importaría incluirlo en la respuesta? :-)
Sí, agregué la referencia :)