¿cómo puedo proteger las entradas de mi Arduino si le meto mas tensión de lo que debo?

Hoy me he levantado con una duda en mente y me he puesto a investigar. La duda es ¿cómo puedo proteger las entradas de mi Arduino si le meto mas tensión de lo que debo? Muchas veces hablamos de proteger las entradas colocando un diodo zener, pero existe un problema con esto que precederé a explicar a continuación.

Expongamos el circuito típico de un diodo zener con su resistencia limitadora:

ZENER

Nuestro pin de entrada se conectará a VOUT y como hemos de recordar las entradas no consumen corriente (o si lo hacen esta es despreciable), por lo que no he colocado una resistencia de carga en el circuito.

Con un diodo zéner ideal, cuando la tensión VIN está por debajo de la tensión del zéner (VZ), este no conduce y la tensión de salida será igual a la de entrada. Si la tensión de entrada supera la tensión del zener, entonces este empieza a conducir forzando la salida VOUT a tener la misma tensión del zéner.

Ya tenemos nuestra protección, o eso es lo que creemos.

En un diodo real, realmente no ocurre eso. Existe una pequeña "corriente que se fuga del diodo" que hace que ya no estemos dentro del mundo ideal y haya una caida de tensión antes de alcanzar la tensión del zener.

Observad la siguiente gráfica:

curva

Los datos corresponden a un zener BZX85C5V1 de 5.1V (me he dejado la vista para poder leer el marcado del diodo..) y he usado una resistencia limitadora de 2200 ohmios. He ido subiendo la tensión de la entrada de 0.5 en 0.5 y he anotado la tensión de salida en el zéner.

En el eje X tenemos la tensión de la entrada y en el eje Y la tensión de salida.

Idealmente hasta los 5 voltios debería ser una línea recta y después la tensión de salida mantenerse en los 5 voltios. Pero como podéis observar esto no es así. Hasta los 3V es casí líneal, pero a partir de ahí es una curva y no llega a alcanzar los 5 voltios, aunque si queda cerca (4.8V).

¿Estamos protegidos no? La respuesta es SI. Por mucho que aumente la tensión de la entrada, la tensión en el pin está limitada a la tensión del zéner. En una entrada digital estamos muy bien protegidos, pero, ¿qué ocurre si la entrada es analógica?

Imaginad que conectamos un sensor cuya salida es de 0 a 5V, siendo 0 el mínimo y 5V el máximo. Cuando el sensor nos de valores cercanos al mínimo "casí" tendremos el valor real del sensor pero cuando este nos de un valor próximo al máximo la medida que obtengamos con Arduino estará siendo falseada por el zéner.

He probado con un zéner de 4.7voltios y he obtenido la misma curva, aproximadamente, he probado con otro de 12V que se ha portado mejor, pero aún así algo de curva tambíen tenía, excepto que un rango mas corto.

Bueno, nuestro gozo en un pozo. ¿Y qué podemos hacer?

La única solución que he encontrado es usar la referencia interna de Arduino de 1.1V y usar un divisor de tensión a la entrada:

ZENER2

Elegimos los valores de R1 y R2 para que la salida al rango que queremos leer sea como mucho de 1V. Por ejemplo si nuestro sensor es de 0..10V, con unas resistencias de R1=10k y R2=1K obtendremos que para 10V la salida será 0.9V a la salida del divisor de tensión.

Con ese valor de tensión estamos muy dentro de la zona en la que el zener se comporta de manera líneal.

Pero por mucho que subamos la tensión en la entrada, cuando la tensión en el divisor alcance la tensión del zéner esta no sube de esa tensión. He probado con la fuente al máximo (60V) y la tensión de salida estaba en unos 4.7V.

Efectivamente, la salida del conversor analógico llevará un buen rato diciendo 1023... Pero no llegamos a superar nunca la tensión de 5 voltios, con lo que la entrada queda protegida.

¿Qué os parece mi comedura de coco matinal? ¿Me he equivocado en algo? ¿Alguna otra idea?

Que tal estas opciones, una ya la planteaste

Esta no

Y esta tampoco con TVS que es similar a la anterior.

La primera es una de las que yo tenia presente.

Página 58 del datasheet del atmega328p.

Teóricamente, los chips de la serie atMega tienen todos diodos de protección internos, por eso no utilicé el primer esquema ya que se supone que tiene dicho tipo de protección.

En cuanto al TVS, también es una opción, pero no tengo diodos TVS de 5 voltios para probar :frowning:

Pero no soportan más de +/- 0.5V respecto a VCC y GND porque apenas manejan corriente.

Siempre es mejor agregar unos buenos Schottky que soporten unos cuantos cientos de mA.

Por otro lado, los zener tienen una tolerancia de +/- 5% de su valor nominal, por eso en tus pruebas apenas arañó los 4.8V pero te podría haber tocado en suerte uno que superase los 5.1V (y eso si que sería un problema en este caso).

Pues no lo escogí por ningún motivo, salió al azar:

Tengo unos pocos zeners de 5V1 y 4V8 como podéis apreciar. 1N4148 si dispongo alguno para poder probar... diodos schottky ninguno.

Experimento 1: Con diodos 1n4148. He realizado el siguiente montaje:

He utilizado un Arduino Uno el cual murió el atmega328p en un accidente... ejem.. vale lo freí yo... Pero funciona la parte del atmega16u con lo que lo uso como convertidor usb-serial, la fuente de 5 voltios le funciona correctamente.

He colocado sendos 1N4148 y la resistencia PULL-UP de 10k (no tengo de 15k a mano). Con una fuente de laboratorio he simulado el voltaje externo. Con el polímetro he medido la tensión en el punto que se supone que debemos conectar la entrada analógica/digital del chip. GND de ambas fuentes conectadas.

He empezado a subir la tensión poco a poco. Por debajo de los 5V me indicaba la misma tensión en el polímetro que en la fuente y esta no entrega corriente. Al subir a 6V la corriente aumenta lentamente, y en el polímetro tengo 6V. Si sigo subiendo la tensión, en el polímetro tengo la misma tensión y la corriente sigue subiendo rápidamente. Hasta llegar un punto en el que la corriente se vuelve 0, dado que la corriente es excesiva y se ha quemado el diodo 1N4148 superior.

En todo momento, en la entrada analógica/digital tendría la misma tensión.....

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.