¿Cómo mejorar este circuito de encendido/apagado?

Estoy trabajando en un dispositivo pequeño del tamaño de un teléfono móvil y estoy tratando de implementar un botón de encendido momentáneo táctil que se pueda controlar desde la MCU (presione para encender, presione nuevamente para apagar). Lucho por encontrar un circuito simple y elegante para esto. Este está casi listo, pero no se puede usar para apagar el dispositivo sin un interruptor de dos polos.

Encendido/apagado sencilloPWR_ENABLE es una señal alta activa que enciende la MCU.

Cuando la energía está apagada, PWR_ENABLE se reduce cuando Q20 está habilitado (R32 mantiene la puerta de Q20 alta, la puerta de Q19 está baja porque la MCU no tiene energía). Cuando se presiona el botón SW4, Q20 se desactiva, lo que permite que PWR_ENABLE se suba. Tan pronto como aparece MCU, afirma el pin POWER_HOLD alto, lo que mantiene la puerta de Q20 en tierra. Para apagar, la MCU establece POWER_HOLD bajo, la compuerta de Q20 vuelve a subir, tirando de PWR_ENABLE bajo, la energía se apaga.

Todo está bien, sin embargo, me gustaría permitir que el usuario apague el dispositivo con una pulsación larga en SW4. Lo mejor sería una señal de SW4 para que la MCU pueda hacer la limpieza antes de apagarse. El problema es que la puerta de Q20 está en el potencial de tierra cuando está encendido, por lo que simplemente no puedo obtener una señal directamente desde SW4.

En el estado APAGADO, una pulsación debe hacer subir PWR_ENABLE. En estado ENCENDIDO, una pulsación NO debe bajar PWR_ENABLE sino activar la MCU, que a su vez baja PWR_ENABLE (después de guardar la configuración, etc.).

Se me ocurrió el siguiente circuito, pero parece demasiado complicado. ¿Alguien puede ver una forma elegante de simplificar? El objetivo es devolver una señal a la MCU de que el usuario solicita un apagado.

ON/OFF demasiado complejo

Otra cosa es que cuando la MCU está apagada todavía tienes corriente a través de la resistencia de 100k y Q10-Q20, eso aunque pequeño no es tan elegante, ¿no crees?
@clabacchio Bueno, cierto :-) La fuga de corriente a través de la resistencia de 100k no es ideal.
Cuando presiona y mantiene presionado el botón de encendido/apagado, ¿tiene que forzar el apagado o simplemente enviar una señal a la MCU para que pueda terminar lo que esté haciendo y apagarse? Si solo necesita enviar una señal, entonces no se necesita una demora de hardware, solo programe la MCU para que espere x segundos para verificar si la señal aún está activa.
" botón que es controlable desde la MCU ". Esa es una pregunta de robótica, que creo que puede estar fuera de tema aquí.

Respuestas (5)

Creo que esto se puede hacer con solo un par de diodos y una resistencia.ingrese la descripción de la imagen aquí

Al presionar el botón con la alimentación apagada, se habilita PWR_ENABLE para encender el micro (o la fuente de alimentación o lo que sea). El micro afirma POWER_HOLD para mantener la alimentación. Luego, el micro monitorea PWR_DOWN_REQUEST para ver cuándo el usuario ha presionado el botón nuevamente. Si VBATT está por encima del nivel que se puede alimentar a una entrada del micro, se puede agregar un divisor de voltaje.

¡GUAU, eso podría funcionar!
@morten, como mencionó Olin, el cambio de rebote puede ser un problema, por lo que querrá configurar POWER_HOLD como salida y configurarlo lo más rápido posible después de que se encienda el micro, preferiblemente justo en el código de reinicio. Lo bueno de este circuito es que usa diodos en lugar de una puerta OR, no se necesita VCC, por lo que incluso puede usar el cable PWR_ENABLE para activar el pin de habilitación de un regulador y mantener el sistema apagado hasta que esté habilitado.
Agregué un capacitor a través de la resistencia desplegable que mitigará el rebote. Ajuste los valores según sea necesario.

No lo he intentado ni lo he simulado, pero parece correcto.
Esto proporciona un empujón corto y un empujón largo.
Otro vistazo después de haberlo publicado sugiere que tal vez una resistencia de valor muy alto (por ejemplo, un rango de 1M - 10M) de C1+ a V+ puede ayudar a establecer las condiciones iniciales, pero probablemente no sea necesario.

No se muestra el control del procesador, pero se puede agregar fácilmente tocando en los puntos apropiados según sea necesario.

Q1/Q2 y R1/R2 forman un pestillo SCR clásico.
Inicialmente, Q1 y Q2 están apagados.
Al cerrar PB1, se enciende momentáneamente Q1 a través de R2, que enciende Q2 a través de R1, lo que habilita el pestillo Q1/Q2.
Al soltar PB1, Q1/Q2 quedan bloqueados.

C1 inicia la carga asumida ya sea a través de Q1-be R2 D1 oa través de R4 que no se muestra arriba.

Cuando PB1 se cierra brevemente, C1 comienza a descargarse a través de R3, pero mientras la constante de tiempo R3.C1 sea larga, PB1 a tiempo C1 permanece cargado.

Una pulsación prolongada de PB1 descarga C1 a través de R3 y apaga Q2 a través de Shottky D2.
R3 debe ser mucho más pequeño que R1 para que la base de Q2 esté adecuadamente conectada a tierra a través de D1. Esto es totalmente factible siempre que se conozcan y se diseñen los requisitos del circuito.

Con Q2 apagado, soltar PB1 recarga C1. La corriente de recarga debe ser lo suficientemente pequeña como para no volver a disparar Q1 a través de R2.

En general, sería necesario tener cuidado en el diseño para cumplir con varios requisitos altos o bajos de la unidad, pero debería ser factible. Agregar un transistor más en la ruta de tiempo probablemente facilitaría el esfuerzo de diseño.

ingrese la descripción de la imagen aquí


¡Sí, ja! :-)

Solo pensé en esto.
Algo arcano. Diagrama más tarde tal vez.

Dos bipolares NPN.
Ambos tienen resistencias de colector a V+.
Ambos tienen resistencias de base desde su propia base hasta el colector opuesto.
= pestillo clásico acoplado en cruz.

Ahora el extra - probablemente inventado hace 50 años :-).
Nombre un transistor Q1. Condensador C1 -ve extremo a tierra. Resistencia R1 del colector Q1 a C1+ PB1 de C1+ a la base Q1.

Operación:
Pulsaciones cortas en PB1 activarán el pestillo.
La operación se puede hacer sincronizada asimétricamente con el pensamiento. Tenga en cuenta que, como se describió anteriormente, una pulsación prolongada puede poner el sistema en oscilación. La resistencia R1 en serie con PB1 puede ser deseable para aumentar el tiempo de descarga en Q1_b.

Cuando Q1 está encendido, su colector está bajo, por lo que C1 se carga demasiado.
La base Q1 es alta (ya que está encendida).
Al presionar PB1 se conecta bajo a la base Q1 para que Q1 se apague.
El pestillo cambia.

Cuando Q1 está apagado, su colector está alto.
La base Q1 es baja.
Cargas C1 al colector Q1 = alto.
Al presionar PB1 se conecta alto a la base Q1 encendiéndolo.
El pestillo cambia

QED

El tiempo de pulsación de PB1 debe ser inferior a la constante de tiempo R1.C1.
El siguiente cambio no ocurrirá hasta que > constante de tiempo R1.C1.

probablemente estés en el estado de edición, pero no creo que se haya subido correctamente. Sigue diciéndome que no se puede acceder a mi unidad zzz. ¡ Al superusuario para pedir ayuda!

Usted dice que quiere un botón que sea "controlable desde la MCU", pero otras partes de su pregunta parecen estar preguntando sobre cómo encender o apagar un botón momentáneo. Asumiré que lo primero es solo una mala redacción de preguntas y una corrección de pruebas aún peor y responderé a lo segundo.

Hacer un interruptor de encendido/apagado con electrónica discreta es posible pero bastante complicado. Uno de los problemas es el rebote del botón. Dado que un botón en realidad se enciende/apaga muchas veces con una sola pulsación, el resultado final puede ser indeterminado. Esto significa que debe agregar algo de tiempo, lo que lo hace aún más complejo.

Hoy en día, la respuesta mucho más fácil es dejar el microcontrolador encendido todo el tiempo pero hacer que se apague solo. Los micros ahora están disponibles con 1 µA y menos corriente de sueño. Eso está "apagado" para la mayoría de los propósitos prácticos. La ventaja es que se pueden despertar rápidamente presionando un botón. Luego, el micro puede eliminar el rebote y encenderse o apagarse a sí mismo y a otros circuitos, según corresponda. Incluso si solo desea un controlador de encendido/apagado con botón pulsador, un pequeño micro es la forma más sencilla de hacerlo de manera confiable.

Conectar el botón de encendido a la MCU sería una gran solución. Sin embargo, la corriente de reposo para el regulador (un LDO en este caso) es de 120uA como mínimo. El resto de los circuitos también consume algo de energía en estado de suspensión. Tal vez podría usar un pequeño LDO de corriente de reposo bajo separado solo para la MCU ...
Hay LDO que usan mucha menos corriente de reposo que eso. Para un interruptor de encendido/apagado, solo enciende la CPU todo el tiempo, luego puede encender el resto de las cosas solo cuando se supone que debe estar encendido.

Creo que podría usar un biestable CMOS set-reset con entradas activas altas (puede ser la mitad de un chip 74HC adecuado). Resistencias desplegables en ambas entradas. El interruptor puede hacer que una entrada sea alta para permitir la alimentación, y también es una entrada para el microcontrolador. El microcontrolador puede hacer que la otra entrada sea alta para desactivar la alimentación. El biestable se alimenta directamente de la batería, pero su consumo debe ser mínimo.

Tenga en cuenta que las entradas deben estar bajas en reposo para evitar alimentar el microcontrolador a través de los diodos de protección de entrada.

Mi recomendación sería hacer que el botón de "encendido" maneje alto el mismo transistor que el procesador, y usar el mismo pin del procesador para las funciones de "mantener encendido" y "sentido del botón". Cuando el procesador quiere que la unidad permanezca encendida, debe llevar el pin alto el 99% del tiempo; sin embargo, ocasionalmente puede hacer flotar el pasador muy brevemente para verificar si se está presionando el botón. Si no le importa alimentar posiblemente una pequeña cantidad de corriente sobre el riel en el pin de su CPU, debería poder arreglárselas con cuatro resistencias y dos MOSFET. Si desea evitar cualquier posibilidad de corriente por encima del riel, un diodo Zener podría ser la forma más sencilla de hacerlo.

Una cosa a tener en cuenta, por cierto, es asegurarse de que un "alto" de la CPU solo pueda encender el circuito cuando el voltaje de la CPU esté por encima de su especificación operativa mínima. De lo contrario, es posible que la CPU pueda ejecutar un código arbitrario tan pronto como su voltaje caiga por debajo de su especificación operativa, y ese código arbitrario podría intentar volver a encender el circuito. He tenido ese problema en el pasado, pero se puede evitar asegurándose de que la relación de resistencia entre la resistencia desplegable en la puerta NFET y la resistencia en serie que proviene del pin de la CPU sea tal que la puerta no No se encienda a menos que la CPU emita un voltaje "alto" muy bueno.