Implementando un circuito de respaldo de batería de bajo costo para RTC interno en STM32F030R8

2

Extensión de esta pregunta .

Hoja de datos: enlace

El microcontrolador en cuestión tiene un módulo RTC interno pero no tiene un pin VBAT. Como tal, la única forma en que se puede dar respaldo de energía a RTC es usar una batería para todo el microcontrolador, detectar la ausencia de la fuente de alimentación principal de 3.3V y apagar el microcontrolador dejando solo RTC en funcionamiento. Sin embargo, habrá LED externos y otros elementos presentes que podrían extraer la corriente de la batería agotándola rápidamente.

El que más responde de esa publicación insinuó un circuito mínimo con diodos. Sin embargo no pude encontrar una solución simple. Si el circuito es demasiado complicado y / o costoso, podría valer la pena seleccionar otro microcontrolador que tenga un pin VBAT.

¿Hay algo que pueda hacer al respecto?

Editar:

Estoy mirando la batería CR2032 para este propósito. Sin embargo, también me inclino por usar un supercapacitador para el mismo propósito. La duración máxima de la interrupción del suministro eléctrico será de 6 horas y creo que puedo encontrar fácilmente supercaps que proporcionarán energía durante tanto tiempo. Si fallo, CR2032 es el camino a seguir.

    
pregunta Whiskeyjack

3 respuestas

5

La sugerencia de Duskwuff es buena, esta es la forma en que lo haría. Sin embargo, hay información importante que se debe agregar:

Parte de hardware

  • Funciona solo si la fuente de prioridad más baja tiene un voltaje más bajo que la fuente de prioridad más alta. Por ejemplo, funciona con una entrada de 3.3V y una batería de litio de 3V, pero no funcionaría con una entrada de 2.5V y una batería de 3V.
  • Los diodos deben ser diodos schottky . Y su caída de tensión debe ser considerada. Como la MCU que usted menciona consume unas pocas decenas de mA como máximo, según la hoja de datos, no tendrá una caída de voltaje muy alta. Algo así como 0.3-0.4V con BAT54, por ejemplo. En su aplicación, esto está bien porque la MCU puede trabajar con un voltaje de suministro tan bajo como 2.4V, y porque las baterías de litio tienen una curva de descarga muy plana que no baja a 2.8V para corrientes bajas (estamos realmente en el límite aquí, sin embargo, una MCU que acepte un suministro de 2.0 V o inferior sería más segura).
  • También coloque una tapa grande en los cátodos del diodo, para que le dé más tiempo, en la parte del software (ver más abajo), para reaccionar cuando se retira la alimentación principal. Por ejemplo, algo así como 100µ le dará aproximadamente 2.5ms para pasar de un suministro de 2.9V (3.3 diodos menos) a 2.4V (el mínimo requerido por la MCU) a ~ 20mA (un consumo razonable en el peor de los casos de la MCU). - Revise su caso específico).

Esto también tiene un impacto en los dispositivos periféricos externos: todos los LED y el hardware adicional que consumen mucha energía deben ser alimentados por la fuente principal directamente (antes del diodo). Por lo tanto, esta parte del circuito se apagará inmediatamente cuando desaparezca la alimentación principal y no absorberá la energía del capacitor (lo que reduciría el tiempo permitido para el apagado). Así que eso significa que los LED no deben estar conectados directamente a los pines MCU, sino a través de un transistor (o fet). Eso también significa que ahora tiene dos dominios de alimentación, por lo que puede tomar algunas precauciones con las señales de la MCU que van a los chips periféricos del dominio de alimentación de la "fuente principal". Es posible que haya un tiempo durante el cual aún esté transmitiendo algunas señales de la MCU, que van a los chips periféricos apagados. Esto tendrá malas consecuencias (la corriente fluirá a través de los diodos de protección de los chips periféricos). Al menos, debe colocar resistencias en serie (tal vez 1k) en estas señales (verifique las calificaciones máximas absolutas de estos chips periféricos). Pero esto disminuirá estas señales. Por lo tanto, para las señales de alta velocidad, otra solución es usar una etapa adicional entre los dominios de energía. Un traductor de voltaje con alimentación doble y Ioff (apagado parcial) es perfecto para esto (por ejemplo, 74AVC2T45, 74AVC4T245, ...)

Parte de software

Ahora, hay una cosa importante a considerar: debe cambiar la MCU al modo de espera ASAP cuando desaparezca el suministro principal . O la MCU se reiniciará, porque si la MCU está ocupada y consume mucha corriente cuando se retira el suministro principal, la tensión de respaldo experimentará una caída mayor de la que se puede tolerar, debido a la resistencia interna de la batería y al diodo Schottky.

El condensador mencionado anteriormente puede ayudar con este asunto, pero debe asegurarse de que cambia antes del tiempo adicional que le da. Así que hay dos formas posibles de asegurar que:

Leyendo el nivel de voltaje de la fuente principal con un ADC :

Esto es lo que sugirió duskwuff (a través del divisor de resistencia). Esto es bueno porque puede monitorear el voltaje de manera precisa y ser advertido tan pronto como comienza a disminuir. Sin embargo, debe muestrearlo regularmente con el ADC. Por lo tanto, toma algo de tiempo de procesamiento de MCU, porque el período entre los muestreos debe ser más bajo que el tiempo que el capacitor te da para apagar.

Lectura de la tensión de alimentación principal como un valor digital :

Esto requeriría dimensionar el divisor de resistencia de modo que, cuando la entrada sea 3.3V, tenga un voltaje de entrada por encima de Vih (por lo tanto, la resistencia superior es mucho más baja que la resistencia inferior). De esta manera, puede configurar el pin de entrada como una entrada digital que activa una interrupción. Por lo tanto, el procesamiento de la MCU no toma tiempo para monitorear la alimentación, se le avisa automáticamente cuando desaparece. Esto es bueno, pero solo puede funcionar si la fuente desaparece muy rápido (mucho más rápido que el tiempo de apagado dado por el capacitor). De lo contrario, solo se le avisará cuando el suministro descienda por debajo de Vil , y eso será demasiado tarde: habrá cambiado a la batería desde hace mucho tiempo sin saberlo.

Si no está seguro, dimensione las resistencias para el estuche digital y elija un pin de entrada que pueda actuar como una entrada ADC o como un GPIO con capacidad de interrupción. De esta forma, solo tienes que modificar el firmware para ir de una u otra forma.

    
respondido por el dim
3

¿Ha considerado usar una pieza STM32F1, como la STM32F103C8? Estas partes tienen un pin VBAT dedicado que alimenta un reloj en tiempo real y una pequeña región de RAM de respaldo.

Dicho de otro modo, la forma en que generalmente he visto implementado este uso de hecho utiliza un diodo OR, junto con un divisor de resistencia en la entrada de alimentación para detectar la pérdida de potencia:

simular este circuito : esquema creado usando CircuitLab

Use un par de resistencias idénticas de gran valor (por ejemplo, 100KΩ) en el divisor para limitar el flujo de corriente. Pruebe el valor en el pin ADC para determinar si se ha perdido la alimentación externa.

Tenga en cuenta que el divisor de resistencia es crítico: el muestreo de Vin directamente causaría que el voltaje de entrada esté por encima de Vcc, lo que podría causar daños.

    
respondido por el duskwuff
0

He desarrollado un pequeño circuito que usa un supercapacitador 1.5F que puede suministrar energía durante más de 36 horas. He probado las baterías CR2032 (marca Reneta) de fabricación suiza, pero no puedo confiar plenamente en ellas en mi aplicación. Algunos se inflan, algunos están vacíos, otros simplemente mueren y muchos trabajan, pero cada vez que un cliente pierde la fecha y la hora, es una camioneta para mí y el costo es más que solo $ 0.60.

El MCU es un arduino 2560 que se usa en mi sistema.

Estaré más que feliz de compartir mi diseño contigo.

saludos

    
respondido por el Rilitium

Lea otras preguntas en las etiquetas