Implementación de encendido/apagado a través de pines gpio para mcu mientras se afirma durante unos segundos

Me gustaría saber cómo se puede diseñar un sistema de encendido/apagado para un dispositivo que funciona con batería con entradas GPIO que tenga las siguientes características:

  • Cuando MCU está apagado, presionar y mantener presionado un interruptor durante 4 segundos solo debería encenderlo
  • Este interruptor debe poder usarse como un pin de entrada GPIO para el mcu después de que se encienda
  • Presionar y mantener presionado nuevamente el mismo interruptor durante 4 segundos debería apagar el sistema, ya sea cortando la fuente de alimentación o controlando una señal de apagado al regulador.

La última parte se puede hacer fácilmente ejecutando un temporizador en la mcu y verificando la duración de la pulsación cada vez que se genera una interrupción, y luego afirmando la señal de apagado del regulador de voltaje cuando esté listo. Pero no tengo ideas para encender 4 segundos y, al mismo tiempo, ser utilizable como GPIO después del encendido. La siguiente pulsación corta de este interruptor no debería apagar el sistema. Alguna idea ?

¿No sería más inteligente poner la MCU en modo de suspensión profunda?
@Lundin Dependiendo de la corriente de suspensión de MCU, el tamaño de la batería que puede permitirse usar y la vida útil que necesita, puedo entender fácilmente que puede no ser factible. A veces, 10 µA es demasiado.
@dim Un menú desplegable de 10k en 5V consume 500uA...

Respuestas (1)

Podrías hacerlo con algunos pasivos, un flip-flop y un gatillo schmitt, algo así:

ingrese la descripción de la imagen aquí

Cuando el interruptor está cerrado, el capacitor se carga lentamente. Cuando se alcanza el voltaje de entrada de transición de alto nivel del disparador schmitt (aquí en ~ 4 s), la salida del búfer del disparador schmitt (puede usar SN74xx1G17) sube, activando el reloj del flip-flop (puede usar SN74xx1G74), que luego cambia su salida. Tenga en cuenta que el flip flop D está configurado con la salida inversora conectada a su entrada D, por lo que cambia de estado en cada flanco ascendente del reloj.

Cuando se suelta el botón, el capacitor se descarga (toma un poco más de tiempo que el tiempo de carga debido a R2) y luego puede presionar nuevamente para desactivar la salida.

Para resumir, aquí, cada vez que presiona el botón durante más de 4 segundos, la salida "PWREN OUT" cambiará (esto puede activar directamente la entrada de habilitación de un regulador), y aún podrá detectar pulsaciones de botón más cortas de la MCU con la salida "SW OUT" .

La ventaja de esta solución es que no involucra el software en absoluto. Entonces, si hay un error en alguna parte y la MCU se bloquea, aún puede apagarla.

Tenga en cuenta, sin embargo, que si la MCU está apagada, aplicar un voltaje en el GPIO ("SW OUT" está alto porque el botón está presionado) puede dañarlo. Verifique las clasificaciones de MCU en la hoja de datos. Para resolver esto, puede poner una resistencia de alto valor (100k más o menos) en serie con la línea "SW OUT" (y eventualmente un diodo que sujetará cualquier voltaje más alto que el voltaje de suministro de MCU, pero lo más probable es que MCU tenga tal diodos incorporados).

Muchas gracias por la respuesta. ¿ Pero PWREN OUTno se garantiza que sea alto (o bajo) ya que se desconoce el estado inicial del flip flop? Entonces, ¿no hay una posibilidad del 50% de que tan pronto como se conecte la batería, el regulador se encienda, si PWREN OUTestá conectado directamente a la entrada EN del regulador?
@Jay Potencialmente, sí. Afortunadamente, el SN74xx1G74 también tiene una entrada de reinicio (que no se muestra en el esquema), en la que puede colocar una red de capacitor-resistencia para garantizar un reinicio en el encendido. Pero los valores dependerán del tiempo que tarde su suministro en alcanzar el voltaje inicial. Consulte electronics.stackexchange.com/questions/143968/…