Qué sucede con el consumo de energía de otros componentes, cuando uC se cambia al modo de bajo consumo

Actualmente, estoy usando un uC (Atmel ATtiny85-PU20 ), que eventualmente funcionará con batería, y estoy tratando de reducir el consumo de energía de todo el circuito para maximizar el tiempo entre cambios de batería. Aparte de la uC este circuito tiene:

  1. Módulo de sensor de rango ultrasónico SR HC-04
  2. Este módulo transmisor ASK/OOK de banda ISM (433 MHz)

Si bien entiendo cómo poner el uC en modo de suspensión, solo para despertar cada 8 segundos usando la interrupción del temporizador de vigilancia, me preguntaba, ¿qué sucede con los componentes/módulos periféricos durante este tiempo?

Mi pensamiento inicial fue poner un NPN BJT como un interruptor, controlado por un pin GPIO, para cambiar el Vcc alimentado a los 2 módulos, pero ¿se define el comportamiento de dicho interruptor cuando uC pasa al estado de suspensión?

Suficiente para el día siguiente es su maldad. El uC tendrá condiciones de pines definidas cuando esté en modo de suspensión (y para algunos, la condición definida puede ser "flotante" o incluso posiblemente "indefinida"). Cada componente tendrá comportamientos definidos bajo varias condiciones de manejo. Lea todas las hojas de datos, aplique todos los resultados y la respuesta es su respuesta. Eso puede sonar como una respuesta pedante PERO ES la respuesta, por desgracia :-). es decir, ver lo que hacen, calcular el resultado.
@RussellMcMahon, sí, entiendo lo que quieres decir, ¡y no discrepes ni un poco! En realidad, había leído todo lo que estaba disponible sobre los sensores, es decir, hojas de datos (por supuesto, son pequeñas o apenas una hoja de datos). Admito que no leí toda la hoja de datos de ATtiny, pero usé bastante búsqueda para leer partes, y parece que me perdí la parte donde se menciona el estado del pin/comportamiento en el cambio de estado de energía.

Respuestas (4)

Básicamente, los periféricos (internos) se apagan cuando el AVR se va a dormir. Los módulos que se apagan dependen del modo de suspensión en el que ingrese. El tinyx5 tiene tres modos de suspensión: inactivo, reducción de ruido ADC y apagado. A menos que necesite algo para continuar trabajando mientras duerme, sugeriría el "Modo de apagado" que aún permite que el perro guardián funcione si eso es lo que usará para despertarlo.

Todos los módulos internos están controlados por relojes reducidos desde el reloj de la CPU. Si los relojes de cualquier módulo están apagados, ese módulo dejará de funcionar hasta que los relojes se vuelvan a encender. Teóricamente, estos módulos consumirán corriente cero cuando se apaguen, aunque siempre hay algún nivel de fuga.

Además de los modos de suspensión, hay muchos pasos que puede seguir para asegurarse de que su circuito no consuma mucha energía durante el funcionamiento, al menos en lo que respecta al AVR. Aqui hay algunas ideas. Todos estos pasos se describen en la hoja de datos :

  1. Deshabilite los relojes de módulos no utilizados usando el registro PRR
  2. Apague el comparador analógico: ACSR |=_BV(ACD);
  3. Nunca deje pines flotantes, use siempre una resistencia pullup o pulldown.
  4. Utilice una fuente de alimentación de menor voltaje (Vcc >= 2,7 V para tinyx5, 1,8 V para tinyx5V)
  5. Baje el reloj de la CPU cambiando los valores de preescala del reloj en CLKPR
  6. Deshabilite el ADC cuando no lo esté usando: ADCSRA &= ~_BV(ADEN);
  7. Deshabilite los búferes de entrada digital que no está usando con DIDR0

En cuanto a apagar los periféricos externos, podría hacerlo fácilmente con un transistor como sugirió. Los pines de E/S son pestillos estáticos que retienen su estado cuando el AVR se va a dormir, por lo que podría (en el software) apagarlos antes de ir a dormir y encenderlos cuando se despierte. Le sugiero que use un MOSFET de canal N de nivel lógico para conectar/desconectar los dispositivos de su suministro a tierra (conmutación del lado bajo), siempre que el voltaje de umbral de FET Gate sea un poco más bajo que el voltaje de suministro de AVR para que gire completamente ON desde una salida alta. El MOSFET no atrae corriente a través de la compuerta cuando está encendido (una vez que se ha cargado el capacitor de la compuerta) a diferencia de un BJT NPN que consumirá corriente continuamente mientras está encendido. De cualquier manera, debe usar una resistencia desplegable externa (10k más o menos) para asegurarse de que el transistor permanezca apagado cuando se supone que debe estar apagado. Esto consumirá un poco de corriente, por lo que se recomienda un pull down débil (5V a 10k es solo 0.5mA, 50uA a 100k).

También puede usar este truco para apagar los dispositivos externos en cualquier otro momento que no los esté usando; aunque es posible que necesiten un poco de tiempo para volver a encenderse por completo cuando necesite usarlos o, de lo contrario, le darán resultados extraños:

  1. Encender dispositivo
  2. Retraso de unos pocos milisegundos (cualquiera que sea el tiempo de inicio recomendado)
  3. Leer sensor/transmitir datos
  4. Retraso de unos pocos milisegundos
  5. apagar dispositivo
Excelente respuesta allí @Kurt. Muy completo y genial que hayas compartido las otras posibilidades de reducción de potencia también. En cuanto al pull-down débil, supongo que 100k sería mejor debido a un consumo de corriente aún más bajo, ¿verdad?
Otra cosa: dado que el circuito necesita tener un riel de 5 V de todos modos, porque el sensor ultrasónico y también el transmisor ISM lo requieren, ¿ejecutar la CPU con un Vcc más bajo (digamos 2.7 V) me da algo de ahorro de energía? Me pregunto porque, si uso un regulador lineal para reducir 5V->2.7V, estaría perdiendo casi el 50% de energía allí, así que tendría que optar por un regulador de conmutación, ¿verdad? (y aún así perdería alrededor de 10- 12%).
Buen punto. Si necesita el riel de 5 V para los otros sensores, también podría usarlo para la MCU. Los ahorros en la MCU probablemente serían menores que el desperdicio del regulador. En cuanto a la resistencia desplegable, 100k debería funcionar ya que no está cambiando muy rápido o con mucha frecuencia (como en un controlador PWM).

Muchos microcontroladores conservan su estado de salida de pin cuando entran en modo de suspensión. El ATtiny85 ciertamente lo hace (al igual que todos los AVR de los que he oído hablar). Por lo general, la hoja de datos dirá en su descripción de los modos de bajo consumo.

Gracias @vicatcu. Si bien había hojeado la hoja de datos, pero no encontré (a menos que no interpretara la redacción correctamente), qué sucede con los pines GPIO en un estado de apagado.

Para cambiar algo con un microcontrolador de modo que permanezca apagado cuando el microcontrolador está apagado, se puede usar una " resistencia desplegable ", digamos 100 kOhms, en la línea de salida de la MCU. Esta línea luego impulsa la parte de conmutación, ya sea un BJT, MOSFET o algo más.

Si el microcontrolador afirma un valor en el pin de salida (GPIO), eso supera el tirón de tierra de la resistencia, y el resultado es un estado de encendido o apagado según se desee. Si el microcontrolador está completamente apagado o en algún estado donde la salida está "flotando", el interruptor ve una entrada baja (0 voltios) cortesía del menú desplegable y permanece apagado.

NB One también puede usar resistencias pull-up en su lugar, con algunos cambios de circuito y lógica; mi respuesta simplemente brinda una descripción general simplificada en lugar de una lista completa de posibles enfoques.

Gracias @Anindo, es bastante fácil y creo que es una forma garantizada de controlar el BJT. ¡Como el pedal de un muerto! Me permitiría bajar al estado de suspensión más profundo, para el máximo ahorro de energía.

Esto es lo que encontré en la hoja de datos de Atmel ATtiny85-PU20ingrese la descripción de la imagen aquí

Entonces esto no afectará su E/S. Solo apagará el oscilador y el PLL. El control de interruptor BJT es la mejor manera para su sistema que funciona con batería. Incluso puede cortar la alimentación del sensor ultrasónico y el transmisor inalámbrico cuando se va a dormir y solo reanudar la alimentación cuando se despierta. Esto aumentará la duración de la batería.