Despertar de los modos de sueño profundo

La mayoría de los microcontroladores (p. ej., AVR, MSP430, PIC, etc.) admiten varios modos de suspensión diferentes. El modo de suspensión "más profundo" es el que pretende el consumo de energía más bajo (por ejemplo, "Apagar", "Apagar"), pero todos los sistemas de reloj generalmente se detienen en estos modos y me parece que la única forma de " despertar" de ellos es a través de un estímulo externo (por ejemplo, interrupciones de cambio de pin, reinicio de chip). ¿Me estoy perdiendo de algo? ¿Existen métodos asombrosamente 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 menos posible), mientras me despierto 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 no tiene estado (no tengo que recordar nada del pasado para realizarla).

He tenido cierto éxito usando el WDT en el MSP430 para lograr 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 pase a LPM4.5 o como se llame el modo de "sueño profundo". El resultado neto es que la función se realiza, la MCU duerme, el WDT caduca y el chip se reinicia hasta la saciedad. Parece funcionar, solo me pregunto si hay una forma "mejor" o "más elegante" o "más eficiente en el consumo de energía" de 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 trabajos de baja potencia. ¿Quizás no existe 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 funciones geniales como el sistema de eventos y el sonambulismo que, en algunos casos, apenas requieren que la CPU esté activa si puede hacer que su aplicación encaje en esa estructura...

Bien, basta de divagar, aquí lo que tendrás que decir :)

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

¿Has visto focus.ti.com/lit/wp/slay015/slay015.pdf ? Algunos puntos interesantes además de los números absolutos del poder del sueño.

Respuestas (4)

La mayoría de los micros admiten un oscilador de cristal de reloj de baja potencia de 32,768 kHz con algún tipo de preescalador e interrupción del temporizador. Configure el preescalador 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 para cualquier micro de baja potencia enumerará la potencia con el oscilador 32.768 (y nada más) en funcionamiento. Está bastante cerca de cero. Puede hacer los cálculos para ver si esto es aceptable y compararlo con la corriente extraída por el perro guardián.

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

0,5 μA es casi cero, aunque es cinco veces el verdadero modo APAGADO.

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. Luego, 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 suficiente para muchas aplicaciones, porque la corriente ON (durante la medición misma) domina el consumo.

texto alternativo

siéntete libre de elegir un ejemplo concreto... :)
listo, para celular msp430f2013 y cr2032.
Usamos Cr2032 en mi trabajo con el ACLK en 32768, despertando cada 2 segundos. Usamos un transceptor cada 90 segundos. Tomamos una medida de temperatura cada 10 segundos. Podemos durar más de 4 años con un nuevo CR2032.

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

Los PIC con RTC pueden configurar el RTC en un estado de alarma, por lo que activará la MCU en un momento dado, con un cristal externo de 32,768 kHz. Extraen ~ 450 nA IIRC en RTC + modo de suspensión, pero solo 20 nA con RTC apagado.

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 el modo de apagado a 3 V es de 2 μA sin el WDT habilitado y de 4 μA con. Claro, es 2 veces más, pero la corriente en sí es lo suficientemente pequeña para alrededor de 6,2 años de funcionamiento, que es aproximadamente la misma cantidad de tiempo que tarda la batería en degradarse por sí sola de todos modos (fuente: la fecha de caducidad).

Además, prácticamente cualquier otra cosa que conecte alrededor del μC atraería mucho más. De hecho, la parte más complicada de diseñar un circuito de bajo consumo es apagar 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 mía al encender el ADC, probar un potenciómetro de 1K, calcular algunas cosas a partir de los resultados y volver a dormir sin cambios notables 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 meros nanoamperios, por lo que debería ser una buena combinación. De hecho, si el RTC en cuestión puede generar pulsos regulares, podría usarlo como su fuente de activación en lugar del WDT a costa de usar un pin.