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.
(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:
¿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)
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.
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:
La secuencia habitual para el apagado:
Desactivar interruptores de ruta de datos
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.
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.
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
. 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.
simular este circuito : esquema creado con CircuitLab
vicatcu
jeremy gilbert
Russel McMahon
FlashCactus