如何反转数字信号

电器工程 晶体管 数字逻辑
2022-01-23 13:43:43

我需要一种方法来反转数字信号,即如果输入为高,我希望输出为低,如果输入为低,我希望输出为高。

我认为这可以通过单个 PNP 晶体管来完成,但想在这里验证一下。我正在处理的电压低于 5V。

4个回答

或者,既然你在谈论数字信号,你就使用逆变器

在此处输入图像描述

A是输入(对于具有更多输入的门,将是ABC等),Y是输出。如果它不会使您的原理图过于复杂,则将符号与输入放在左侧。

Nexperia 拥有单栅极逆变器只有四个连接:电源、接地、输入和输出。

不过,它可以用一个晶体管和两个电阻器来完成。这是一个简单的示意图,但您仍然需要进行一些简单的计算。您将拥有与逆变器完全相同的连接。
顺便说一句,PNP 是一种选择,但更经常使用 NPN。

编辑(重新发表您的评论)

在此处输入图像描述

如果输入信号很高,则电流将流过 R2 和晶体管的基极-发射极结(基极,而不是栅极)。此电流将被放大,通过 R1 的集电极电流将导致电压降,从而使输出变低。输入高,输出低。
如果输入信号低,则不会有任何基极电流,也没有集电极电流。没有电流通过 R1 意味着没有电压降,因此输出将为 +V。输入低,输出高。

这已经更进一步了,但就像我在评论Sandun时所说的那样,输出是高度不对称的。如果输出连接到电容器,则高输出电平意味着电容器通过 R1 充电,这将导致具有时间常数 R1C 的指数斜率。当输出变低时,电容器将通过更低的电阻放电,并且斜率会更陡峭。CMOS 门不会有这种差异,它具有对称的源/汇功能。

晶体管版本的输入在高电平时也会消耗(小)电流。CMOS 版本在高电平和低电平时都只有很小的泄漏电流。

总体而言,集成逻辑门是赢家。

是的,这可以通过单个晶体管和电阻器来实现,但是有专门设计用于反转数字信号的芯片。奇怪的是,它们被称为逆变器例如,查看 74HC04。这为您在单个 14 引脚封装中提供了六个独立的逆变器。还有采用小型 SOT-23 封装的单反相器(和其他小型逻辑门),这与单个晶体管的封装相同。

几乎没有理由尝试制作自己的逆变器,但是是的,这是可能的。

添加以回应评论:

正如我所说,单个双极晶体管可以用作简单逆变器的基础。至少,您需要晶体管和基极电阻。为了完整起见,我还将添加一个输出负载电阻,除非您知道连接到输出的任何东西都将提供必要的负载,否则您应该假设它是必需的。特别是 PNP 晶体管并没有什么神奇之处。也可以使用 NPN。以下是每种方法的使用方法:

请注意,每个都有 4 个连接:电源、接地、输入和输出。两者之间的区别在于它加载输入的方向以及输出是主动驱动还是被动拉动的方向。如果您不关心这些问题,那么这两个电路在功能上是等效的。

但是,这更容易:

它也更快,消耗更少的稳态功率,具有更高的输入阻抗,并且更小。它具有与上述逆变器相同的四个连接。像这样的单栅极采用 SOT-23 封装,与采用单晶体管的封装相同。这只需要一个外部部件,即旁路电容。它不需要负载电阻,因为它的输出主动驱动双向。

真的,对于数字信号的一般反相,制作自己的逆变器对于正常应用来说是愚蠢的。

撇开关于示意图的话题不谈:

脚本实际上只有三行。这是整个文件:

@echo 关闭
雷姆
rem MAKE_SCHEM_GIF
雷姆
rem 从原始 Eagle 输出创建一个经过良好过滤的示意图 GIF 文件
远程/临时/a.tif。生成的 GIF 文件将是 /temp/b.gif,并且将是
rem 灰度。
雷姆
image_filter /temp/a.tif /temp/b.img -shrink 5
image_copy /temp/b.img /temp/b.gif -form -gray
image_disp /temp/b.gif -zoom 1 -dev medium

这是一个非常具体的一次性脚本,但足以达到目的。在 Eagle 中,我将原理图导出到图像文件 \temp\a.tif,运行生成 \temp\b.gif 的脚本。图像导出的 Eagle 设置为 600 DPI 和单色。真的,仅此而已。它可能听起来比它更复杂。

以下是一些适用于 CMOS 信号的电阻值:

我发现这个线程是因为我想将一个较旧的“LCD 数字背包”连接到 Arduino。Arduino输出正串行信号,数字背包需要反相信号。较新版本的 LCD 控制器有一个反向/非反向跳线,但我的没有。同样,可以通过软件生成反向串行信号,但它涉及运行非标准库。我想使用标准Serial.write命令。

我最初将 4001 CMOS 四 NOR 门中的 4 个 NOR 之一连接为反相器,但这在我的面包板上占用了很多空间,而且由于您应该将所有未使用的输入接地,因此涉及很多接线。(我想我需要连接封装上 14 个引脚中的 3 个以外的所有引脚;除了 3 个未使用的 NOR 上的输出之外的所有内容。)

我想要一个更简单的接线解决方案。我使用了@stevenvh 提供的电路。

链接在这里:

在此处输入图像描述

我正在处理 9600 波特的 5V CMOS 逻辑,因此输入阻抗非常高/电流非常低。由于我只以 9600 波特率进行切换,因此我认为基于晶体管的逆变器的不对称行为不会对我造成太大伤害。

我发现输入端的 100K 电阻(stevenvh 图中的 R2)工作,并使用 3.3k 电阻作为 R1 的上拉电阻。根据我的计算(I = V / R,5/3300),此设置将在ON状态下消耗<= 1.5 mA(由于晶体管的内阻而有所减少。)我可能会连接一个锅,看看有多大一个我可以摆脱的电阻器仍然让LCD接收信号。

以下是您如何以 CMOS 方式进行操作:

示意图

模拟此电路- 使用CircuitLab创建的原理图

只要低于栅极击穿电压,电源轨电压就可以随心所欲。