Microcontroladores: Condensadores y Alimentación.

Cuando en un mismo PCB tenemos varios componentes un aspecto importante para su correcto funcionamiento es la adición de condensadores de desacoplo, condensadores de bulk y filtrado de alimentaciones entre las distintas partes. En esta entrada del blog muestro un ejemplo práctico de un mal funcionamiento debido a la falta de filtrado en la alimentación de un microcontrolador.

Todos los circuitos integrados necesitan para su funcionamiento unos niveles de tensión máximos y mínimos. Si nos pasamos por arriba por lo general quemamos el circuito, y si nos quedamos cortos por debajo el circuito no funciona o lo hace de una manera incorrecta.

En un PCB lo más habitual es que todos los circuitos integrados lleven dos tipos de condensadores para su alimentación:

  • Condensadores de desacoplo: son condensadores del orden de nanofaradios y se encargan de proporcionar alimentación al integrado en sus conmutaciones internas a frecuencia alta, a frecuencia alta el camino de menor resistencia en un PCB es el de menor inductancia. En este caso se ponen condensadores lo más cerca posible de los pines de alimentación del circuito integrado para minimizar la inductancia parásita de las pistas del PCB. Si no ponemos estos condensadores de desacoplo pues encontraremos bastante ruido en la alimentación digital por los picos de corriente que producen los propios circuitos integrados durante su funcionamiento, que no encuentran una fuente de energía cercana con una baja inductancia que se los dé de una manera rápida.
  • Condensadores de bulk: son condensadores del orden de microfaradios que suponen una reserva de energía que alimente al circuito integrado ante transistorios externos o propios, como puede ser una bajada o subida en la tensión de alimentación. Este condensador de bulk proporciona o absorbe esa tensión producida por un transitorio, minimizando su efecto en el circuito integrado. Estos condensadores se pueden colocar más lejos de los pines de alimentación de los integrados y se puede usar uno para varios integrados.

Por lo que siempre pondremos condensadores de nanofaradios en todos los pines de alimentación de los circuitos integrados, lo más cerca posible a estos. Y uno o varios condensadores de microfaradios en el PCB, para evitar que los transitoriores de tensión externos o los producidos por los propios componentes del PCB, sean un problema para el resto de componentes.

Cuando dentro de un PCB tenemos distintas zonas: una zona de potencia, otra con circuitos digitales, otra con circuitos analógicos, etc.. lo adecuado es añadir condensadores de bulk en cada una de las zonas y filtrar las alimentaciones (planos de alimentación) entre ellas. Para que por ejemplo el ruido generado por los circuitos digitales no pase a la zona analógica produciendo un funcionamiento no adecuado de ésta.

Como ejemplo de los anterior muestro un caso muy sencillo de un circuito con un microcontrolador, donde se va a producir un mal funcionamiento, debido a no separar la alimentación del microcontrolador de la de otro circuito digital que se alimenta desde la misma fuente.

En la siguiente imagen se puede ver un PCB en el que una misma fuente de alimentación (recuadro amarillo) alimenta a un microcontrolador (recuadro azul) y a otra electrónica (recuadros blancos).

Mediante el circuito en el recuadro en verde el microcontrolador puede dar o quitar la alimentación de la fuente a la electrónica en los recuadros blancos. En el recuadro en rosa vemos el condensador C20 de bulk (condensador de varios microfaradios) del plano de alimentación que va al microcontrolador y huellas para soldar distintos componentes.

El esquema de la fuente de alimentación es el siguiente:

Fuente de alimentación de 3V3 (no todos los componentes del esquema están montados).

U1 es una fuente de alimentación conmutada que nos proporciona 3V3 y hasta 1A de salida, el consumo del microcontrolador y resto de electrónica que vamos a conectar a esta fuente es de menos de 0.5 A, por lo que en principio todo suena bien y podemos pensar en conectarlo todo a la misma salida de la fuente directamente.

Mediante el transistor Q1 el microcontrolador puede dar o quitar la alimentación de la fuente de 3V3 a la electrónica en los recuadros blancos que estás conectados a Vdd.

Para conectar el microcontrolador a la fuente de 3V3 hemos dejado el siguiente esquema en el PCB:

Alimentación del microcontrolador.

C20 es el condensador de bulk de la parte del PCB (plano de alimentación) donde está el microcontrolador, y para conectar esta alimentación del microcontrolador a la fuente de 3V3 hemos dejado dos huellas en el PCB, una resistencia/inductancia R10 y un diodo D4.

Dejamos el diodo sin soldar y en R10 soldamos una resistencia de 0 ohmios para conectar directamente la alimentación del microcontrolador a la fuente de 3V3, y por tanto se conecta directamente a la alimentación del resto de electrónica conectada a Vdd cuando Q1 conduzca.

Resistencia de 0 ohmios en R10.

Metemos un programa en el microcontrolador en el que cuando se pulsa el botón del PCB se encienda la electrónica de los recuadros blancos, electrónica conectada a Vdd en el primer esquema.

Y esto es lo que pasa cuando lo probamos:

La primera vez que pulsamos el pulsador en el PCB la electrónica de la derecha no se enciende, vemos un destello en LED, necesitamos pulsar el botón por segunda vez para que se encienda. Un comportamiento del botón distinto a lo que hemos programado en el microcontrolador.

Lo primero cuando pasa esto suele ser mirar el programa, que éste esté bien, hayamos configurado todos los registros correctamente, etc.. Si no vemos el error en el código lo siguiente es conectar un debugger y ver que todo se ejecuta correctamente paso a paso, comprobando el valor de las variables y registros del microcontrolador según ejecutamos las instrucciones. Y por último mirar las instrucciones en ensamblador generadas por el compilador.

Si a este ejemplo le conectamos un debugger vemos que el programa se ejecuta correctamernte y funciona según lo esperado, y si leemos el archivo ensamblador generado por el compilador todo parece correcto, por lo que no parece un problema de firmware.

Si conectamos un osciloscopio a la salida de la fuente de alimentación de 3V3 que alimenta directamente al microcontrolador y a la electrónica que queremos encender, vemos la siguiente señal cuando se pulsa el botón de encendido:

Señal en la salida de la fuente de alimentación cuando pulsados el botón.

Vemos que cuando se pulsa el botón para encender la electrónica conectada a Vdd, en la salida de la fuente de 3V3 que alimenta a la electrónica que queremos encender y al microcontrolador se produce una caída de tensión. La electrónica que queremos encender tiene un pico de corriente de arranque (carga de condensadores, etc..).

Si miramos con mas detalle el pico vemos lo siguiente:

Señal en la salida de la fuente de alimentación cuando pulsados el botón.

La salida de la fuente que alimenta al microcontrolador cae hasta 1.52V. Si miramos el datasheet del microcontrolador nos dice que la tensión mínima del microcontrolador para que éste funcione es de 1.8 V, por lo que en este pico estamos durante 85 microsegundos por debajo de los 1.8 V que el microcontrolador necesita para funcionar de manera estable.

Durante esos 85 us en los que el microcontrolador está funcionando por debajo de su tensión mínima puede estar pasando cualquier cosa dentro de él, ya que los registros de su memoria RAM se pueden corromper y por tanto su programa puede hacer cualquier cosa.

Si activamos el Fuse del microcontrolador de Brown out, cuando el microcontrolador ve una tensión por debajo de un umbral éste activa su señal de reset, por lo que en este caso si lo tuvieramos activado el microcontrolador se resetearía cada vez que pulsasemos el pulsador para encender el resto de la electrónica.

Ahora quitamos la resistencia R10 de 0 ohmios y soldamos un diodo en su lugar:

Desoldamos R10 y soldamos D4.

De esta forma el microcontrolador se conecta a la fuente de alimentación de 3V3 a través de un diodo, esto evita que cuando se produzca el pico de caída de tensión en la salida de la fuente de alimentación al encender el resto de electrónica, el condensador C20 que está en la alimentación del microcontrolador se descargue proporcionando energía a la electrónica que se está encendiendo en ese momento.

Ahora C20 guarda su carga para el microcontrolador durante el transitorio de tensión ya que el diodo evita que pase carga del condensador/corriente hacia la electrónica que se enciende.

Si cambiamos la resistencia de 0 ohmios por el diodo y pulsamos el botón todo funciona correctamente:

La electrónica de la derecha ahora se enciende en la primera pulsación del botón según lo esperado.

Si ponemos el osciloscopio en la alimentación del microcontrolador ahora vemos el siguiente pico de tensión cuando pulsamos el botón:

Señal en la alimentación del microcontrolador cuando pulsados el botón.

Ahora la caída de tensión que ve el microcontrolador cuando pulsamos el botón es muy pequeña (cerca de 0.1 V frente a los 1.7-1.8 V anteriores) y no afecta a su funcionamiento.

También el microcontrolador ve una tensión de 3V en lugar de 3V3, debido a la caída de tensión del diodo D4, pero que en la práctica no va a suponer ningún problema en este diseño.

Circuito de diodo y condensdor usado en esta prueba para proteger la alimenación del microcontrolador.

Esta ha sido una forma simple de separar la alimentación del microcontrolador de la del resto del circuito para este caso, si no queremos esa caída de tensión del diodo se pueden usar otros elementos en lugar del diodo. En los esquemas podemos encontrar filtros en las líneas de alimentación con condensadores e inductancias (evitan los cambios instantáneos de corriente), ferritas (su resistencia depende de la frecuencia) e incluso resistencias si la corriente que pasa por ellas es muy pequeña.

Resumiendo: cuando en un circuito tengamos distintas partes en las que puede haber picos grandes de corriente o tensión,  es conveniente filtrar las alimentaciones entre ellas para que no afecten unas a las otras, también añadir condensadores de bulk en cada una de ellas que mantengan estable su alimentación ante los transitorios de corriente/tensión (propios o externos).

Para personas que empiezan a diseñar sus primeros PCBs esto es algo que se les podría haber pasado, y piensan tengo una fuente que da 1 Amperio y mi electrónica va a necesitar menos de 0.5 A para funcionar, por lo que lo puedo conectar todo directamente a la fuente y esperar que funcione todo correctamente.

No solo los condensadores de desacoplo, bulk y filtrado de alimentaciones son necesarios para el correcto funcionamiento del PCB, si no también para luego evitar otros problemas de compatibilidad electromagnética, por lo que los planos de alimentación y su filtrado es un aspecto fundamental en cualquier diseño.