20 votos

Hacer que un interruptor momentáneo controle un interruptor de palanca

¿Cuáles son las formas más simples, económicas y pequeñas de hacer que un interruptor momentáneo produzca una salida de cambio de estado de 2 estados (interruptor momentáneo de retención)?

En otras palabras, la salida está continuamente baja, y cuando presionas momentáneamente el botón/interruptor táctil, la salida cambia a continuamente alta, y luego al presionarlo nuevamente, vuelve a cambiar a baja.

0 votos

Creo que la mejor respuesta a esto depende del preguntante y de si te sientes más cómodo con una solución de hardware o de software.

0 votos

También depende de dónde esté este interruptor de salida y de qué voltajes (¡estados!) tengas disponibles.

0 votos

Solo dos estados, alto y bajo, como cualquier lógica digital. Si deseas tener múltiples estados por los que estás pasando en ciclo, creo que eso requeriría un microcontrolador. Probablemente ya tendrías uno en tu circuito de todos modos para eso.

12voto

Lehane Puntos 6776

Aquí hay otra alternativa con dos inversores y eliminación de rebotes:

Dos inversores

Para la salida lógica, solo se necesitan los dos inversores, RC y la resistencia de retroalimentación:

ingrese la descripción de la imagen aquí

NC7WZ14 es de $0.06 con 2 inversores, paquete pequeño de 6 pines y entradas de trigger de Schmitt, aunque creo que este circuito ni siquiera necesita entradas de Schmitt debido al RC. Además, puede manejar 24 mA, por lo que podría conectar el LED directamente si estás usando un LED por alguna razón.

También se muestra aquí y aquí como un interruptor de contacto de alternancia.

Creo que la resistencia de retroalimentación debe ser mucho más pequeña que la resistencia central para evitar que oscile si se mantiene presionado el botón, porque la conexión de baja impedancia a la salida evitará que el condensador se cargue a la mitad de la tensión hasta que sueltes.

Las variantes se describen en Circuitos de enclavamiento suave de encendido y apagado de presión:

Variante de compuerta AND

0 votos

Cuando se encienda por primera vez, ¿se iniciará con la salida encendida, apagada o aleatoria? Sólo inspeccionando el circuito, supongo que se encenderá con la salida encendida.

0 votos

@CraigMcQueen Cuando se encienda por primera vez, el capacitor tendrá 0 V a través de él. Entonces, el primer circuito comenzará en la posición ENCENDIDO. Conecta el capacitor a la fuente de alimentación en lugar de la tierra, y comenzará en la posición APAGADO.

0 votos

@CraigMcQueen ¿En realidad está garantizado eso? No estoy seguro. La baja impedancia de salida del inversor dominará sobre la resistencia de 220k, por lo que podría empezar en un estado aleatorio.

8voto

Lehane Puntos 6776

Un posible método:

Utilizar un RC para desactivar el interruptor

Red RC conectada al interruptor momentáneo para evitar rebotes

y luego alimentarlo en un flip-flop D con la salida retroalimentando a la entrada para implementar un flip-flop T.

Flip-flop D configurado como flip-flop de cambio de estado

El flip-flop D debe ser activado solo con flanco de subida y necesita una salida invertida.

  • El NC7SZ74 de 8 pines debería funcionar, es muy pequeño y cuesta $0.12 en cantidad.
  • El 74HC74 es un flip-flop D doble con 14 pines por $0.05.

¿Hay algún problema con esto? El interruptor tendría que ser presionado durante un breve período de tiempo para que el tiempo de subida active la entrada de reloj, lo cual probablemente es bueno. Si mantienes presionado el botón, solo se activará una vez, lo cual es bueno. ¿Hay una forma mejor de evitar rebotes en el bucle de retroalimentación o algo así en su lugar?

6 votos

Realmente necesita un buffer de disparador de Schmitt en la entrada del botón (o si el flip-flop tiene entradas de disparador de Schmitt eso también funcionaría). De lo contrario, el FF puede oscilar momentáneamente cuando la entrada del reloj sube lentamente cuando se suelta el botón. (Esto se puede mitigar en cierta medida con una cuidadosa selección del condensador y el resistor de eliminación de rebotes, pero nunca eliminarse por completo)

1 votos

¿Podrías también usar un filtro RC en la trayectoria de retroalimentación para evitar el rebote?

6voto

O también podrías hacerlo con un microcontrolador pequeño de 6 pines y sin otros componentes. Puede costar un poco más, pero es más sencillo y ocupa menos espacio. El rebote de un interruptor en software es simple, luego simplemente es cuestión de almacenar un booleano si la salida debe ser alta o baja. La versión más pequeña de este microcontrolador viene en un paquete de montaje en superficie de 2mm x 2mm. En grandes cantidades podría costar $0.50.

esquemático de interruptor

0 votos

+1 - Pero creo que esa parte solo viene en SMT.

2 votos

Sí, pero incluso el microcontrolador más barato va a costar más que la lógica digital simple. Es un sistema bastante complejo para hacer una tarea sencilla, y te estás abriendo al mundo de los errores de software. Además, ¿aumenta los costos de producción programar cada microcontrolador?

0 votos

Entonces usarías la resistencia de pull-up interna en PB0 configurada como una entrada digital y luego hacer tierra para activarla, ¿verdad? No necesitarías una resistencia en serie con el interruptor de esa manera.

1voto

Lehane Puntos 6776

Este circuito (también descrito aquí) es muy barato, pero es más complejo y ocupa algo de espacio con todos los componentes. Si los transistores cuestan alrededor de $0.02 en grandes cantidades, ¿serían tal vez $0.10 en total?

Interruptor de palanca de 3 transistores

0 votos

$0.02 ... tal vez si compras 27,000 de ellos como aquí: search.digikey.com/scripts/DkSearch/…

1 votos

$0.03 es un montón horrible, como $0.02 en pequeñas cantidades...

0 votos

3904s por 1.4 centavos: newark.com/on-semiconductor/mmbt3904lt1g/… En grandes cantidades, los condensadores son como 1 centavo, y los resistores son como 1/10 de centavo.

0voto

titanous Puntos 1601

¿No podrías hacerlo simplemente en software?

¿El botón será una entrada en un dispositivo programable, o necesitas hacer el cambio en el ámbito del hardware?

Al almacenar un estado de botón en la memoria, es bastante fácil usar un interruptor momentáneo como un interruptor de palanca.

boolean buttonState = false; // almacenar para el estado de cambio, false = apagado true = encendido

if(yourButton == HIGH && buttonState == false) // si el botón está presionado y apagado
{
     Serial.println("Botón Encendido"); // hacer algo mientras el botón esté encendido

     buttonState = true // establecer estado del botón a encendido
}

if(yourButton == HIGH && buttonState == true) // si el botón está presionado y encendido
{
     Serial.println("Botón Apagado");  // hacer algo más mientras el botón está apagado

     buttonState = false // establecer estado del botón a apagado
}

Lo siento si esto no es lo que buscabas, obviamente esta respuesta depende de si estás usando un MCU o un chip programable.

0 votos

Personalmente, necesito una solución independiente, pero la pregunta pretende ser general.

2 votos

Sí, esa es definitivamente la solución sensata cuando se tiene un microprocesador. Ten en cuenta que también debes implementar "debounce" ya que los interruptores y botones hacen ruido al cambiar.

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