¿Existe un límite sobre la cantidad de corriente que un pin puede hundir?

13

He estado experimentando con una matriz LED de 8x8 controlada por un Arduino Uno. Como creo que es típico, la matriz usa un ánodo común para cada fila y un cátodo común para cada columna.

Por el momento, tengo todos los pines de matriz conectados directamente a los pines IO en el Uno, y no he tenido ningún problema para encender los LED uno por uno. Sin embargo, recorrer toda la matriz hace que las actualizaciones sean un poco lentas, lo que significa que los LED no son tan brillantes como me gustaría.

Hasta donde sé, no puedo encender una fila completa de una sola vez, porque un pin individual en el Uno no es capaz de obtener suficiente corriente para conducir 8 LED separados al mismo tiempo (requiere al menos 10 mA cada uno para ser lo suficientemente brillante).

Se me ocurrió que lo contrario podría ser más seguro. Si enciendo una columna completa a la vez, cada pin solo tiene que generar suficiente corriente para un LED, lo que no debería ser un problema. Sin embargo, se basa en un pin que potencialmente hunde la corriente de los 8, totalizando al menos 80 mA.

¿Es esto posible, o voy a freír mi tabla?

Peter Bloomfield
fuente
¿Qué pantalla exacta está utilizando (hoja de datos) y está utilizando resistencias en serie con ella? Tal vez freír la visualización de la hora en lugar de su Arduino.
jippie
No hay un número de parte, así que no tengo la hoja de datos exacta. Supuse que cada LED tiene un voltaje directo de 2V, y estoy usando conservadoramente resistencias en serie de 390 ohmios en este momento (durante las pruebas). Eso significa que los conduzco a alrededor de 8 mA cada uno, creo.
Peter Bloomfield
Eso debería estar bien.
jippie
¿Podría darnos un poco más de detalles sobre lo que está haciendo, por favor? La razón por la que pregunto es porque quiero hacer lo mismo, y soy un novato. Soy RTFMing y su pregunta fue el mayor éxito de mi búsqueda. Soy [email protected]. gracias.
user1928764

Respuestas:

13

¿Voy a freír mi tabla?

Resultado bastante probable. Este es el por qué:

El Arduino Uno utiliza el microcontrolador atMEGA328, que tiene una clasificación máxima absoluta de 40 mA de fuente o sumidero por GPIO. Además, la corriente total a través de los rieles de suministro o tierra (es decir, el total de todos los OP actuales quiere que los pines GPIO se hundan o se fuente) se clasifica a un máximo de 150 200 mA.

Siendo realistas, los gráficos actuales en la hoja de datos atMEGA328 ni siquiera llegan a 40 mA, por lo tanto, es más seguro restringir la corriente a quizás 20 mA en total por GPIO.

En otras palabras, si un GPIO se usa como fuente o sumidero, los límites siguen siendo bastante bajos y, en la práctica, deben mantenerse mucho más bajos que las clasificaciones máximas absolutas. Incluso por debajo del máximo absoluto, ejecutar un microcontrolador a una temperatura demasiado alta reduce su esperanza de vida.

Solución :

Utilice BJT, MOSFET o algún IC de controlador como el ULN2003 para conducir la corriente a través de los LED.

Anindo Ghosh
fuente
2
¿Dónde encontraste el 150mA máx. para el paquete? Tengo 200 mA por debajo de las clasificaciones máximas absolutas .
jippie
@jippie me burlé :-)
Anindo Ghosh
9

Voy a robar mi respuesta de cuando respondí esta pregunta en el último intento de arduino SE.


Esto es un poco complejo. Básicamente, hay una serie de factores limitantes:

Las líneas IO del microcontrolador (es decir, los pines analógicos y digitales) tienen un límite de corriente agregado (por ejemplo, total) y un límite por pin:

ingrese la descripción de la imagen aquí
De la hoja de datos ATmega328P .

Sin embargo, dependiendo de cómo defina los "Pins" de Arduino, esta no es toda la historia.

El pin de 5V del arduino no está conectado a través del microcontrolador . Como tal, puede generar significativamente más energía. Cuando alimenta su arduino desde USB, la interfaz USB limita su consumo de energía total a 500 mA. Esto se comparte con los dispositivos en la placa arduino, por lo que la potencia disponible será algo menor.
Cuando utiliza una fuente de alimentación externa, a través del conector de alimentación del barril, está limitado por el regulador local de 5V, que tiene una capacidad máxima de 1 amperio . Sin embargo, esto también está limitado térmicamente , lo que significa que a medida que consume energía, el regulador se calentará. Cuando se sobrecalienta, se cerrará temporalmente.

La salida regulada de 3.3V es capaz de suministrar 150 mA máx., Que es el límite del regulador de 3.3V.


En resumen

  • El máximo absoluto para cualquier pin IO es 40 mA ( este es el máximo . En realidad, nunca debe extraer 40 mA completos de un pin. Básicamente, es el umbral en el que Atmel ya no puede garantizar que el chip no se dañe. Siempre debe asegurarse de estar a salvo por debajo de este límite actual ) .
  • La corriente total de todos los pines IO juntos es de 200 mA máx.
  • El pin de salida de 5V es bueno para ~ 400 mA en USB, ~ 900 mA cuando se usa un adaptador de alimentación externo
    • El 900 mA es para un adaptador que proporciona ~ 7V. A medida que aumenta el voltaje del adaptador, también aumenta la cantidad de calor que el regulador tiene que manejar, por lo que la corriente máxima disminuirá a medida que aumente el voltaje. Esto se llama limitación térmica.
  • La salida de 3.3V es capaz de suministrar 150 mA .
    • Nota: Cualquier energía extraída del riel de 3.3V debe pasar por el riel de 5V . Por lo tanto, si usted tiene un dispositivo 100 mA en la salida de 3.3V, es necesario también contar en contra de la corriente total de 5V.

Nota: Esto no se aplica al Arduino Due, y es probable que existan algunas diferencias para el Arduino Mega. Es probable que sea cierto en general para cualquier Arduino basado en el microcontrolador ATmega328.

Connor Wolf
fuente