Formas adecuadas de desconectar los circuitos integrados durante los estados de baja potencia para evitar el suministro parásito/retroalimentado

Estoy trabajando en un proyecto basado en AVR basado en batería de baja potencia que integra algunos dispositivos diferentes, incluida una tira de neopíxeles y un duendecillo de Adafruit . Cuando el dispositivo en general está inactivo, me gustaría que consuma menos de 0,1 mA para maximizar la duración de la batería LiPo.

Todo esto funcionó (medido 0.035mA) pero no estoy seguro de haberlo hecho necesariamente de la manera "correcta" y planeo construir un producto basado en esto, así que me gustaría hacerlo bien.

ingrese la descripción de la imagen aquí(No se muestra: un diodo flyback para el relé)

La principal preocupación que tengo es la alimentación "parásita" de los dispositivos cuando el VCC se desconecta a través de la corriente que fluye desde los pines de datos. Por ejemplo, el Pixie (que se comunica a través de serie), no tiene modo de apagado e incluso cuando está "apagado" consume alrededor de un miliamperio. Así que coloqué un pequeño relé para desconectar su VCC y descubrí que el pin serial aún alimentaba al duendecillo. Las sugerencias en otros lugares sugirieron que muchos chips tienen un diodo que desvía sus pines de entrada digital a VCC como protección de energía. Para resolver esto, tuve que suspender la biblioteca en serie y, de hecho, escribir digitalmente (PIN, BAJO) durante la suspensión.

Lo mismo con la tira WS2812b: desconectar VCC aún permite que el dispositivo se alimente desde el pin de datos. Y en otros diseños, cuando desconecté GND con un MOSFET de canal N, observé lo contrario: ¡un reflujo de corriente a través de la línea de datos a tierra! (Esto tuvo que resolverse con un diodo según una publicación en PJRC). Los WS2812b en realidad toman alrededor de un miliamperio cada uno, incluso cuando no están encendidos,

Entonces, la pregunta: ¿Existe una forma general y "limpia" de desconectar VCC y GND de partes de un proyecto durante la suspensión del sistema cuando hay pines de datos en la mezcla? cual es la mejor practica?

Algunas ideas:

  1. Forzar VCC a GND (¿no está seguro de cómo? ¿Hbridge?). (Si hago eso, ¿qué sucede con los pines de datos que están altos?)
  2. Coloque un búfer de tres estados entre todos los pines de datos y estos dispositivos, y durante la suspensión coloque el búfer de tres estados en un estado de alta impedancia, desconecte VCC o GND solo con P o N mosfet
  3. Desconecte GND solo con N mosfet y coloque diodos en todos los pines de datos
  4. ¿Hay algún tipo de pestillo de alimentación que desconecte tanto VCC como GND y los coloque en un estado de "alta impedancia" (como un búfer de tres estados para la alimentación?) De esa manera, la corriente no tiene forma de "salir" de las líneas de datos.

¿Puede alguien iluminarme sobre la forma más limpia y repetible de manejar este tipo de problema de "desconexión de carga"? (No hace falta decir que pasé horas buscando en Google este problema con poca suerte, aunque encontré esta nota técnica sobre el cambio de carga, pero no aborda la retroalimentación y la energía parásita)

Sí, esto es súper molesto, de hecho, he visto casos en los que la energía que llega a un pin GPIO puede encender un AVR (código de ejecución) incluso sin energía que llegue a los pines VCC ...
Observación divertida: hice algunas búsquedas más en Google desde que publiqué esta pregunta y esta pregunta en SE apareció como de primer nivel. Google indexó esta página en menos de 10 minutos.
Solo comentario: los interruptores de aislamiento adecuados, como han sugerido otros, son la mejor solución cuando no se puede eliminar un voltaje remoto. PUEDE ser que el uso de diodos Schottky en los pines de entrada con cátodos en común y, por lo general, en Vcc y fijados a tierra cuando se desea aislamiento, proporcione una eliminación adecuada de los voltajes de impedancia altos. Obviamente, Schottky sujetando una línea de alimentación con baja impedancia puede estropearle el día.
Probablemente Hi-Z-ing todas sus conexiones de alguna manera (pines µC de tres estados, búferes de tres estados, interruptores analógicos, lo que sea), como han sugerido Peter Smith y CL, es la mejor opción. Cuál de los métodos es mejor, no estoy seguro. En cualquier caso: ¿por qué usa un relé para la conmutación y no un P-MOSFET (o un N-MOSFET de lado bajo, aunque la conmutación de lado bajo probablemente será un poco más difícil aquí)?

Respuestas (4)

Cuando hago esto, generalmente uso interruptores analógicos CMOS en las líneas de datos afectadas.

Algo así como el ADG812 tiene 4 canales de interruptores SPST que son fácilmente adecuados para una lógica bastante rápida y proporcionan una impedancia realmente alta entre los nodos del interruptor cuando están apagados.

ADG812 de fuga

Lo bueno de esto es que la técnica funciona tanto para líneas de datos unidireccionales como bidireccionales.

Estas partes también se ejecutan en una sonrisa brillante:

Requisitos de alimentación ADG812

La secuencia habitual para el apagado:

  1. Desactivar interruptores de ruta de datos

  2. Apague el dominio.

El encendido es lo contrario, por supuesto.

[Actualizar]

De hecho, se conocen con otros nombres, como puertas de paso y puertas de transmisión .

Estos son significativamente diferentes de un verdadero búfer de tres estados (como puede ver en el diagrama en el enlace anterior), pero para la lógica ordinaria, el efecto es mejor (este es inherentemente un dispositivo bidireccional) pero con menor potencia.

Perdone la ignorancia de la pregunta, pero ¿es esto marcadamente diferente a un búfer de tres estados? (¡Y gracias por la respuesta!)
Estos también se conocen como "puertas de paso"

Si las señales de datos están conectadas a su microcontrolador, simplemente puede hacerlas de alta impedancia configurando esos pines como entradas. (Si el otro chip usa muy poca energía, puede tratar su Vcc como una señal de datos).

De lo contrario, puede usar interruptores analógicos (chips lógicos de 74x66) para desconectarlos. Para señales unidireccionales, 74x125 también funcionaría.

En realidad, no necesita hacerlos de alta Z, simplemente puede reducir las líneas GPIO del micro.
Eso sería más peligroso si el otro chip pudiera alguna vez llevar la señal a un nivel alto.
Solo para que entienda completamente, ¿cambiar los pines a las entradas siempre es lo mismo que ponerlos en un estado de alta impedancia? ¿Eso se generaliza a la mayoría de los MCU o solo a los AVR? ¿Es ese estado el mismo que obtendría del 74x125 cuando el entorno operativo está deshabilitado?
@JeremyGilbert Todas las entradas CMOS tienen alta impedancia (son puertas MOSFET, que se comportan como condensadores muy pequeños). Una salida '125 deshabilitada no tiene puerta, pero la diferencia es insignificante.
@JeremyGilbert Las entradas son generalmente Z altas en la mayoría de las aplicaciones; después de todo, es difícil sentir algo cuando estás conduciendo por la línea. Dicho esto, al menos con AVR (y probablemente también con otros, pero no conozco los detalles), debe tener cuidado con los pullups internos: si el pin está en modo de entrada (configurado a través de DDRx) y escribe BAJO para (a través de PORTx), está en modo Hi-Z normal. Sin embargo, si escribe ALTO mientras está en el modo de entrada, el pullup interno está habilitado y, desde el exterior, el pin parece una resistencia de ~ 50K a VCC en lugar de una línea flotante.

Desafortunadamente, no creo que haya una estrategia única para todos. Cambie la energía a los subsistemas como ya lo ha hecho. En el software, active los pines bajos para estados de baja potencia, a menos que hacerlo provoque una condición de estado estable de alta potencia. En ese caso, lleve el pasador alto. Nunca dejes que las entradas floten. Secuencia de potencia según sea necesario para establecer condiciones iniciales seguras.

Un problema desagradable que puede hacer que los microcontroladores hagan cosas muy extrañas.
La buena solución es usar E/S serie desplegable como yo 2 C . Esto requiere resistencias pull-up en líneas SCK, SDA. Las resistencias pull-up están conectadas a la línea Vcc conmutada. Asegúrese de que la línea Vcc conmutada caiga bien a cero voltios cuando esté apagada (no deje que flote).

No tiene esa opción: está obligado a usar E / S en serie asíncrona. Algunos microcontroladores permiten un enfoque similar al de I2C para resolver el problema. Si puede programar el pin de salida en serie para que sea solo desplegable en lugar del más común pull-up-for-1, pull-down-for-0 , entonces puede agregar una resistencia pull-up a Vcc conmutado para establecer una lógica alta.
Esta solución no es tan resistente al ruido como su enfoque actual, pero debería resolver el problema de retroalimentar sus módulos de E/S desde el AVR. No es realmente una solución "limpia", pero es mucho más segura para los microcontroladores en sus módulos IO.

esquemático

simular este circuito : esquema creado con CircuitLab