0

我正在测试/调试一个使用 74HC595 移位寄存器(Arduino Teensy3.2 @ 3.3V)的 C++ 程序。

我想将 SR 的 8 个输出连接回 Arduino 板上的 8 个输入引脚。

我的问题是:移位寄存器的输出和 Arduino 输入之间是否需要电阻?如何知道从 SR 输出流出的电流?

我确实看过数据表,但这让我更加困惑: https ://www.taydaelectronics.com/datasheets/A-251.pdf

设置寄存器的代码:

void ShiftRegisterOut(uint8_t bitOrder, uint8_t val)
{
  for (uint8_t i = 0; i < 8; i++)
  {
    if (bitOrder == LSBFIRST)
        digitalWrite(pinData, !!(val & (1 << i)));
    else    
        digitalWrite(pinData, !!(val & (1 << (7 - i))));
    digitalWrite(pinClock, HIGH);
    digitalWrite(pinClock, LOW);
  }
}
4

2 回答 2

2

根据您链接的数据表和Teensy 上的 uC数据表,您应该不需要在 uC 之间使用电阻器来限制电流:

74HC595 最大输出电流 +/-20mA @ 6V

MK20DX256VLH7 最大输入电流 +/- 25mA

但是,如果您为 74HC595 提供 > 6V 的电压,您可能会超过 MK20DX256VLH7 的 5.5V 的最大输入电压。

于 2019-10-23T06:01:38.443 回答
2

我们需要区分“μC 端口是输入”和“μC 端口是输出”,以及电源电压如何不同。

TL;DR:您应该努力在两者上使用相同的电源电压,并确保 µC 永远不会将连接的端口引脚设置为输出。这是描述的第一种情况,您不需要电阻器。

µC 端口输入

74HC595的供电电压低于或等于µC的供电电压

在这种情况下,µC 端口的输入阻抗非常高,以至于没有明显的直流电流流过。

您不需要任何电阻器,它只会使边缘变慢。

74HC595的供电电压高于µC

如果 74HC595 引脚输出的电压使 µC 的钳位二极管导通,则产生的电流可能过高,这取决于此处要提及的电气特性太多。74HC595 的数据表指出,每个输出都可以提供至少35mA 的电流,因为这是允许的最大输出电流。这显然超过了 µC 允许的 25mA。

还有另一个限制:74HC595 的总电流不得超过 70mA。

所以每条线都需要一个电阻。为了获得最佳边缘速度,使其尽可能低。

例如,如果 74HC595 有 6V 电源,则至少需要 (6V - 3.3V) / (70mA / 8) = 308Ohm。为了安全起见,我会使用 620 欧姆。

µC 端口输出

在这种情况下,输出可能会相互驱动。每条线都需要一个电阻。需要考虑两个电源电压中的较高者。

µC 对所有输出的总和也有限制:它的总电流不得超过 100mA。但这比 74HC595 高,所以我们需要接受它。

74HC595的供电电压低于或等于µC的供电电压

关键情况是 74HC595 上的“低”和 µC 上的“高”。

您至少需要 3.3V / (70mA / 8) = 377Ohm。为了安全起见,我会使用 750Ohm。

74HC595的供电电压高于µC

关键情况是 74HC595 上的“高”和 µC 上的“低”,这取决于 74HC595 的电源电压。

例如,如果 74HC595 有 6V 电源,则至少需要 6V / (70mA / 8) = 686Ohm。为了安全起见,我会使用 1.5kOhm。

于 2019-10-23T06:46:04.913 回答