Despertarse de los modos de sueño profundo

13

La mayoría de los microcontroladores (p. Ej., AVR, MSP430, PIC, etc.) admiten diferentes modos de suspensión. El modo de reposo "más profundo" es el que supone 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 esa es la única forma de " despertar "de ellos es a través de un estímulo externo (por ejemplo, interrupciones de cambio de pin, restablecimiento de chip). ¿Me estoy perdiendo de algo? ¿Existen métodos increíblemente bajos para generar una señal de activación periódica para una MCU?

Asumiendo que mi objetivo es minimizar el consumo de energía (es decir, dormir profundamente el mayor tiempo posible, permanecer despierto lo más brevemente 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 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 permitiendo que el temporizador de vigilancia expire después de un cierto período y entrando en LPM4.5 o como se llame el modo de "sueño profundo". El resultado neto es que se realiza la función, el MCU duerme, el WDT caduca y el chip se reinicia, hasta la náusea. Parece funcionar, solo preguntándome si hay una forma "mejor" o "más elegante" o "más eficiente de energía" de obtener este tipo de comportamiento.

Todavía no he probado este enfoque con un AVR, pero creo que el WDT está más "hambriento 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" de 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 Event System y Sleep Walking que en algunos casos apenas requieren que la CPU esté despierta si puedes hacer que tu aplicación se ajuste a esa estructura ...

Muy bien de mi vagabundeo, deja aquí lo que tendrás que decir :)

¡Editar ejemplos concretos que ilustran técnicas también sería genial!

vicatcu
fuente
2
¿Has visto focus.ti.com/lit/wp/slay015/slay015.pdf ? Algunos puntos interesantes al lado de los números absolutos de potencia del sueño.
XTL

Respuestas:

15

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 preescaler 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 la sincronización exacta no es crítica.

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 el actual dibujado por el perro guardián.

OK, 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 225 mAh de capacidad. Entonces, el modo de espera en LPM4 es de aproximadamente 50 años y en LPM3 es de aproximadamente 25 años. 25 años es suficiente para muchas aplicaciones, porque la corriente ON (durante la medición en sí) domina el consumo.

texto alternativo

markrages
fuente
siéntase libre de elegir un ejemplo concreto ... :)
vicatcu
hecho, para la celda msp430f2013 y cr2032.
Markrages
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.
Kortuk
3

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

mikeselectricstuff
fuente
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 modo RTC + sleep, pero solo 20nA con RTC desactivado.

Thomas O
fuente
3

Los temporizadores de vigilancia AVR no son tan malos como parece. De acuerdo con la hoja de datos ATTiny13A, el consumo de corriente en modo de apagado a 3V es de 2μA sin 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 alrededor de 6.2 años de operación, que es aproximadamente la misma cantidad de tiempo que le toma a la batería degradarse por sí misma de todos modos (fuente: la fecha de caducidad).

Además, prácticamente cualquier otra cosa que conecte alrededor del μC dibujaría mucho más. De hecho, la parte más complicada del diseño de un circuito de tan baja potencia es apagar toda la corriente en el resto del esquema durante el período de suspensión.

El retraso de activación también es muy configurable, de ~ 12 ms a 8 segundos, si la memoria funciona. La frecuencia real no hace ninguna diferencia notable si se usan rutinas de interrupción cortas: me salí con la suya de encender el ADC, probar un bote de 1K, calcular algunas cosas de los resultados y volver a dormir sin un cambio notable en el consumo general ( suavizado con un gran condensador para compensar la lentitud de mi multímetro).

Tenga en cuenta que el WDT no es una herramienta precisa de cronometraje, por lo que es posible que desee conectar un RTC externo. Esos pueden consumir meros nanoamperios, por lo que debería ser un buen emparejamiento. 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.

FlashCactus
fuente