Как инвертировать цифровой сигнал

29

Мне нужен способ инвертировать цифровой сигнал, т. Е. Если входной сигнал высокий, я хочу, чтобы выходной сигнал был низким, а если входной сигнал низкий, я хочу, чтобы выходной сигнал был высоким.

Я думаю, что это может быть достигнуто с одним транзистором PNP, но хотел проверить это здесь. Напряжения, с которыми я имею дело, меньше 5В.

Мэтт Руве
источник
Подробное описание инвертора BJT: EE 307, Раздел 2 Проект MoHAT - «Цель этой страницы - помочь тем, кто интересуется основными принципами работы инвертора BJT».
Питер Мортенсен

Ответы:

34

Или, поскольку вы в любом случае говорите о цифровых сигналах, вы используете инвертор .

введите описание изображения здесь

Aявляется входом (для ворота с большим количеством входов , которые будут A, B, Cи т.д.), Yявляется выходным. Если это не слишком усложняет вашу схему, поместите символ с вводом слева.

NXP имеет инверторы с одним затвором . Всего четыре подключения: источник питания, заземление, вход и выход.

Это можно сделать с помощью транзистора и двух резисторов. Это простая схема, но вам все равно придется сделать несколько простых расчетов. У вас будут точно такие же соединения, как и с инвертором.
Кстати, PNP является опцией, но чаще будет использоваться NPN.

редактировать (пересмотреть ваш комментарий)

введите описание изображения здесь

Если входной сигнал высокий, то через R2 и транзистор базы-эмиттера будет проходить ток (база, а не затвор). Этот ток будет усилен, и ток коллектора через R1 вызовет падение напряжения, так что выход будет низким. Вход высокий, выход низкий.
Если входной сигнал низкий, то не будет никакого базового тока и тока коллектора. Отсутствие тока через R1 означает отсутствие падения напряжения, поэтому выходной сигнал будет на уровне + V. Вход низкий, выход высокий.

Это уже ведет немного дальше, но, как я уже сказал в комментарии к sandun, результат очень асимметричный. Если выход подключен к конденсатору, высокий выходной уровень будет означать, что конденсатор заряжается через R1, что приведет к экспоненциальному наклону с постоянной времени R1C. Когда выходной сигнал становится низким, конденсатор будет разряжаться через намного более низкое сопротивление, и наклон будет намного круче. Вы не получите эту разницу с КМОП-вентилями, которые имеют симметричные возможности источника / приемника.

Вход версии транзистора также будет потреблять (небольшой) ток при высоком уровне. Версия CMOS будет иметь малый ток утечки как при высоком, так и при низком уровне.

В целом, интегрированные логические ворота - победитель.

stevenvh
источник
Я, конечно, мог бы запутаться здесь, но NPN включается при подаче питания на затвор и PNP выключается при подаче питания. Имеет смысл использовать NPN для усиления сигнала, но это не приведет к инвертированию сигнала. Мысли?
Мэтт Руве
2
Ворота предназначены для полевых МОП-транзисторов, а не для BJT. NFET включаются, а PFET выключаются. Но вы должны убедиться, что источник подключен правильно. NPN и PNP являются BJT и требуют еще математики, чтобы убедиться, что они работают правильно
ajs410
когда дело доходит до NXP, у вас очень маленькая комната свободы. Существуют такие ограничения, как синхронизация, включение вентилятора, выход вентилятора, допустимые пределы входного шума, глюки и т. Д. В этом случае использовать транзистор более чем просто. Просто потому, что ты не заперт этими ограничениями.
Стандартный Сандун
@Matt - отредактировал мой ответ.
Stevenvh
1
@sandundhammika, Если вы создаете свой собственный, у вас все еще есть ограничения на разветвление и запас по шуму (здесь не распространяется). Но вы должны сами рассчитать, что это за пределы. Если вы используете готовые ворота, вы можете просто прочитать таблицу данных, чтобы узнать. Кроме того, энергопотребление (еще одно типичное системное ограничение), вероятно, будет намного лучше для готовых шлюзов.
Фотон
24

Да, это можно сделать с помощью одного транзистора и резистора, но существуют микросхемы, специально предназначенные для инвертирования цифровых сигналов. Как ни странно, их называют инверторами . Проверьте 74HC04, например. Это дает вам шесть отдельных инверторов в одном 14-контактном корпусе. Есть также одиночные инверторы (и другие маленькие логические вентили), доступные в небольших пакетах SOT-23, то есть в том же пакете, в который входят отдельные транзисторы.

Существует мало причин, чтобы попытаться сделать свой собственный инвертор, но да, это возможно.

Добавлено в ответ на комментарий:

Как я уже сказал, один биполярный транзистор может быть использован в качестве основы для простого инвертора. Как минимум, вам нужен транзистор и базовый резистор. Для полноты картины я также добавлю выходной нагрузочный резистор, который, как вы должны полагать, необходим, если только вы не знаете, что то, что будет подключено к выходу, обеспечит необходимую нагрузку. В частности, в PNP-транзисторе нет ничего волшебного. NPN также может быть использован. Вот как каждый из них будет использоваться:

Обратите внимание, что у каждого есть 4 соединения: питание, земля, вход и выход. Разница между ними заключается в том, в каком направлении он загружает вход, и в каком направлении выход активно приводится в движение, а не пассивно притягивается нагрузкой. Если вас не волнуют эти проблемы, то эти две схемы функционально эквивалентны.

Однако это проще:

Он также быстрее, потребляет меньше энергии в устойчивом состоянии, имеет более высокое импедансное сопротивление и меньше. Он имеет те же четыре соединения, что и вышеупомянутые инверторы. Одиночные вентили, подобные этому, доступны в корпусах SOT-23, то есть в том же пакете, в который входят одиночные транзисторы. Для этого требуется только одна внешняя часть, крышка байпаса. Он не нуждается в нагрузочном резисторе, так как его выход активно работает в обоих направлениях.

Действительно, для общего инвертирования цифровых сигналов создание собственного инвертора глупо для обычных применений.

Не по теме в сторону схематического рисунка:

Сценарий на самом деле всего три строчки. Вот весь файл:

@ эхо выключено
рем
rem MAKE_SCHEM_GIF
рем
rem Создает хорошо отфильтрованный GIF-файл схемы из необработанного вывода Eagle
rem /temp/a.tif. Полученный файл GIF будет /temp/b.gif и будет
Рем серая шкала.
рем
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 и монохромный. На самом деле, это все, что нужно сделать. Наверное, звучит сложнее, чем есть.

Олин Латроп
источник
1
@MattRuwe было бы «достаточно», но Олин считает, что выделенный чип будет лучше (время нарастания и спада будет более симметричным). PNP может «подтягиваться» к Vdd, но вам нужно что-то, что притягивает его вниз, когда PNP позволяет выводу плавать. Это «что-то» создаст асимметрию во время нарастания / спада, основанную на его сопротивлении.
ajs410
Gotcha, имеет смысл
Мэтт Руве
1
Почему ваша схема выглядит красивее, чем моя? :-)
stevenvh
4
@stevenvh: Должно быть, потому что я просто лучше. А если серьезно, я пользуюсь Eagle и позабочусь. После рисования в Eagle я экспортирую схему с разрешением 600 точек на дюйм в файл изображения, затем запускаю сценарий, который фильтрует и сжимает его в 5 раз и записывает результат в GIF-файл в оттенках серого. Это делает результат разумным размером без пиксельных артефактов. Это делает линии немного размытыми, что является компромиссом из-за отсутствия псевдонимов и видимой пикселизации.
Олин Латроп
1
@abdullah: Смотрите дополнение, чтобы ответить.
Олин Латроп
8

Вот некоторые значения резисторов, которые работают для сигналов CMOS:

Я нашел эту ветку, потому что хотел подключить старый «LCD Digital Backpack» к Arduino. Arduino выдает положительные последовательные сигналы, а цифровой рюкзак хочет инвертированные сигналы. Более новая версия контроллера LCD имеет перевернутую / неинвертированную перемычку, но моя нет. Точно так же можно генерировать инвертированные последовательные сигналы с помощью программного обеспечения, но это требует запуска нестандартной библиотеки. Я хотел использовать стандартные Serial.writeкоманды.

Первоначально я подключил один из 4 NOR в шлюзе 4001 CMOS Quad NOR в качестве инвертора, но это занимает много места на моем макете, и, поскольку вы должны связать все неиспользуемые входы с землей, требуется много электропроводка. (Я думаю, что мне нужно было подключить все, кроме 3 из 14 контактов на упаковке; все, кроме выходов на 3 неиспользуемых NOR.)

Я хотел более простое решение. Я использовал схему, предоставленную @stevenvh.

Связано здесь:

введите описание изображения здесь

Я имею дело с 5V CMOS-логикой на 9600 бод, поэтому входное сопротивление очень высокое / ток очень низкий. Поскольку я переключаюсь только на 9600 бод, я не думаю, что асимметричное поведение транзисторного инвертора меня сильно ранит.

Я обнаружил, что резистор 100 кОм на входе (R2 на диаграмме Стивенва) работал, и использовал резистор 3,3 кОм в качестве подтягивающего резистора на R1. Основываясь на моих расчетах (I = V / R, 5/3300), эта установка потребует <= 1,5 мА во включенном состоянии (несколько меньше из-за внутреннего сопротивления транзистора.) Я мог бы подключить горшок и посмотреть, насколько велик резистор, который я могу сойти с рук, пока ЖК-дисплей получает сигнал.

Дункан С
источник
4

Вот как вы делаете это способом CMOS:

схематический

смоделировать эту схему - схема, созданная с использованием CircuitLab

Напряжение на шине питания может повышаться до тех пор, пока оно ниже, чем напряжение пробоя затвора.

Макстон Чан
источник