2 votos

¿Por qué el registro de desplazamiento 74hc595 hace que algunos pines tengan un voltaje más bajo que otros?

He conectado dos 74HC595 a un Fotón de Particle. He seguido esta guía aquí para Arduino en cómo lo cableé. El único lugar que se desvió es no poner un condensador en el pasador de enganche.

Todo parece funcionar. Puedo cambiar en dos bytes en una fila y se muestran en mis leds. Mi problema es que uno o dos LEDS no van tan alto como los demás. La mayoría de ellos miden alrededor de 2,8 voltios, pero los pocos tenues están a 1,8 voltios. Cuando pongo todos los pines a bajo voltaje, el voltaje es básicamente cero. Así que parece que está tratando de trabajar, pero por alguna razón no da voltaje completo.

Busqué en Google el 74HC595 y baja tensión en el pin y realmente no estaba viendo nada. Esto está sucediendo en cuatro chips diferentes que he intentado por lo que debe ser algo que estoy haciendo mal.

A continuación se muestra una muestra del código que estoy utilizando:

#define bitSet(value, bit) ((value) |= (1UL << (bit)))

int dataPin = D6;
int clockPin = D4;
int latchPin = D5;

byte leds = 0;
byte leds2 = 0;

void setup() 
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
}

void loop() 
{

    leds = 0;
    leds2 = 255;
    updateShiftRegister();
}

void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds2);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

9voto

Link Puntos 148

@SimonTheCat,

por alguna razón no da todo el voltaje

La razón clásica de este comportamiento (y el tutorial de Arduino que estás utilizando corre el riesgo de causar este problema), es que estás consumiendo demasiada corriente de las salidas del 74HC595, cuando varios LEDs están encendidos. Una vez que la corriente total excede el límite especificado para el circuito integrado, la caída de tensión en los diferentes pines de salida puede variar, como se mide (por lo tanto, algunos LEDs brillantes y algunos LEDs tenues) - He visto exactamente esa situación cuando se excede la corriente máxima para un circuito integrado.

La gran pista es el voltaje más bajo de lo esperado que mencionaste de 2,8V incluso en los pines del IC que conducen los LEDs "brillantes". Suponiendo que se trata de un 74 HC 595 (es decir, salidas compatibles CMOS) como usted dice, entonces cualquier V \$_{OH}\$ valor inferior a aprox. 0,6 x V \$_{CC}\$ (V mínimo típico \$_{OH}\$ ) indica una probable situación de sobrecorriente de salida (0,6 x 5V = 3V, por lo que tus salidas de 2,8V ya están por debajo de eso, por no hablar de las salidas de 1,8V). (Valdría la pena medir el voltaje en cada 74HC595 V \$_{CC}\$ pin 16 cuando veas el "problema del LED tenue", para asegurarte de que no estás sufriendo también una tensión reducida allí, por ejemplo, debido a cables de alimentación largos y finos).

TL;DR - Basado en las mediciones de voltaje que ha proporcionado, y suponiendo que todos los LEDs y las resistencias son del mismo tipo, entonces la respuesta corta es o bien añadir controladores externos para los LEDs, o para reducir la corriente por LED (es decir, aumentar las resistencias externas de la 220 \$\small\Omega\$ valor que aparece en ese tutorial - Sugiero 560 \$\small\Omega\$ mínimo), para reducir la corriente de salida total del CI.

Tu tutorial de Arduino enlaza con una hoja de datos muy antigua (1998) de Philips para el 74HC595 que, por desgracia, está incompleta, ya que hace referencia a otra hoja de datos para obtener información vital, sobre los valores máximos de corriente de salida. Una hoja de datos diferente (y completa) 74HC595 de NXP muestra que:

La corriente máxima absoluta para cualquiera de las patillas Q0-Q7 es de 35 mA. pero la corriente total máxima para todo el circuito integrado es de 70 mA:

Sección 8, Valores límite: http://cache.nxp.com/documents/data_sheet/74HC_HCT595.pdf?pspll=1

Part of section 8 from NXP 74HC595 datasheet

Así que en cuanto tengas 8 LEDs consumiendo (por ejemplo) incluso 10mA cada uno, habrás sobrepasado la corriente máxima permitida para el CI (es decir, 8 LEDs x 10mA por LED > 70mA).

Pero se trata de un valor máximo absoluto que se muestra en la sección 8 de la hoja de datos, y no debe utilizarse para el funcionamiento normal. En su lugar, mire la Sección 10, Características estáticas, y verá que a V \$_{CC}\$ =4,5V, para una corriente de 6mA por pin, la tensión de salida será normalmente de 4,32V (probablemente un poco más alta para V \$_{CC}\$ =5V - digamos alrededor de 4,8V).

Part of section 10 from NXP 74HC595 datasheet

Para su información \$_O\$ (corriente de salida) de 6mA en la sección 10 de la hoja de datos no se ha elegido al azar - los pines Q0-Q7 de un 74HC595 son salidas HC de tipo "controlador de bus" y esas se especificaron originalmente como una salida con capacidad de 6mA (el controlador de salida HC normal era de 4mA, como se puede ver en la especificación de la salida Q7S, que es un controlador de salida HC normal).

El objetivo es 6 mA por LED, es decir, 6 mA por patilla x 8 patillas = 48 mA en total, lo que está dentro del límite de corriente total de 70 mA para el circuito integrado. Suponiendo que tienes LEDs rojos y adivinando un mínimo V \$_F\$ de 1,8 V (busca el valor real en la hoja de datos de tu LED), podemos calcular la resistencia necesaria como (4,8 V - 1,8 V)/6 mA = 500 \$\small\Omega\$ resistencia mínima.

Por lo tanto, le sugiero que no utilice un valor inferior al valor estándar inmediatamente superior, es decir, 560 \$\small\Omega\$ para todas las resistencias de la serie LED e inténtalo de nuevo. Espero que usted verá una luz consistente (pero probablemente más tenue que sus actuales LEDs brillantes) de todos los LEDs (suponiendo que los LEDs son todos del mismo tipo). Si necesita que los LEDs sean más brillantes incluso con una resistencia en serie más grande, o bien utilice LEDs de alta luminosidad (que dan más luz para una corriente dada que los LEDs "estándar") o utilice controladores externos y ajuste la corriente del LED para permanecer dentro de los límites de cualquier controlador (IC, BJT o MOSFET) que elija.

[También el circuito en ese tutorial Arduino necesita incluir pequeños condensadores de desacoplamiento a través de los 74HC595 ICs, físicamente cerca de cada IC, y preferiblemente un condensador más grande también por breadboard - de lo contrario los picos de corriente, especialmente en cada transición de reloj, podría causar más problemas].

Edita:

@SimonTheCat,

Aunque has enlazado a un tutorial de Arduino, como en realidad estás usando un Fotón me he dado cuenta de que hay una ligera arrugas a esto. Suponiendo que alimentas tu Photon vía USB y luego alimentas el 74HC595 y los LEDs desde su VIN (V \$\small_{IN}\$ ) [por favor, confirma tus conexiones exactas - mejor aún, ¡proporciona un esquema!], el voltaje en ese pin VIN ya se ha reducido a unos 4,8V debido a su diodo Schottky incorporado (suponiendo que tu fuente de alimentación USB suministra 5V). Esto afecta ligeramente a mis cálculos anteriores, aunque el punto principal no cambia. Cuando tengas algunas lecturas de voltaje reales, los cálculos de resistencia necesarios pueden ser actualizados si es necesario - 470 \$\small\Omega\$ podría ser un valor de resistencia LED en serie adecuado.

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