Despertando de los modos de sueño profundo

12

La mayoría de los microcontroladores (por ejemplo, AVR, MSP430s, PIC, etc.) admiten varios modos de suspensión diferentes. El modo de suspensión "más profundo" es el que promueve el consumo de energía más bajo (por ejemplo, "Apagado", "Apagar"), pero todos los sistemas de reloj se detienen normalmente en estos modos y me parece que la única forma de " Despertar "de ellos es a través de estímulos externos (por ejemplo, interrupciones de cambio de pin, reinicio de chip) ¿Me estoy perdiendo de algo? ¿Existen métodos de baja potencia para generar una señal de activación periódica para una MCU?

Suponiendo que mi objetivo es minimizar el consumo de energía (es decir, dormir profundamente durante el mayor tiempo posible, permanecer despierto lo más brevemente posible), mientras se despierta periódicamente para ejecutar una función, ¿cuál es la forma común de lograr este tipo de comportamiento? Para simplificar aún más las cosas, supongamos que mi función es sin estado (no tengo que recordar nada del pasado para realizarla).

He tenido cierto éxito al usar el WDT en el MSP430 para obtener este efecto. Acabo de hacer que mi rutina principal sea mi función, con la última línea que permite que el temporizador de vigilancia caduque después de un cierto período y vaya a LPM4.5 o como se llame al modo de "suspensión profunda". El resultado neto es la función que se realiza, el MCU duerme, el WDT caduca y el chip se reinicia, hasta el fondo. Parece funcionar, solo me pregunto si hay una forma "mejor" o "más elegante" o "más eficiente en el uso de la energía" para obtener este tipo de comportamiento.

Todavía no he probado este enfoque con un AVR, pero creo que el WDT tiene más "hambre de energía" en los AVR que en el MSP430, por lo que puede ser menos atractivo para el trabajo de baja potencia. Tal vez no exista un enfoque "universal" para la baja potencia, ¿y tiene que usar las herramientas que ofrece una línea de productos determinada? Sé que la nueva línea picoPower tiene muchas características geniales como el sistema de eventos y Sleep Walking que, en algunos casos, apenas requieren que la CPU esté completamente despierta si puede hacer que su aplicación encaje en esa estructura ...

Bien, basta de mi deambular, deja aquí lo que tendrás que decir :)

Editar ¡Los ejemplos concretos que ilustran técnicas también serían geniales!

    
pregunta vicatcu

4 respuestas

14

La mayoría de los micros admiten un oscilador de cristal de reloj de 32,768 kHz de baja potencia con algún tipo de preescalador e interrupción del temporizador. Configure el prescaler para que el temporizador cuente lentamente y la interrupción ocurra en el período que desee.

Algunos micros también tienen un temporizador RC de baja potencia incorporado si el tiempo exacto no es crítico.

La hoja de datos de cualquier micro de baja potencia mostrará la potencia con el oscilador 32.768 (y nada más) en funcionamiento. Está bastante cerca de cero. Puedes hacer los cálculos para ver si esto es aceptable, y compararlos con los actuales dibujados por el perro guardián.

Bien, por ejemplo, en el msp430f2013, veamos el poder en la hoja de datos.

0.5 μA es casi cero, aunque es cinco veces el verdadero modo OFF.

Para más detalles, podemos mirar dentro de la hoja de datos.
Pasar de LPM4 (todo apagado) a LPM3 (ejecutar el oscilador) es la diferencia entre 0.5 μA y 1 μA.

Supongamos que la batería es CR2032 con una capacidad de 225 mAh. Entonces, el modo de espera en LPM4 es de unos 50 años y en LPM3 es de unos 25 años. 25 años es lo suficientemente largo para muchas aplicaciones, porque la corriente de conexión (durante la medición en sí misma) domina el consumo.

    
respondido por el markrages
3

Algunas partes tienen osciladores de muy baja potencia (algunos uA) para la activación, y algunos PIC también tienen hardware para permitir que se despierte un voltaje muy lento en un pin - esto puede ser desde un condensador externo configurado antes de dormir cargar durante el período de activación requerido.

    
respondido por el mikeselectricstuff
3

Los PIC con RTC pueden tener el RTC configurado en un estado de alarma, por lo que activará la MCU en un momento dado, con un cristal externo de 32.768 kHz. Dibujan ~ 450nA IIRC en el modo de suspensión RTC +, pero solo 20nA con RTC desactivado.

    
respondido por el Thomas O
3

Los temporizadores de vigilancia AVR no son tan malos como parece pensar. De acuerdo con la hoja de datos de ATTiny13A, el consumo de corriente en modo de apagado a 3V es de 2μA sin el WDT habilitado, y de 4μA con. Claro, es 2 veces más, pero la corriente en sí misma es lo suficientemente pequeña para unos 6,2 años de funcionamiento, que es aproximadamente la misma cantidad de tiempo que la batería tarda en degradarse por sí sola de todos modos (fuente: la fecha de caducidad).

Además, prácticamente cualquier otra cosa que conectes alrededor de la μC atraerá mucho más. De hecho, la parte más complicada de diseñar un circuito de baja potencia de este tipo es desconectar toda la corriente en el resto del esquema durante el período de suspensión.

El retraso de activación también se puede configurar muy bien, de ~ 12ms a 8s, si la memoria sirve. La frecuencia real no hace ninguna diferencia notable si se usan rutinas de interrupción corta: me salí con la idea de encender el ADC, muestrear un bote 1K, calcular algunas cosas de los resultados y volver a dormir sin un cambio notable en el consumo general ( suavizado con un condensador grande para compensar la lentitud de mi multímetro).

Tenga en cuenta que el WDT no es una herramienta de cronometraje precisa, por lo que es posible que desee conectar un RTC externo. Esos pueden consumir simples nanoamperios, por lo que debería ser una buena pareja. De hecho, si el RTC en cuestión puede generar pulsos regulares, podría usar eso como su fuente de activación en lugar del WDT al costo de usar un pin.

    
respondido por el FlashCactus

Lea otras preguntas en las etiquetas