28 votos

Debido a la sobrecorriente, ¿no debería ser extremadamente cauteloso al configurar un pin de E/S como Salida?

La pregunta se puede aplicar a cualquier microcontrolador con capacidades de E/S, pero actualmente estoy trabajando con el popular ATmega328p. Considere el siguiente circuito: Un simple interruptor SPST Normalmente Abierto con una resistencia pull-up de 10k y un condensador cerámico conectado a cualquier puerto de E/S. El pin específico debe ser obviamente configurado como INPUT en el respectivo DDRx. El datasheet describe, dentro de la sección de características DC, un pin de E/S de corriente de fuga de entrada \$ (I_{IL}/I_{IH})\$ de 1µA, mientras que en el horizonte la corriente continua por pin de E/S se limita a 40,0mA. No es un problema en absoluto.

DDRD = 0x00;    // Entire port as INPUT

enter image description here Ahora considera que olvidé el hecho de que el pin dado tiene que ser puesto como Entrada, lo puse como Salida y puse el Puerto en ALTO.

DDRD = 0xFF;    // Entire port as OUTPUT
PORTD = 0xFF;   // Entire port HIGH

Aunque la hoja de datos no proporciona una Impedancia de Salida se puede estimar en un 25 en base a los gráficos dados. Ahora en el momento en que el botón es presionado la corriente encuentra su camino a través del microcontrolador desde la fuente de 5V con una resistencia de 25 más una resistencia insignificante debido a la traza de cobre. Esto teóricamente produce una sobrecorriente de 160mA por encima del techo de corriente continua por pin de E/S. ¿Podría esto freír el puerto y el dispositivo? enter image description here Análogamente, si paso a lógica positiva y pongo el puerto en LOW podría darse el mismo problema:

DDRD = 0xFF;    // Entire port as OUTPUT
PORTD = 0x00;   // Entire port LOW

enter image description here Teniendo en cuenta que este tipo de circuito se fomenta ávidamente, ¿cómo no parece traer problemas? Ahora, volviendo a la pregunta original, ¿no debería ser extremadamente cauteloso al establecer un pin de E/S como Salida? ¿O al menos colocar una pequeña resistencia en serie como protección primitiva?

Nota: No soy un hablante nativo de inglés, no dudes en editar el post si ves algo incómodo.

18voto

Tom Carpenter Puntos 7192

Como han dicho otros, no deberías tener problemas siempre que compruebes dos veces tu código.

Si te equivocas, por lo general los pines IO del ATMega se limitarán a unos ~80mA debido a la resistencia interna de los MOSFETs (valor encontrado por experimento). Esto no es bueno para el chip, pero mientras no lo dejes en esta condición por un período prolongado, tienden a recuperarse bien.


Si te preocupa, puede ser una buena idea poner una resistencia en serie con las entradas. Algo del orden de 330R para una VDD de 5V, o 220R para una VDD de 3,3V. Esto asegurará que la corriente de cortocircuito esté limitada a ~15mA, lo que está cómodamente dentro de las especificaciones.

La resistencia va entre el pin IO y lo que sea que lo esté manejando (por ejemplo, botón con pull-up, o CMOS). Como el ATMega tiene un rango de frecuencia útil bastante limitado (frecuencia IO < 10MHz), la resistencia extra no tendrá ningún impacto notable en el funcionamiento del circuito ya que las entradas tienen muy poca corriente de fuga y capacitancia.

11voto

Justme Puntos 201

Hay que ser cauteloso, pero no aterrorizarse por ello. Poner la salida de un pin y conducirlo a la otra dirección hará que fluya mucha corriente, pero tampoco se convierte en humo inmediatamente. Podrías, por ejemplo, alimentar el dispositivo con una fuente de alimentación de laboratorio limitada en corriente cuando subas un diseño para que este tipo de errores causen aún menos daño. Me preocuparía más que el pulsador y el condensador se dañen con el uso continuo, ya que al pulsar el botón se cortocircuita el condensador y un pico de corriente está limitado sólo por la ESR de la tapa, el cableado de la PCB y la resistencia del botón, por lo que puede exceder muchos amperios. Y como habrá rebote de contacto en el pulsador, la corriente tiene componentes de alta frecuencia y eso combinado con la inductancia parásita de los cables largos convertirá los picos de corriente en picos de tensión, protegidos sólo por los diodos de protección de los pines IO. Así que en general, una resistencia de incluso 330 ohmios en serie empieza a ser una muy buena idea para limitar la corriente a través del pulsador.

9voto

Graham Puntos 141

Teniendo en cuenta que este tipo de circuito se fomenta ávidamente, ¿cómo no parece traer problemas?

Porque cuando los ingenieros configuran la E/S de su dispositivo, tienen cuidado de asegurarse de que hacen no entradas de accionamiento como salidas. Para la mayoría de las E/S, estableceremos los pines como entradas o salidas en el arranque y nunca los cambiaremos después. Esto nos da sólo una línea de código que tenemos que comprobar cuidadosamente, lo que no es una tarea excepcionalmente difícil.

No hay necesidad de una resistencia de protección a menos que pienses que es probable que seas descuidado con tu codificación. En ese caso, te sugiero encarecidamente que trabajes para mejorar tus prácticas de codificación, haciendo mejores pruebas o revisando tu código antes de ejecutarlo.

Como ejemplo similar, si conectas un cable directamente entre tus líneas de alimentación de +5V y 0V, quemarás tu fuente de alimentación. Esto no significa que tengas que proteger tu fuente de alimentación, sino que debes tener cuidado de no cometer errores como ese.

Ahora, volviendo a la pregunta original, ¿no debería ser extremadamente cauteloso al establecer un pin de E/S como Salida?

Sí, deberías. Pero entonces espero que seas igual de cauto con todos los muchos otras formas en las que podrías dañar tu circuito, como cortocircuitar los pines, encender ambos lados de un puente H, u otros errores similares.

4voto

Martin Puntos 6

Puedo confirmar, en un arduino uno, 328p chip, si usted conecta una salida impulsada a tierra o VDD, que va a matar a ese pin. Lo he hecho accidentalmente varias veces en mis primeros días con la electrónica.

En otros chips con los que trabajo, tengo bastante cuidado de no hacer esto, pero los más modernos parecen menos susceptibles a este modo de fallo. Por ejemplo, accidentalmente configuré un temporizador en un stm32 en modo pwm out y lo tuve luchando contra un optoacoplador durante unos 15 minutos... El opto ganó ampliamente el tira y afloja... Pero el chip STM sobrevivió.

La situación con los chips del arduino 328 es lo suficientemente mala como para que la gente haya hecho "ruggeduinos" con todo tipo de protecciones para evitar causas comunes de muerte.

Editar: Añadir una resistencia, alrededor de 100 ohmios en serie con el pin, es en mi experiencia suficiente para evitar el daño del pin.

0voto

TimWescott Puntos 261

Generalmente, el cortocircuito de una salida lógica a tierra no mata inmediatamente un chip. Puede que no sea buena para ello, pero no es tan grave como para que el ajuste erróneo de las entradas a las salidas haga que las cosas se quemen.

Así que adelante, utilice los circuitos recomendados, y vuelva a comprobar su software. Si tienes amigos o colegas dispuestos, haz revisiones de código.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X