(meditaciones sobre lo académicamente correcto en artículos y notas de aplicación)
Días atrás conversaba con un viejo amigo y maestro sobre esas cosas del diseño electrónico, y surgió el tema del latch-up. Mientras revisaba en mi cabeza un artículo que todavía no había escrito, recordé un ejemplo similar en otro ámbito que me trajo a colación este tema, y se materializa en este post.
Pensaba por ese entonces en lo malo que pueden resultar algunas conveniencias y facilidades a la hora de la didáctica… Por allá por el año 2004 estaba yo asistiendo a una conferencia para desarrolladores de una famosa empresa de microcontroladores “fáciles” (que son en realidad lo más difícil que se pueda inventar para alguien que ya conoce otros microcontroladores). El presentador estaba desarrollando sobre una nota de aplicación en la cual se veía un relé conectado directamente a un puerto de entrada/salida (GPIO) de un microcontrolador, a lo cual respetuosamente interrogué si, al menos, no convenía poner allí un diodo de flywheel (o “de protección”), a lo cual me respondió “todos nuestros microcontroladores tienen diodos de protección en los pines de entrada/salida”.
En primer lugar, soy de los que no utilizan los pull-ups incorporados en los micros excepto cuando alguna razón lo justifica. ¿Por qué? Porque intento que el diseño de hardware no dependa de detalles del fabricante (el día de mañana puedo portar el diseño a un microcontrolador “difícil” que no tenga estas “facilidades”) ni del firmware, y ahorrar esas décimas de centavo (despreciando el espacio en PCB) no me justifica el estar pendiente de recordar habilitar el pull-up o encontrarme con efectos no deseados hasta que la ejecución del código llega a ese punto. Eso sin contar que trabajando en muy bajo consumo esos pull-ups internos son impredecibles y hasta suelen ser contraproducentes. En segundo lugar, para quien no dispone del log de diseño (si existe), se pierde la razón “académica” por la cual ese resistor debe existir allí, todo lo que eso dice sobre el resto del circuito, lo cual me parece muy importante en una nota de aplicación, que es un documento de ingeniería.
Volviendo al relé controlado por un GPIO, digamos que esto propicia que un aficionado probablemente aprenda técnicas conflictivas que tal vez replique en otros ámbitos cuando progrese (me siento tentado a recordar el efecto de enseñar a programar a los jóvenes en los 80’s usando BASIC solamente).
Primer aspecto: la corriente que circula por el relé. Los GPIOs suelen presentar una estructura MOS del tipo push-pull, es decir, un MOSFET de canal P provee la corriente desde el positivo mientras que un MOSFET de canal N recibe la corriente que retorna hacia masa. Dichos MOSFETs suelen ser de áreas diferentes, siendo el de canal N de mayor capacidad de corriente, y en muchos casos tal vez insuficiente para operar un relé. Según cómo esté conectado el relé, puede operar correctamente porque el GPIO no eleva demasiado la tensión de salida pues el MOSFET de canal N es capaz de manejar esa corriente; u operar erráticamente porque el GPIO disminuye demasiado la tensión de salida pues el MOSFET de canal P es incapaz de manejar esa corriente. La segunda parte de esto es también, según cómo esté conectado el relé, que la corriente de éste circulará por el pin de GND o por el pin de VDD, es decir, entrará por el pin positivo desde la fuente o volverá a ésta por el pin de masa, creando, entre otras cosas, una circulación por caminos no deseados que puede afectar el funcionamiento en los transitorios de encendido y apagado del relé, por un lado por inductancias parásitas en las pistas, y por otro dado que cuando las corrientes van por un camino y vuelven por otro, se forma un lazo de corriente, una antena de cuadro, que irradia en todas direcciones con intensidad proporcional al área del lazo. La corriente por el pin de masa puede afectar además las mediciones de un conversor analógico-digital incluido en el chip (y la corriente por el pin de alimentación también si el microcontrolador economiza el pin de alimentación de la sección analógica, VDDA).
Segundo aspecto: la corriente que debería dejar de circular por el relé cuando éste se abre; pero dado que es un inductor, Faraday y Lenz conspiran contra nosotros: V = -L di/dt.
Cuando se desea abrir el relé, se debe poner el GPIO en estado de alta impedancia, idealmente circuito abierto, o al menos el estado opuesto al usado para activarlo. Supongamos que lo activamos conectándolo a masa, ahora debemos idealmente configurar un open-drain o al menos conectarlo a positivo. Al ser la bobina del relé un inductor, la corriente no puede cesar instantáneamente sino que intentará seguir circulando por ésta; dependiendo de qué tan difícil le resulte al inductor “mantener la corriente constante” (di/dt), aparecerá sobre sus bornes una tensión de la polaridad necesaria para hacer circular esa corriente que además es proporcional a la inductancia. Dicha polaridad hace que la tensión en el pin sea superior en este caso a la de alimentación del microcontrolador, tanto como sea necesario para que circule esa corriente. ¿Por dónde circulará esa corriente? Idealmente por un diodo que se denomina “de fly-wheel”, traducido en ocasiones como “rueda libre”, que se conecta con la polaridad apropiada en paralelo con la bobina del relé. En su ausencia por donde la alta tensión inducida encuentre el camino; en este caso en particular por el diodo de protección del GPIO y volviendo hasta el relé por la traza de alimentación que los une (en sentido inverso, generando una subida de tensión en la alimentación del micro), si colocamos el pin en alta impedancia. Si en cambio ponemos el pin en estado alto, deberá circular por el MOSFET de canal P en sentido inverso, probablemente por el diodo intrínseco que suele formarse en la estructura cristalina, y que suele oficiar de diodo de protección, o por un diodo de protección a tal efecto, lo que presente menos impedancia; suguiendo de allí igual camino al anterior.
Asumamos que los diodos de protección están diseñados para soportar la corriente que circula por la bobina, y que el resto del circuito tolera dichos efectos sin mayores complicaciones. ¿Qué sucede si replicamos este diseño en un microcontrolador que no tiene diodos de protección? (Dichos diodos muchas veces no son deseables, pero este artículo ya se haría muy largo…)
Bien, como dijimos, “por donde la alta tensión inducida encuentre el camino”. Algunas veces el camino se encuentra a través de algún periférico ocasionando comportamientos erráticos, otras ocurre algo mucho más riesgoso.
En las estructuras de semiconductor de los chips, se forman estructuras parásitas PNPN, lo cual es un tiristor no deseado. Este tiristor se puede disparar por corriente de disparo si algo logra inyectar una corriente suficiente por el bloque que de acuerdo a la polaridad oficie como “compuerta”, o por sobretensión, si aparece una tensión suficiente entre extremos de la estructura que supera su tensión de ruptura. El tiristor parásito comienza entonces a conducir y no deja de hacerlo hasta que se retira la alimentación, siendo lo más probable que se funda la estructura cristalina al no poder disipar el exceso de calor, formando un cortocircuito. Latch-up.
Por esta razón, suele ser mucho más didáctico controlar el relé con un transistor y colocar el correspondiente diodo de fly-wheel, llevando la corriente del relé lejos del conversor A/D. Caso contrario, un comentario indicando los efectos que podríamos tener y los componentes que eliminamos gracias a las bondades de esta facilidad, tal vez logren generar la curiosidad necesaria en el lector para investigar.
Si bien las nuevas tecnologías de fabricación minimizan la posibilidad de latch-up, siempre es conveniente colocar resistores en serie con los pines que puedan estar expuestos a tensiones más elevadas que la de alimentación, a fin de limitar la posible corriente de disparo y a la vez facilitar la extinción de la corriente por el tiristor o al menos limitarla para evitar la destrucción de la estructura cristalina.