ГЛАВА 14
На пороге цифрового века
Математическая логика и ее представление в технических устройствах
— Теперь давайте сочтем, сколько у нас всего. Портос?
— Тридцать экю.
— Арамис?
— Десять пистолей.
— У вас, Д'Артаньян?
— Двадцать пять.
— Сколько это всего? — спросил Атос.
— Четыреста семьдесят пять ливров! — сказал д'Артаньян, считавший, как Архимед.
А. Дюма . Три мушкетера
Все началось, конечно, с Аристотеля, который жил в IV веке до нашей эры. Когда читаешь вступление к любой популярной книге, посвященной чему угодно: от изящных искусств до биологии, химии, физики и математики, — возникает впечатление, что Аристотель был каким-то сверхчеловеком. В самом деле, гении встречаются, но нельзя же быть гением настолько, чтобы разработать основы вообще всего, на чем зиждется современная цивилизация! Тем не менее, и авторы не врут, и Аристотель сверхчеловеком не был. Во-первых, знаний было тогда накоплено еще не очень много, и обозреть их все — задача вполне посильная для человека острого ума и выдающихся способностей. Во-вторых, Аристотель работал не один, его метод — коллективный мозговой штурм, это просто история донесла до нас фактически одно только его имя.
Но главное, пожалуй, в другом — древние рассматривали упомянутые нами дисциплины во взаимосвязи. Аристотель четко разделил только науку и ремесла («техно», по-гречески), наука же делились на практические (этику и политику) и теоретические (физику и логику) дисциплины, но и они рассматривались как составные части единой науки. В чем древние, конечно, были более правы, чем мы, вынужденно поделившие области человеческой деятельности на множество автономных разделов.
Для нас важно, что главной составной частью науки считалась именно логика — искусство рассуждения. Вот она-то и послужила той основой, из которой выросла цифровая техника и все многообразие информационных технологий, которые окружают нас теперь на каждом шагу.
Выдвинутые Аристотелем законы логики, которые с его же подачи стали идентифицироваться с законами мышления вообще, неоднократно пытались привести в математическую форму. Некто Луллий в XIII веке попытался даже механизировать процесс логических рассуждений, построив «Всеобщий решатель задач» (несомненно, это была первая попытка построения «думающей машины»). Формализацией логики занимался Лейбниц, искавший универсальный язык науки, и в конце концов все сошлось в двух работах английского математика Джорджа Буля, который жил и работал уже в середине XIX века. Любопытно название второй из этих работ — «Исследование законов мышления», первая же работа называлась поскромнее, но без «мышления» и тут не обошлось, — в названии фигурировало слово «рассуждения». То есть и сам Буль, и еще сто лет после него, до середины XX века, и все его предшественники в течение двух с большим лишком тысяч лет, прошедших со времен Аристотеля, — никто так и не усомнился, что в основе мышления лежит именно та логика, которая называется «аристотелевой». И лишь в XX веке, после работ Геделя и Тьюринга, и особенно в связи с благополучно провалившимися (как и у Луллия за 700 лет до того) попытками создания «искусственного интеллекта», до ученых, наконец, начало доходить, что мышление вовсе не имеет логической природы, а логика есть лишь удобный способ сделать свои рассуждения доступными окружающим.
Главное же следствие возникновения математической логики выявилось совсем не в исследованиях мышления, где оно виделось Лейбницу и Булю. Его обозначил в своей магистерской диссертации от 1940 года великий Клод Шеннон (рис. 14.1) — оказалось, что булевы законы в точности совпадают с принципами функционирования релейных электрических схем. Что самое поразительное — все компоненты, необходимые для моделирования законов логики с помощью электрических устройств (реле, выключатели), были известны еще до публикации Булем своих работ, но в течение еще почти ста лет никто не обращал на это внимания (Шеннон скромно утверждал, что случилось так, что до него просто никто не владел математикой и электротехникой одновременно). Не обратил на это внимание даже Чарльз Бэббидж, сконструировавший еще задолго до работ Буля механическую вычислительную («аналитическую») машину, — а ведь был знаком и с самим Булем, и с его работами!
Рис. 14.1. Клод Элвуд Шеннон (Claude Elwood Shannon), 1916–2001
Фото Lucent Technologies Inc /Bell Labs
Основные операции алгебры Буля
Булева алгебра имеет дело с абстрактными логическими переменными. Эти переменные можно интерпретировать по-разному, но интерпретацию мы пока отложим.
Вне зависимости от интерпретации, для логических переменных определены некоторые операции, подчиняющиеся определенным правилам. Базовые операции такие:
□ операция логического сложения двух операндов — операция объединения, операция «ИЛИ» («OR»), обозначается обычным знаком сложения;
□ операция логического умножения двух операндов — операция пересечения, операция «И» («AND»), мы будем обозначать ее крестиком, чтобы отличить от обычного умножения;
□ операция отрицания для одного операнда — операция «НЕ» («NOT»), обозначается черточкой над символом операнда.
В математике операция логического сложения (дизъюнкция) обозначается еще знаком v, а умножения (конъюнкция) — ^. Кроме того, операция умножения часто обозначается знаком &, и это обозначение нам встретится, когда мы перейдем к микросхемам. Остальные операции могут быть записаны как сочетания этих трех основных.
Любая конкретная интерпретация булевых операндов — математическая или техническая — должна отвечать правилам булевой алгебры. Например, оказалось, что этим правилам отвечают множества (отсюда другие названия тех же операций: «пересечение» и «объединение»). Программисты имеют дело с логическими переменными 0 и 1, которые также есть одно из представлений булевых операндов.
Следует отчетливо понимать, что вне зависимости от интерпретации (включая и напряжения в релейных цепях по Шеннону), любые булевы объекты ведут себя одинаково: так, операция пересечения множеств совершенно адекватна операции «И» с логическими переменными или соответствующей манипуляции с выключателями в электрической сети.
В булевой алгебре многое совпадает с обычной — например, справедливы правила типа А + В = В + А или А + (В + С) = (А + В) + С), но для нас важны как раз отличия.
Вот они: А + А = А (а не 2А, как было бы в обычной алгебре), а также А х А = А (а не А2). Последнее уравнение в обычной алгебре, впрочем, имело бы решение, причем сразу два: 0 и 1. Таким путем обычно и переходят к интерпретации булевых операндов, как логических переменных, которые могут иметь только два состояния: 1 и 0 или «правда» (true) и «ложь» (false). В этом представлении мы действительно можем попробовать с помощью определенных ранее операций записывать некоторые высказывания в виде уравнений и вычислять их значения, что дает иллюзию формального воспроизведения процесса мышления. Но сначала надо определить, как и в обычной алгебре, правила, которым подчиняются операции, — т. е. таблицу логического сложения и таблицу логического умножения. Они таковы:
Операция отрицания «НЕ» меняет 1 на 0 и наоборот.
Примеры записи логических выражений обычно приводят для каких-нибудь бытовых высказываний, но мы поступим нетрадиционно: приведем пример из области математики. Пусть высказывание состоит в следующем:«x меньше нуля или х больше 1 и у меньше 2». Как записать это высказывание? Введем следующие логические переменные: А = (х < 0); В = (х > 1); С = (у < 2). Как мы видим, все они могут принимать только два значения: «правда» (если условие выполняется) и «ложь» (если не выполняется). Обозначим значение всего выражения через D. Тогда высказывание записывается так:
D = (A + B) x C (1)
Можно записать и так:
D = (A ИЛИ B) И C
Или так:
D = (A OR B) AND C
Или, наконец, так:
D = ((х < 0) OR (х > 1)) AND (у < 2)
Последняя запись хорошо знакома всем, кто изучал язык программирования Pascal. На языке С та же запись выглядит непонятнее:
D =((x < 0)||(x > 1))&&(y < 2)
* * *
Подробности
О великий и могучий язык С ! В нем самую простую вещь можно запутать до полной потери смысла. В нашем случае то же самое выражение можно было бы записать, как ((х < 0) | (х > 1)) & (у < 2), и ничего бы не изменилось. В этом языке (в отличие от Pascal ) есть две разновидности логических операций: обычные («логическое И» &&, «логическое ИЛИ» ||) и поразрядные («поразрядное И» &, «поразрядное ИЛИ» |). Есть и, соответственно, «логическое НЕ» (!) и «поразрядное НЕ» (~). Термин «поразрядные» означает, что они применимы к многоразрядным двоичным числам. В результате их применения тоже получается многоразрядное двоичное число, необязательно ноль или единица, как в случае логических. Поскольку наши результаты операций сравнения содержат только один двоичный разряд (либо соблюдается, либо не соблюдается), то в данном случае логические и поразрядные операции оказываются идентичны, и можно писать и так, и так. А вот если в операциях участвуют обычные числа, то результат будет разный: «10&&7» равно «логической 1» (отличное от нуля значение всегда интерпретируется, как «правда»), тогда как «10&7» равно 2 (почему, будет рассказано далее). Как мы узнаем в главе 21 , эти особенности играют большую роль в программировании микроконтроллеров на языке С .
* * *
Пусть х = 0,5, у = 1. Чему будет равно D в этом случае? Очевидно, что выражение (А + В) примет значение «ложь» (0), поскольку х не удовлетворяет ни одному из условий А и В. Переменная С примет значение «правда» (1), но на результат это уже не повлияет, т. к. произведение 0 на 1, согласно таблице логического умножения, равно 0. То есть D в данном случае есть «ложь». Если же принять значение х = -0,5, оставив у равным 1, то D примет значение «правда».
Интересный оборот примут события, если вместо «OR» между А и В поставить «AND», — легко догадаться, что выражение в скобках тогда не будет «правдой» ни при каком значении х, поскольку условия «х меньше 0» и «х больше 1» взаимоисключающие. Потому результирующее условие D всегда будет принимать значение 0, т. е. «ложь». Но вот если мы изменим выражение следующим образом:
(2)
то есть инвертируем выражение в скобках с помощью операции «НЕ», то получим обратный результат: D всегда будет «правдой» (черточкой над символом или выражением как раз и изображается инверсия). Интересно, что тот же самый результат мы получим, если запишем выражение следующим образом:
(3)
Это свойство выражается в так называемых правилах де Моргана (учителя Буля):
Отметим, что из таблиц логического умножения и сложения вытекает еще одно любопытное следствие. Дело в том, что ассоциация значения «ложь» с нулем, а «правды» с единицей (положительная логика), есть действие вполне произвольное — ничто не мешает нам поступить наоборот (отрицательная логика). Такая замена приводит к тому, что все операции «ИЛИ» меняются на «И» и наоборот (рассмотрите таблицы внимательно). А вот операция «НЕ» к такой замене индифферентна — 0 меняется на 1 в любой логике.
Далее приведены несколько соотношений, которые вместе с правилами де Моргана помогают создавать и оптимизировать логические схемы. Некоторые из них очевидны, иные же — совсем нет.
Ассоциативный закон умножения:
A x B x C = (A x B) x C = A x (B x C)
Ассоциативный закон сложения:
A + B + C = (A + B) + C = A + (B + C)
Другие формулы:
Булева алгебра на выключателях и реле
Для того чтобы представить булевы переменные и операции над ними с помощью технических устройств (то, что сделал Клод Шеннон в своей диссертации), надо придумать схемы, которые воспроизводили бы эти операции согласно изложенным правилам. Для этого осталось сделать только один шаг: пусть наличие напряжения (высокий уровень напряжения) в некоторой точке цепи представляет собой логическую единицу, а отсутствие напряжения (низкий уровень) — логический ноль. В этом случае логика носит название «положительной». Если принять за единицу низкий уровень, а за ноль — высокий, логика будет «отрицательной». Как мы уже знаем, переход с положительной логики на отрицательную означает замену всех «И» на «ИЛИ» и наоборот. В дальнейшем, если это специально не оговорено, мы всегда будем иметь в виду положительную логику.
Самые простые варианты схем, реализующих базовые логические операции в этом случае, показаны на рис. 14.2.
Рис. 14.2. Схемы реализации логических функций на кнопочных выключателях
Здесь операции «И» и «ИЛИ» выполняются обычными кнопками без фиксации. Каждая из них соответствует одной логической переменной, которая принимает значение 1, если контакты замкнуты, и 0 — если разомкнуты. На выходе значению 0 соответствует погасший светодиод, значению 1 — горящий. Легко понять, что работать эти схемы будут именно так, как указано в таблицах для соответствующих логических операций. Для технических устройств правила соответствия входов и выхода называются «таблицами истинности» (или «таблицами состояния») и показаны в табл. 14.1.
Однако если разобраться поглубже, то придется констатировать, что настоящими входными логическими переменными для таких схем являются движения пальца, нажимающего на кнопку. В частности, операция «НЕ» здесь будет означать нажатие на кнопку с замкнутыми контактами, а каскадное соединение таких схем для реализации сложных выражений предполагает наличие человека, транслирующего выходной сигнал одной схемы (состояние светодиода) во входной другой схемы (состояние контактов). Логично поставить вместо такого человека, тупо выполняющего предопределенные действия, техническое устройство. И здесь помогут уже хорошо нам известные электромагнитные реле.
В схемах на рис. 14.3 как для входов, так и для выхода наличие напряжения соответствует логической 1, отсутствие его — логическому 0. (Можно для наглядности подключить к выходу светодиод или лампочку, но суть дела от этого не изменится.)
Рис. 14.3. Схемы реализации логических функций на реле.
Способ подачи входного сигнала не указан, т. к. предполагается, что источник входного напряжения может быть произвольным (разумеется, его мощность должна быть достаточной, чтобы заставить реле сработать) — в том числе и такая же схема на реле. Это иллюстрируется схемой на рис. 14.3 справа, где изображена схема составного элемента «И-НЕ» на трех реле, представляющего собой объединение элемента «И» (такого же, как на рисунке слева) и элемента просто «НЕ» (инвертора), который есть не что иное, как одиночное реле с выходом через нормально замкнутые, а не нормально разомкнутые контакты.
Таблица истинности для элемента «И-НЕ», показанная в табл. 14.2, будет инверсией, представленной в табл. 14.1, таблицы истинности для элемента «И». Легко видеть, что она не совпадает с таблицей для «ИЛИ», как могло бы показаться на первый взгляд. Аналогично составляется элемент «ИЛИ-НЕ» — из схемы «ИЛИ», показанной на рис». 14.3 посередине, и инвертора. Таблица истинности для него также представлена в табл. 14.2.
В большинстве современных применений логических микросхем используются именно элементы «И-НЕ» и «ИЛИ-НЕ», а не чистые «И» и «ИЛИ», — так удобнее и для разработчиков микросхем (где в качестве ключей служат транзисторы, которые инвертируют сигнал, см. далее), и для схемотехников. Для того чтобы было проще разбираться в логических схемах, не заучивая таблицы истинности, работу элементов можно запомнить следующим образом: элемент «И» дает единицу на выходе только, если на входах одновременно есть единица, элемент «ИЛИ» — если хотя бы на одном из входов единица. Возможно, вам еще проще будет запомнить так: элемент «ИЛИ» дает единицу на выходе, если на входах «хотя бы одна единица», а элемент «И» дает ноль на выходе, если на входах «хотя бы один ноль». Элементы с инверсией по выходу будут давать в тех же случаях обратные значения.
Интересно рассмотреть вопрос — а нельзя ли упростить схемы этих комбинированных элементов, исключив из них третье реле, выполняющее инверсию? В самом деле, большинство реле имеют перекидные контакты, так за чем же дело стало — меняем нормально разомкнутые контакты на нормально замкнутые, и все! Легко заметить, что такая замена не будет адекватной — мы инвертируем здесь не общий выход элемента, а выходы каждого реле в отдельности, что равносильно инвертированию входов. Если обратиться к правилам де Моргана, то мы увидим, что такое изменение схемы приведет к тому, что элемент «И» превратится в «ИЛИ-НЕ», а «ИЛИ», соответственно, в «И-НЕ». Я советую читателю посидеть над этими соображениями и вывести таблицы истинности самостоятельно, чтобы убедиться, что все сказанное — правда. Другое полезное упражнение состоит в том, чтобы попытаться самому построить трехвходовые элементы, соответствующие уравнениям А + В + С и А х В х С (они будет состоять из трех реле).
Тем, кто не разобрался как следует в этом по необходимости кратком изложении, среди прочих источников особенно порекомендую обратиться к [16]Эта конструкция автора опубликована в журнале «Радио», 2004, № 9.
— книге, написанной очень простым и понятным языком, ориентированным на неподготовленного читателя, но вместе с тем излагающей предмет во всех подробностях.
То же самое, но на транзисторах и диодах
Ясно, что использование реле для построения логических схем — метод, мягко говоря, несовременный. Хотя в истории и отмечены случаи построения целых компьютеров на основе реле (к ним принадлежали, в частности, легендарные Mark-I и Mark-II Говарда Эйкена, запущенные в эксплуатацию в 1944 и 1947 гг., соответственно), но у них было слишком много недостатков: прежде всего, крайне низкие надежность и быстродействие, порядка 20–30 Гц (не килогерц и тем более не мегагерц, а именно герц). Конечно, по сравнению с электромеханическими ручными калькуляторами это было просто сказкой (типовое время операции сложения у Mark-I составляло 0,3 с, т. е. в десятки и сотни раз превышало «быстродействие» человека с механическим калькулятором), и машины эти широко использовались на практике. Тем не менее, такое быстродействие казалось уже тогда недостаточным, потому довольно быстро перешли к использованию ламп, что позволило достичь порогов в десятки и сотни килогерц, а затем и транзисторов, с которыми частота работы возросла до единиц и десятков мегагерц.
* * *
Легенда о «баге»
С использованием реле в компьютерной технике связана легендарная история о возникновении термина «баг», как ошибки в программе. В буквальном переводе «bug» означает «жучок». В 1947 году между контактами одного из реле Mark-II застряла мошка, вызвав неисправность. Когда мошку извлекли, молодая сотрудница Эйкена Грейс Хоппер (позднее — крупнейший авторитет в программировании и единственная в истории женщина-адмирал флота США) приклеила ее между страницами лабораторного журнала с подписью: «первый случай выловленного бага». Страница эта сейчас хранится в музее Смитсоновского института.
* * *
Как же можно построить наши логические элементы на транзисторах? На рис. 14.4 показаны для примера схемы так называемой диодно-транзисторной логики, которая широко использовалась в производстве гибридных микросхем (т. е. еще до изобретения Нойсом и Килби твердотельной микросхемы, см. главу 11).
Рис. 14.4. Схемы реализации логических функций на диодах и транзисторах
В элементе «И-НЕ» (слева) в нормальном состоянии транзистор открыт, и на выходе его логический ноль, так что подача логической единицы на входы ничего не изменит. А подача логического нуля хотя бы на один из входов приведет к тому, что соответствующий диод откроется и станет шунтировать переход база-эмиттер, в результате чего транзистор закроется, и на выходе возникнет логическая единица, что соответствует функции «И-НЕ». Диод в эмиттере нужен для обеспечения надежного запирания транзистора.
На схеме справа наоборот, транзистор в нормальном состоянии заперт, и на выходе логическая единица, а подача хотя бы одной логической единицы на входы откроет соответствующий диод и через него — транзистор, на выходе тогда установится логический ноль, что соответствует функции «ИЛИ-НЕ». «Подпирающий» диод здесь не требуется, зато требуются токоограничивающие резисторы на входах.
Схему инверсии «НЕ» специально рисовать не имеет смысла, т. к. любой транзистор, включенный по схеме с общим эмиттером, как мы знаем из главы 6, есть инвертор.
В случае необходимости обычные «И» и «ИЛИ» можно соорудить из этих схем, просто добавив к ним еще по одному транзисторному каскаду, но это снизит быстродействие и повысит потребление схемы. Отсюда понятно, почему разработчикам было удобнее проектировать микросхемы с инверсией, а не с «чистыми» булевыми функциями.
В этих схемах всплывает один вопрос, который для релейных схем был неактуален: с какого именно уровня напряжение считать логическим нулем, а с какого — единицей? В релейных схемах ноль — это полный разрыв цепи, а единица — полное ее замыкание. Здесь же не совсем так: на коллекторе открытого транзистора в левой схеме будет напряжение около 0,8–1 В, в то время как в правой — всего около 0,2–0,3 В. В то же время при закрытом транзисторе вроде бы напряжение логической единицы должно быть равно напряжению питания (токами утечки пренебрегаем). Однако оно тут же упадет, если мы нагрузим выход входом другой схемы типа «ИЛИ-НЕ», поскольку там требуется обеспечить определенный ток базы.
Поэтому для транзисторов и микросхем задают не точный порог изменения с нуля на единицу, который, как мы видим, непостоянен, а пределы: ниже определенного значения считают выход находящимся в состоянии нуля (для схем на рис. 14.4 подойдет значение 1,2–1,5 В), а выше другого определенного значения (например, при питании 5 В пусть это будет 3,5 В) — в состоянии логической единицы. В промежутке схему считают находящейся в нерабочем режиме (в зоне неопределенности). При этом приходится ограничивать число устройств, подключаемых одновременно к выходу (или потребляемый по выходу ток). Для того чтобы расширить возможности таких схем, в серию одинаковых по типу применяемой схемотехники микросхем вводят специальные чипы буферов — т. е. усилителей мощности сигнала, которые никакой логической функции не осуществляют, а просто усиливают сигнал по току. Иногда такие буферы совмещают с функцией инверсии. Но прежде чем мы перейдем к логическим микросхемам, необходимо немного углубиться в теорию и терминологию и понять, что такое двоичные коды и как двоичная арифметика соотносится с булевой алгеброй.
О двоичной и других системах счисления
О том, что мы считаем в десятичной системе потому, что у нас десять пальцев на двух руках, осведомлены, вероятно, все. У древних ацтеков и майя в ходу была двадцатеричная система (вероятно потому, что закрытая обувь в их климате была не в моде). Вместе с тем, история показывает, что привязка к анатомическим особенностям строения человеческого тела совершенно необязательна. Со времен древних вавилонян у нас в быту сохранились остатки двенадцатеричной и шестидесятеричной систем, что выражается в количестве часов в сутках и минут в часах или, скажем, в том, что столовые приборы традиционно считают дюжинами или полудюжинами (а не десятками и пятерками). Так что само по себе основание системы счисления не имеет значения — точнее, оно есть дело привычки и удобства.
Однако такое положение справедливо лишь для ручного счета — для компьютеров выбор системы счисления имеет большее значение. Попробуем ответить на вопрос — почему? Для этого нам придется сначала разобраться — как мы, собственно говоря, считаем, что при этом происходит, что такое вообще система счисления и ее основание.
Позиционные и непозиционные системы счисления.
Десятичная система
Число — одна из самых удивительных абстрактных сущностей. Нет никаких сомнений, что число, количество предметов — есть вполне объективно существующая характеристика. В отличие, к примеру, от понятия цвета, она совершенно независима от самого факта наличия разума у считающего субъекта и даже от наличия самого субъекта. Тем не менее, материального воплощения числа не имеют — «количество», представленное в виде комбинации пальцев рук и ног, зарубок на палочке (вспомните, как Робинзон Крузо вел свой календарь), разложенных на земле веточек, костяшек на счетах или — что для нас самое главное! — черточек или значков на бумаге, есть всего лишь физическая модель некоего идеального абстрактного понятия «числа». Умение считать в уме, которое отличает цивилизованного человека от дикаря, и состоит в том, что мы можем оторваться от такой материальной модели и оперировать непосредственно с абстракцией.
Из понятия числа, как объективно существующей абстракции, вытекает, что его материальное представление может быть произвольным, лишь бы оно подчинялось тем же правилам, что и сами числа (совершенно аналогично булевым переменным). Проще всего считать палочками (и в детском саду нас учат именно такому счету) — в качестве которых могут выступать и пластмассовые стерженьки, и пальцы, и черточки на бумаге. Один — одна палочка, два — две палочки, десять — десять палочек. А сто палочек? Уже посчитать затруднительно, потому придумали сокращение записи: доходим до пяти палочек, ставим галочку, доходим до десяти — ставим крестик:
Узнаете? Конечно, это всем знакомая римская система, сохранившаяся до настоящих времен на циферблатах часов или в нумерации столетий. Она представляет собой пример непозиционной системы счисления — потому что значение определенного символа, обозначающего то или иное число, в ней не зависит от позиции относительно других символов — все значения в записи просто суммируются. То есть записи «XVIII» и «IIIXV» в принципе должны означать одно и то же. На самом деле это не совсем так — в современной традиции принято в целях сокращения записи использовать и позицию: скажем, в записи «IV» факт, что палочка стоит перед галочкой, а не после нее, означает придание ей отрицательного значения, т. е. в данном случае единица не прибавляется, а вычитается из пяти (то же самое относится и к записи девятки «IX»). Если вы человек наблюдательный, то могли заметить, что на часах четверку часто обозначают как «ИИ», а не как «IV» (см. рис. 14.5), что, несомненно, более отвечает духу непозиционной системы. Однако при всех возможных отклонениях главным здесь остается факт, что в основе системы лежит операция суммирования.
Рис. 14.5. Циферблат часов с римскими числами
Большие числа в римской системе записывать трудно, а еще сложнее осуществлять с ними арифметические действия. Поэтому еще в древнем Вавилоне придумали позиционную систему. Позднее в Европе позиционную систему переоткрыл (видимо) Архимед, затем от греков она была воспринята индусами и арабами, а на рубеже I и II тысячелетий опять попала в Европу — с тех пор мы называем цифры арабскими, хотя по справедливости их следовало бы назвать индийскими. Это была уже современная десятичная система в том виде, в котором мы ее используем по сей день, у арабов отличается только написание цифр. С тем фактом, что заимствована она именно у арабов, связано не всеми осознаваемое несоответствие порядка записи цифр в числе с привычным для нас порядком следования текста: арабы, как известно, пишут справа налево. Поэтому значение цифры в зависимости от позиции ее в записи числа возрастает именно справа налево.
* * *
Заметки на полях
Еще один нюанс, дошедший до нас от древнегреческих времен, связан с тем, что греки и римляне не знали нуля. Именно поэтому первым годом нового тысячелетия считается 2001, а не 2000 год — год с двумя нулями относится к предыдущему столетию или тысячелетию. Это происходит потому, что после последнего года до нашей эры («минус первого») идет сразу первый год нашей эры, а не нулевой. На самом деле древние греки были совсем не такими дураками и ноль игнорировали не по скудоумию. Дело в том, что в последовательности объектов, нумерованных от нуля до, например, девяти, содержится не девять предметов, а десять! Чтобы избежать этой путаницы, в быту обычно нумерацию производят, начиная с 1, тогда последний номер будет одновременно означать и количество. В электронике же и в программировании обычно принято нумеровать объекты, начиная с 0, и всегда следует помнить, что номер и количество различаются на единицу (так, байт, о котором далее, может содержать 256 возможных значений, но номер последнего значения равен 255). На всякий случай всегда следует уточнять, откуда ведется нумерация, иначе можно попасть в неприятную ситуацию (скажем, элементы строки в языке Pascal нумеруются с единицы, а в языке С — с нуля).
* * *
Позиционные системы, в отличие от непозиционных, основаны не на простом сложении входящих в них цифр, а на сложении их с учетом присвоенного им «веса» в зависимости от положения цифр в записи. Так, запись «3» и в римской системе, и в арабской означает одно и то же, а вот запись «33» в римской системе означала бы шесть, а в арабской — совсем другое число, тридцать три.
Для строгого определения позиционной системы сначала выбирается некоторое число р, которое носит название основания системы счисления. Тогда любое число в такой системе может быть представлено следующим образом:
а n ·рn + a n-1 ·p n-1 +… + a 1 ·p 1 + a 0 ·p 0 . (4)
В самой записи числа степени основания подразумеваются, а не пишутся (и для записи основания даже нет специального значка), поэтому запись будет представлять собой просто последовательность а n … а0 (еще раз обратим внимание на то, что запись производится справа налево по старшинству, — обычная математическая запись выглядела бы наоборот). Отдельные позиции в записи числа называются разрядами. Например, в десятичной системе (т. е. в системе с основанием 10) полное представление четырехразрядного числа 1024 таково:
1·103 + 0·102 + 2·101 + 4·100
Ну а как можно представить число в системе счисления с другим основанием? Для любой системы с основанием р нужно ровно р различных цифр — т. е. значков для изображения чисел. Для десятичной системы их десять — это и есть известные всем символы от 0 до 9. Заметим, что выбор начертания этих значков совершенно произволен — так, у арабов и по сей день 1 обозначается, как и у нас, вертикальной палочкой, а вот цифра 2 — знаком , похожим на латинскую строчную «r».
Самые употребительные системы в настоящее время, кроме десятичной, связаны с электроникой и потому имеют непосредственное отношение к нашему повествованию. Это знаменитая двоичная система и менее известная широкой публике, но также очень распространенная шестнадцатеричная.
Двоичная и шестнадцатеричная системы
В двоичной системе необходимо всего два различных знака для цифр: 0 и 1. Это и вызвало столь большое ее распространение в электронике: смоделировать два состояния электронной схемы и затем их безошибочно различить неизмеримо проще, чем три, четыре и более, не говоря уж о десяти. В середине прошлого столетия советский инженер Николай Петрович Брусенцов построил вычислительную машину, которая работала в троичной системе, и потом всю свою долгую жизнь доказывал ее неоспоримые преимущества. Но несмотря на это, его изобретение так и осталось единственным примером такого рода — слишком сложна реализация электронных элементов, работающих в троичной логике.
Еще важнее, что двоичная система прекрасно согласуется как с представленными ранее логическими переменными, так и с тем фактом, что величина, могущая принимать два и только два состояния и получившая названия бит, есть естественная единица количества информации. Это было установлено в 1948 году одновременно Клодом Шенноном и Норбертом Винером, отцом кибернетики, — меньше, чем один бит, информации не бывает. Разряды двоичных чисел (т. е. чисел, представленных в двоичной системе) также стали называть битами. Слово bit — по-английски означает «кусочек, частица чего-либо». Как термин для обозначения количества информации, слово «бит», говорят, возникло от сокращения Bi nary digi T — «двоичная цифра».
Представление двоичных цифр с помощью уровней напряжения, как это делается в электронных устройствах, если точно такая же модель числа, как раскладывание на земле палочек и проведение черточек на бумаге. В последних случаях мы оперируем с числами вручную, по правилам арифметики, а в электронных схемах это происходит в автоматическом режиме, без участия человека — вот и вся разница! Это понятие о «модели числа» — очень важный момент, который следует хорошо осмыслить, если вы действительно хотите вникнуть в суть работы цифровых электронных схем.
Итак, запись числа в двоичной системе требует всего двух цифр, начертание которых заимствовано из десятичной системы и выглядит, как 0 и 1. Число, например, 1101 тогда будет выглядеть так:
1·23 + 1·22 + 0·21 + 1·20 = 13
Чтобы отличить запись числа в различных системах, часто внизу пишут основание системы:
11012 = 1310.
Если система не указана, то имеется в виду обычно десятичная, но не всегда — часто, когда из контекста понятно, что идет речь об электронных устройствах, не указывают не только основание два, но и под словом «разрядность» имеют в виду количество именно двоичных, а не десятичных разрядов (таков, скажем, смысл термина «24-разрядный цвет»).
Шестнадцатеричная система имеет, как ясно из ее названия, основание шестнадцать. Для того чтобы получить шестнадцать различных знаков, изобретать ничего нового не стали, а просто использовали те же цифры от 0 до 9 для первых десяти и заглавные латинские буквы от А до F для одиннадцатого-шестнадцатого знаков (часто вместо заглавных букв употребляют и строчные, с теми же значениями). Таким образом, известное нам число 1310 выразится в шестнадцатеричной системе, как просто D16. Соответствие шестнадцатеричных знаков десятичным числам следует выучить наизусть: А — 10, В — 11, С — 12, D — 13, Е — 14, F — 15. Значения больших чисел вычисляются по обычной формуле, например:
A2FC16 = 10·163 + 2·162 + 15·161 + 12·160 = 40960 + 512 + 240 + 12 = 4172410.
Перевод из одной системы счисления в другую
Как следует из изложенного, перевод в десятичную систему любых форматов не представляет сложности и при надлежащей тренировке может осуществляться даже в уме. Для того чтобы быстро переводить в десятичную систему двоичные и шестнадцатеричные числа, следует выучить наизусть таблицу степеней двойки до 16 (табл. 14.3) и представления некоторых чисел в двоичной и шестнадцатеричной формах (табл. 14.4).
Буква h добавляется к шестнадцатеричному представлению числа, чтобы отличить его от десятичного, не используя индекса 16 (в разных языках программирования есть и другие способы, см. далее). На первое время достаточно запомнить только маленькие числа, а для образования двоичных и шестнадцатеричных чисел понять принцип, остальное выучится позже само.
Из табл. 14.4 видно, что из двоичной в шестнадцатеричную системы и обратно переводить совсем просто. Двоичное число достаточно разбить на тетрады (т. е. группы из 4-х цифр) и перевести каждую в отдельности. Например, число 5910, т. е. 0011 10112, будет равно 3Bh. Еще проще обратный перевод — каждое шестнадцатеричное число заменяется группой из 4-х двоичных цифр. Соответственно, число A2FC16 выразится так: 1010 0010 1111 11002. Заметьте, что пробелы между тетрадами в двоичных числах введены просто для удобства восприятия, подобно пробелам между тройками разрядов (классами) в записи больших десятичных чисел, и никакой иной нагрузки не несут. При записи двоичных чисел в тексте программ, как ассемблерных, так и программ на языках высокого уровня, естественно, эти пробелы ставить запрещается. Обычно при этом для удобства ведущие нули нередко не опускаются (хотя в табл. 14.4 они и опущены) — число 15 чаще всего записывается в виде 0Fh. Почему так удобнее, вы поймете далее.
* * *
Заметки на полях
Почему в табл. 14.4 приведены именно эти числа? Числа, на единицу меньшие степени двойки, имеют в электронике и в программировании большое значение. Если вы посмотрите в таблицу внимательно, то увидите, что наибольшее число с количеством разрядов, равным степени двойки, содержит единицы во всех разрядах, т. е. как раз и равно этой степени минус единица. При этом количество всех чисел с таким количеством разрядов равно степени двойки. Другими словами, память, содержащая ровно 256 (2 8 ) ячеек, будет иметь номер (адрес) последней ячейки, равный 255, или FFh. Наибольшее число, до которого может досчитать 8-разрядный двоичный счетчик, также равно FFh, поскольку если подать на него еще один импульс (257-й по счету), он обнулится, ибо 9-го разряда, где могла бы записаться старшая единица, у него не существует. Потому с такими числами приходится иметь дело очень часто, даже чаще, чем с собственно степенями двойки.
* * *
Сложнее переводить из десятичной системы, и для этого в учебниках рекомендуется устрашающая процедура, основанная на делении столбиком (см., например [17]Множество подробностей о различных средствах и методиках измерения температуры, включая и сведения об устройстве международной шкалы температуры, можно найти на сайте Temperatures.ru .
). Я сейчас попробую вам показать модификацию этого способа, который позволяет переводить числа в двоичную систему несколько более простым методом, причем небольшие числа можно переводить даже в уме.
Для начала запомним, что разряды двоичного числа нумеруются с нуля — т. е., к примеру, разряд номер 3 окажется четвертым справа. Теперь пусть мы имеем, например, десятичное число 59. Подбираем наибольшую степень двойки из табл. 14.3, не превышающую этого числа: 32, что есть 5-я степень. Ставим 1 в 5-м разряде: 100000. Вычитаем подобранную степень из исходного числа (59–32 = 27) и подбираем для остатка также степень, его не превышающую: 16 (24). Ставим единицу в 4-м разряде: 110000. Повторяем процедуру вычитания-подбора: 27–16 = 11, степень равна 8 (23), ставим единицу в 3-м разряде: 111000. Еще раз: 11 — 8 = 3, степень равна 2 (21), так что 2-й разряд оказался пропущен, ставим в нем ноль, а единицу во 1-м разряде: 111010. Последнее вычитание дает 1, которую и ставим в младший (нулевой) разряд, окончательно получив 5910 = 1110112.
Байты
Слово «байт» (byte) представляет собой сокращение от B inar Y digi T E ight — «восемь двоичных цифр». Другими словами, байт — это просто восьмиразрядное двоичное число. Соответственно, он имеет ровно два шестнадцатеричных разряда, или две двоичных тетрады. Такой байт был введен фирмой IBM в конце 50-х годов прошлого века, до этого (а в СССР — и после этого, вплоть до 1969 года) применялись байты с другим количеством разрядов: 5, 6 и 7.
Почему именно 8 разрядов? Да просто потому, что так удобно — число кратно степени двойки, т. е. легко масштабируется. Скажем, шестнадцатиразрядное число — просто два байта, записанные подряд, подобно тетрадам в самом байте. В то же время число в 8 разрядов — относительно невелико и одновременно достаточно емко: имеет 256 значений, которых с лихвой хватает, к примеру, для представления всех печатных знаков европейских алфавитов. Поэтому в настоящее время байт — общепринятая единица измерения информации, т. к. основную единицу — бит — на практике применять неудобно из-за ее мелковатости, числа получаются слишком большими. Применяют и меньшие единицы: кроме бита, это полубайт, или тетрада — одно шестнадцатеричное число.
Для современной электронной техники характерны большие, чем байт, числа — двухбайтовые (65 536 значений), четырехбайтовые (32 двоичных разряда или 4 294 967 296 значений) и даже восьмибайтовые числа. Все они часто называются словами: «word». Так, в памяти современных персональных компьютеров минимальная ячейка памяти содержит 32 бита (или 4 байта), хотя измеряют объем памяти все равно в традиционных байтах.
* * *
О ЕДИНИЦАХ ИНФОРМАЦИИ
В однобуквенных сокращениях принято обозначать байт большой буквой (Б), чтобы отличить его от бита (б), но в критичных случаях во избежание разночтений следует писать полностью: «Мбайт», «Мбит». Тем более что отечественный ГОСТ 8.417-2002 предусматривает однобуквенное сокращение для байта (Б), но не предусматривает его для бита. С приставками также имеется некоторая путаница. В 1999 году Международная электротехническая комиссия (МЭК) с большим опозданием попыталась устранить неоднозначность в обозначениях кратности, введя специальные двоичные приставки киби (вместо «кило»), меби (вместо «мега») и гиби (вместо «гига»), означающие умножение на 1024 вместо 1000. Однако «килобайты» и «мегабайты» к тому времени настолько прижились, что эти не очень удачно звучащие обозначения так и не стали общепринятыми. Приставку «кило» в единицах информации, согласно тому же отечественному стандарту, следует писать с большой буквы (Кбайт), чтобы подчеркнуть, что речь идет об умножении на 1024, а не на 1000. Однако для приставок «мега» и «гига» (а также всех остальных) такого удобного приема уже нет, поэтому это правило на практике соблюдают редко (в этой книге я его также не придерживаюсь). На практике еще можно встретить обозначение единиц информации из одной буквы (например, «256 К памяти»), но пользоваться таким способом не следует, т. к. часто приходится гадать — идет ли тут речь о килобитах или килобайтах.
* * *
Впрочем, есть одна область, где традиционно употребляются именно биты (а также мегабиты и гигабиты), а не байты — это характеристики последовательных цифровых линий передач. К примеру, всем знакомая характеристика модемов в 56 К означает именно 56 кбит в секунду, а так называемые широкополосные линии связи имеют скорости передачи порядка мегабит в секунду. Это связано с тем, что передача именно восьмиразрядными пакетами битов там применяется редко — скажем, стандарт RS232, который мы будем еще рассматривать в этой книге, предусматривает восемь значащих разрядов (т. е. один байт), но помимо этого передаются, как минимум, еще два бита: столовый и стартовый, итого 10. В компьютерных сетях пакеты и вовсе могут иметь переменную длину, поэтому байтами в сетях информацию считают только, когда речь идет об отправленной или принятой информации, но не о той, которая реально передается, — последняя может включать в себя достаточно много всяких служебных битов и целых байтов.
Кстати, часто употребляющийся термин «боды» не равносилен битам в секунду, как это часто ошибочно считают, бездумно записывая фразы вроде «скорость модема 56 бод». Бод — это количество посылок в секунду, где одна посылка может нести несколько битов. Так, базовая для телефонных модемов скорость передачи составляет 2400 бод, но при этом она может быть равна 4800 или 9600 бит/с, в зависимости от того, сколько бит содержится в посылке. Кроме того, скорость, выраженная в бодах, всегда представляет собой полную скорость канала, включающую все служебные поля и отдельные дополнительные биты (вроде бита четности), и потому количество реально передаваемой информации представляет плохо. По этим причинам единицей «бод» в повседневной практике лучше не пользоваться.
Запись чисел в различных форматах
Шестнадцатеричный формат записи часто еще обозначают как HEX (hexadecimal), двоичный — как BIN (binary), а десятичный — как DEC (decimal). Кроме этого, в ходу еще так называемый двоично-десятичный формат — BCD (binary-coded decimal), о котором далее. Дело в том, что с помощью матричных шрифтов на компьютерах с текстовыми дисплеями воспроизводить индексы было невозможно, и вместо того, чтобы обозначать основания системы цифрой справа внизу, их стали обозначать буквами: «В» (или «Ь») — означает двоичную систему, «Н» (или «h») — шестнадцатеричную, отсутствие буквы означает десятичную систему:
13 = 00001101b = 0Dh.
Такая запись принята в языке ассемблера для процессоров Intel и стала общепринятой. Популярность языка С внесла в это дело некоторый разнобой: там десятичная система не обозначается никак, двоичная — буквой «Ь», а вот шестнадцатеричная — буквой «х», причем запись во всех случаях предваряется нулем (чтобы не путать запись числа с идентификаторами переменных, которые всегда начинаются с буквы):
13 = 0b00001101 = 0xD.
Такая запись также принята в ассемблере для микроконтроллеров AVR, который мы будем изучать далее. Запись ODh ассемблер AVR не «понимает», зато «понимает» представление НЕХ-формата, принятое в языке Pascal: $0D. Обратите внимание, что запись в НЕХ-формате обычно ведется в двухразрядном виде — даже если число имеет всего один значащий разряд, как в нашем случае, то в старшем пишется 0. То же самое относится и к двоичной записи, которая дополняется нулями до восьми разрядов. Таким образом подчеркивается, что речь идет о восьмиразрядных устройствах. А вот для десятичного представления ведущих нулей следует остерегаться — чтобы еще больше запутать пользователя, разработчики AVR-ассемблера приняли для представления редко употребляемых восьмеричных чисел запись просто с ведущим нулем, без букв: например, 77 означает просто десятичное 77, а вот 077 будет означать 7·8 + 7 = 6310.
Несколько слов о двоично-десятичном формате BCD. Электронные устройства «заточены» под использование двоичных и родственных им систем счисления, потому что основой являются два состояния, т. е. двоичная цифра. Так что, соединив несколько устройств вместе с целью оперирования с многоразрядными числами, мы всегда будем получать именно двоичное число, и оперировать с ним оказывается значительно проще. Но для понимания человеком десятичный формат необходим — в десятичном виде числа приходится представлять всегда, когда речь идет о выводе, например, на цифровой дисплей. Для этой цели приходится преобразовывать двоичные/шестнадцатеричные числа в десятичные и хранить их в таких же байтовых регистрах или ячейках памяти.
Это можно делать двумя путями: в виде упакованного и неупакованного BCD. Неупакованный формат попросту означает, что мы тратим на каждую десятичную цифру не тетраду, как минимально необходимо, а целый байт. Зато при этом не возникает разночтений: 05h = 0510, и никаких проблем. Однако ясно, что это крайне неэкономично — байтов требуется в два раза больше, а старший полубайт при этом все равно всегда ноль. Потому BCD-числа при хранении и передаче по каналам связи всегда упаковывают, занимая и старший разряд второй десятичной цифрой, — скажем, число 59 при этом и запишется, как просто 59h. Однако 59h — это не 59! Ведь мы раньше установили, что записи 59h соответствует 5·16 + 9 = 89, что вообще ни в какие ворота не лезет.
Причина в том, что двоично-десятичная запись числа не совпадает с шестнадцатеричной. Поэтому в общем случае перед проведением операций с упакованными BCD-числами их распаковывают, перемещая старший разряд в отдельный байт и заменяя в обоих байтах старшие полубайты нулями. Иногда для проведения операций с BCD-числами в микропроцессоре или микроконтроллере предусмотрены специальные команды, так что «вручную» заниматься упаковкой-распаковкой не требуется. В качестве примера хранения чисел в упакованном BCD-формате можно привести значения часов, минут и секунд в микросхемах энергонезависимых часов RTC (о них см. главу 22).
Немного двоичной арифметики
Правила двоичной арифметики значительно проще, чем десятичной, и включают две таблицы: сложения и умножения — несколько похожие на те же таблицы для логических переменных:
Как мы видим, правила обычного умножения одноразрядных двоичных величин совпадают с таковыми для логического умножения. Однако правила сложения отличаются, поскольку при сложении двух единиц результат равен 2, и появляется перенос в следующий разряд. Учитывая, что умножение многоразрядных чисел сводится к сложению отдельных произведений, там придется этот перенос учитывать (как это делается на практике, мы увидим в главе 15).
Сложности начинаются, когда мы хотим в двоичной системе представить отрицательные и дробные числа, причем не выходя за рамки двух знаков «ноль» и «единица», ибо в электронной схеме другие знаки представлять нечем.
Отрицательные двоичные числа
Самый простой метод представления отрицательных чисел — отвести один бит (логичнее всего — старший) для хранения знака. По причинам, которые вы поймете далее, значение 1 в этом бите означает знак «минус», а 0 — знак «плюс». Что произойдет с нашим числом при таком представлении?
В области положительных чисел не произойдет ничего, кроме того, что их диапазон сократится вдвое, — например, для числа в байтовом представлении вместо диапазона 0…255 мы получим всего лишь 0…127 (0000 0000–0111 1111). А отрицательные числа будут иметь тот же диапазон, только старший бит у них будет равен 1. Все просто, не правда ли?
Нет, неправда. Такое представление отрицательных чисел совершенно не соответствует обычной числовой оси, на которой влево от нуля идет минус единица, а затем числа по абсолютной величине увеличиваются. Здесь же мы получаем, во-первых, два разных нуля («обычный» 0000 0000 и «отрицательный» 1000 0000), во-вторых, оси отрицательных и положительных чисел никак не стыкуются, и производство арифметических операций превратится в головоломку. Поэтому поступим так: договоримся, что -1 соответствует число 255 (1111 1111), — 2 — число 254 (1111 1110) и т. д. вниз до 128 (1000 0000), которое будет соответствовать -128 (и общий диапазон всех чисел получится от -128 до 127). Очевидно, что если вы при таком представлении хотите получить отрицательное число в обычном виде, то надо из значения числа (например, 240) вычесть максимальное значение диапазона (255) плюс 1 (256). Если отбросить знак, то результат такого вычитания (16 в данном случае) называется еще дополнением до 2 для исходного числа (а само исходное число 240 — дополнением до 2 для 16). Название «дополнение до 2» используется независимо от разрядности числа, потому что верхней границей всегда служит степень двойки (в десятичной системе аналогичная операция называется «дополнение до 10»).
Что произойдет в такой системе, если вычесть, например, 2 из 1? Запишем это действие в двоичной системе обычным столбиком:
В первом разряде результата мы без проблем получаем 1, а уже для второго нам придется занимать 1 из старших, которые сплошь нули, поэтому представим себе, что у нас будто бы есть девятый разряд, равный 1, из которого заем в конечном итоге и происходит:
На самом деле девятиразрядное число 1 0000 0000 есть не что иное, как 256, т. е. то же самое максимальное значение плюс 1, и мы здесь выполнили две операции: прибавили к уменьшаемому эти самые 256, а затем выполнили вычитание, но уже в положительной области для всех участвующих чисел.
А что результат? Он будет равен 255, т. е. тому самому числу, которое, как мы договорились, и представляет — 1. Получается, что вычитание в такой системе происходит автоматически правильно, независимо от знака участвующих чисел. Если хотите, можете потренироваться и проверить, скажем, что будет, если в этой системе вычесть 240 из 100.
Немного смущает только эта самая операция нахождения дополнения до 2, точнее, в данном случае, до 256 — как ее осуществить на практике, если схема всего имеет 8 разрядов? В дальнейшем мы увидим, что иногда ее осуществлять вовсе не надо — некоторые электронные схемы ведут себя так, что при осуществлении вычитания вся процедура осуществляется автоматически. Особенно наглядно это выглядит для двоичных реверсивных счетчиков, которые мы будем рассматривать в главе 16.
В точности так же ведут себя и соответствующие команды в микропроцессорах — и если вы захотите произвести операцию вычитания числа 2 из содержимого восьмибитового регистра, содержащего число 1, то в регистре окажется число 255 (все единицы). А интерпретация результата — как отрицательного числа или как положительного — это уже ваши трудности.
В микропроцессорах есть обычно и команда, которая возвращает дополнение до 2, в большинстве ассемблеров она называется NEG, от слова «негативный», потому что меняет знак, если мы договариваемся считать числа «со знаком». А как ее можно было бы осуществить «вручную», не обращаясь в действительности к 9-му разряду? Вернемся к рассмотренным ранее примерам и выпишем столбиком исходные числа, результаты операции нахождения дополнения до 2 и результат еще одной манипуляции, которая представляет собой вычитание единицы из дополнения до 2, т. е., что то же самое, просто вычитания исходного числа из наивысшего числа диапазона (255):
Если мы сравним двоичные представления в верхней и нижней строках, то увидим, что они могут быть получены друг из друга путем инверсии каждого из битов. Эта операция называется нахождением дополнения до 1 (потому что число, из которого вычитается, содержит все 1 во всех разрядах; для десятичной системы аналогичная операция называется дополнение до 9). Для нахождения дополнения до 1 девятый разряд не требуется, да и схему можно построить так, чтобы никаких вычитаний не производить, а просто переворачивать биты. То есть, для полного сведения вычитания к сложению надо проделать три операции:
1. Найти дополнение до 1 для вычитаемого (инвертировать его биты).
2. Прибавить к результату 1, чтобы найти дополнение до 2.
3. Сложить уменьшаемое и дополнение до 2 для вычитаемого.
Заметим, что все сложности с этими многочисленными дополнениями связаны с наличием нуля в ряду натуральных чисел — если бы его не было, дополнение было бы всего одно, и операция вычитания упростилась. Так может, греки все же были в чем-то правы?
В заключение обратим внимание на еще одно замечательное свойство двоичных чисел, которое часто позволяет значительно облегчить операции умножения и деления, а именно: умножению на 2 соответствует операция сдвига всех разрядов числа на один разряд влево, а операции деления на 2 — вправо. Крайние разряды (старший при умножении и младший при делении) в общем случае при этом должны теряться, но в микропроцессорах есть специальный бит переноса, в который эти «потерянные» разряды помещаются. Противоположные крайние разряды (младший при умножении и старший при делении) в общем случае замещаются нулями, но могут и замещаться значением бита переноса, что позволяет без лишних проблем делить и умножать числа с разрядностью больше одного байта. Как можно догадаться, умножению и делению на более высокие степени двойки будет соответствовать операция сдвига в нужную сторону на иное (равное степени) число разрядов.
Излишне говорить, что операцию сдвига разрядов в электронных схемах производить неизмеримо проще, чем операции деления и умножения. Есть и специальные схемы для этой операции — сдвиговые регистры, которые мы также будем «проходить» (в главе 16).
Дробные числа
Сразу заметим, что в некомпьютерной электронике дробными числами стараются не пользоваться. При необходимости их переводят в целые, умножая на соответствующую степень десяти (а чаще — даже на степень 2, что проще), при этом все остальные участвующие в расчетах величины также масштабируются в нужное число раз. Затем при выводе, к примеру, на цифровой дисплей, запятая просто устанавливается в нужном месте (иногда заранее, и без возможности изменения ее положения). То есть, для цифровой схемы не существует значения температуры, равного 30,81 градуса, а есть число 3081 в BCD-формате. Примерно те же действия мы производили, когда конструировали цифровой термометр в главе 13, — на самом деле он показывает целое число милливольт в нужном масштабе.
И все же — как мы можем при необходимости представить дробные числа, если двоичные разряды ничего о таковых «не знают» и могут воспроизводить только целые числа в соответствии с формулой (4)? Мы не будем рассматривать расширение этой формулы, включающее в себя представление в позиционной системе не только целых, но и всех действительных чисел «с плавающей запятой», т. к. в электронике такой вариант не хождения не имеет. В электронике и компьютерной технике используют другой способ представления действительных чисел — с помощью мантиссы и порядка, в так называемом нормализованном виде. При этом место запятой фиксируется:
0,0125 = 0,125·10-1,
1254,81 =0,125481·104.
Разумеется, в электронных схемах все это лучше делать в двоичной форме, записывая порядок, как степень двух (скажем, операция выравнивания порядков при сложении таких чисел сведется просто к сдвигу мантиссы, как мы видели ранее).
Легко заметить, что и саму запятую, и основание степени тут можно опустить, записывая в память лишь мантиссу и порядок — конечно, если всегда помнить, что мы имеем в виду. Например, можно сделать так: отвести в памяти три байта, из которых первые два хранят цифры мантиссы, а третий отведен под порядок. Легко также подсчитать, каков будет диапазон чисел, могущих быть представленными таким образом, — число, которое представляет мантиссу, будет укладываться в диапазон от -32768 до 32767, т. е. иметь от 4 до 5 значащих десятичных цифр. На практике операции с дробными числами можно производить несколько проще, и мы будем их осваивать в главе 20.
Коды, шифры и дешифраторы
По необходимости кратко коснемся темы кодирования и связанной с ней темы шифрования. Слово «код» (особенно в сочетании двоичный код) вы будете встречать очень часто, и следует понимать, что именно подразумевается под этим понятием в том или ином случае. Кроме того, сразу забежим немного вперед и покажем, как обращаться с реальными схемами на этом примере.
Код в общем случае — это совокупность правил (т. е. алгоритм) для представления информации в какой-либо форме. Процесс применения к информационному сообщению этих правил называется кодированием, при этом полученная группа знаков или сигналов также называется кодом. Обратная операция — восстановление сообщения по известному коду — носит название декодирования. Например, код Морзе позволяет записать с помощью двух знаков — точки и тире — любую букву или цифру. Закодированное таким образом сообщение можно передавать с высокой надежностью в различных средах, характеризующихся высоким уровнем помех (в виде звуковых сигналов, в том числе по радио, в виде вспышек света разной длительности, перестукиванием через стены и т. п.).
Понятие кода применимо к формам представления информации лишь в тех случаях, когда между содержанием сообщения и его представлением в какой-либо форме существует взаимно-однозначное соответствие, т. е. по данной записи смысл сообщения может быть восстановлен единственным образом (если не считать возможных искажений при передаче). В этом смысле понятие кода может быть лишь ограниченно применимо, например, к письменной или устной речи, для которых характерна многозначность смысловых единиц. В гуманитарных дисциплинах, как правило, понятие кода используется в качестве метафоры (например, «смысловой код произведения искусства»).
Понятие кода нашло наиболее широкое применение для представления информации в цифровой форме. Самым распространенным цифровым кодом является двоичный код (т. е. представление любого знака или числа в виде набора двоичных цифр 0 и 1). Двоичный код, в свою очередь, служит основой для различных кодов, представляющих конкретные разновидности информации. В информатике часто также говорят про исходный код программ, что означает текст программы, записанный на одном из языков программирования.
На рис. 14.6 приведены различные стандартные коды для первых девяти букв латинского алфавита. Следует отметить, что азбука Брайля — система письменности для слепых (где жирная точка соответствует наличию выпуклости, а «худая» — ее отсутствию) — в полной мере является двоичным кодом, мало того, из принципа ее построения было многое заимствовано в современных системах компьютерных кодировок. А вот код Морзе, хотя и состоит из точек и тире, двоичным кодом не является: в нем используется как минимум еще один знак — пауза. Зато код Морзе намного экономичнее обычных двоичных кодов, таких, как ASCII, поскольку имеет переменное число точек-тире для каждого символа, и часто встречающиеся буквы в нем короче, чем редко встречающиеся.
Рис. 14.6. Некоторые коды первых латинских букв
Для кодировки ASCII в скобках дано десятичное значение
Понятие шифра, строго говоря, к электронике не относится. Шифр — это просто код, построенный специальным образом для обеспечения секретности при передаче сообщений, и занимается этим довольно сложная математическая дисциплина — криптография. Тем не менее, в электронике довольно часто употребляют наименование «дешифраторы» — для обозначения элементов, которые предназначены для преобразования одной разновидности кода в другую.
Типичным примером может служить микросхема К561ИД5 (рис. 14.7, а), которая преобразует двоично-десятичное число, подаваемое на входы X, в специальный код для управления семисегментными индикаторами. Сам такой индикатор вместе с таблицей его состояний представлен на рис. 14.8. В этой таблице в колонке под заголовком «BIN» представлены двоичные числа, соответствующие входам X дешифраторов на рис. 14.7.
Рис. 14.7. Разводка выводов дешифраторов К561ИД5 (а) и 514ИД1/514ИД2 (б)
Рис. 14.8. Обозначения сегментов и таблица состояний семисегментного индикатора
Отметим, что К561ИД5 «заточена» под управление ЖК-дисплеями, и потому имеет двухполярное питание и содержит отдельный вход F, на который подаются прямоугольные импульсы частотой несколько десятков герц (иначе, как мы знаем из главы 7, сегмент ЖК-индикатора будет засвечен навсегда). Сигнал на входе Е «защелкивает» выход — если на нем логический ноль (напряжение «земли»), то коды на выходе не будут меняться независимо от состояния входов, в нормальном состоянии там должна быть логическая единица (напряжение питания).
Если нужно управлять светодиодными индикаторами, для которых двухполярное пульсирующее питание не требуется, то выходы отрицательного питания и «земли» объединяют и на вход F подают напряжение «земли» (логического нуля). По выходам a-f при этом приходится ставить дополнительные ключевые транзисторы или эмиттерные повторители для управления сегментами индикаторов, т. к. выходной ток микросхем серии 561 для непосредственного управления светодиодами недостаточен.
Микросхема К561ИД5 основана на так называемой технологии КМОП. А специально предназначенные для управления светодиодными индикаторами дешифраторы 514ИД1 и 514ИД2 (рис. 14.7, б) основаны на технологии ТТЛ и потому ограничены одним напряжением питания (максимум 5,5 В), зато выходы у них намного мощнее (подробнее о технологиях логических микросхем и их электрических характеристиках мы узнаем из главы 15).
Различаются 514ИД1 и 514ИД2 полярностью выхода — у первого наружу выведен эмиттер выходного транзистора, коммутирующий ток через сегмент на «землю», а у второго — на выходе открытый коллектор. Таким образом, 514ИД1 предназначена для управления сегментными индикаторами с общим катодом, который подсоединяется к «земле», а 514ИД2 — индикаторами с общим анодом, который подсоединяется к питанию. Другое отличие — у 514ИД1 имеются встроенные токоограничивающие резисторы номиналом приблизительно 1 кОм, т. е. при падении напряжения на сегменте примерно 1,8–2 В (стандартном для красного светодиода) выходной ток будет составлять около 3 мА.
У 514ИД2 таких резисторов не имеется, и их приходится ставить дополнительно, непосредственно к выходу дешифратора индикатор присоединять нельзя. Зато здесь можно гибко управлять яркостью свечения в зависимости от индивидуальных характеристик индикаторов — зеленые и желтые индикаторы при одинаковом токе имеют большее падение напряжения, чем красные (номинально 2,4 В против 1,8 В), и могут светиться тусклее. При токе через сегмент около 5–6 мА сопротивление токоограничивающего резистора должно быть в пределах 360–510 Ом. Большими по размеру индикаторами, где прямое падение напряжения на сегменте удвоенное, с помощью этих микросхем приходится управлять также через внешние ключи, подключенные к более высокому напряжению.
При подаче напряжения «земли» на вывод «Г» этих микросхем все сегменты оказываются погашенными. Это позволяет осуществлять динамическую индикацию — управление многоразрядными индикаторами, при котором в каждый момент времени светится только один десятичный разряд. В результате удается сэкономить на количестве соединений (одноименные сегменты всех разрядов соединяются параллельно) и отчасти на потреблении схемы. Формально говоря, ток через каждый разряд при таком подключении должен увеличиваться пропорционально числу разрядов, чтобы сохранить ту же яркость — например, при четырех разрядах ток должен быть в четыре раза больше, т. к. каждый разряд горит лишь четвертую часть времени (но не забудьте, что у 514ИД2 есть предельное значение — 22 мА). Однако опыт показывает, что пропорциональное увеличение тока необязательно, визуально яркость сохраняется и при меньших значениях мгновенного тока через сегмент, что и позволяет немного сэкономить на питании. Более подробно мы будем говорить о динамической индикации при изучении микроконтроллеров, с помощью которых организовать ее гораздо проще и удобнее, чем с помощью обычных микросхем.
ГЛАВА 15
Математическая электроника, или игра в квадратики
Устройство логических микросхем и двоичные операции
Трактирщик отворил дверь большой комнаты, где совсем недавно вместо прежней дрянной печурки поставили прекрасный большой камин.
А. Дюма. Три мушкетера
Типов элементарных логических (или цифровых — будем считать, что это синонимы) микросхем не так уж и много, и подавляющее большинство из них относится к одной из двух технологических разновидностей: ТТЛ (TTL, Транзисторно-Транзисторная Логика) и КМОП (CMOS, Комплементарные [транзисторы] Металл-Окисел-Полупроводник). Различие между ними чисто технологическое, функционально одноименные элементы из этих серий делают одно и то же, и на схемах обозначаются одинаково. Мало того, «чистая» ТТЛ на практике уже почти и не применяется, потому что современные модификации КМОП догнали и перегнали эту технологию по скоростным параметрам, а в остальном КМОП гораздо удобнее, как мы увидим. Существуют еще некоторые специальные технологии, например, быстродействующая ЭСЛ-логика, но она вам на практике никогда не встретится, а как конкретно устроены большие интегральные схемы внутри — неважно, коли их выходы совместимы с КМОП.
На практике в наших устройствах мы станем пользоваться только КМОП-микросхемами, причем, как традиционными, так и современных быстродействующих разновидностей. Тем не менее, про ТТЛ мы будем тоже много говорить, потому что некоторые общепринятые параметры микросхем унаследованы именно от нее. Транзисторно-транзисторная логика, введенная в практику фирмой Texas Instruments в 1965 году, возникла раньше КМОП (первая КМОП-микросхема была выпущена в 1968 году фирмой National Semiconductor) и стала наследницей диодно-транзисторной логики (ДТЛ), примеры которой мы приводили в главе 14 (см. рис. 14.4).
Сравнение основных характеристик ТТЛ и КМОП
Основной родовой признак ТТЛ — использование биполярных транзисторов, причем структуры только n-р-n. КМОП же, как следует из ее названия, основана на полевых транзисторах с изолированным затвором структуры МОП, причем комплементарных, т. е. обеих полярностей: и с n-, и с p-каналом. Схемотехника базовых логических элементов ТТЛ и КМОП приведена на рис. 15.1. На Западе их еще называют вентилями — чем можно оправдать такое название, мы увидим в конце главы.
Рис. 15.1. Схемы базовых элементов ТТЛ и КМОП
ТТЛ
Входной многоэмиттерный транзистор ТТЛ мы уже рисовали в главе 11 (см. рис. 11.3) — он может иметь сколько угодно (на практике — до восьми) эмиттеров, и у элемента тогда будет соответствующее число входов. Если любой из эмиттеров транзистора VT1 замкнуть на «землю», то транзистор откроется, а фазорасщепляющий транзистор VT2 (с его работой мы знакомы по рис. 6.8) — закроется. Соответственно, выходной транзистор VT3 откроется, a VT4 — закроется, на выходе будет высокий логический уровень (уровень логической единицы). Если же все эмиттеры присоединены к высокому потенциалу (или просто «висят» в воздухе), то ситуация будет обратная — VT2 откроется током через переход база-коллектор VT1 (такое включение транзистора называется инверсным), и на выходе установится ноль за счет открытого транзистора VT4. Такой ТТЛ-элемент будет осуществлять функцию «И-НЕ» (логический ноль на выходе только при единицах на всех входах).
Выходной каскад ТТЛ-элемента представляет собой некое подобие комплементарного (пушпульного) каскада класса В, знакомого нам по аналоговым усилителям (см. рис. 8.2). Однако воспроизведение p-n-р-транзисторов оказалось для ТТЛ-технологии слишком сложным, потому такой каскад носит еще название псевдокомплементарного: верхний транзистор VT3 работает в режиме эмиттерного повторителя, а нижний — в схеме с общим эмиттером.
Кстати, заметим, что из-за упомянутой недоступности p-n-р-транзисторов воспроизведение схемы «ИЛИ» для ТТЛ-технологии оказалось крепким орешком, и ее схемотехника довольно существенно отличается от показанной на рис. 15.1 базовой схемы элемента «И-НЕ».
* * *
Заметки на полях
На заре транзисторной техники псевдокомплементарные каскады, подобные выходному каскаду ТТЛ, использовались — о ужас! — для усиления звука. Их структура дала основания для многочисленных попыток приспособить логические элементы, которые, в сущности, представляют собой усилители с довольно большим (несколько десятков) коэффициентом усиления, для усиления аналоговых сигналов. Излишне говорить, что результаты оказываются довольно плачевными, даже с КМОП-элементом, который построен куда более симметрично.
* * *
Как видно из схемы, ТТЛ-элемент существенно несимметричен и по входам, и по выходам. По входу напряжение логического нуля должно быть достаточно близко к «земле», при напряжении на эмиттере около 1,5 В (при стандартном для ТТЛ питании 5 В) входной транзистор уже запирается. Причем при подаче нуля нужно обеспечить отвод довольно значительного тока база-эмиттер — около 1,6 мА для стандартного элемента, отчего для элементов ТТЛ всегда оговаривается максимальное количество одновременно подсоединенных к выходу других таких элементов (стандартно — не более десятка). В то же время логическую единицу на входы можно не подавать вовсе. Практически, однако, подавать ее следует — по правилам незадействованные входы ТТЛ должны быть присоединены к питанию через резисторы 1 кОм.
Еще хуже дела обстоят на выходе: напряжение логического нуля обеспечивается открытым транзистором и действительно довольно близко к нулю — даже при нагрузке в виде десятка входов других таких же элементов оно не превышает 0,5 В, а в нормах на сигнал ТТЛ оговорена величина не более 0,8 В. А вот напряжение логической единицы довольно далеко отстоит от питания и составляет при питании 5 В в лучшем случае (без нагрузки) от 3,5 до 4 В, практически же в нормах оговаривается величина 2,4 В.
Такое балансирование десятыми вольта (напряжение нуля 0,8 В, напряжение порога переключения от 1,2 до 2 В, напряжение единицы 2,4 В) приводит к тому, что все ТТЛ-микросхемы могут работать в довольно узком диапазоне напряжений питания: практически от 4,5 до 5,5 В, многие даже от 4,75 до 5,25 В, т. е. 5 В ±5 %.
Максимально допустимое напряжение питания составляет для разных ТТЛ-серий от 6 до 7 В, и при его превышении они обычно горят ясным пламенем. Низкий и несимметричный относительно питания порог срабатывания элемента приводит и к плохой помехоустойчивости.
Самым крупным (и даже более серьезным, чем остальные) недостатком ТТЛ является высокое потребление — до 2,5 мА на один такой элемент, и это без учета вытекающих токов по входу и потребления нагрузки по выходу. Так что приходится только удивляться, почему микросхемы ТТЛ, содержащие много базовых элементов, вроде счетчиков или регистров, не требуют охлаждающего радиатора. Все перечисленное в совокупности давно бы заставило отказаться от технологии ТТЛ вообще, однако у них до некоторого времени было одно неоспоримое преимущество — высокое быстродействие, которое для базового элемента в виде, показанном на рис. 15.1, может достигать десятков мегагерц.
В дальнейшем развитие ТТЛ шло по линии уменьшения потребления и улучшения электрических характеристик, в основном за счет использования так называемых переходов Шоттки на которых падение напряжения может составлять 0,2–0,3 В вместо обычных 0,6–0,7 В (технология ТТЛШ, обозначается буквой S в наименовании серии, отечественные аналоги: серии 531 и 530). Базовая технология, которая составляла основу широко распространенной в 1960-70-х годах серии 74 без дополнительных букв в обозначении (аналоги — знаменитые отечественные серии 155 и 133), сейчас практически не используется. ТТЛ-микросхемы в настоящее время можно выбирать из вариантов, представленных малопотребляющими сериями типа 74LSxx (серии 555 и 533) или быстродействующими типа 74Fxx (серия 1531). Причем потребление последних практически равно потреблению старых базовых серий при более высоком (до 125 МГц) быстродействии, а для первых все наоборот — быстродействие сохранено на уровне базового, зато потребление питания снижено раза в три-четыре.
КМОП
КМОП-элементы намного ближе к представлению о том, каким должен быть идеальный логический элемент. Для начала, как можно видеть из рис. 15.1, они практически симметричны, как по входу, так и по выходу. Открытый полевой транзистор на выходе (либо р-типа для логической единицы, либо n-типа для логического нуля) фактически представляет собой, как мы знаем, просто сопротивление, которое для обычных КМОП-элементов может составлять от 100 до 300 Ом (под «обычными» или «классическими» КМОП мы подразумеваем здесь серию 4000А или 4000В, см. далее). Для дополнительной симметрии на выходе обычно ставят последовательно два инвертора, подобных показанному на рис. 15.1 справа (жалко, что ли, транзисторов, если потребление не растет?). Поэтому на выходе не сказывается то, что в нижнем плече для схемы «И-НЕ» стоят два таких транзистора последовательно.
Для схемы «ИЛИ» такие транзисторы будут стоять в верхнем плече — она полностью симметрична схеме «И», что тоже плюс технологии КМОП по сравнению с ТТЛ. Обратите также внимание, что выходной каскад инвертора построен не по схеме «пушпульного» каскада, т. е. это не истоковые повторители напряжения, а транзисторы в схеме с общим истоком, соединенные стоками, что позволяет получить дополнительный коэффициент усиления по напряжению.
На практике особенности построения элемента приводят к тому, что в КМОП-микросхемах:
□ на ненагруженном выходе напряжение логической единицы практически равно напряжению питания, а напряжение логического нуля практически равно потенциалу «земли»;
□ порог переключения близок к половине напряжения питания;
□ входы практически не потребляют тока, т. к. представляют собой изолированные затворы МОП-транзисторов;
□ в статическом режиме весь элемент также не потребляет тока от источника питания.
Из последнего положения вытекает, что схема любой степени сложности, построенная с помощью КМОП-элементов, в «застывшем» состоянии или при малых рабочих частотах, не превышающих десятка-другого килогерц, практически не потребляет энергии! Отсюда ясно, как стали возможными такие фокусы, как наручные часы, которые способны идти от малюсенькой батарейки годами, или sleep-режим микроконтроллеров, в котором они потребляют от 1 до 50 мкА на все десятки тысяч составляющих их логических элементов.
Другое следствие перечисленных особенностей — исключительная помехоустойчивость, достигающая половины напряжения питания. Но это еще не все преимущества. КМОП-микросхемы «классических» серий могут работать в диапазоне напряжений питания от 2 до 18 В, а современные быстродействующие — от 2 до 7 В. Единственное, что при этом происходит: при снижении питания довольно резко — в разы — падает быстродействие и ухудшаются некоторые другие характеристики. Но именно по причине широкого диапазона напряжения питания КМОП-микросхемы классических серий имеет смысл применять и сегодня.
Кроме того, выходные транзисторы КМОП, как и любые другие полевые транзисторы, при перегрузке (например, в режиме короткого замыкания) работают как источники тока — при напряжении питания 15 В этот ток составит около 30 мА, при 5 В — около 5 мА. Причем это может быть долгосрочный режим работы таких элементов. Единственное, что при этом надо проверить, — не превышается ли значение суммарного допустимого тока через вывод питания, которое обычно составляет около 50 мА. То есть, возможно, придется ограничить число выходов, одновременно подключенных к низкоомной нагрузке. Естественно, о логических уровнях в таком режиме уже речи не идет, только о втекающем или вытекающем токе.
И тут мы подходим к основному недостатку «классической» КМОП-технологии — низкому в сравнении ТТЛ быстродействию. Обусловлено оно тем, что изолированный затвор МОП-транзистора представляет собой конденсатор довольно большой емкости — в базовом элементе до 10–15 пФ. В совокупности с выходным сопротивлением предыдущей схемы такой конденсатор образует фильтр низких частот.
Обычно рассматривают не просто частотные свойства, а время задержки распространения сигнала на один логический элемент. Задержка возникает из-за того, что фронт сигнала не строго вертикальный, а наклонный, и напряжение на выходе еще только начнет нарастать (или снижаться), когда напряжение на входе достигнет уже значительной величины (в идеале — половины напряжения питания). Время задержки могло достигать у ранних серий КМОП величины 200–250 не (сравните — у базовой серии ТТЛ всего 7,5 не). На практике при напряжении питания 5 В максимальная рабочая частота «классического» КМОП не превышает 1–3 МГц.
Попробуйте соорудить на логических элементах генератор прямоугольных сигналов по любой из схем, которые будут рассмотрены в главе 16, и вы увидите, что уже при частоте 1 МГц форма сигнала будет скорее напоминать синусоиду, чем прямоугольник.
Другим следствием наличия высокой входной емкости является то, что при переключении возникает импульс тока перезарядки этой емкости, — т. е., чем выше рабочая частота, тем больше потребляет микросхема, и считается, что при максимальных рабочих частотах ее потребление может сравниться с потреблением ТТЛ (по крайней мере, ТТЛ серии 74LS). Дело еще усугубляется тем, что из-за затянутых фронтов импульсов элемент достаточно длительное время находится в активном состоянии, когда оба выходных транзистора приоткрыты (т. е. возникает так называемый эффект сквозного тока). Это же затягивание фронтов в сочетании с высокоомным входом приводит к снижению помехоустойчивости при переключении — если на фронте сигнала «сидит» высокочастотная помеха, то это может приводить к многократным переключениям выхода, как это было у компаратора (см. главу 13).
Незадействованные входы элемента КМОП нужно обязательно подключать куда-нибудь: либо к земле, либо к питанию (резисторов при этом не требуется, т. к. вход тока не потребляет), либо объединять с соседним входом — иначе наводки на столь высокоомном входе полностью нарушат работу схемы. Причем в целях снижения потребления следует делать это и по отношению к незадействованным элементам в том же корпусе (но не ко всем незадействованным выводам, конечно). «Голый» вход КМОП из-за своей высокоомности может стать также причиной повышенной «смертности» чипов при воздействии статического электричества (хотя на практике входы всегда шунтируют диодами, как показано на рис. 11.4). Допустимый ток через эти диоды также оговаривается в спецификациях.
В современных КМОП, в отличие от «классических», большинство недостатков, связанных с низким быстродействием, удалось преодолеть (правда, за счет снижения допустимого диапазона питания).
Характеристики различных серий КМОП
Развитие КМОП было, естественно, направлено в сторону устранения или хотя бы сглаживания имеющихся недостатков. Оригинальная серия КМОП 4000 была не очень удачна — именно к ней относится значение задержек в 200 не и более, напряжение питания для нее составляло от 5 до 15 В, нагрузочная способность выхода — не более 0,6 мА. Причем советские аналоги (серии К176 и 164) были еще хуже, т. к. требовали питания около 9 В (мне так и не удалось нигде узнать, с какими допусками). Для стыковки с ТТЛ таких микросхем пришлось придумывать специальные «преобразователи уровня», которые тянули большой вытекающий ток по входу ТТЛ-элементов и умели подгонять уровни при различном напряжении питания.
А вот серия 4000А (отечественные К561 в корпусе DIP и «военная» 564 в планарном корпусе SOIC или похожем на него SOP) и, особенно, 4000В (частично К561 и вся К1561) применяются и по сей день — в основном из-за неприхотливости и беспрецедентно широкого диапазона питающих напряжений — от 3 до 18 В, что позволяет без излишних проблем совмещать цифровые и аналоговые узлы в одной схеме. Задержки для этих серий составляют порядка 90-100 не, предельная рабочая частота — до 10–15 МГц, а выходные токи без ущерба для логического уровня — до 1,6–9 мА (большее значение при большем напряжении питания). Отметим, что эти характеристики достигаются при достаточно высоком напряжении питания, при обычных для современной электроники напряжениях 3–5 В быстродействие существенно снижается: при 5 В рабочая частота уже не превышает 3–5 МГц.
В настоящее время доступны быстродействующие серии КМОП с крайне неудачным общим названием 74, совпадающим с ТТЛ (серия 54 — то же самое, но для военно-космических применений). Чтобы не запутаться, имейте в виду, что если в наименовании серии присутствует буква С, то это КМОП, а все остальные (менее многочисленные) представители семейства 74 есть ТТЛ-микросхемы. Самые популярные разновидности — серия 74НСхх (отечественный аналог — 1564 или КР1564) и 74АСхх (1554). Номер серии, обозначения и разводка выводов элементов, совпадающие с номером для ТТЛ, были, вероятно, первоначально выбраны из маркетинговых соображений, чтобы подчеркнуть быстродействие и совместимость с ТТЛ, однако по другим параметрам это совсем не ТТЛ. Серии 74НС и 74АС совмещают в себе многие удобства КМОП (симметричность уровней, отсутствие потребления в статическом режиме) и быстродействие ТТЛ, достигающее десятков мегагерц (у 74АС даже до сотни). Пожертвовать, как мы говорили, пришлось расширенным диапазоном питания: номинальное напряжение питания для всех КМОП из 74-й серии — 5 В, максимально допустимое — 7 В, поэтому серию 4000В они заменяют не полностью. Правда, нижний предел питания для почти всех микросхем 74АС и всех 74НС даже ниже, чем для 4000-й серии — 2 В.
В этой книге мы будем ориентироваться на наиболее популярные у нас и по сей день микросхемы 561-й серии, но учтите, что при напряжениях питания 5–6 В и менее их мокно почти без ограничений заменять микросхемами серии 74НС или отечественными 1564. В некоторых случаях применение новых серий даже предпочтительнее, т. к. они формируют более крутые фронты сигналов.
«Почти» по отношению к взаимозаменяемости относится к потреблению — в покое все КМОП-элементы не потребляют тока, но с ростом частоты потребление быстродействующих растет быстрее. На рис. 15.2 показаны эмпирические графики потребления двух разновидностей КМОП-микросхем в расчете на один логический элемент в зависимости от частоты. Видно, что для «классической» 561-й серии потребление растет строго линейно с крутизной примерно 25 мкА на каждые 300 кГц увеличения частоты. Для элемента 74НС оно сначала быстро растет, затем темпы прироста снижаются, но в любом случае ток потребления остается как минимум вдвое больше, чем у «классического» элемента.
Рис. 15.2. Потребление КМОП -микросхем в расчете на один логический элемент в зависимости от частоты (напряжение питания 5 В)
* * *
Заметки на полях
Как видите, в абсолютном выражении потребление всех КМОП-элементов достаточно мало, и на частотах в десятки килогерц составляет единицы микроампер. Однако это потребление резко возрастает при увеличении напряжения питания — так, потребление схемы лабораторного генератора по рис. 16.14 составляет не более 150–200 мкА при 5 В, но при 15 В оно уже будет составлять порядка 1,5 мА. Отсюда общее правило для «МОП-микросхем: для уменьшения потребления снижение напряжения питания даст больший эффект, чем снижение рабочей частоты.
* * *
Серия 74АС еще мощнее, чем 74НС, и более быстродействующая (задержки порядка 5–7 не против 10–20 не у 74НС) — соответственно, при той же частоте она потребляет еще больше. Выходные максимально допустимые токи серии 74НС могут достигать 25 мА, а серии 74АС — аж 50 мА. Но в долгосрочном режиме такие токи гонять через выводы не рекомендуется: нормальный ток для выхода 74АС без нарушения логических уровней составляет 24 мА, а для 74НС — 4–8 мА, причем, напомним, что через вывод питания суммарный ток не должен превышать величины порядка 50 мА.
У разных производителей могут быть разные приставки (префиксы) к основному названию серии, как 4000В, так и серий 74, — так, у Fairchild Semiconductor микросхема будет называться CD4001B, у Texas Instruments — SN4001B, у Motorola — MCI4001B (более подробно об этом рассказано в приложении 4). Самое же противное в применении этих микросхем — разнобой в разводке выводов для одних и тех же элементов из разных серий (в этом их отличие от ОУ, которые в большинстве своем имеют одинаковую разводку, хотя тоже не всегда). Правда, для выводов питания разработчики старались по мере возможности придерживаться единого принципа (это же касается и многих аналоговых микросхем): «земля» присоединяется к последнему выводу в первом ряду, а питание — к последнему во втором, т. е. к выводу с наибольшим номером для данного корпуса (скажем, для корпуса с 14-ю выводами это будут, соответственно, 7 и 14, для корпуса с 16-ю выводами — 8 и 16 и т. д.). Это правило действует далеко не всегда, но для многих стандартных микросхем малой степени интеграции (включая и некоторые аналоговые) питание разведено именно так.
Как мы уже говорили, наименования одинаковых по функциональности элементов для КМОП разных серий и ТТЛ различаются. Причем функциональные наименования у серий 1564 и 1554 соответствуют ТТЛ (если аналоги в «классических» сериях существуют), а не КМОП. Микросхема, содержащая в одном корпусе четыре элемента «И-НЕ», подобных показанным на рис. 15.1, в отечественном варианте КМОП носит имя 561ЛА7, ТТЛ носит название 155ЛАЗ, в западном варианте это 4011 в «классической» серии и 74хх00 в быстродействующих версиях как КМОП, так и ТТЛ. Подробнее функциональные наименования описаны в приложении 4.
На рис. 15.3 показаны условные обозначения основных логических элементов на электрических схемах, причем нельзя не согласиться, что отечественные обозначения намного логичнее, легче запоминаются и проще выполняются графически, чем импортные, поэтому их обозначения логических элементов у нас так и не прижились (как, кстати, и многие другие, — например, обозначения резисторов и электролитических конденсаторов). Крайний справа элемент под наименованием «Исключающее ИЛИ» нам еще неизвестен, но скоро мы его будем изучать.
Рис. 15.3. Обозначения основных логических элементов на схемах: вверху — отечественные; внизу — импортные
В табл. 15.1 приведена разводка выводов микросхем, содержащих наиболее употребляемые одно- и двухвходовые логические элементы (для импортных указана маркировка фирмы Fairchild, но напомним, что у других изготовителей она отличается только префиксом). Как вы можете убедиться, в «классической» серии для всех двухвходовых логических микросхем она одинакова (в том числе и для элементов «Исключающее ИЛИ» CD4030/4070, которые мы еще не проходили), а вот другие серии с универсализацией подкачали. Для ТТЛ всех разновидностей (в том числе и отечественных) разводка совпадает с 74АС/НС, чем подчеркивается, что они взаимозаменяемы. Естественно, все элементы в одном корпусе абсолютно идентичны и взаимозаменяемы, поэтому для таких микросхем, если даже и номера выводов корпуса на принципиальной схеме указаны, элементы можно заменять друг на друга в процессе изготовления платы. Нередко на схеме не указывают и расположение выводов питания.
Как видно из табл. 15.1, заимствованная у «классической» ТТЛ разводка для микросхем 74НС00 и 74АС00 удобнее других — при каскадном соединении двух элементов достаточно соединить идущие подряд выводы 3 и 4 (или 3, 4 и 5, если входы объединяются) и аналогично поступить с другой половиной микросхемы. Иные типы исторически получили не столь удобную разводку.
Специальные буферные элементы с мощным выходом применяют для того, чтобы усилить выходы КМОП: с инверсией — 561ЛН2 или без нее — 561ПУ4. Они содержат шесть таких инверторов или буферов в одном корпусе. Отметим, что точного импортного аналога микросхемы 561ЛН2 не существует, при копировании наши разработчики улучшили микросхему CD4049, избавившись от лишних контактов корпуса. Правда, они не пошли до конца и не сделали то же самое для микросхемы 561ПУ4, содержащей 6 буферных усилителей без инверсии. В результате у 561ПУ4, у ее аналога CD4050, как и у CD4049, плюс питания присоединяется нестандартно — к выводу 1, а выводы 13 и 16 — не задействованы (и, напомним, не должны никуда присоединяться, что обозначено буковками NC — No Connected).
* * *
Заметки на полях
Объяснение этой кажущейся несуразице с лишними выводами одновходовых элементов простое — в первой серии 4000 (К176) существовали преобразователи уровня для перехода от 9-вольтовой КМОП-логики к 5-вольтовой ТТЛ (откуда и отечественное название ПУ). В этих преобразователях на вывод 16 подавалось еще одно напряжение питания 9 В. В сериях 4000А и 4000В необходимость в дополнительном питании отпала (они и сами чудесно работают при питании 5 В), а разводка выводов осталась.
* * *
Следует отметить, что по внутреннему устройству микросхемы с одновходовыми элементами, вероятно, самые простые из всех микросхем вообще. Элемент с инверсией (ЛН2, 4049) состоит всего из двух транзисторов (см. рис. 15.1 справа), а буферный элемент (ПУ4, 4050) — из двух таких инверторов, включенных последовательно. Однако у них есть один эксплуатационный нюанс, который также унаследован от времен, когда такие микросхемы служили для перехода от КМОП к ТТЛ.
Он заключается в том, что нижний транзистор выходного каскада мощнее верхнего. В результате в состоянии логического нуля по выходу эти микросхемы могут принять большой втекающий ток без ущерба для логических уровней — 3–5 мА при питании 5 В, и до 40 мА при 15 В. А вот в состоянии логической единицы значения выходного тока у них стандартные для «классической» КМОП — 1,6 мА при 5 В и до 12 мА при 15 В питания. При практическом применении ЛН2 и ПУ4 эту несимметрию нужно учитывать.
В отличие от «классических», быстродействующие аналоги 74НС4049 и 74НС4050 (в АС-версии их не существует, там есть аналоги только с открытым истоком, см. приложение 5) полностью симметричны, допускают долговременный как втекающий, так и вытекающий выходной ток через каждый вывод до 25 мА (но не более 50 мА в сумме по всем выводам) и предпочтительны для использования при напряжениях питания 3–5 В.
Выходы обычных логических элементов можно объединять с целью умощнения — например, выход одного инвертора в составе микросхемы ЛН2 формально «тянет» ток до 3,2 мА при 5 В питания (на самом деле гораздо больше, если выйти за пределы ограничений, накладываемых условием ненарушения логических уровней), а если соединить выходы всех шести входящих в состав микросхемы элементов, то можно подключать нагрузку до 20 мА, — главное, не превысить допустимый ток через вывод питания. Естественно, при этом необходимо также объединить и входы, превратив всю микросхему как бы в один мощный инвертор.
Есть, разумеется, и логические элементы с большим количеством входов. Я не буду приводить здесь разводку выводов других типов логических микросхем, чтобы не загромождать текст, т. к. наличие отдельного справочника по ним в любом случае обязательно. В качестве справочника, в котором приведены не только основные сведения и разводка выводов, но и подробно объясняется работа микросхем базовых серий с многочисленными примерами, я бы рекомендовал разыскать у букинистов или скачать из Сети книгу [18]Пусть вас слово «платиновый» не пугает — самой платины там так мало, что стоит такой датчик не дороже медного, тем более что в датчиках используют медь высокой степени очистки, которая ненамного дешевле драгметаллов.
. Это суперпопулярное пособие вышло в свое время несколькими изданиями и почти не устарело (правда, некоторых современных типов микросхем в нем нет). В Сети, разумеется, можно найти и другие подобные справочники.
Следующей широко употребляемой разновидностью логических микросхем являются элементы, имеющие выход с открытым истоком (с открытым коллектором для ТТЛ). Такой выход, как мы помним, имеет компаратор 521САЗ (см. главу 12). Есть такие элементы и с чисто логическими функциями: в КМОП-серии это CD40107 (561ЛА10, содержит два двухвходовых элемента «И-НЕ»), в быстродействующих КМОП это 74НС05 (шесть инверторов, аналог ЛА10 под названием 74НС22 снят с производства). Причем CD40107 может коммутировать значительный втекающий ток — аж до 136 мА при 25 °C и 10 В питания, и 70 мА при 5 В. 74НС05 скромнее, и коммутирует стандартные для этой серии 20 мА.
Эти элементы используют не только для коммутации мощной нагрузки, но и для объединения на общей шине в так называемое проводное или монтажное «ИЛИ» (рис. 15.4). Название это, на мой взгляд, несколько неудачное, ибо соответствует отрицательной логике — на общей шине логическая единица будет только тогда, когда выходы всех элементов установятся в 1, а если хотя бы один выход находится в нуле, то и на шине будет ноль, что в положительной логике соответствует операции «И».
Рис. 15.4. Объединение элементов с открытым коллектором по схеме «проводное ИЛИ»
Для объединения выходов могут служить и так называемые элементы с третьим состоянием. Это соответствует не логическому понятию состояния, а электрическому, — третье состояние в данном случае обозначает просто обрыв, отключение выхода элемента от вывода микросхемы. Такие элементы имеются и в составе серий, но наиболее часто применяются в составе более сложных микросхем. Например, выводы многих микроконтроллеров или микропроцессоров имеют возможность переключения в третье состояние.
* * *
Заметки на полях
Мы часто будем усиливать выходы КМОП-микросхем с помощью отдельного ключевого транзистора, и схема его включения может представлять в данном случае исключение из того правила, что в ключевом режиме обязательно «привязывать» базу к «земле», как это было оговорено в главе 6 (см. рис. 6.4 и относящийся к нему текст). Дело в том, что подключенная к выходу логического элемента база транзистора всегда будет привязана через токоограничивающий резистор к какому-нибудь потенциалу, и в воздухе никогда не «повиснет», поэтому и запирающий резистор можно не ставить.
Однако это не относится к случаю, когда база управляется от выхода ТТЛ-микросхемы через диод, включенный в прямом направлении, как это часто делают, чтобы обеспечить надежное запирание транзистора (см., например, [3]). На мой взгляд, ставить такой диод совершенно не требуется, но если уж автор построил схему именно так, то нужно ставить и запирающий резистор, потому что при нулевом потенциале на выходе микросхемы диод запирается, и база тогда «повисает» в воздухе.
Двоичный сумматор на логических микросхемах
Заметим сразу, что схема этого устройства в том виде, в котором мы ее сейчас будем конструировать, сама по себе довольно бесполезна — если вы, конечно, не хотите повторить подвиг советского конструктора Михаила Александровича Карцева. Он создал в 1970-х годах на микросхемах малой степени интеграции (т. е. фактически на отдельных логических элементах) очень удачную ЭВМ под названием М-10, замечательную тем, что отдельные ее экземпляры в нашем оборонном комплексе продержались аж до начала нового тысячелетия. При желании повторить такой подвиг, учтите, что основная проблема, которую вам придется решать, состоит вовсе не в том, чтобы такую машину сконструировать схемотехнически — это не самая трудная часть работы. Самое трудное для подобных суперконструкций — решить проблему отвода тепла, выделяемого сотнями тысяч быстродействующих логических микросхем. Суперкомпьютеры Cray на отдельных логических элементах, выпускаемые в 1980-х годах, даже имели водяное охлаждение.
Наконец, если очень хочется, то готовый двоичный сумматор есть в интегральном исполнении (561ИМ1; есть сумматоры и помощнее). Зачем же мы тогда будем его конструировать? А затем, что его устройство очень хорошо иллюстрирует две вещи: во-первых, само применение логических микросхем, во-вторых — разве не любопытно знать, как устроен самый главный узел компьютера, арифметико-логическое устройство, АЛУ? Знание этого вам очень пригодится для лучшего понимания работы микроконтроллеров и принципов их программирования. Кроме того, мы на этом примере познакомимся еще с одним важным типом логических элементов.
Итак, вспомним, что нам, собственно, нужно делать — а именно: воспроизвести таблицу сложения двоичных чисел, которая была показана для одноразрядных чисел в главе 14. Так как при сложении единиц получается двухразрядное двоичное число, то перепишем эту таблицу в двухразрядном представлении:
Теперь разобьем таблицу на две: одну для разряда собственно суммы, другую для значения переноса в следующий разряд:
Сравним вторую таблицу с таблицей состояний для базовых логических функций (я их повторю, чтобы не пришлось листать книгу):
Для переноса имеем полное совпадение с функцией «И». То есть, для того чтобы обеспечить перенос, нам нужен всего лишь один логический элемент «И», который получается комбинированием стандартного «И-НЕ» с инвертором. Хуже с разрядом суммы: первые три значения обеспечивает элемент «ИЛИ», однако при сложении единиц возникает несоответствие (логическое и арифметическое сложения, как мы говорили, не адекватны друг другу). Нужен специальный элемент, который мог бы получить название элемент несовпадения: в самом деде, у него логическая единица на выходе тогда, когда входы имеют разное состояние, а если они одинаковы — на выходе ноль. Для того чтобы его сконструировать, взглянем на таблицу истинности элемента «И-НЕ» (для наглядности я повторю и ее):
Сравним таблицы «ИЛИ», «И-НЕ» и необходимой нам суммы: в первом случае мы получаем то, что надо, в верхних трех строках, во втором — в нижних. Как бы их объединить? Да очень просто — через функцию «И»:
Логический элемент с такой функцией «несовпадения» носит специальное название — «Исключающее ИЛИ». Существует и обратный элемент «совпадения», который представляет собой инверсию выхода «Исключающего ИЛИ» и носит название «Включающего ИЛИ».
Обозначение элемента «Исключающее ИЛИ» уже было показано на рис. 15.3. А как можно его составить из элементов «И-НЕ» и «ИЛИ-НЕ», показано на рис. 15.5.
Рис. 15.5. Варианты реализации элемента «Исключающее ИЛИ» и его таблица истинности
Верхний вариант полностью соответствует нашим рассуждениям и потребует двух корпусов микросхем, а нижний вариант — пример того, как можно построить «Исключающее ИЛИ» с использованием только одного типа элементов, в данном случае — «И-НЕ». Он более экономичен, т. к. потребует всего одного корпуса типа 561ЛА7. Попробуйте построить таблицу истинности для второго варианта, и вы убедитесь, что он работает «как заказывали» (есть и много других способов). Отметьте, что в первом варианте специальных элементов-инверторов мы не используем, а с целью экономии корпусов микросхем образуем их из элементов «И-НЕ» или «ИЛИ-НЕ» путем объединения входов — обычно так и поступают.
В любой логической серии есть, разумеется, и специальные микросхемы «Исключающее ИЛИ» (561ЛП2). Элемент «Исключающее ИЛИ», помимо способности выдавать сумму одноразрядных чисел, обладает многими интересными свойствами, к которым мы обратимся далее, а пока вернемся к сумматору.
На самом деле одноразрядный сумматор мы уже построили. Его схема приведена на рис. 15.6 вверху. Внизу на рис. 15.6 мы обозначили все устройство одним квадратиком.
Рис. 15.6. Схема одноразрядного полусумматора
Однако почему там написано «полусумматор»? Такой одноразрядный сумматор носит название полусумматора, потому что он не «умеет» одной важной вещи, а именно: разряд переноса-то он выдает, а вот учесть перенос от предыдущего разряда не может. Поэтому, чтобы складывать многоразрядные числа по-настоящему, нужно в каждом разряде поставить по два таких полусумматора, причем объединить их выходы переносов через «ИЛИ» (рис. 15.7).
Рис. 15.7. Схема многоразрядного сумматора
Так мы получили одноразрядный полный сумматор. Объединением таких сумматоров несложно соорудить устройство для сложения чисел любой разрядности. Если вы попробуете нарисовать схему сумматора для, скажем, восьми разрядов полностью с использованием принципиальных схем логических элементов по рис. 15.1, то ужаснетесь — это же сколько транзисторов надо, чтобы построить такое устройство? Много — в восьмибитном КМОП-сумматоре их получается 480 штук (а современные микросхемы, бывает, содержат и больше транзисторов). И это без учета того, что в систему должны входить еще, как минимум, два регистра для хранения исходных чисел и результата (в целях экономии результат помещают в регистр одного из слагаемых, тем самым слагаемое это уничтожая), а также другие логические схемы (для сдвига, для инверсии битов при манипуляции с отрицательными числами). То есть общее количество транзисторов составляет порядка тысячи.
Теперь понятно, почему микросхемы высокой степени интеграции содержат миллионы транзисторов и почему проблема отвода тепла стоит так остро! Один логический элемент КМОП из четырех транзисторов выделяет, согласно рис. 15.2, при частоте в единицы мегагерц всего-навсего полмилливатта тепла, но что будет, если таких элементов приходится ставить в количестве миллион штук? И еще при этом как можно больше повышать рабочую частоту?
Сумматоры, построенные по описанной схеме, выпускают, естественно, в интегральном исполнении (в «классической» КМОП это микросхема четырехразрядного сумматора 561ИМ1, есть и схема более универсального АЛУ — 561ИПЗ). В связи с многоразрядным сумматором возникает только один вопрос — а что делать с входом переноса самого первого, младшего разряда? Если мы просто складываем двоичные числа разрядности, соответствующей возможностям нашего сумматора (например, восьмиразрядные, т. е. длиной в один байт), то вход переноса младшего разряда присоединяется к логическому нулю. Соответственно, выход переноса старшего разряда остается «висеть в воздухе». Легко сообразить, что при этом, если складываются числа, в сумме составляющие более величины диапазона, старший разряд суммы «потеряется». Это явление при всей своей очевидности стоит того, чтобы рассмотреть его подробнее.
Предположим, у нас есть такой байтовый сумматор, и под числами мы имеем в виду обычные беззнаковые положительные числа, диапазон которых составит 0-255. Если мы сложим 128 (1000 0000) и 128 (1000 0000), то получим число 256 (1 0000 0000), которое имеет единицу в 9-м, отсутствующем у нас, разряде (заодно отметим этот результат как хорошую иллюстрацию к положению, гласящему, что умножение на 2 есть просто сдвиг всех разрядов влево на одну позицию). Таким образом, в разрядах сумматора мы получаем одни нули, что, конечно, есть результат некорректный. Для корректного сложения, к примеру, восьмибитовых чисел цам надо иметь 9 разрядов результата.
А как наращивать разряды, если, например, в микроконтроллере все регистры восьмиразрядные? Да очень просто — надо взять два таких регистра и соединить выход переноса одного со входом переноса другого. Тогда мы получим двухбайтовое число (или слово, как его чаще называют). В микропроцессорах, в том числе и в микроконтроллерах, мы, конечно, физически такое объединение сделать не можем — схема уже создана заранее, но в них зато есть специальный отдельный бит переноса (carry bit), в который автоматически помещается перенос в результате операций сложения, умножения и, кстати, вычитания и деления тоже.
Обработка двоичных сигналов с помощью логических элементов
В начале главы мы упоминали, что логические элементы носят еще название вентилей. На самом деле вентиль — это устройство для регулирования потока жидкости или газа. Каким же образом оправдано это название в приложении к нашим схемам? Оказывается, если на один из входов логического элемента подавать последовательность прямоугольных импульсов (некую аналогию потока), а на другой — логические уровни, то в этом случае элемент будет себя вести совершенно аналогично вентилю настоящему.
Соответствующие диаграммы показаны на рис. 15.8, а. Из них вытекают следующие правила:
□ для элемента «И-НЕ» логический уровень 1 является «разрешающим», т. е. в этом случае последовательность на другом входе пропускается на выход без изменения (за исключением того, что она инвертируется, поскольку элемент у нас «И-НЕ», а не просто «И»). При логическом уровне 0 вентиль запирается, на выходе будет логическая 1;
□ для элемента «ИЛИ-НЕ» ситуация полностью противоположна: «разрешающим» является логический уровень 0, т. е. в этом случае последовательность на другом входе пропускается на выход (также с инверсией). При логическом уровне 1 вентиль запирается, на выходе будет логический 0;
□ для «Исключающего ИЛИ» все еще интересней — в зависимости от того, 0 на входе или 1, относительно другого входа элемент ведет себя, соответственно, как повторитель или как инвертор, что дает довольно широкие возможности для управления двоичными последовательностями.
Рис. 15.8. Обработка цифровых сигналов при помощи логических элементов,
а — диаграммы прохождения сигналов через основные типы логических элементов;
б — «антидребезг» на основе элемента «Исключающее ИЛИ»;
в и г — использование элемента «Исключающее ИЛИ» для выявления разности фаз ( в ) и частот ( г ) сигналов;
д — логический элемент «Исключающее ИЛИ» на двух переключателях
На рис. 15.8, б показана интересная схема на основе элемента «Исключающее ИЛИ». Эта схема устраняет неизбежный дребезг механических контактов, который может вызвать (более того, вызывает обязательно) многократное срабатывание некоторых электронных схем — например, триггеров или счетчиков. При наличии свободного элемента «Исключающее ИЛИ» устранить дребезг, как видите, очень просто. Чтобы понять, как это работает, надо учесть, что подвижные контакты кнопки, тумблера или реле никогда не пролетают несколько раз расстояние от одного неподвижного контакта до другого — подвижный контакт только несколько (иногда до нескольких десятков) раз за короткое время оказывается «висящим в воздухе» (представьте себе, что он как бы подпрыгивает на неподвижном контакте, причем как при размыкании, так и при замыкании). При этом подачи напряжения, соответствующего противоположному логическому уровню, не происходит.
При этих условиях на схеме рис. 15.8, б происходит следующее: при наличии 0 на одном из входов элемент «Исключающее ИЛИ» работает как повторитель. Если контакт был замкнут (надежно) с потенциалом питания (логической единицей), то на выходе будет также единица. Когда контакт в процессе дребезга разомкнётся и «повиснет в воздухе», то потенциал на выходе все равно останется равным единице, т. к. поддерживается обратной связью, замыкающей выход со входом. Сколько бы контакт ни дребезжал таким образом, потенциал останется равным единице до первого касания контактом «земли», когда элемент перебросится в другое состояние и будет в нем пребывать опять-таки независимо от того, дребезжит контакт или нет. Разумеется, можно и инвертировать сигнал, если присоединить второй вход к питанию, а не к «земле». Заметьте, что в схеме по рис. 15.8, б обязательно требуется именно перекидной контакт — для простой кнопки с двумя выводами нужно использовать иные способы антидребезга, и мы их еще будем рассматривать.
Однако самое интересное будет, если на входы «Исключающего ИЛИ» подать две последовательности импульсов с разными частотами и/или фазами. На рис. 15.8, в показано, что произойдет, если обе последовательности имеют одинаковую частоту, но фазы при этом сдвинуты на полпериода. На выходе при этом возникнет колебание с удвоенной частотой! Попробуйте изменить фазу — вы увидите, что скважность результирующего колебания будет меняться, пока фазы не совпадут, и тогда сигнал на выходе исчезнет, — одинаковые состояния выходов дают на выходе «Исключающего ИЛИ» всегда логический ноль. Это позволяет использовать такой элемент в качестве «фазового компаратора», что широко используется в фазовых модуляторах и демодуляторах сигнала.
Не менее интересный случай показан на рис. 15.8, г — здесь на входы подаются последовательности с различающейся частотой. Мы видим, что на выходе возникнет сигнал с изменяющейся скважностью, причем легко показать, что период изменения этой скважности от минимума к максимуму и обратно будет в точности равен периоду сигнала с частотой, равной разности исходных частот. Если при этом поставить на выходе элемента фильтр низкой частоты (если разность частот невелика в сравнении с исходными частотами, то достаточно простой RC-цепочки), то мы получим синусоидальное колебание с частотой, равной этой разности! Это колебание можно как-то использовать или, например, можно его подать в качестве сигнала обратной связи на генератор, управляемый напряжением (ГУН), который тогда изменит частоту одного из сигналов так, чтобы она в точности совпадала со второй (опорной). Таким образом, например, делают схемы умножителей частоты, получая целый набор точных частот с использованием одного-единственного опорного кварцевого генератора.
Наконец, на рис. 15.8, д показана очень простая, но полезная схема, которая реализует функцию «Исключающее ИЛИ» на двух выключателях с перекидными контактами. Если выключатели в этой схеме находятся в одном положении, то лампочка горит, если в противоположных — выключена. Если лампочка находится в прихожей, то один из выключателей располагается при входе с улицы, а другой — при выходе во внутренние помещения. Заходя в прихожую, вы включаете свет одним выключателем, покинув ее — выключаете либо вторым, либо тем же самым (смотря в какую сторону уходите), причем независимо от того, в какой последовательности это происходит. К сожалению, бытовые выключатели почти всегда имеют одну пару контактов, но некоторые клавишные конструкции несложно доработать так, чтобы они стали перекидными.
Другие, не менее интересные применения логических функций мы рассмотрим в следующих главах, а пока остановимся еще на одной важной разновидности логических элементов.
Мультиплексоры/демультиплексоры и ключи
Мультиплексоры/демультиплексоры — важный класс логических схем малой степени интеграции. Их довольно часто применяют и в современных схемах совместно с микроконтроллерами — для сокращения числа необходимых соединений.
Мультиплексором называют схему, которая соединяет единственный входной вывод напрямую с одним из нескольких выходных (как правило, четырех или восьми), в зависимости от поданного на нее двоичного кода (схема «1 —> 8»). Соответственно, демультиплексор осуществляет обратную операцию — пропускает сигнал с одного из нескольких выводов на единственный выходной (схема «8 —> 1»). Фишка состоит в том, что в КМОП-версии они прекрасно коммутируют не только цифровые, но и аналоговые сигналы, причем в обе стороны!
Такие мультиплексоры/демультиплексоры делают на ключах — специальным образом включенных полевых транзисторах по технологии КМОП. Простейший такой ключ изображен на рис. 15.9, а. Выпускаются также и микросхемы, содержащие просто наборы отдельных ключей, — например, 590КН2 и аналогичные, мы еще с ними столкнемся. Такие ключи широко используются в составе микросхем средней и большой степени интеграции — в аналого-цифровых и цифроаналоговых преобразователях, например. Также они практически заменили механические переключатели в коммутаторах телевизионных каналов, используются в цифровых переменных резисторах, электронных реле и т. д.
На рис. 15.9, б приведена для примера схема разводки выводов микросхемы 561КП2, которая представляет собой восьмиканальный мультиплексор/демультиплексор (561КП1 делает то же самое, но содержит два четырехканальных мультиплексора).
Эта микросхема коммутирует один из выводов, обозначенных как 0–7, к выводу Q, в зависимости от поданного на управляющие входы А-С двоичного кода. Очень важную функцию осуществляет вход Е (с инверсией, т. е. активный уровень на нем — низкий) — это вход разрешения, и если на нем присутствует высокий уровень, то все каналы размыкаются.
Рис. 15.9. Использование КМОП -ключей:
а — простейший униполярный ключ,
б — разводка выводов мультиплексора/демультиплексора 561КП2
Специально для коммутации переменных аналоговых сигналов у 561КП2 предусмотрено подключение отрицательного питания (вывод 7), в случае цифровых же сигналов этот вывод коммутируется просто на «землю». Размах питания между выводами 7 и 16 не может превышать предельно допустимого для однополярного питания 561-й серии значения 15–18 В, т. е. двухполярное питание возможно примерно до ±8 В. Однако уровень сигнала управления (как по входам А-С, так и по Е) при этом отсчитывается от «цифровой земли», которая установлена потенциалом вывода 8. При этом аналоговый сигнал по амплитуде может достигать почти значений питания, только для получения минимума искажений коммутируемые токи также должны быть малы.
ГЛАВА 16
Устройства на логических схемах
Мультивибраторы, формирователи, триггеры, счетчики…
Сердце молодого гасконца билось так сильно, что готово было разорвать ему грудь Видит бог, не от страха — он и тени страха не испытывал — а от возбуждения.
А. Дюма . Три мушкетера
Из описания устройства логических элементов в главе 15 ясно, что любой логический элемент есть в сущности не что иное, как усилитель. Мы даже упоминали, что логические микросхемы иногда используют в качестве аналогового усилителя.
В самом деле, с формальной точки зрения между простым многокаскадным усилителем без обратной связи и логическим инвертором разницы нет никакой. Правда, аналоговым усилителем логический элемент будет очень плохим — коэффициент усиления по напряжению у КМОП-элементов составляет всего несколько десятков, в отличие от сотен тысяч и миллионов у операционных усилителей и компараторов, и даже введение обратной связи не поможет получить качественный сигнал. Если кого-то интересует такое экзотическое использование логических микросхем, то в упоминавшейся книге [18]Пусть вас слово «платиновый» не пугает — самой платины там так мало, что стоит такой датчик не дороже медного, тем более что в датчиках используют медь высокой степени очистки, которая ненамного дешевле драгметаллов.
есть схема линейного усилителя на КМОП-элементах, можете поэкспериментировать.
Но зато логические микросхемы идеально приспособлены для работы в схемах, так сказать, «полуаналоговых» — т. е. схемах генераторов, формирователей и преобразователей импульсов. Ими мы сначала и займемся.
Генераторы
До сих пор мы рассматривали только два способа построения генераторов колебаний: один раз это был релаксационный генератор коротких импульсов на однопереходном транзисторе (см. рис. 10.3) для фазового управления тиристорами, второй раз — аналоговый генератор синусоидальных колебаний на ОУ (см. рис. 12.6). Был еще «зуммер» из реле, приведенный на рис. 7.3. Теперь рассмотрим релаксационные генераторы прямоугольных импульсов на логических микросхемах.
* * *
Подробности
Релаксационными, в отличие от гармонических, называются колебания в системах, где существенную роль играет рассеяние энергии, или, как говорят физики, ее диссипация. Типичными примерами систем с гармоническими колебаниями служат описанные в любом школьном учебнике физики колебательный контур или механический маятник. В них энергия непрерывно переходит из одной формы в другую, и если не учитывать потери на нагревание проводов в контуре или потери на трение в маятнике, то эти колебания могут продолжаться бесконечно без всякой подпитки извне. В отличие от таких систем, релаксационные генераторы без внешнего источника неработоспособны, в них энергия, запасенная в накопителе (например, конденсаторе), не переходит в другую форму, а теряется — переходит в тепло. Для возникновения релаксационных колебаний обязательно требуется наличие нелинейного порогового элемента, меняющего свое состояние скачком, а также определенный характер обратных связей (о чем далее). Релаксационные генераторы обычно выдают скачкообразный сигнал (прямоугольный, как в большинстве генераторов далее, или импульсный, как в генераторе на однопереходном транзисторе), но не всегда. Так, генератор синусоидальных колебаний из главы 12 также является релаксационным, но с помощью хитро подобранных характеристик цепей обратной связи сделано так, что форма сигнала меняется по синусоидальному закону.
* * *
Но сначала рассмотрим такой генератор на ОУ (рис. 16.1, а). Работает он следующим образом. Мы помним, что в первый момент времени заряжающийся конденсатор эквивалентен короткозамкнутой цепи. Поэтому после включения питания коэффициент усиления по инвертирующему входу окажется равен бесконечности, и на выходе ОУ будет фактически положительное напряжение питания. Конденсатор начнет заряжаться через резистор R1, но в силу большого коэффициента усиления ОУ напряжение на выходе останется вблизи напряжения питания, пока потенциал на конденсаторе не достигнет порога, заданного делителем R2/R3, — в данном случае половины положительного напряжения питания. Тогда выход ОУ скачком перебросится в состояние, близкое к отрицательному напряжению питания, и конденсатор начнет разряжаться через тот же резистор R1. Напряжение на неинвертирующем входе станет равным половине отрицательного напряжения питания, и, чтобы привести схему в первоначальное состояние, конденсатору придется перезарядиться до этого напряжения. Затем все повторится сначала. Таким образом, на выходе мы получим меандр с периодом, который определяется параметрами RC-цепочки (см. формулу на рис. 16.1, а). На инвертирующем входе, между прочим, при этом будет напряжение, очень близкое к треугольной форме, которое можно где-нибудь использовать, если подключить потребителя через отдельный развязывающий повторитель на другом ОУ.
Рис. 16.1. Схема генератора на ОУ (а) и зуммера на реле (б)
* * *
Заметки на полях
Отметьте, что если исключить из рассмотрения интегрирующую цепочку R1C1, то остальная часть схемы есть упрощенный вариант компаратора с гистерезисом, приведенного на рис. 12.10. Для того чтобы генератор работал от одного напряжения питания, придется неинвертирующий вход подключить в точности так же, как там — к искусственной средней точке. Подобные генераторы ранее были широко распространены, и поныне разными производителями выпускается специальная микросхема, которая известна под названием «таймер 555» и может служить как в качестве генератора, так у\ одновибратора, т. е. формирователя однократных импульсов, в том числе большой длительности.
* * *
Теперь посмотрим, что нужно сделать, чтобы построить такой генератор на логике.
Сначала обратимся к зуммеру на рис. 7.3 и перерисуем его в виде рис. 16.1, б. В таком виде в схеме легко узнать релейный инвертор (см. рис. 14.3, крайний элемент справа), у которого в данном случае выход управляет входом. Не получится ли выполнить тот же самый фокус, если замкнуть вход с выходом у обычного инвертора в интегральном исполнении? К сожалению, нет — такое включение просто выведет инвертор в линейный режим, при котором на выходе установится половина питания. А почему? А потому, что логические элементы, грубо говоря, слишком быстродействующие.
Теория гласит, что для получения устойчивых колебаний необходимо, чтобы присутствовали обе разновидности обратной связи, причем действие отрицательной обратной связи (ООС) должно отставать от действия положительной (ПОС). Именно это и происходит и в схеме генератора на основе компаратора, за счет использования RC-цепочки, и в зуммере за счет механической инерции деталей. Действие только одной ПОС приведет к тому, что выход устройства «зависнет» в одном из крайних положений, а одной только ООС — к тому, что на выходе установится некое среднее состояние равновесия. Сравните поведение одновибраторов, рассмотренных в этой главе далее, в которых наличествует только ООС, и RS-триггеров (в конце главы), в которых присутствует только ПОС. А вот вместе они дадут то, что надо.
Существует огромное количество схем мультивибраторов — т. е. генераторов прямоугольных колебаний, реализующих эти теоретические положения. Если кому любопытно, то не менее десятка разнообразных схем можно найти только в одной книге [11]Геркон расшифровывается как «герметизированный контакт». Герконы выпускаются и отдельно и представляют собой стеклянную трубочку с двумя или тремя выводами от запаянного в нее контакта (простого или перекидного), защищенного таким образом от влияния внешней среды. Контакт под воздействием внешнего магнитного поля — например, при поднесении постоянного магнита — может замыкаться и размыкаться. Герконовые реле обычно представляют собой подобный геркон, на который намотана обмотка с теми или иными параметрами.
, и этим их многообразие далеко не исчерпывается. Я приведу лишь одну из них, выбранную из многих из-за минимального количества задействованных компонентов, и два ее варианта, разница между которыми заключается в используемых элементах («И-НЕ» или «ИЛИ-НЕ»).
Схема на рис. 16.2, а базовая. При включении питания она начинает работать сразу и, как и остальные схемы подобного рода, выдает меандр с размахом от 0 до U пит . Частота на выходе определяется параметрами R1 и С1: период Т ~= 2R1·C1. Схема устойчиво работает при величине резистора R1 от нескольких килоом до 10 МОм, что составляет достаточный диапазон для того, чтобы избежать искушения при малых частотах использовать электролитические конденсаторы — напомним, что они очень нестабильны при работе во времязадающих цепях.
Резистор R2 в работе схемы почти не участвует и нужен только для того, чтобы оградить защитные диоды микросхемы от перегрузки током разряда конденсатора С1. Величина его может изменяться от сотен ом до нескольких килоом, при условии, что он много меньше R1. Его можно и вообще исключить из схемы, отчего он показан пунктиром (о необходимости установки этого резистора мы будем говорить позже). Конденсатор С1 может применяться любой, с емкостью не меньшей нескольких десятков пикофарад. Указанные параметры элементов позволяют получить частоты от сотых долей герца вплоть до верхней границы рабочей частоты «классических» КМОП-микросхем в 1–2 МГц. Для получения более высоких частот целесообразно использовать быстродействующие серии КМОП, а не ТТЛ, т. к. для последней ограничения гораздо жестче — например, резистор R1 не должен выходить за пределы 0,5–2 кОм.
Рис. 16.2. Схемы мультивибратора на логических элементах:
а — базовая схема на инверторах,
б — схема на двухвходовых элементах с управлением;
в — диаграмма состояний схемы на двухвходовых элементах «И-НЕ»;
г — диаграмма состояний схемы на двухвходовых элементах «ИЛИ-НЕ»
Если в схеме на рис. 16.2, б объединить входы логических элементов между собой, она превратится в схему на рис. 16.2, а. Но дополнительные входы можно использовать и для управления генерацией. Нередко возникает потребность остановить генерацию на время и при этом обеспечить определенный логический уровень на выходе генератора. Эти задачи как раз и решаются с помощью дополнительных входов. Диаграммы состояния выхода в зависимости от состояния входов при использовании разных типов логических элементов приведены на рис. 16.2, в и г.
Запоминать эти диаграммы нет необходимости, если обратиться к рис. 15.8. Из него следует, что единица на входе «И-НЕ» и ноль на входе «ИЛИ-НЕ» являются разрешающими уровнями, следовательно, при этих уровнях на управляющих входах наша схема будет функционировать, как если бы входы элемента были объединены. При запрещающих же уровнях на входе уровень на выходе будет устанавливаться так, как если бы никаких RC-цепочек не существовало.
Простейшее применение схемы с управлением — решение задачи приостановки генератора на время переходных процессов при включении питания, для чего по управляющему входу нужно поставить интегрирующую RC-цепочку, как в схеме триггеров с предустановкой (см. далее рис. 16.9). Другое применение — генерация пачек импульсов с меньшей частотой, если управляющий вход одного генератора присоединить к выходу другого. На рис. 16.3 показана схема звуковой сигнализации на одной микросхеме 561ЛА7 и одном транзисторе. Это пример случая, когда требуется определенный логический уровень при выключенной генерации, чтобы избежать протекания постоянного тока через динамик и не ставить при этом разделительный конденсатор.
Рис. 16.3. Схема звуковой сигнализации с динамиком на выходе
Схема выдает сигнал около 500 Гц с периодом повторения около 0,5 с, если на управляющий вход подать сигнал высокого уровня. При сигнале низкого уровня на управляющем входе на выходе будет также низкий уровень, и постоянный ток через динамик не течет. Транзисторный каскад лучше питать нестабилизированным напряжением от входа стабилизатора питания микросхем, потому что тогда достаточно мощные импульсы тока через динамик будут фильтроваться стабилизатором и не окажут вредного воздействия на остальные элементы схемы. Динамик можно заменить и на пьезоэлектрический звуковой излучатель, тогда мощный транзистор ставить необязательно (но вовсе без транзистора не обойтись, звук будет слишком тихим). А о пьезоэффекте мы сейчас подробнее и поговорим.
Кварцевые генераторы
Точность поддержания частоты в приведенных схемах невысока. Частота «уходит» примерно на 10–20 % при изменении напряжения питания от 5 до 15 В и в достаточно большой степени зависит от температуры (использование высокостабильных резисторов и конденсаторов не поможет, и потому нецелесообразно). Чтобы избавиться от этого эффекта, необходимо применить кварцевый резонатор, в просторечии — просто кварц.
Здесь не место для того, чтобы подробно излагать принципы работы кварцевого (или реже употребляемого керамического, который обладает несколько меньшей стабильностью) резонатора — это нужно делать в курсе радиотехники в сравнении со свойствами колебательного контура. Вкратце дело заключается в следующем: если приложить напряжение к кварцевому параллелепипеду, выпиленному из целого кристалла в определенной ориентации относительно его осей, то кристалл деформируется — очень не намного, но все же достаточно, чтобы на этом принципе даже делать прецизионные манипуляторы для электронных микроскопов или выталкивающие жидкость поршни в струйных принтерах Epson. Это так называемый обратный пьезоэлектрический эффект. Имеет место и противоположный прямой эффект — если такой кристалл деформировать, то у него на гранях появляется разность потенциалов, — явление используется в специальных тензометрических кварцах.
Получается, что если мы включим такой кристалл в схему с обратной связью, то она начнет генерировать колебания, причем частота генерации будет зависеть исключительно от размеров кристалла — и ни от чего больше! Как, спросите вы, даже от температуры не будет зависеть? Вот именно — пьезоэлектриков, как называют вещества, ведущие себя подобно кварцу, много, но чаще всего используют именно кварц, т. к. он помимо пьезоэлектрических свойств, обладает еще и одним из самых низких на свете температурных коэффициентов расширения.
В результате кварцевые генераторы без каких-либо дополнительных ухищрений дают погрешности порядка 10-6 долей от номинальной частоты. Такие доли обозначаются как ррт (part per million), а иногда просто как 10-6. Температурная нестабильность хороших кварцев не превышает долей или единиц ррт. Это значит, что уход часов с таким генератором составляет не более 1 секунды в сутки. Правда, для того чтобы реализовать потенциал кварцевых резонаторов полностью, нужны специальные схемы включения, иногда довольно громоздкие (обычно их делают на дискретных элементах), но и схемы на цифровых инверторах, приводимые далее, дают результат не хуже примерно 10 4 во всем диапазоне питающих напряжений и температуры.
На кварцах работают все бытовые электронные часы, и вообще в любом современном бытовом электронном устройстве вы, скорее всего, найдете кварц, а иногда и не один. Кварцы выпускают на определенные частоты, при их приобретении следует обращать внимание на возможное отклонение частоты от номинальной, которая может составлять от долей ррт до десятков и даже сотен ррт. Если нужна повышенная точность, то можно приобрести специализированные очень стабильные резонаторы с погрешностью начальной установки до 10-7, выпускаются и готовые генераторы на разные частоты (особенно большой выбор предлагает фирма, название которой обычно ассоциируется совсем с другими продуктами, — Epson, приобретшая в свое время компанию, известную своей часовой торговой маркой Seiko).
Большинство кварцевых генераторов в цифровой технике строят по одной и той же схеме, которая очень проста и требует всего одного инвертора, резистора и двух конденсаторов. Схема эта показана на рис. 16.4, а. Чтобы не перегружать выход (это будет влиять на стабильность), нагружать такой генератор можно только на один-два КМОП-входа, поэтому обычно на выходе ставят еще и буферный элемент. Если же частота с выхода подается, например, только на вход КМОП-счетчика, то его можно не ставить. Параметры всех элементов можно менять в довольно больших пределах — так, емкость конденсаторов может меняться от 10 до 100 пФ (как рассчитать значение емкости более точно, см. «Подробности» далее), причем они не обязательно должны быть одинаковыми, — изменением С1 можно подстраивать частоту в пределах 4–5 знака после запятой. Сопротивление резистора R1 может меняться от 1 до 20 МОм, R2 — от нуля до сотен килоом (меньшие значения получаются при более высокочастотных кварцах). Схема потребляет несколько десятков микроампер при напряжении питания 5 В и устойчиво работает для кварцев с частотами от десятков килогерц до 1 МГц для «классической» КМОП и до 10 МГц для КМОП-элементов из быстродействующих серий. Правда, с некоторыми старыми отечественными кварцами (вроде РК-72) могут быть проблемы.
Рис. 16.4. Схемы кварцевых генераторов на КМОП -элементах
Инвертор, естественно, может представлять собой и просто инвертор, и многовходовой логический элемент с объединенными входами. Во втором случае один из входов можно использовать для запуска и остановки генерации, как в схеме на рис. 16.2, б.
* * *
Подробности
Конденсаторы С1 и С2 в схеме на рис. 16.4, а рассчитывают, исходя из номинальной емкости нагрузки С н , которая указывается для каждого кварцевого резонатора. Если она неизвестна, то можно ориентироваться на значение 12,5 пФ для «часовых» кварцев и на значение 16–32 пФ для кварцев частотой 1-16 МГц. Номинал С каждого из конденсаторов (при условии их равенства) можно рассчитать по приблизительной формуле С = 2 С н — 10 пФ, где 10 пФ — «среднепотолочное» значение емкости монтажа плюс емкость входа/выхода инвертора. Таким образом, для «часовых» кварцев эти емкости должны быть порядка 15 пФ, а для более высокочастотных — 22–56 пФ. Для микросхем вроде часов реального времени, где конденсаторы уже имеются в составе микросхемы, указывается номинальная нагрузочная емкость внешнего кварцевого резонатора. Правильно подобранное значение емкости гарантирует более точное соответствие частоты генератора номинальной, но это не значит, что при других значениях емкости генератор не заработает, — чем больше значение емкостей, тем больше и потребляет схема, но и тем быстрее она «заводится». Указанные на схеме значения 22 пФ оптимальны, если использовать резонатор «не глядя».
Кварцевые резонаторы имеют предельно допустимую мощность рассеяния, которая невелика: от 1–3 мкВт для «часовых» кварцев в цилиндрических корпусах 6x2 или 8x3 мм до 30–50 мкВт в низких прямоугольных корпусах (HC-49S) и 1–2 мВт для кварцев в стандартных прямоугольных корпусах типа HC-49U. Превышение допустимой мощности еще не означает выхода резонатора из строя (хотя может случиться и такое — смотря, насколько превысить), но стабильность генератора снижается. Значение рассеиваемой мощности на кристалле W можно грубо прикинуть, исходя из падения напряжения на резонаторе: W = U к · I к , где I к — ток через резонатор, который определяется в основном резистором R2. Его величина подсчитывается, исходя из напряжения на выходе инвертора U вых : I к = U вых / R2 = U пит /2 R2 (делитель 2 появляется, т. к. на выходе мы имеем меандр, а не постоянное напряжение). Рассчитать U к , форма которого близка к синусоидальной, непросто, но его можно измерить экспериментально, — для «часового» кварца в схеме по рис. 16.4, а действующее значение UK равно примерно 0,05 от напряжения питания. Итого при номиналах резисторов и конденсаторов, близких к указанным на схеме, мощность на «часовом» резонаторе составляет около 1 мкВт при напряжении питания 5 В и линейно растет с напряжением питания, поэтому при 15 В самые миниатюрные кварцы лучше не ставить.
* * *
Недостатком схемы на рис. 16.4, а является то, что на низких частотах она достаточно долго «заводится» при включении — установление режима для «часового» кварца 32 768 Гц может занимать секунды, в зависимости от значения емкостей, и в это время схема потребляет довольно большой ток — до 15 мА. Этого недостатка лишена более сложная схема на рис. 16.4, б, которая, однако, работает только при частотах в десятки килогерц, т. е. ориентирована на «часовые» кварцы. Потребление такой схемы при напряжении питания 3,3 В и использовании указанных на схеме элементах серии 74НС составляет 180 мкА (3 мА в момент включения), а время выхода на режим при включении питания или подаче разрешающего высокого уровня на вход «Пуск/Стоп» не превышает 0,2–0,3 с. При отключении подачей низкого уровня на вход «Пуск/Стоп» схема потребляет меньше 1 мкА. В этой схеме резонатор работает в более щадящем режиме, чем в схеме на рис. 16.4, а.
Специально для измерения температуры производятся термочувствительные кварцы, обладающие чувствительностью порядка 50–90 ррт изменения частоты на каждый градус изменения температуры. Кварцы эти выпускают на разные частоты: 30–40 кГц, 5 МГц, 10–40 МГц и пр. Если заменить в схеме на рис. 16.4, б «часовой» кварц аналогичным термочувствительным (например, отечественным РКТ-206 с частотой 32,7 кГц), то получится отличный малопотребляющий датчик температуры с частотным выходом и отрицательным наклоном зависимости частоты от температуры. Зависимость эту для бытовых применений можно считать линейной, однако для прецизионных измерений температуры (для чего, собственно, такие кварцы и существуют) приходится ее аппроксимировать полиномом 2-й и даже 3-й степени.
* * *
Заметки на полях
Кстати, мало кто знает, но в случае, если под рукой нет подходящего кварца, схему на рис. 16.4, а вполне можно «завести», просто заменив резонатор малогабаритной индуктивностью. То же относится и к встроенным генераторам микроконтроллеров, которые организуются по аналогичной схеме. Частоту можно грубо прикинуть, если учесть, что постоянная времени LC-контура равна √LC, где в качестве величины С нужно подставить сумму емкостей обоих конденсаторов. Тогда частота будет примерно равна единице, деленной на удвоенную величину этой постоянной. Естественно, главное преимущество кварца — высокая стабильность — при этом пропадет, зато можно менять частоту, в том числе и плавно.
Формирователи импульсов
Все приведенные схемы генераторов выдают меандр, в котором длительность паузы приблизительно равна длительности импульса, т. е. скважность их равна примерно двум (на величину скважности влияет и величина резистора R2 — см. схемы на рис. 16.2). Но нам могут потребоваться симметричные импульсы со скважностью, равной двум с большой точностью или вообще с другим значением скважности. На рис. 16.5 показана схема, которая формирует импульсы со скважностью ровно 2 и 4 из исходного сигнала с любой скважностью. В ней используется делитель частоты на два (счетный триггер) — элемент, который мы еще «не проходили», но будем рассматривать далее, а пока он приводится без пояснений. Диаграммы выходного напряжения показаны на рис. 16.5 внизу.
Рис. 16.5. Схема формирователя последовательности со скважностью 2 и 4
Следует отметить, что за счет задержки сигнала в триггере в момент, соответствующий фронту второго по счету сигнала исходной последовательности, на втором выходе может возникнуть короткая «иголка», т. к. спад импульса на выходе триггера наступит несколько позже наступления этого фронта. Она не страшна для статических схем (например, дешифраторов с выводом на индикаторы) или для управления внешними достаточно инерционными устройствами, но может вызвать срабатывание другого триггера или одновибратора (см. далее), если к его входу подключить выход такой схемы. Если это критично, то в подобных схемах вместо простого счетного триггера обычно используют специальные синхронные счетчики (о них также далее). Разумеется, если требуется только симметричный меандр, то одного триггера достаточно, элемент «И-НЕ» можно исключить.
Микросхема 561ТМ2 (CD4013) содержит два триггера, поэтому схему легко дополнить, получив на выходе другие значения частоты и скважности. Применяя дополнительные логические элементы, можно получить 4 выхода, на каждом из которых фаза сдвинута ровно на полпериода исходной частоты, — такие схемы применяют, например, для управления шаговыми двигателями или для управления елочной гирляндой «бегущие огни» (попробуйте составить такую схему сами!).
Большое значение на практике имеют формирователи коротких импульсов, называемые еще схемами выделения фронтов. На рис. 16.6, а приведена схема, которая делает это, как положено, используя эффект задержки сигнала в логическом элементе. При поступлении положительного фронта на вход он сразу же переключает выход последнего элемента «И-НЕ» в состояние логического нуля. На выходе цепочки из трех инверторов также возникнет логический ноль, который вернет выход в единичное состояние, но это произойдет не сразу, а спустя время, равное утроенной задержке срабатывания логических элементов. Поэтому на выходе возникнет короткая «иголка», достаточная по длительности (задержка-то тройная!) для надежного срабатывания других элементов схемы. Длительность таких импульсов составит для КМОП несколько десятков или сотен наносекунд. При желании можно выделить не фронт, а спад импульса (и получить при этом на выходе «иголку» положительной полярности), для этого нужно использовать элементы «ИЛИ-НЕ». А если использовать «Исключающее ИЛИ», то можно получать положительные импульсы при каждом переключении сигнала: и по фронту и по спаду.
Все здорово, но схема уж больно громоздкая для такой простой функции — целый корпус! К тому же столь короткие импульсы очень сложно наблюдать на осциллографе. Поэтому на рис. 16.6, б и в приведены гораздо более экономичные схемы, которые делают то же самое, но с нарушением чистоты цифровых принципов, ибо являются наполовину аналоговыми. Длительность импульса на выходе схем выделения фронтов при указанных на схеме номиналах составит около 10 мкс.
А на рис. 16.6, г показано использование интегрирующей цепочки для задержки импульса на фиксированное время. Диаграмм я не привожу, т. к. работа схемы понятна — передний фронт импульса задерживается на время, необходимое для заряда конденсатора до порога срабатывания инвертора. Задний фронт импульса, соответственно, задерживается на время разряда. Однако если при этом входной импульс сравним по длительности с постоянной времени RC, то на выходе импульс может быть уменьшенной длительности, а если входной импульс еще короче — выходной может вообще пропасть, поэтому такой схемой на практике пользуются редко, предпочитая одновибраторы, о которых мы сейчас и поговорим.
Рис. 16.6. Схемы формирователей импульсов:
а — стандартная схема выделения фронтов;
б , в — схемы с использованием дифференциальных RC-цепочек;
г — простейшая схема задержки
Одновибраторы
Одновибратор — это устройство, которое по внешнему сигналу выдает один-единственный импульс определенной длительности, не зависящей от длительности входного импульса. Запуск происходит либо по фронту, либо по спаду входного импульса. Для одновибратора без перезапуска возникновение на входе нового перепада напряжений той же полярности во время действия выходного импульса игнорируется, для одновибратора с перезапуском длительность выходного импульса в этот момент начинает отсчитываться заново. Как и в случае мультивибраторов, существует огромное количество схемотехнических реализаций этого устройства.
Мы подробно изучим вариант схемы без перезапуска, который получается небольшой модификацией схем выделения фронта по рис. 16.6, б и в — нужно только ввести в них положительную обратную связь, которая будет фиксировать состояние выхода на время заряда конденсатора.
Схема на рис. 16.7, а работает следующим образом. В состоянии покоя на выходе схемы состояние логической единицы, т. к. вход второго (правого) элемента «И-НЕ» заземлен через резистор R. Поскольку на входе тоже логическая единица, то на выходе первого (левого) элемента «И-НЕ» логический ноль, и конденсатор разряжен. При возникновении на входе схемы отрицательного уровня, на выходе первого элемента типа «И-НЕ» возникает состояние логической единицы, которое через дифференцирующую цепочку RC передается на вход второго элемента, так что на выходе схемы и, соответственно, на втором входе первого элемента оказывается логический ноль. Это состояние схемы, уже независимо от уровня входного сигнала, будет устойчиво: обратная связь как бы перехватила и зафиксировала уровень нуля на выходе на время, пока конденсатор заряжается от выхода первого элемента через резистор R. Через время, примерно равное произведению RС, конденсатор зарядится до порога срабатывания выходного элемента «И-НЕ», и выход схемы скачком перейдет обратно в состояние логической единицы по выходу опять же независимо от состояния входа.
Рис. 16.7. Одновибраторы
Если к этому времени по входу схемы уже установился уровень логической единицы, как бывает в большинстве случаев (одновибраторы в основном предназначены для работы с короткими импульсами на входе), то первый элемент также перебросится в начальное состояние, и конденсатор С быстро разрядится через ограничительное сопротивление 1 кОм (если оно установлено, см. далее) и входные защитные диоды второго элемента. Схема придет в начальное состояние в ожидании следующего запускающего импульса. Длительность импульса на выходе всегда будет примерно равна RC, даже в случае, если входной импульс длиннее (в этом случае конденсатор просто разрядится не сразу, а только тогда, когда закончится входной импульс). Совершенно аналогично работает схема на рис. 16.7, б, только с противоположными полярностями импульсов.
Главное применение одновибраторов — в качестве таймера, который формирует сигнал определенной длительности вне зависимости от работы всей остальной схемы. Естественно, о высокой точности выдержки времени тут говорить не приходится, но часто этого и не требуется. Например, если вы хотите ограничить по времени тревожный сигнал, подающийся с помощью устройства по рис. 16.3, то целесообразно управлять им от одновибратора, который запускается, скажем, нажатием кнопки. В одновибраторах для больших выдержек не возбраняется использовать электролитические конденсаторы, хотя даже при использовании только керамических или полимерных типов с максимальными емкостями порядка 1–3 мкФ вполне достижимы выдержки в несколько десятков секунд.
Одновибраторы с перезапуском, в которых выходной импульс в случае прихода нового импульса продлевается, мы проектировать не будем, потому что они более громоздкие, и в этом случае проще использовать готовую микросхему 561АГ1.
Возможно, вы уже сообразили, что одновибратор может служить эффективным средством подавления дребезга механических контактов (см. также главу 15 и эту главу далее), поскольку будет запускаться только от первого перепада уровней, причем даже независимо от того, пролетают подвижные контакты весь промежуток «туда-обратно» или нет. Главным его преимуществом в этом качестве, несмотря на довольно сложную схему, является возможность использования двухвыводной кнопки, а не переключающей. Вход одновибратора при этом соединяют с питанием (в схеме рис. 16.7, а) или с «землей» (в схеме рис. 16.7, б) через резистор, а кнопкой замыкают этот вход, соответственно, на «землю» или на питание. Недостатком такого варианта является то, что приходится четко рассчитывать необходимую длительность импульса, иначе дребезг можно пропустить. Вторым недостатком схемы с одновибратором является неопределенность ситуации с размыканием ранее замкнутой кнопки, т. к. если кнопка удерживается в замкнутом состоянии дольше, чем длится импульс, то из-за дребезга при размыкании одновибратор может выдать импульс повторно.
О токоограничивающих резисторах в импульсных схемах
В схемах генераторов на рис. 16.2, формирователей на рис. 16.6 и одновибраторов на рис. 16.7 показан пунктиром дополнительный резистор, ограничивающий ток через защитные диоды микросхемы. С функциональной точки зрения он не требуется, но дело в том, что дифференцирующая RC-цепочка, которая составляет основу этих схем, вырабатывает импульсы не только по нужному переключению сигнала, но и по противоположному, и при этом импульсы выходят за пределы питания, в чем вы можете убедиться, если взглянете на рис. 5.9.
Посмотрим, когда в этих схемах можно обойтись без токоограничивающих резисторов. Типовой допустимый постоянный ток через защитные диоды составляет порядка 10 мА для «классической» КМОП (20–30 мА для быстродействующих серий). Мы знаем, что в режиме короткого замыкания элемент «классической» КМОП выдает примерно 5 мА при 5 В питания, т. е. для серии 561 при низких напряжениях питания ограничительных резисторов не требует. Но та же серия при напряжениях питания 9 В и выше, и тем более серии быстродействующей КМОП, которые гораздо мощнее по выходу, могут перегружать защитные диоды. Тем не менее, как мы знаем, у диодов достаточно высокая перегрузочная способность, если только они не перегреваются, поэтому короткие импульсы им все равно не страшны. Так что при больших выдержках времени или при низких частотах при большом напряжении питания такой резистор лучше поставить, а в остальных случаях можно без него обойтись.
Триггеры, регистры и счетчики
Триггеры и построенные на их основе счетчики и регистры играют огромную роль в электронике. В состав любого процессора, кроме собственно АЛУ на основе комбинационной логики (рассмотренных в главе 15 сумматоров), входят регистры и память, которые являются прямыми родственниками счетчиков, — потому что для построения и тех и других используются триггеры. Вот со знакомства с классическими типами триггеров мы и начнем.
Между прочим, одно из главных «неэлектронных» значений слова «trigger» — спусковой крючок у огнестрельного оружия. В электронике триггер — это устройство для записи и хранения информации в количестве одного бита. Существуют и многостабильные триггеры, которые могут хранить более одного бита, но на практике они почти не используются. Любая элементарная ячейка памяти, будь то магнитный домен на пластинах жесткого диска, отражающая область на поверхности CD-ROM, или конденсаторная ячейка электронного ОЗУ, обязательно обладает триггерными свойствами, т. е. может хранить информацию спустя еще долгое время после того, как она была в нее введена.
Самый простой триггер
Самый простой триггер можно получить, если в схемах одновибраторов на рис. 16.7 удалить RC-цепочку и соединить напрямую выход первого элемента со входом второго. Если схема находится в состоянии, при котором на выходе уровень логической единицы, то кратковременная подача отрицательного уровня на вход, как и в случае одновибратора, перебросит выход в состояние логического нуля. Но теперь уже нет конденсатора, который осуществляет отрицательную обратную связь и в конце концов возвращает схему в исходное состояние, потому в таком состоянии схема останется навечно, если мы что-то не предпримем. Чтобы вернуть ее в исходное состояние, надо подать точно такой же сигнал, но на вход второго элемента, который (вход) в схеме одновибратора у нас отсутствует. Если мы его введем, то получим симметричную схему с двумя входами, которые обозначаются буквами R и S (от слов Reset и Set, т. е. «сброс» и «установка»). Само же устройство носит название RS-триггера. Оба варианта такой схемы на элементах «И-НЕ» и «ИЛИ-НЕ» показаны на рис. 16.8.
Рис. 16.8. Схемы триггеров на элементах «И-НЕ» ( а ) и «ИЛИ-НЕ» ( б )
Нет нужды перебирать все состояния этих схем и приводить соответствующие таблицы истинности, нужно только твердо запомнить, что подача импульса на вход R всегда устанавливает на прямом выходе Q состояние логического нуля. (Легко сообразить, что если поменять все обозначения местами: R на S, а прямой выход Q на инверсный Q¯, то в схеме ничего не изменится.)
Вход S, естественно, здесь означает ровно противоположное — установку выхода Q в состояние логической единицы, но, в отличие от входа R, который всегда означает обнуление, вход S в различных устройствах может использоваться и в несколько иных целях, а чаще вообще отсутствует. Входы R и S могут управляться различными полярностями сигнала в зависимости от построения триггера: для схемы на элементах «И-НЕ» по рис. 16.8, а — это низкий уровень, поэтому входы R и S обозначены с инверсией. Уровни, которые меняют состояние триггера, называются активными, — так, для схемы по рис. 16.8, а активным является низкий уровень. «Более правильная» схема в этом смысле — на элементах «ИЛИ-НЕ» по рис. 16.8, б, в ней активный уровень соответствует положительной логике, т. е. он высокий. Обратите внимание, что установка дополнительных инверторов по входу, казалось бы, превращает схему по рис. 16.8, а в схему по рис. 16.8, б, но только в смысле полярности активных уровней, прямой и инверсный выходы при этом останутся на своих местах.
В схемах RS-триггеров подача активного уровня на R-вход ничего не меняет, если выход Q уже был в состоянии логического нуля, то же самое справедливо для S-входа при выходе в состоянии логической единицы. Однако, пока на соответствующем входе действует напряжение активного уровня, подача активного уровня на второй вход запрещена. Это не означает, что триггер при этом сгорит, просто он потеряет свои триггерные свойства — на обоих выходах установится один и тот же уровень, а после одновременного снятия активного уровня со входов состояние будет неопределенным (точнее, будет определяться тем элементом, который переключится чуть позже другого). Неопределенное состояние будет и после подачи питания, поэтому нужно принимать специальные меры для установки схемы в нужное состояние после включения. Наиболее распространенной такой мерой является подача определенного уровня в начальный момент времени на один из нужных входов с помощью RC-цепочки.
Ввиду практической важности этого способа я приведу варианты соответствующей схемы, несмотря на ее очевидность (рис. 16.9). В них конденсатор в первый момент времени после подачи питания разряжен, и на входе логического элемента оказывается положительный уровень, который устанавливает триггер в состояние логического нуля на выходе Q. Затем конденсатор заряжается, и в дальнейшем RC-цепочка больше не оказывает влияния на работу схемы. Постоянную времени RC лучше выбирать побольше, чтобы к моменту зарядки конденсатора успели пройти все переходные процессы, — на схемах по рис. 16.9 она равна примерно 0,5 мс. Естественно, при этом следует позаботиться, чтобы на «настоящих» RS-входах к моменту окончания заряда конденсатора был неактивный уровень, иначе все пой дет насмарку.
Рис. 16.9. Схемы триггеров с предустановкой при включении питания: на двухвходовых элементах ( а ) и на трехвходовых элементах ( б )
Чтобы избежать нагромождения инверторов, можно в этой схеме использовать трехвходовые элементы (561ЛЕ10), как показано на рис. 16.9, б.
Естественно, RS-триггеры выпускают и в интегральном исполнении (561ТР2 содержит четыре простых RS-триггера). Все более сложные триггеры, а также счетчики в интегральном исполнении, обязательно имеют отдельные асинхронные RS- или хотя бы только R-входы. Причем соответствующий вход у любого устройства, его имеющего — от микропроцессоров до счетчиков — является асинхронным, т. е. вся система обнуляется в момент подачи импульса по входу R, независимо от того, что в этот момент она делает. Говорят еще, что вход Reset — вход обнуления — имеет наивысший приоритет. Именно это происходит, скажем, когда вы нажимаете кнопку Reset на системном блоке вашего компьютера.
Использование RS-триггера является самым кардинальным способом решения проблемы дребезга контактов. Стандартная схема показана на рис. 16.10, а, однако нет никакой нужды городить такую схему с резисторами, относительно которых еще нужно соображать, к чему их подключать (для варианта с «ИЛИ-НЕ» их пришлось бы присоединять к «земле», а не к питанию). На рис. 16.10, б показана упрощенная схема, которая работает точно так же, и при этом в ней можно использовать любые инверторы, в том числе и одновходовые. Общим недостатком схем «антидребезга» как с RS-триггерами, так и с использованием элемента «Исключающее ИЛИ» (см. рис. 15.8, б) является необходимость применения переключающей кнопки с тремя выводами, которых в продаже предлагается гораздо меньше, чем обычных замыкающих и размыкающих с двумя контактами. Попробуйте приспособить двухвыводную кнопку к любой из указанных схем, и вы сами придете к выводу, что это невозможно. Поэтому на практике часто приходится использовать схему «антидребезга» с использованием одновибратора (в том числе реализованного программными способами в микроконтроллерах) — при всех ее недостатках.
Рис. 16.10. Схемы «антидребезга» на RS -триггерах
D-триггеры
D-триггеры получили свое название от слова «delay», что означает «задержка». На самом деле существуют две их разновидности, формально различающиеся только тем, что первая из них управляется уровнем сигнала (статический D-триггер или триггер-защелка), а вторая — фронтом импульса (динамический D-триггер). Фактически же это разные по устройству и области использования схемы.
Для того чтобы отличить статический D-триггер от динамического, мы в обозначении на схеме для первого поставим букву L (от слова «level» — уровень), а для второго — букву «Е» (от слова «edge» — фронт). Эти обозначения не являются общепринятыми, и в дальнейшем мы их использовать не будем, только здесь — для наглядности. Микросхема 561ТМЗ содержит четыре статических триггера-защелки с общим входом синхронизации, а 561ТМ2 — два динамических D-триггера с раздельными дополнительными входами R и S (мы с ней уже знакомы — см. рис. 16.5). Если тип вообще не указывается, то обычно по умолчанию предполагается, что речь идет о динамических D-триггерах.
Статический D-триггер легко получить из RS-триггера путем небольшой модификации его схемы. Если из схемы на рис. 16.11, а исключить вход С (например, объединив входы каждого элемента и превратив их тем самым в простые инверторы), то получится довольно бесполезное устройство, которое на выходе Q будет просто повторять входные сигналы, а на втором выходе, соответственно — выдавать их инверсии. Наличие тактового входа С (от слова «clock», которое в цифровой электронике значит «тактовый импульс») все меняет.
Рис. 16.11. D-триггеры :
а — схема статического D-триггера;
б — схема динамического D-триггера на основе двух статических,
в — счетный триггер на основе динамического D-триггера
Если мы обратимся к диаграммам на рис. 15.8, а, то увидим, что при наличии на этом входе уровня логической единицы входные сигналы будут пропускаться на вход RS-триггера, и схема станет повторять на выходе Q уровни на входе D. Если же мы установим на входе С уровень нуля, то схема немедленно «зависнет» в состоянии выхода, соответствующем входному уровню непосредственно перед приходом отрицательного фронта на вход С, — т. е. запомнит его! Поэтому такой триггер и называют защелкой — при подаче на вход С короткого положительного тактового импульса он как бы «защелкивает» состояние входа. Статический D-триггер можно использовать в качестве буферного регистра для хранения данных — например, результатов счета импульсов на то время, пока идет сам процесс счета. Статическая энергозависимая память (SRAM) также, как правило, использует такие триггеры в качестве элементарных ячеек.
Динамические D-триггеры более универсальны, и область применения у них куда шире, чем у статических. Динамический триггер устроен более сложно. Один из способов построения динамического D-триггера из двух статических показан на рис. 16.11, б. Эта схема работает следующим образом: когда на общем входе С наличествует отрицательный уровень, состояние входа D переписывается на выход первого (слева) триггера, при этом второй триггер заперт. Сразу после положительного фронта на входе С это состояние переписывается во второй триггер и появляется на выходе Q, а первый триггер запирается. Таким образом, запоминание состояния общего D-входа происходит в точности в момент положительного перепада уровней и никогда больше. Если изменить местоположение инвертора и присоединить его ко входу второго триггера, а на первый триггер подавать тактовые импульсы напрямую, то срабатывание станет происходить по отрицательному фронту, и такой тактовый вход будет считаться инверсным. Для того чтобы получить дополнительные входы асинхронной принудительной установки триггера в нулевое и единичное состояние (R- и S-входы), нужно для обоих статических триггеров выходные (правые по схеме рис. 16.11, а) элементы сделать трехвходовыми и объединить соответствующие входы у обоих триггеров. Устанавливать по входам R и S только выходной триггер недостаточно (подумайте почему?).
А на рис. 16.11, в показана самая простая схема счетного триггера на основе динамического D-триггера, уже знакомая нам по рис. 16.5. Из описанного ясно, как она работает, — при каждом положительном перепаде на выход Q будет переписываться состояние противоположного выхода Q¯, т. е. система станет с приходом каждого тактового импульса менять свое состояние на противоположное, в результате чего на выходе мы получим симметричный (независимо от скважности входных импульсов) меандр с частотой, вдвое меньшей, чем входная. Такой триггер можно считать делителем частоты на два или одноразрядным двоичным счетчиком — в зависимости от того, для чего он используется. В отличие от всех остальных типов триггеров (а кроме описанных, распространены еще, например, и так называемые JK-триггеры, но мы их рассматривать не будем), счетные триггеры в интегральном исполнении отдельно не выпускаются (при случае их легко, как вы видели, соорудить, например, из D-триггеров), а выпускаются только готовые многоразрядные двоичные счетчики, из таких триггеров составленные. К рассмотрению счетчиков мы перейдем чуть позднее, а пока кратко остановимся на регистрах.
Регистры
Регистрами называют устройства для хранения одного двоичного числа. Количество разрядов в регистрах, выпускаемых отдельно, обычно не превышает восьми, но в составе других микросхем могут быть и регистры с большей разрядностью — вплоть до 128 или 256 битов в «продвинутых» микропроцессорах. Большинство типов электронных запоминающих устройств, вообще говоря, можно рассматривать как совокупность регистров. Но собственно регистры, как входящие в состав процессоров, так и выпускаемые отдельно, отличаются тем, что позволяют не только записывать и считывать информацию, но и производить некоторые простейшие операции, — например, сдвиг разрядов.
Простейший регистр — это упомянутый ранее статический D-триггер. Четыре таких триггера, входящих в микросхему 561ТМЗ, образуют четырехразрядный регистр с параллельной записью и считыванием, причем тактовый вход в этой микросхеме у всех четырех разрядов общий. Как и сам триггер, такой регистр называют «защелкой».
Если регистр-защелка позволяет осуществлять только параллельную запись, то последовательный регистр (пример — 561ИР2), наоборот, имеет возможность записи только через один вход, который является D-входом самого младшего разряда. Последовательный регистр является неким обобщением конструкции D-триггера. Работу динамического D-триггера можно рассматривать, как процесс сдвига информации от входа через первый триггер ко второму при поступлении соответствующих перепадов на тактовом входе. В последовательном регистре, который в простейшем случае представляет собой просто последовательное соединение таких триггеров, происходит нечто подобное — с каждым фронтом тактового импульса информация сдвигается от младшего разряда к старшему, при этом в младший разряд записывается состояние входа. Считывать информацию при этом можно из каждого разряда в отдельности, как и в случае регистра-защелки. Такие регистры получили еще название сдвиговых. Они широко используются для последовательного ввода и вывода информации — скажем, для вывода восьми битов через последовательный порт RS-232 достаточно записать их в такой регистр, а потом подать на него восемь тактовых импульсов с нужной частотой.
Сдвиговый регистр можно закольцевать — соединить выход старшего разряда со входом младшего и получить нечто подобное слону из анекдота, который засунул хобот себе в известное место. Однако в случае одного сдвигового регистра такое соединение приведет к тому же результату, что и для слона, т. е. оно довольно бесполезно практически, ибо мы без дополнительных ухищрений запись информации производить уже не сможем. Поэтому используют объединение параллельной и последовательной записи/считывания в одном устройстве (пример — четырехразрядный регистр 561ИР9 или восьмиразрядный 561ИР6).
* * *
Заметки на полях
Такие сдвиговые регистры с параллельной записью и последовательным считыванием информации — неотъемлемая часть устройств памяти большой емкости, без них чтение и запись в большие массивы запоминающих ячеек были бы невозможны. Имеются они, например, в матрицах цифровых камер. Интересное применение таких регистров — организация последовательного интерфейса SPI, широко используемого для скоростного обмена информацией между различными микросхемами (например, между энергонезависимой памятью вроде флэш-карточек и микроконтроллером).
В SPI наличествуют два восьмибитовых регистра, соединенных в кольцо входами/выходами, но они разделены пространственно: один регистр находится в одном устройстве, другой — в другом. Если подавать тактовые импульсы на оба регистра одновременно (это осуществляет одно из устройств — ведущее), то после подачи ровно 8 импульсов устройства обменяются содержимым своих регистров.
* * *
Счетчики
Самый простой счетчик можно получить, если соединить последовательно ряд счетных триггеров, как показано на рис. 16.12, а. У этой схемы есть две особенности. В первой из них легко разобраться, если построить диаграмму работы такого счетчика, начиная с состояния, в котором все триггеры находятся в состоянии низкого уровня на выходе («0000»). В самом деле, при подаче первого же импульса триггеры перейдут в состояние со всеми единицами («1111»)! Если строить диаграмму дальше, то Мы увидим, что последовательные состояния будут такими: «1110», «1101» и т. д. В этом легко узнать последовательный ряд чисел 15, 14, 13 — т. е. счетчик получился вычитающим, а не суммирующим.
А как можно получить суммирующий счетчик? Очень просто — надо ко входу каждого следующего триггера подсоединить не прямой выход предыдущего, а инверсный. Порядка ради можно тактовые импульсы подавать также через инвертор (рис. 16.12, б), тогда все разряды счетчика, включая самый младший, будут срабатывать по заднему (отрицательному) фронту входного импульса, а не по переднему (у «настоящих» счетчиков тактовый вход и делается инверсным). В этом случае будет все в порядке — входные импульсы будут суммироваться (см. диаграмму) и мы получим ряд последовательных состояний: «0000», «0001», «00010», «0011» и т. д.
* * *
Заметки на полях
Удивительная все же штука — электроника! Сначала мы получили полную аналогию между абстрактной математической теорией и состояниями переключателей на реле, теперь вот — между не менее абстрактным арифметическим счетом и последовательными состояниями счетчика на триггерах. Чем этот счетчик отличается от дикаря, раскладывающего на земле палочки? Ничем, кроме того, что он раскладывает не палочки, а уровни напряжений, причем выгодно отличается от первобытного сознания тем, что еще и «владеет» позиционной системой счисления. Начинаешь понимать, почему ученые середины прошлого века были так обольщены возможностями электронных схем, что даже заговорили о «машинном разуме». Но это уже другая тема…
* * *
Однако у счетчиков, построенных по такой простейшей схеме, есть один крупный недостаток, которого мы отчасти касались в этой главе. А именно — переключение триггеров происходит асинхронно, сигнал от входа должен пройти всю цепочку, пока на выходе также изменится уровень. Эти, казалось бы, незначительные задержки могут, однако, привести к существенным неприятностям вроде возникновения лишних «иголок» при дешифрировании состояний выхода. А при больших частотах входных импульсов, на пределе возможностей логических элементов, фронты сигналов на выходах могут приобрести совершенно хаотическое расположение относительно входного сигнала, так что дешифрировать состояние счетчика будет невозможно. Поэтому большинство счетчиков в интегральном исполнении делают по иным, синхронным, схемам, когда входной тактовый сигнал подается одновременно на все разряды, и фронты выстраиваются строго «по линеечке», независимо от задержек в том или ином триггере. Подробно изучать синхронные схемы мы не будем, т. к. самим нам их строить не придется, а здесь рассмотрим пару конкретных типов серийно выпускаемых счетчиков.
Рис. 16.12. Схемы асинхронных счетчиков на D -триггерах:
а — вычитающего; б — суммирующего
Первый из счетчиков, который мы рассмотрим подробно, — 561ИЕ10. Микросхема содержит два одинаковых четырехразрядных синхронных счетчика в одном корпусе. Разводка выводов ее показана на рис. 16.13, а, где вроде бы все понятно, кроме назначения вывода Е. Каждый четырехразрядный счетчик, входящий в состав этой микросхемы, работает так: если на выводе Е присутствует напряжение высокого уровня, то счетчик будет переключаться по положительному фронту на входе С.
Однако это касается только первого триггера, все остальные станут работать в соответствии с диаграммой по рис. 16.12, б, т. е. счетчик будет суммировать импульсы. Вывод Е тут является разрешающим («enable») для тактового входа С.
Однако если оставить на входе С напряжение логического нуля, а тактовые импульсы подавать на вход Е, то счетчик будет срабатывать от отрицательного перепада напряжений на этом входе, т. е. диаграмма его окажется в полном соответствии с диаграммой на рис. 16.12, б. В этом варианте вход С будет разрешающим для входа Е. Как видите, можно было бы поменять обозначения Е и С местами, однако в этом случае их следует дополнить знаком инверсии. Поэтому если вы хотите каскадировать два счетчика из этой микросхемы, получив в результате один восьмиразрядный счетчик, то выход Q3 первого счетчика нужно присоединить именно ко входу Е второго, подав на вход С потенциал логического нуля. Учтите, однако, что при этом обе половинки результирующей конструкции (старшая и младшая тетрады) станут работать асинхронно относительно друг друга, и срабатывание четырех старших разрядов будет происходить позднее, чем срабатывание младших.
Рис. 16.13. Разводка выводов счетчиков 561ИЕ10 ( а ) и 561ИЕ11 ( б ); организация автоматической предустановки счетчиков типа ИЕ11 ( в )
Вывод обнуления R обозначен без инверсии, что означает установку всех разрядов в состояние 0 при подаче высокого уровня на этот вход. Пока этот уровень присутствует, счетчик будет игнорировать любые изменения на тактовых входах. Максимальная рабочая частота микросхемы ИЕ10 при напряжении питания 5 В — 1,5 МГц, минимальная длительность импульса сброса — 250 нс. Кстати, при составлении таблицы в приложении 4 я с некоторым трудом разыскал для нее быстродействующий аналог, и соответствие счетчика 74хх393 (ИЕ19) микросхеме 561ИЕ10 неполное: хотя у них даже совпадают основные выводы корпуса, но ИЕ10 выпускается в корпусе с 16-ю выводами, а 74хх393 — с 14-ю. Отсутствующие в аналоге два вывода у ИЕ10 выполняют как раз функцию разрешения счета Е для двух половинок микросхемы, т. е. в аналоге он отсутствует, а входы тактовых импульсов С — инверсные.
Счетчик 561ИЕ11 более универсален, и управляющих выводов у него значительно больше, поэтому в 16-выводном корпусе умещается только один четырехразрядный счетчик. Разводка и обозначение выводов для него показаны на рис. 16.13, б. Не правда ли, можно запутаться? Однако на самом деле все гораздо проще, чем выглядит.
Если на выводах R, SE, Р¯ вх присутствуют низкие уровни напряжения, а на входе U/D¯ — высокий, то счетчик считает по положительному фронту на входе С, в точности так же, как это делает половинка ИЕ10 при высоком уровне на входе Е. Разберемся с действием остальных входов. Со входом обнуления R все понятно — при подаче на него высокого уровня все обнуляется. Вход U/D¯ служит для реверсии (потому такой счетчик еще называется реверсивным) — если на него подать напряжение логического нуля, то счетчик будет не суммировать, а вычитать, подобно тому, как это делает счетчик, показанный на рис. 16.12, а.
Самый интересный — вход SE («set enable» — разрешение установки). Если на него подать напряжение логической единицы, то в триггеры счетчика запишутся значения, установленные на входах S0-S3. Возможность такой параллельной предустановки значительно расширяет возможности счетчика. А вход и выход переноса Р¯вх и Р¯ вых предназначены для каскадирования счетчиков — для получения синхронного (в отличие от ИЕ10) счетчика большей разрядности, надо входы С у всех микросхем объединить, а выход Р¯ вых предыдущего счетчика соединить со входом Р¯вх следующего. У самого первого счетчика, естественно, Р¯вх присоединяется к «земле».
Сколько удовольствия можно получить от этой схемы! Я покажу только один из вариантов того, как ее использовать. Наличие возможности предустановки произвольного значения позволяет соорудить из этой микросхемы счетчик с любым коэффициентом деления входной частоты (в пределах емкости исходного счетчика) — если используется один корпус ИЕ11, то это значения от 1 до 16. В самом деле, если счетчик считает в стандартном режиме, то частота на выходах Qx будет равна входной, поделенной на 2, 4, 8 и 16. Принцип установки другого коэффициента проще всего показать на примере обратного (вычитающего) режима счета.
Арифметика тут простая: предположим, мы установили на входах предустановки число 3 (0011) и организовали схему так, чтобы в состоянии, когда все выходы Q i равны нулю, это число каждый раз записывалось бы в счетчик. Поскольку режим вычитающий, то при подаче тактовых импульсов на вход счетчик будет последовательно проходить состояния: предустановка (0011) — фронт тактового импульса (0010) — фронт тактового импульса (0001) — фронт тактового импульса (0000) — предустановка (0011) и т. д. То есть после каждых трех тактовых импульсов счетчик будет возвращаться в исходное состояние (если предустановки нет, то он это делает после каждых 16 импульсов).
Таким образом мы получили коэффициент деления, равный 3. Можно резюмировать: в вычитающем режиме коэффициент деления будет такой, каково число на входах предустановки. А что будет, если запустить счетчик в обычном режиме, суммирующем? Нетрудно подсчитать, что коэффициент деления при этом будет равен разности между максимально возможным коэффициентом (16) и установленным числом (3) — в данном случае 13.
Я так подробно на этом останавливаюсь, кроме всего прочего, еще и потому, что счетчики-таймеры в микропроцессорных системах (и в составе микроконтроллеров типа AVR, и в других микроконтроллерах, и системный счетчик в IBM PC, который без изменений воспроизводится во всех системах от Intel) работают совершенно аналогично ИЕ11. И для того чтобы успешно программировать микроконтроллерные системы, необходимо очень хорошо понимать принцип их работы, — без таймеров микроконтроллеры, можно сказать, вообще не нужны. Но в микроконтроллерах все остальное за нас уже сделали, а если вернуться к обычной интегральной логике, то сразу встают два вопроса. Первый их них звучит так: а откуда, собственно, считывать эту поделенную частоту?
При использовании вычитающего режима считывать частоту придется с того выхода счетчика, который соответствует реальной разрядности делителя, — по расписанной «диаграмме» видно, что в случае коэффициента, равного 3, старшие разряды вообще не используются. Это приемлемо, если мы хотим иметь раз и навсегда установленный коэффициент, но в общем случае неудобно — если коэффициент по ходу дела меняется. Поэтому нужно либо использовать суммирующий режим, при котором старший разряд всегда задействован, и результирующая частота снимается именно с него (например, при приведенных значениях счетчик будет все время считать от 3 до 15), либо… либо есть еще одна возможность, для знакомства с которой придется ответить сначала на второй вопрос: как организовать предустановку значения счетчика каждый раз при достижении им состояния «0000»?
Схема на рис. 16.13, в демонстрирует, как можно это сделать (это не единственный вариант, но нам подойдет). Диаграмма работы схемы (справа) показана, начиная с момента, когда вот-вот должен прийти такт, при котором счетчик установится в состояние «0000». В любом другом состоянии на входе четырехвходового элемента «ИЛИ-НЕ» присутствует хотя бы одна единица и на выходе его, соответственно, логический ноль. Выход же элемента «И-НЕ» пребывает по этой причине в состоянии логической единицы, а на входе SE — логический ноль, как и положено при счете.
Как только с очередным положительным тактовым перепадом счетчик установится в состояние «0000», то на выходе элемента «ИЛИ-НЕ» появится логическая единица. Поскольку тактовый импульс пропускается через инвертор, то на нижнем по схеме входе «И-НЕ» в этот момент логический ноль, и на выходе его по-прежнему единица. И только после отрицательного перепада на тактовом входе С (который для остальной схемы является нерабочим) на обоих входах «И-НЕ» установится логическая единица, на выходе — логический ноль, и на SE появится, наконец, долгожданный высокий уровень, разрешающий запись значений, установленных по входам S0-S3. Как только запись произойдет, все немедленно отработает назад, т. к. на выходе «ИЛИ-НЕ» высокого уровня уже не будет. Импульс на входе SE окажется очень кратковременным, но нам длиннее и не надо.
Легко сообразить, что частота положительных импульсов на выходе «ИЛИ-НЕ» (либо коротких импульсов перезаписи на входе SE) как раз в точности равна частному от деления входной частоты на установленный коэффициент. И ее в этом качестве использовать удобнее, чем выходы разрядов, потому что не нужно гадать, с какого разряда снимать частоту при вычитающем режиме. Если поставить многопозиционный переключатель, меняющий код на входах предустановки S0-S3, то можно получить счетчик с изменяемым коэффициентом деления от 1 до 16.
Микросхема 561ИЕ14 полностью аналогична ИЕ11, за исключением того, что у нее есть еще вход переключения двоичного/десятичного счета B/D. Так как все выводы 16-выводного корпуса у ИЕ11 заняты, для этого пришлось пожертвовать входом R, вместо которого имеется вывод B/D. Если на этом входе напряжение низкого уровня, счетчик ИЕ14 считает в двоично-десятичном коде, если высокого — становится полностью аналогичным ИЕ11. Постойте, а как же его обнулять, если вход R отсутствует? Очень просто — надо подать на все входы предустановки S0-S3 потенциал «земли», а импульс обнуления подавать на вход SE вместо R.
Цифровой лабораторный генератор
Напоследок мы рассмотрим одну практическую схему на счетчиках. Это давно обещанный (см. главы 2 и 12) цифровой лабораторный генератор, для которого нам придется использовать еще один тип счетчика, «заточенного» для работы именно в качестве делителя частоты.
Счетчик 561ИЕ16, который мы здесь применим, ничего особенного не представляет и является простым асинхронным счетчиком, подобным показанному на рис. 16.12, б. Мы могли бы спокойно соорудить его сами из отдельных триггеров, но для этого их понадобилось бы целых 14 штук (т. е. семь корпусов типа ТМ2). А микросхема 561ИЕ16 в 16-выводном корпусе не только заключает в себе 14-разрядный счетчик, но и включает специальные буферные усилители по выходу каждого каскада деления, для того, чтобы случайная перегрузка одного каскада внешней нагрузкой не привела к остановке всех последующих. Кроме выходов Q0-Q13, наружу выведен вход тактовых импульсов С и вход сброса R.
Позвольте, спросите вы, но ведь еще два вывода заняты под питание, так что из 16 выводов на выходы Qx приходится всего 12, а не 14, откуда же взять еще два?
Разработчики пошли по пути наименьшего сопротивления — почему-то вместо того, чтобы использовать корпус, например, DIP-20 (заодно еще и вход S вывести, и еще что-нибудь, например, поставить буферный усилитель для входной частоты), они просто исключили выходы второго и третьего каскадов Q1 и Q2. Ну, да ладно, обойдемся и тем, что дают.
Итак, с помощью этого счетчика мы получим генератор, который выдает 13 значений частоты (считая входную), каждая в два раза меньше предыдущей, за исключением небольшого «провала» — частоты с коэффициентом 4 и 8 будут отсутствовать. Чтобы получить при этом самые низкие частоты, кратные целым, без дробных частей, значениям, выраженным в герцах, нужно на входе использовать генератор с частотой, равной какой-нибудь степени двойки. Генератор можно, конечно, соорудить по одной из приведенных ранее схем мультивибраторов, но это не есть приемлемое решение для лабораторного прибора. Для цифрового генератора в данном случае важна именно стабильность частоты, т. к. мы собираемся испытывать с его помощью разные измерительные схемы — это одна из главных причин, почему лучше сделать для себя такой генератор, а не использовать аналоговые серийные приборы с плавной перестройкой частоты. Есть, разумеется, в продаже и точные цифровые генераторы промышленного производства, но они на много порядков дороже того, что мы можем соорудить на двух микросхемах и пяти навесных деталях, — как говорится, одним взмахом паяльника. И при этом функциональность полученного генератора будет перекрывать наши потребности если и не на все 100 %, то по крайней мере на 99 % совершенно точно — исключая редкий случай потребности в частотах порядка мегагерц.
Мы возьмем тот самый кварц, который в народе называют «часовым» (см. разд. «Кварцевые генераторы» ранее в этой главе). Он имеет частоту 32 768 Гц, что есть 215. Чаще всего такие резонаторы встречаются в продаже в малогабаритном цилиндрическом корпусе 8x3 мм, они без проблем работают при напряжениях питания до 12–15 В. Отечественный РК-206 имеет еще меньший корпус 6x2 мм, но и рассеиваемая мощность у него меньше, так что с ним лучше ограничиться напряжением питания 3–6 В.
Пристроив к такому генератору двоичный счетчик из пятнадцати ступеней, мы получим на выходе частоту ровно 1 Гц, которую можно использовать для отсчета времени в привычных нам секундах. Однако на одном счетчике ИЕ16 мы 1 Гц все равно не получим, ибо разрядов у нас только 14, поэтому придется ставить дополнительные делители. Кроме того, длительность положительного или отрицательного импульса с частотой 1 Гц, полученной на выходе счетчика, составляет не секунду, а полсекунды, так что для получения интервала («ворот») длительностью в 1 секунду придется поделить частоту еще раз пополам. Кстати, немаловажной и очень удобной особенностью нашего генератора будет то, что частоты будут точно (ну, почти точно, т. к. счетчик асинхронный) сфазированы, что позволит нам получать импульсы разной скважности, если использовать дополнительные логические элементы.
Сама схема представлена на рис. 16.14. Как видите, она крайне проста, и сборка требует только аккуратности при отсчете выводов микросхем. Если хотите еще упростить схему, то удалите дополнительный счетчик на DD3, тогда придется обходиться минимальной частотой 2 Гц (но не забудьте, что остаются свободные элементы «И-НЕ», и их входы надо присоединить к «земле»). Схему следует собрать на макетной плате и вывести все четырнадцать значений частоты на ее край, оформив в виде клеммника с соединениями под винт. Внешний вид такого клеммника показан на рис. 16.14 сбоку. Клеммники бывают разной конструкции и разных размеров, а также с дюймовым (5,08 мм) или метрическим (5 мм) шагом между выводами, сдвоенные (как на рисунке), строенные или счетверенные, но все отличаются тем, что их можно соединять друг с другом в одну линейку наподобие деталей конструктора «Лего», получая таким образом клеммники с любым количеством выводов. Естественно, каждую клемму следует надписать, чтобы не заниматься каждый раз отсчетом выводов.
Рис. 16.14. Схема цифрового лабораторного генератора
Да, а питание? Отдельного блока питания для этой конструкции делать вовсе не надо. Потребляет вся схема около 150–200 мкА при напряжении питания 5 В, при 15 В потребление возрастает до 1,5 мА. А так как 561-я серия безупречно работает при питании от 3 до 15 В (и менять ее на быстродействующие аналоги в этой конструкции не следует), то целесообразно питать генератор от того же напряжения, что и испытываемые схемы, чтобы сразу получить нужные логические уровни. В случае чего схему несложно запитать от лабораторного источника.
На плату можно отдельно поставить еще одну микросхему с логическими элементами (ЛА7 или ЛЕ5) — они позволят собирать выходы счетчика для получения нужной скважности и для разных других целей. Можно добавить к схеме и ключевой транзистор, т. к. довольно часто приходится подключать различные мощные нагрузки вроде динамика или светодиодов. Если потребуется более высокая частота, то «часовой» кварц можно просто заменить другим резонатором частотой до 1 МГц. В общем, творите, как сумеете.
ГЛАВА 17
Откуда берутся цифры
Цифроаналоговые и аналого-цифровые преобразователи
Орудуйте мушкетом и шпагой, мой милый, в этих двух занятиях вы проявляете большое искусство, а перо предоставьте господину аббату, это по его части.
А.Дюма. Три мушкетера
С человеческой точки зрения все природные явления носят непрерывный, аналоговый характер. Одно глобальное исключение из этого правила немало потрясло ученых, когда его обнаружили: речь идет об атомно-молекулярной структуре вещества и всей огромной совокупности явлений, которые являются следствием этого феномена. И все же даже это универсальное свойство материи нашими органами чувств непосредственно не обнаруживается, для нас все протекает так, как если бы явления природы были полностью непрерывными, то есть характеризовались бы рядом действительных чисел, отстоящих друг от друга на бесконечно малые отрезки по числовой оси. В масштабах, которыми занимается атомная и молекулярная физика, все обстоит совершенно иначе, чем в привычном для нас мире, — например, такие характеристики, как температура или давление, теряют смысл, ибо они применимы только к очень большому, непрерывному ансамблю частиц.
Природа даже устроила нам некоторые препятствия на пути к полной дискретизации всего и вся — все элементарные частицы, как известно, могут вести себя и как дискретные частицы, и как непрерывные волны, в зависимости от условий эксперимента. В то же время мы обнаружили, что считать и вообще обрабатывать информацию лучше все-таки в цифровой форме, которая является универсальной и не зависит от природы физической величины, с которой мы манипулируем. Встает задача преобразования аналоговой величины в дискретную. Между прочим, термин «аналоговый» не слишком хорошо отражает сущность явления (что чему там «аналогично»?) — точнее говорить «непрерывный», а термин «аналоговый» есть лишь дань традиции, подобно «операционному» усилителю.
Естественно, когда мы хотим, чтобы преобразованная информация опять предстала перед нами в форме, воспринимаемой нашими органами чувств, то мы вынуждены делать и обратное преобразование — цифроаналоговое. Именно этим занимаются звуковые или видеокарты в компьютере. Однако такая задача возникает гораздо реже, потому что во многих случаях информацию можно оставить в цифровой форме, так ее и отобразив — в виде смены кадров на дисплее, в виде дискретной шкалы цветов для цифрового изображения, в виде небольших «ступенек» на кривой нарастания звукового сигнала. В этих случаях мы полагаемся на устройство органов чувств человека: выше некоторого порога разрешения канала передачи перестает хватать, глаз или ухо работают подобно фильтру низких частот, отрезая пульсации, и мозгу кажется, что перед ним действительно непрерывный процесс.
* * *
Заметки на полях
Интересно, что непосредственный цифровой способ отображения информации, например, в виде совокупности цифр на семисегментном индикаторе, хотя и значительно более корректен, чем аналоговый (мы не теряем информации), не всегда может оказаться более правильным. Если вы вглядитесь в пульт управления каким-нибудь сложным устройством — не обязательно атомной электростанцией, достаточно торпеды обычного автомобиля, — вы увидите, что большинство показывающих приборов там стрелочные, аналоговые. Хотя, как вы понимаете, нет никаких проблем в современном автомобиле демонстрировать скорость, уровень топлива или температуру двигателя непосредственно в цифрах, но этого не делают сознательно, потому что в очень многих случаях человека не интересует точное значение того или иного параметра. Его интересует только отклонение от некоторого значения, или превышение некоторого порога, или вообще только тенденция изменения величины — но не сама эта величина, и не сам порог. Информация о том, что температура охлаждающей жидкости составляет 80 °C, для водителя совершенно излишняя, ему важно знать, что если вот эта стрелочка не достигла вот этой красненькой черточки, значит, все в порядке. Но бывают и другие случаи — например, отсчет пробега того же автомобиля имеет смысл, только будучи представленным именно в цифровом виде, поэтому еще на заре автомобилестроения пришлось придумывать разные — тогда еще, конечно, механические — счетчики, отображающие число пройденных километров. Все это следует учитывать при проектировании различных показывающих устройств, и при необходимости приходится даже идти на усложнение схемы, причем, что обидно, нередко с заведомой потерей информации или даже с ее искажением. Типичный пример из этой области — датчик количества топлива в том же автомобиле, который проектировщики традиционно заставляют врать, занижая показания, иначе слишком много водителей оказывалось бы на дороге с сухими баками в полукилометре от ближайшей заправочной станции.
Другой пример: обычные часы с цифровым дисплеем. Все мы уже к этому делу привыкли, но ведь большинство практических задач заключаются не в определении точного времени, а в определении интервала — сколько мы уже ждем, или сколько осталось до некоторого момента. Для этого знания точного значения часов и минут не требуется, и обладателю часов с цифровым дисплеем приходится в уме производить довольно сложные арифметические действия, вычисляя этот интервал, вместо того чтобы просто мысленно передвинуть стрелки на циферблате. Как видите, проектирование показывающих устройств не слишком простое дело, т. к. не может производиться только из соображений компактности схемы или высокой точности измерений, а непременно должно учитывать требования эргономики и « usability » — удобства пользования. Если читателю кажется, что меня очередной раз занесло несколько в сторону от темы книги, то это не так, потому что проектирование аналого-цифровых и особенно цифроаналоговых устройств неразрывно связано с проблемами человеко-машинного взаимодействия — не будь потребителя, незачем все это было бы и затевать. Компьютеры в общении между собой спокойно обойдутся и двоичным кодом.
Принципы оцифровки сигналов
Займемся сначала общими принципами аналого-цифрового преобразования. Основной принцип оцифровки любых сигналов очень прост и показан на рис. 17.1, а. В некоторые моменты времени t 1 , t 2 , t 3 мы берем мгновенное значение аналогового сигнала и как бы прикладываем к нему некоторую меру, линейку, проградуированную в двоичном масштабе. Обычная линейка содержит крупные деления (метры), поделенные каждое на десять частей (дециметры), каждая из которых также поделена на десять частей (сантиметры), и т. д. Двоичная линейка содержала бы деления, поделенные пополам, затем еще раз пополам и т. д. — сколько хватит разрешающей способности. Если вся длина такой линейки составляет, допустим, 2,56 м, а самое мелкое деление — 1 см (т. е. мы можем померить ей длину с точностью не хуже 1 см, точнее, даже половины его), то таких делений будет ровно 256, и их можно представить двоичным числом размером 1 байт или 8 двоичных разрядов.
Рис. 17.1. Оцифровка аналоговых сигналов:
а — основной принцип;
б — пояснение к теореме Котельникова — Найквиста
Ничего не изменится, если мы меряем не длину, а напряжение или сопротивление, только смысл понятия «линейка» будет несколько иной. Так мы получаем последовательные отсчеты величины сигнала x 1 , x 2 , x 3 . Причем заметьте, что при выбранной разрешающей способности и числе разрядов мы можем померить величину не больше некоторого значения, которое соответствует максимальному числу, в данном случае 255. Иначе придется или увеличивать число разрядов (удлинять линейку), или менять разрешающую способность в сторону ухудшения (растягивать ее). Все изложенное и есть сущность работы аналого-цифрового преобразователя — АЦП.
На рис. 17.1, а график демонстрирует этот процесс для случая, если мы меряем какую-то меняющуюся во времени величину. Если измерения производить регулярно с известной частотой (ее называют частотой дискретизации или частотой квантования), то записывать можно только значения сигнала. Если стоит задача потом восстановить первоначальный сигнал по записанным значениям, то, зная частоту дискретизации и принятый масштаб (т. е. какому значению физической величины соответствует максимальное число в принятом диапазоне двоичных чисел), мы всегда можем восстановить исходный сигнал, просто отложив точки на графике и соединив их плавной линией.
Но что мы при этом теряем? Посмотрите на рис. 17.1, б, который иллюстрирует знаменитую теорему Котельникова (как водится, за рубежом она носит другое имя — Найквиста, на самом деле они оба сформулировали ее независимо друг от друга). На этом рисунке показана синусоида предельной частоты, которую мы еще можем восстановить, располагая массивом точек, полученных с частотой дискретизации f д . Так как в формуле для синусоидального колебания A·sin(2πft) имеется два независимых коэффициента (А — амплитуда и f — частота), то для того чтобы вид графика восстановить однозначно, нужно как минимум две точки на каждый период, т. е. частота оцифровки должна быть как минимум в два раза больше, чем самая высокая частота в спектре исходного аналогового сигнала. Это и есть одна из расхожих формулировок теоремы Котельникова — Найквиста.
Попробуйте сами нарисовать другую синусоиду без сдвига по фазе, проходящую через указанные на графике точки, и вы убедитесь, что это невозможно. В то же время можно нарисовать сколько угодно разных синусоид, проходящих через эти точки, если их частота в целое число раз выше частоты дискретизации f д . В сумме эти синусоиды, или гармоники (т. е. члены разложения сигнала в ряд Фурье — см. главу 5), дадут сигнал любой сложной формы, но восстановить их нельзя, и если такие гармоники присутствуют в исходном сигнале, то они пропадут навсегда.
Только гармонические составляющие с частотами ниже предельной восстанавливаются однозначно. То есть процесс оцифровки равносилен действию ФНЧ с прямоугольным срезом характеристики на частоте, равной ровно половине частоты дискретизации.
Теперь об обратном преобразовании. В сущности, никакого преобразования цифрааналог в ЦАП, которые мы будем здесь рассматривать, не происходит, просто мы выражаем двоичное число в виде пропорциональной величины напряжения, т. е. занимаемся, с точки зрения теории, всего лишь преобразованием масштабов. Вся аналоговая шкала поделена на кванты — градации, соответствующие разрешающей способности нашей двоичной «линейки». Если максимальное значение сигнала равно, к примеру, 2,56 В, то при восьмиразрядном коде мы получим квант в 10 мВ, и что происходит с сигналом между этими значениями, а также и в промежутки времени между отсчетами, мы не знаем и узнать не можем. Если взять ряд последовательных отсчетов некоего сигнала, например, тех, что показаны на рис. 17.1, а, то мы в результате получим ступенчатую картину, показанную на рис. 17.2.
Рис. 17.2. Восстановление оцифрованного сигнала с рис. 17.1, а
Если вы сравните графики на рис. 17.1, а и на рис. 17.2, то увидите, что второй график представляет первый, мягко говоря, весьма приблизительно. Для того чтобы повысить степень достоверности полученной кривой, следует, во-первых, брать отсчеты почаще, и во-вторых, увеличивать разрядность. Тогда ступеньки будут все меньше и меньше, и есть надежда, что при некотором достаточно высоком разрешении, как по времени, так и по квантованию, кривая станет, в конце концов, неотличима от непрерывной аналоговой линии.
* * *
Заметки на полях
Очевидно, что в случае звуковых сигналов дополнительное сглаживание, например, с помощью ФНЧ, здесь попросту не требуется, ибо оно только ухудшит картину, отрезая высокие частоты еще больше. К тому же всякие аналоговые усилители сами сгладят сигнал, и органы чувств человека тоже поработают в качестве фильтра. Так что наличие ступенек само по себе несущественно, если они достаточно мелкие, а вот резкий спад частотной характеристики выше некоторой частоты сказывается на качестве звука фатальным образом. Многие люди с хорошим музыкальным слухом утверждают, что они безошибочно отличают цифровой звук CD-качества (дискретизация которого производится с частотой 44,1 кГц, т. е. со срезом на частоте заведомо более высокой, чем уровень восприятия человеческого слуха, и с числом градаций не менее 65 тысяч на весь диапазон) от настоящего аналогового звука, например, с виниловой пластинки или с магнитофонной ленты. По этой причине качественный цифровой звук записывается с гораздо более высокими частотами дискретизации, чем формально необходимо, например, 192 и даже 256 кГц, и тогда он становится действительно неотличим от исходного. Правда, напрямую оцифрованный звук записывают разве что на диски в формате Audio CD, а почти для всех остальных форматов используют компрессию — сжатие по специальным алгоритмам. Если бы не компрессия, для записи не хватило бы ни емкости современных носителей, ни быстродействия компьютерных сетей: всего одна минута стереозвука с'параметрами CD-качества занимает на носителе около 10 Мбайт, можете проверить самостоятельно.
* * *
Углубляться в особенности дискретизации аналоговых периодических сигналов мы не будем, т. к. это очень обширная область в современной инженерии, связанная в первую очередь с оцифровкой, хранением, тиражированием и воспроизведением звука и видео, и об этом нужно, как минимум, писать отдельную книгу. Для наших же целей достаточно изложенных сведений, а теперь мы перейдем непосредственно к задаче оцифровки и обратного преобразования отдельного значения сигнала.
ЦАП
Начнем мы с конца, т. е. с цифроаналоговых преобразователей — почему, вы увидите далее. Будем считать, что на входе мы имеем числа в двоичной форме — неважно, результат оцифровки какого-то реального сигнала или синтезированный код. Нам его нужно преобразовать в аналоговый уровень напряжения в соответствии с выбранным масштабом.
Самый простой ЦАП — десятичный или шестнадцатиричный дешифратор-распределитель, подобный 561ИД1. Если на него подать четырехразрядный код, то на выходе мы получим логическую единицу для каждого значения кода на отдельном выводе. Присоединив к выходам такого дешифратора линейку светодиодов, получаем полосковый (шкальный) индикатор, который с разрешением в 10 или 16 ступеней на весь диапазон будет показывать уровень некоей величины. Причем очень часто для практики такого относительно грубого индикатора, заменяющего стрелочные приборы, вполне достаточно. Выпускаются специальные микросхемы для управления такими дискретными шкальными индикаторами, которые позволяют показывать значение не в виде отдельной точки или полоски, а в виде светящегося столбика. Есть и микросхемы, которые могут управлять не дискретными, а линейными вакуумными индикаторами. Есть даже микросхема К1003ПП1 (аналог UAA180), которая преобразует аналоговую величину (напряжение) сразу в управляющий сигнал для шкального индикатора. Довольно эффектная конструкция может получиться, если в схеме термометра по рис. 13.3 или 13.4 заменить показывающую головку на такую микросхему и шкальный индикатор — как бы полноценная имитация термометра традиционного!
У такого примитивного ЦАП есть два недостатка: во-первых, повысить его разрешение свыше 16–20 градаций нереально, т. к. выходов тогда получится чересчур много. Но главное, он предназначен для узкой задачи визуализации цифровой величины и за пределами этой области беспомощен. Куда более широкое применение имел бы преобразователь, осуществляющий функцию по рис. 17.2, т. е. выдающий на выходе аналоговое напряжение, пропорциональное коду на входе.
«Тупой» метод получения такого напряжения состоял бы в следующей модификации метода с дешифратором-распределителем типа 561ИД1. Для этого надо выстроить делитель из цепочки одинаковых резисторов, подключить его к источнику опорного напряжения и коммутировать отводы этого делителя ключами, управляемыми от дешифратора-распределителя. Для двух-трехразрядного кода можно использовать описанные в главе 15 мультиплексоры типа 561КП1 и 561КП2. Но для большего количества разрядов такой ЦАП с непосредственным преобразованием превращается в совершенно чудовищную конструкцию. Для восьмиразрядного кода потребовалось бы 256 резисторов (строго одинаковых!), столько же ключей и дешифратор с таким же количеством выходов, а ведь восьмиразрядный код — довольно грубая «линейка», ее разрешающая способность не превышает четверти процента. Поэтому на практике такой метод употребляют для построения АЦП, а не ЦАП (потому что, несмотря на сложность, он обладает одним уникальным свойством, см. далее), и здесь мы даже не будем рисовать такую схему.
Рассмотрим один из самых распространенных методов, который позволяет осуществлять преобразование код-напряжение без использования подобных монструозных конструкций. На рис. 17.3, а показан вариант реализации ЦАП на основе ОУ с коммутируемыми резисторами в цепи обратной связи. В качестве коммутирующих ключей можно применить, например, малогабаритные электронные реле серии 293, т. е. того же типа, что мы применяли в конструкции термостата по рис. 12.9, или специализированные ключи из серии 590. Однако для осуществления переключающего контакта потребовалось бы ставить по два таких ключа на каждый разряд, потому в серии 561 предусмотрена специальная микросхема 561КТЗ (CD4066), которая содержит четыре одинаковых ключа, работающие именно так, как показано на приведенной схеме.
Рис. 17.3. Схемы, применяемые при построении ЦАП :
a — двухразрядный ЦАП с отрицательным выходом;
б — цепочка R—2R произвольной длины;
в — ЦАП с положительным выходом
Ключи эти двунаправленные, но их выводы работают по-разному. Тот вывод, который обозначается OUT/IN (в отечественном варианте обычно просто «Выход»), в одном состоянии коммутируется с другим входом/выходом, в другом просто отключен, как обычно. А вывод, обозначаемый IN/OUT (в отечественном варианте просто «Вход»), в одном состоянии подключается к первому входу, а вот при разрыве ключа не «повисает в воздухе», как первый, а заземляется. Таким образом, если подать на вход управления ключом в составе 561КТЗ сигнал логической единицы, то вывод IN/OUT соответствующим образом подключенного ключа коммутируется на вход OUT/IN, а если сигнал управления равен логическому нулю, то вывод IN/OUT замыкается на «землю», как нам и нужно.
* * *
Заметки на полях
Отметим, что есть еще микросхема 176КТ1 (CD4016A, в 561-й серии ей аналога нет, но есть импортная версия CD4016B с питанием до 20 В), с которой 561КТЗ часто путают — у нее ключи самые обычные двусторонние, без заземления. И, несмотря на то, что в классическом справочнике [18] эти микросхемы описаны исчерпывающим образом, в сетевых самодеятельных справочниках по поводу 561 КТЗ нередко приводятся ошибочные сведения. Самим строить такие ЦАП, конечно, вряд ли придется, но на всякий случай следует учесть, что сопротивление ключа 561КТЗ, как и более современных модификаций (1561 КТЗ или CD4066B), довольно велико, порядка сотни ом, что может сказываться на точности. Хотя для практических целей в ряде схем (но не в рассматриваемой!) важнее не абсолютное значение сопротивления, а разница в этом параметре между ключами, которая, если верить справочникам, не превышает 5 Ом.
* * *
Рассмотрим, наконец, как же работает такая схема. Для лучшего уяснения принципов я нарисовал всего лишь двухразрядный вариант. Два разряда — это четыре градации, т. е. выходное напряжение ОУ должно принимать 4 значения с равными промежутками, в данном случае эти напряжения равны 0, а также 1/4, 1/2 и 3/4 от опорного напряжения U оп . Как это происходит?
Рассмотрим сначала схему в исходном состоянии, когда на входах управления ключами код имеет значения «00». Так как оба нижних по схеме резистора 2R в исходном состоянии присоединены к «земле», т. е. включены параллельно, то их суммарное сопротивление равно R.
Тогда верхний по схеме резистор R и эти два резистора образуют делитель, напряжение на котором равно ровно половине от U оп . Параллельный делителю резистор 2R в делении напряжения не участвует. Ключи разомкнуты, цепочка резисторов отсоединена от входа ОУ; и на его выходе будет напряжение, равное 0.
Пусть теперь код примет значение «01». В этом случае резистор с номиналом 2R младшего разряда (нижнего по схеме) переключается ко входу усилителя. Для самой цепочки резисторов R-2R все равно, к «земле» присоединен этот резистор или ко входу, потому что потенциал входа ОУ равен тому же потенциалу «земли». Таким образом, ко входу ОУ через сопротивление с номиналом 2R потечет ток, величина которого будет равна величине напряжения на его входе (U оп /2, как мы выяснили), деленной на величину этого резистора (2R). Итого значение тока будет U оп /4R, и ток этот создаст на резисторе обратной связи ОУ, сопротивление которого равно R, падение напряжения, равное U оп /4. Можно считать и по-другому — рассматривать инвертирующий усилитель с коэффициентом усиления 0,5, что определяется отношением сопротивлений R/2R, и напряжением на входе U оп /2. Итого на выходе всей схемы будет напряжение U оп /4 (но с обратным знаком, т. к. усилитель инвертирующий).
Пусть теперь код принимает значение «10». Тогда все еще проще — ко входу ОУ подключается напряжение U оп через верхний резистор 2R. Коэффициент усиления тот же самый (0,5), так что на выходе будет напряжение U оп /2. Самый сложный случай — когда код принимает значение «11», и подключаются оба резистора. В этом случае ОУ надо рассматривать как аналоговый сумматор (см. главу 12, рис. 12.5, а). Напряжение на выходе будет определяться суммой токов через резисторы 2R, умноженной на величину сопротивления обратной связи R, т. е. будет равно (U оп /2R + U оп /4R)R, или просто 3U оп /4.
Я так подробно рассмотрел этот пример, чтобы наглядно продемонстрировать свойства цепочки R-2R. Способ ее построения с любым количеством звеньев показан на рис. 17.3, б. Крайние резисторы 2R включены параллельно и в сумме дают сопротивление R, поэтому следующее звено оказывается состоящим из тех же номиналов по 2R и в сумме тоже даст R и т. д. Какой бы длины цепочку не сделать, она будет делить входное напряжение в двоичном соотношении: на самом правом по схеме конце цепочки будет напряжение U оп , на следующем отводе U оп /2, на следующем U оп /4 и т. д.
Поэтому с помощью всего двух типономиналов резисторов, отличающихся ровно в два раза, можно строить ЦАП в принципе любой разрядности. Так, восьмиразрядный ЦАП будет содержать 16 резисторов и 8 ключей (если с переключением, как в 561КТЗ), не считая резистора обратной связи, который у нас для наглядности был равен также R, но может быть любого удобного номинала. В интегральных ЦАП часто этот резистор вообще не устанавливают заранее, а выносят соответствующие выводы наружу, так что можно легко получать любой масштаб напряжения по выходу. Например, если в нашей схеме сделать этот резистор равным 1,33R, то на выходе мы получим напряжения, равные U оп , 2U оп /3, U оп /3 и 0.
Правда, неудобство в такой простейшей схеме заключается в том, что выходные напряжения будут с обратным знаком, но эта проблема легко решается. На рис. 17.3, в показан простейший вариант ЦАП с «нормальным» положительным выходом. Проанализировать работу этой схемы я предоставляю читателю самостоятельно — она, вообще-то, даже проще, чем инвертирующий вариант. Недостатком этого варианта по сравнению с инвертирующим будет то, что коэффициент усиления не регулируется, и масштаб будет определяться только величиной U оп . Но и этот недостаток легко исправить небольшим усложнением схемы. Такие ЦАП называют еще перемножающими.
* * *
Заметки на полях
Я не буду рассматривать серийные интегральные схемы ЦАП (например, 572ПА1), основанные на этом принципе, потому что в целом они работают так же, а ЦАП сами по себе, без использования в составе АЦП, требуются нечасто. Тем не менее, скажем несколько слов о проблемах, связанных с метрологией. Ясно, что получить точные значения резисторов при изготовлении микросхемы подобного ЦАП непросто, поэтому на практике абсолютные величины R могут иметь довольно большой разброс. Между собой номиналы их тщательно согласовывают с помощью лазерной подгонки. Собственное сопротивление ключей также может оказывать большое влияние на работу схемы, особенно в старших разрядах, где токи больше, чем в младших. В интегральном исполнении даже делают эти ключи разными — в старших разрядах ставят более мощные с меньшим сопротивлением. А если попытаться сделать самодельный ЦАП на основе упомянутых ранее 516КТЗ, то величина R должна составлять десятки килоом, не менее, иначе ключи начнут вносить слишком большую погрешность.
* * *
Еще один момент связан с получением стабильного опорного напряжения, поскольку это непосредственно сказывается на точности преобразования, причем абсолютно для всех АЦП и ЦАП, как мы увидим далее. В настоящее время успехи электроники позволили почти забыть про эту проблему — все крупные производители выпускают источники опорного напряжения, позволяющие достигать стабильности порядка 16 разрядов (т. е. 65 536 градаций сигнала). К тому же всегда можно исхитриться построить схему так, чтобы измерения стали относительными.
Быстродействие ЦАП рассмотренного типа в основном определяется быстродействием ключей и типом применяемой логики, и в случае КМОП-ключей не слишком высокое — примерно такое же, как у обычных КМОП-элементов.
Большинство интегральных ЦАП построено с использованием описанного принципа суммирования взвешенных токов или напряжений. Другой класс цифроаналоговых преобразователей составляют интегрирующие ЦАП, которые служат для преобразования величин, меняющихся во времени. Эти ЦАП в идеале позволяют сразу получить действительно аналоговый, непрерывный сигнал без признаков ступенек.
АЦП
Номенклатура аналого-цифровых преобразователей существенно больше, чем ЦАП. Однако все разнообразие их типов можно свести к трем разновидностям: это АЦП параллельного действия, АЦП последовательного приближения и интегрирующие АЦП. Рассмотрим их по порядку.
АЦП параллельного действия
АЦП параллельного действия — это зеркально отраженный простейший ЦАП на основе дешифратора, описанный в предыдущем разделе. В таких АЦП имеется делитель из k одинаковых резисторов, к каждой ступени которого подключен компаратор, сравнивающий напряжение на делителе с входным сигналом. Выходы компараторов образуют равномерный код, вроде того, что используется для управления шкальными индикаторами в описанном ранее простейшем ЦАП. Эти выходы подключены к шифратору с k входами, который преобразует этот код в двоичный с числом разрядов n, равным Iog2(k).
Трудности на этом пути уже описывались: схема получается крайне громоздкая, для n-разрядного кода требуется k = 2n резисторов и компараторов, причем резисторов точно согласованных между собой, и компараторов также с как можно более идентичными характеристиками. Поэтому такие АЦП с разрядностью, большей 8, почти и не выпускают. А зачем их делают вообще? По одной простой причине — этот тип АЦП является самым быстродействующим из всех, преобразование происходит фактически мгновенно и лимитируется только быстродействием применяемых компараторов и логики. Фактическое быстродействие АЦП такого типа может составлять десятки и сотни мегагерц (наиболее экстремальные типы, как МАХ108, допускают частоты до единиц гигагерц). Все остальные типы АЦП, как мы увидим, работают значительно медленнее.
АЦП последовательного приближения
АЦП последовательного приближения мы рассмотрим чуть подробнее — ввиду их практической важности. Хотя самим в настоящее время такие АЦП строить также не приходится, но для успешного использования их в интегральном исполнении следует хорошо понимать, как они работают. Именно такого типа АЦП обычно встроены в микроконтроллеры (см. главы 18 и 22).
Главная деталь АЦП последовательного приближения — ЦАП нужной разрядности (именно поэтому мы рассматривали ЦАП раньше, чем АЦП). На его цифровые входы подается код по определенному правилу, о котором далее. Выход ЦАП соединяется с одним из входов компаратора, на другой вход которого подается преобразуемое напряжение. Результат сравнения подается на схему управления, которая связана с регистром — формирователем кодов.
Есть несколько вариантов реализации процедуры преобразования. Самый простой выглядит следующим образом: сначала все разряды кода равны нулю. В первом такте самый старший разряд устанавливается в единицу. Если выход ЦАП при этом превысил входное напряжение, т. е. компаратор перебросился в противоположное состояние, то разряд возвращается в состояние логического нуля, в противном же случае он остается в состоянии логической единицы. В следующем такте процедуру повторяют для следующего по старшинству разряда. Такой метод позволяет за число тактов, равное числу разрядов, сформировать в регистре код, соответствующий входному напряжению. Способ довольно экономичен в смысле временных затрат, однако имеет один существенный недостаток — если за время преобразования входное напряжение меняется, то схема может ошибаться, причем иногда вплоть до полного сбоя. Поэтому в такой схеме обязательно приходится ставить на входе устройство выборки-хранения, о котором далее.
В другой модификации этой же схемы для формирования кодов используется реверсивный счетчик, подобный 561ИЕ11, с нужным числом разрядов. Выход компаратора попросту подключают к выводу переключения направления счета. Изначально счетчик сбрасывают в нули во всех разрядах, после чего подают на него тактовые импульсы. Как только счетчик досчитает до соответствующего значения кода, и выход ЦАП превысит входное напряжение, компаратор переключает направление счета, и счетчик отрабатывает назад. После окончания этого периода установления, если напряжение на входе не меняется, величина кода все время колеблется в пределах младшего разряда. Здесь выбросы не так страшны, но большое время установления и неизвестное заранее время реакции на быстрые изменения входного сигнала являются недостатками такого АЦП, получившего название следящего.
Теперь об устройствах выборки-хранения (УВХ). В простейшем случае это все тот же аналоговый электронный ключ, на вход которого подается измеряемый сигнал, а на выходе стоит конденсатор. До начала измерения ключ открыт, и напряжение на конденсаторе повторяет входное напряжение со всеми его изменениями. В момент начала измерения ключ запирается, и в дальнейшем в качестве измеряемого фигурирует уже напряжение, запасенное на конденсаторе, а изменения на входе на измерительную схему не влияют.
Все, казалось бы, просто, но наличие УВХ, прежде всего, достаточно сильно замедляет процесс, т. к. ключ имеет конечное сопротивление и вместе с конденсатором образует ФНЧ, который требует времени для установления нового значения напряжения и может искажать форму сигнала. Кроме того, как бы ни было велико входное сопротивление компаратора, оно конечно, да и ключ также имеет не бесконечно большое сопротивление в закрытом состоянии. Иногда в схеме присутствует и элемент для принудительного сброса конденсатора (обнуления его), наконец, конденсатор также имеет собственные утечки — все это вынуждает увеличивать емкость конденсатора и еще больше снижать быстродействие схемы. В интегральных АЦП подобного рода нередко даже предоставляется выбор между точностью и быстродействием.
Кроме выборки-хранения, в АЦП последовательного приближения требуется также время на вывод данных и подготовку к следующему циклу измерения. Все указанные причины приводят к тому, что наиболее распространенные 10-12-разрядные АЦП последовательного приближения имеют реальное быстродействие не выше 50-200 кГц. Как пример достаточно продвинутой модели приведем МАХ1132, который имеет разрешение 16 бит при частоте выборок 200 кГц. Тем не менее, АЦП последовательного приближения очень распространены и применяются там, где требуется средняя точность при достаточно высоком быстродействии.
Интегрирующие АЦП
Наиболее точными и одновременно самыми медленными являются интегрирующие АЦП. Их мы рассмотрим наиболее подробно, потому что, во-первых, они могут быть достаточно просты схемотехнически, и иногда даже целесообразно самому соорудить такой узел схемы на дискретных элементах, чем подбирать подходящий чип, и, во-вторых, этот тип АЦП наиболее часто применяется в радиолюбительской практике (если не считать встроенных в микроконтроллеры АЦП последовательного приближения). Далее в этой главе мы сконструируем на основе готового АЦП такого типа цифровой термометр с достаточно хорошими характеристиками.
Разных типов интегрирующих АЦП вообще-то не меньше десятка, но здесь мы подробно рассмотрим только три разновидности. Кстати, интегрирующие АЦП являются примером того, что цифровая техника вовсе не всегда достигает наивысшей точности в сравнении с аналоговой — центральным узлом этих, как мы уже сказали, наиболее точных преобразователей является чисто аналоговый интегратор на ОУ.
Схема самого простого интегрирующего АЦП показана на рис. 17.4. Это так называемый АЦП с однократным интегрированием. В начале преобразования на вход С динамического D-триггера поступает положительный фронт, который устанавливает выход Q в состояние логической единицы. Она является разрешающим уровнем для элемента «И-НЕ», и на вход счетчика поступают импульсы. Одновременно через выход Q запирается транзистор VT1. Конденсатор начинает заряжаться от источника стабильного тока. При равенстве значения входного измеряемого напряжения и напряжения на конденсаторе компаратор срабатывает и обнуляет триггер («ворота» на логическом элементе «И-НЕ» запираются, транзистор открывается и разряжает конденсатор, счетчик обнуляется). Количество импульсов, накопленных в счетчике к этому моменту, пропорционально входному напряжению.
Рис. 17.4. АЦП однократного интегрирования
Источник тока вместе с конденсатором в данном случае образуют так называемый ГЛИН—генератор линейно изменяющегося напряжения. Схему можно упростить, если вместо источника тока поставить простой резистор, питающийся от стабильного источника напряжения, но так как форма кривой нарастания напряжения при этом не линейная, а экспоненциальная (см. рис. 5.7 в главе 5), то приходится ограничиться небольшим диапазоном входных напряжений, где форма кривой еще близка к прямой линии. Однако на практике так часто и поступают, поэтому источник тока я подробно не рисовал.
Если все же задаться целью расширения входного диапазона вплоть до значений, близких к напряжению питания, то придется делать «нормальный» источник тока. Использование простого полевого транзистора, как мы делали в схеме лабораторного источника питания (рис. 9.12), не выход, т. к. он все же является достаточно грубым источником. С другой стороны, чем городить источник тока (например, по варианту, представленному на рис. 12.5, г), проще вообще построить ГЛИН по-иному, в виде обычного интегратора по рис. 12.5, б, только добавив к нему ключ для сброса по окончании преобразования.
* * *
Подробности
Для сброса можно использовать вместо полевого обычный маломощный n-р-n -транзистор, но диапазон входного напряжения будет тогда ограничен еще и снизу значением напряжения на коллекторе открытого транзистора (примерно 0,3 В). Поэтому при снижении питания до 5 В лучше для сброса взять электронный ключ, вроде 561КТЗ. При конструировании таких схем на микроконтроллерах (см. далее) для сброса конденсатора можно применить тот же вывод порта, который является входом компаратора, если его переключать на вход в рабочем цикле и на выход с нулевым уровнем для сброса.
* * *
У схемы по рис. 17.4 единственное достоинство — простота, и куча недостатков. При взгляде на нее непонятно, чего это я ранее распинался насчет выдающихся характеристик интегрирующих АЦП. Результат преобразования здесь зависит от всего на свете: от стабильности источника тока и самого ГЛИН (и каждого его элемента в отдельности, в первую очередь — конденсатора), от стабильности порога компаратора, от неидеальности ключа для сброса и т. п. Еще хуже то, что схема в данном варианте срабатывает от мгновенного значения входного сигнала и потому весьма восприимчива к его дребезгу и вообще любым помехам. А если тактовая частота случайно окажется кратной частоте помехи (в первую очередь сетевой с частотой 50 Гц), то мы вообще можем получать каждый раз значения, весьма далекие от истины. Поэтому такая схема годится лишь для измерения сигналов постоянного тока — для контроля напряжения батареек или чего-нибудь в этом роде (подобная схема, например, ранее применялась в компьютерном игровом порту для измерения положения привязанного к движку потенциометра управляющего рычага джойстика).
В то же время преобразование длится все равно достаточно долго, поскольку обычные значения тактовой частоты, при которых схема еще работает приемлемо, лежат в диапазоне максимум десятков килогерц (если, конечно, специально не использовать быстродействующие компараторы и логику), т. е. для достижения разрешающей способности в восемь разрядов (больше все равно не выжмешь) частота отсчетов составит в лучшем случае 100 Гц, на практике же еще меньше. Может быть, использовать этот факт и измерять не мгновенное, а среднее значение сигнала за время преобразования?
Сделать это несложно — достаточно подать измеряемое напряжение на вход ГЛИН, а опорное — на компаратор. Тогда сигнал станет интегрироваться за время преобразования, причем интегрироваться очень точно, и мы будем получать истинное среднее арифметическое значение сигнала за это время. Но легко увидеть, что сама функция преобразования при этом окажется обратной, — т. е. время заряда (и значение выходного кода на счетчике) окажется обратно пропорциональным значению входного напряжения. Это неудобно, т. к. сильно усложняет обработку результата. Можно применить какой-нибудь хитрый метод деления частоты с использованием реверсивного счетчика, можно также попробовать инвертировать входной сигнал и затем сдвинуть его в положительную область, но все это приводит к усложнению схемы, причем неоправданному — сама по себе точность преобразования в любом случае не увеличится, избавляемся мы только от помехи.
По всем этим причинам АЦП с однократным интегрированием, несмотря на его простоту, в настоящее время не употребляют вообще и даже не выпускают в виде специализированных микросхем. Единственная область, где можно было бы рекомендовать такой метод, — использование микроцроцессоров, имеющих встроенный компаратор. В этом случае с помощью одного внешнего резистора и конденсатора можно получить простейший преобразователь аналогового сигнала в код. Но и эта рекомендация потеряла в настоящее время всякий смысл, т. к. доступны микроконтроллеры со встроенными «нормальными» АЦП без всяких внешних элементов, причем мультиканальными, с гарантированной точностью и разрешением до 10 и даже 12 разрядов, чего для большинства практических нужд более чем достаточно.
Пожалуй, рассказ об АЦП однократного интегрирования получился чересчур затянутым, но это оправданно, т. к. мы теперь знаем, к чему нам стремиться. И я предвкушаю изумление читателя, когда он узнает, как можно преодолеть чуть ли не все перечисленные здесь недостатки, как говорится, одним махом, и притом не слишком усложняя схему. Интегрирующие АЦП не получили бы такого распространения и заслуженной репутации «самых стабильных», если бы не это обстоятельство.
Идея метода, который называется двойным или двухстадийным интегрированием, показана на рис. 17.5. Посмотрим сначала на график, обозначенный цифрой 1.
Рис. 17.5. Цикл работы АЦП двойного интегрирования:
1 — идеальный случай, 2 — при сдвиге порога компаратора; 3 — при изменении емкости конденсатора
В первую часть цикла работы за фиксированное время такта t 2 — t 1 конденсатор интегратора заряжается током, который определяется входным (измеряемым) напряжением U вх . Во второй части этот конденсатор разряжается точно известным током, определяющимся опорным напряжением U оп , до момента равенства напряжения нулю (t з ). Чем больше входное напряжение, тем до большей величины зарядится конденсатор в первой части, и тем дольше он будет разряжаться во второй. Легко показать, что отношение интервала времени t 3 — t 2 к известному времени такта t 2 — t 1 будет равно отношению входного напряжения U вх к опорному U оп . Таким образом, измерив полученный интервал времени t 3 — t 2 обычным методом с помощью счетчика, как это сделано в схеме на рис. 17.4, мы получим на выходе код, пропорциональный входному напряжению.
На самом деле напряжение, до которого разряжается конденсатор, задается порогом компаратора и может в общем случае быть отличным от нуля на величину 8 за счет «гуляния» порога, например, при изменении температуры. Но так как в начале цикла измерения напряжение определялось тем же значением порога, то, как вы видите из графика 2 на рис. 17.5, в данном случае имеет значение только изменение порога за время преобразования. А оно даже в самых «неповоротливых» АЦП такого типа не превышает долей секунды, потому это изменение можно не принимать в расчет. На результате не скажется и изменение емкости конденсатора, поскольку при этом наклон прямой и заряда и разряда изменится в одинаковой степени (график 3).
В самых точных АЦП такого типа дополнительно проводят цикл автокоррекции нуля, когда на вход подают нулевое напряжение и результат потом вычитают из значения кода, полученного в рабочем цикле. Мало того, здесь даже не требуется «кварцованная» частота, и всю схему можно заводить от любого RC-генератора при условии, что время такта t 2 — t 1 и частота заполнения «ворот» для подсчета длительности результирующего интервала t 3 — t 2 задаются от одного и того же генератора.
Но чудес не бывает — точность и стабильность преобразования здесь полностью определяются точностью и стабильностью значения U оп . От этого никуда не денешься, и, как мы говорили, это общее условие для всех без исключения конструкций АЦП и ЦАП. Между прочим, обратите внимание, что U вх и U оп образуют в совокупности нечто вроде неинвертирующего и инвертирующего входа ОУ. Эта аналогия куда более полная, чем кажется, и, манипулируя этими величинами, можно выделывать с выходным кодом всякие штуки, в частности, подгонять масштаб преобразования к нужному диапазону. Другое облегчение, которое можно получить от этой связи, заключается в возможности проведения относительных измерений, когда входное и опорное напряжения получаются от одного источника и тем самым имеют одинаковую относительную погрешность (получается нечто вроде явления ослабления синфазного сигнала в ОУ).
Кстати, в интегрирующих АЦП такого рода для более полного подавления помех нужно делать первую часть цикла интегрирования именно кратным периоду помехи. Тогда в цикле укладывается целое число периодов помехи, и она усредняется. Практически наибольшее влияние оказывает сетевая помеха частотой 50 Гц, поэтому частоту циклов стараются делать в круглых числах.
Простой вариант практической схемы АЦП двойного интегрирования (преобразователя напряжение-время, ПНВ) показан на рис. 17.6. Счетная часть на схеме не показана. Для понимания того, как работает схема, следует обратить внимание, что управляющий вход Y у ключей типа 590КН2 инверсный, т. е. при низком уровне на управляющем входе ключ распахнут, а при высоком — заперт.
Рассмотрим диаграмму работы (рис. 17.6, справа).
Рис. 17.6. Простой вариант АЦП двойного интегрирования (ПНВ)
В момент отрицательного перепада на тактовом входе Т RS-триггер устанавливается в единицу по выходу Q. Так как на входе Т в этот момент отрицательный уровень, ключ D1/1 открывается, остальные ключи заперты. Конденсатор подключается в обратную связь верхнего ОУ (DA1/1) и начинается цикл интегрирования входного напряжения (напряжение на конденсаторе возрастает по абсолютной величине, т. е. на выходе DA1/1 падает, поскольку интегратор инвертирующий). В момент окончания отрицательного полупериода тактовой частоты ключ D1/1 запирается, а ключ D1/3 открывается, заряженный конденсатор оказывается подключенным в обратную связь второго ОУ (DA1/2). Начинается цикл интегрирования опорного напряжения (изменение напряжения на конденсаторе показано на диаграмме пунктирной линией). Поскольку обратная связь в первом ОУ теперь отсутствует, то он сработает, как компаратор — сначала на его выходе установится напряжение, равное отрицательному питанию (или близкое к нему), а в момент равенства напряжения на конденсаторе нулю выход резко устремится от отрицательного к положительному питанию (но его ограничит на уровне примерно +0,6 В включенный в обратную связь диод, который нужен для того, чтобы не затягивать переходной процесс). Положительный перепад передастся на обнуляющий вход RS-триггера и установит его выход Q в состояние логического нуля. При этом откроется ключ D1/2 и закоротит конденсатор, прерывая таким образом процесс интегрирования. На входе верхнего ОУ установится напряжение, равное нулю, а на выходе, вообще говоря (т. к. обратная связь по-прежнему отсутствует), оно станет неопределенным, и на диаграмме показано условно в виде нулевого уровня.
Это состояние длится до конца периода тактовой частоты, а с отрицательным перепадом на входе Т ключи D1/З и D1/2 закроются, и все начнется сначала. На выходе схемы образуется положительный импульс напряжения, длительность которого t 3 — t 2 пропорциональна входному напряжению, согласно соотношению, сформулированному ранее.
Схема рассчитана для получения разрешающей способности 12 разрядов или 4096 градаций. Стабильность схемы напрямую зависит от стабильности резисторов, поэтому их нужно выбирать с точностью не хуже 0,1 %, в этом случае абсолютная точность может достигнуть 10 разрядов без дополнительной калибровки.
Однако U оп тоже должно иметь не меньшую стабильность, поэтому для его получения следует использовать прецизионные источники опорного напряжения. В данном случае подойдет микросхема МАХ875, дающая на выходе 5 В с точностью 0,04 %. Подробный анализ всех погрешностей этой схемы, в том числе температурных, занял бы слишком много места, поэтому рассмотрим еще только принцип выбора частоты преобразования и требования к элементам.
Максимальная частота отсчетов может быть подсчитана из следующих соображений. Так как мы имеем дело с КМОП, то максимальную частоту счетных импульсов примем равной 1 МГц. Нам требуется обеспечить 12 разрядов, т. е. число импульсов за время «ворот» при максимально возможном входном напряжении, равном опорному, должно составить как минимум 4096 штук. Поделив 1 МГц на это число, мы получим частоту около 244 Гц, однако ее надо еще уменьшить вдвое, поскольку у нас в рабочем периоде должно быть два таких такта: прямого и обратного интегрирования. Итого получаем 122 Гц, что и есть максимальная частота при выбранной элементной базе. Исходя из этого выбраны величины сопротивлений и емкость конденсатора. При указанных на схеме их величинах, напряжение на выходе интегратора при входном напряжении 5 В достигнет примерно 9 В за время интегрирования, равное половине периода частоты 122 Гц.
Входное напряжение ограничено для данной схемы диапазоном от нуля до примерно 4,95 В. Напряжение выше этого значения расстроит работу схемы, потому что импульс обнуления за счет RC-цепочки все еще будет длиться, когда придет импульс установки. Импульс обнуления можно было бы сократить, например, за счет введения «корректной» дифференцирующей цепочки (по рис. 16.6, а), но к ограничению уровня входного напряжения ведет и другое обстоятельство, а именно — конечное время разряда конденсатора через ключ при приведении схемы в исходное состояние. При использованных на схеме элементах и при условии достаточно полного разряда оно составит не менее 20–30 микросекунд (сопротивление ключа около 50 Ом), т. е. до 1 % от максимальной длительности, что и ограничивает время рабочего импульса и максимальное напряжение примерно на ту же величину. Избавиться от этого можно только усложнением схемы и введением дополнительного интервала специально для обнуления — в серийных АЦП так и поступают.
Теперь о выборе элементов. При указанных частотах скорость нарастания сигнала на выходе верхнего по схеме ОУ, служащего компаратором, должна быть такой, чтобы сигнал изменялся от напряжения насыщения до нуля не более чем в пределах одного импульса счетной частоты, длящегося 1 мкс. То есть скорость нарастания должна быть не меньше 10 В/мкс, иначе мы получим ошибку за счет неточного определения момента окончания интегрирования (то же требование справедливо и для скорости срабатывания ключей). Второе требование к ОУ — для более точного интегрирования желателен достаточно малый входной ток смещения, не более нескольких наноампер. Он рассчитывается исходя из величины максимального тока интегрирования, в данном случае около 250 мкА, деленного на ту же величину в 12 разрядов, т. е. 4096. Входной ток ОУ должен удовлетворять условию «много меньше», чем полученная величина около 60 нА.
Если принять во внимание допустимое напряжение питания (не менее 12 В), то не так уж и много ОУ удовлетворят указанным требованиям. Микросхема ОРА2132 (два ОРА132 в одном корпусе DIP-8) фирмы Texas Instruments представляет собой прецизионный ОУ с высоким быстродействием (полоса 8 МГц, скорость нарастания до 20 В/мкс), очень малым входным током смещения (50 пА) и высоким допустимым напряжением питания до ±18 В. Из классических отечественных ОУ в коридор требований с некоторой натугой влезет 544УД2 или некоторые ОУ серии 574.
Впрочем, номенклатуру пригодных чипов можно значительно расширить, если снизить напряжение питания до ±5 В (при этом допустимый диапазон входного напряжения необязательно снизится, т. к. оно может превышать напряжение питания, просто манипулировать многими питаниями неудобно) и/или уменьшить частоту счета, например, до 100 кГц (частота отсчетов снизится до 12 Гц, а требования к быстродействию ОУ соответственно упадут). Все это иллюстрирует сложности, которые приходится преодолевать разработчикам при проектировании подобных АЦП в интегральном исполнении, и объясняет, почему интегрирующие АЦП обычно работают так медленно — у большинства прецизионных АЦП частота отсчетов не превышает величины несколько десятков или сотен герц.
Сконструированное нами АЦП относится к типу ПНВ — преобразователей напряжение-время. Ранее широко использовались ПНЧ — преобразователи напряжение-частота (в основном на основе микросхемы 555, см. главу 16), однако большинство их реализаций обладает тем же недостатком, что и однократный интегратор, т. е. в них точность зависит от качества компонентов напрямую. Сейчас мы рассмотрим интегрирующий преобразователь, который также использует двойное интегрирование, но на выходе его получается не интервал времени, который еще нужно сосчитать, а число-импульсный код, т. е. сразу число импульсов за определенный промежуток времени, пропорциональное входному напряжению. Это не частота, как можно бы подумать, точнее, не совсем частота.
АЦП такого типа (преобразователи напряжение-код, ПНК) называются еще дельта-сигма-преобразователями или АЦП с уравновешиванием заряда. Они широко распространены в интегральном исполнении, большинство наиболее высокоразрядных АЦП построены именно так. Я не буду рисовать подробную схему с указанием типов компонентов и разводкой выводов, потому что принципы подбора комплектующих сильно зависят от необходимой точности и разрешающей способности (разрядности), а самостоятельно строить такие схемы нет особого резона.
Принципиальная схема работы ПНК показана на рис. 17.7.
Рис. 17.7. Принцип работы АЦП с уравновешиванием заряда
Работает она следующим образом. Как только напряжение на выходе интегратора DA1 становится меньше нуля, компаратор D1 переключается, и тактовые импульсы начинают поступать на вход счетчика и одновременно на ключ, коммутируя источник опорного тока к суммирующей точке интегратора. Входной ток I вх и опорный I оп имеют разные знаки и опорный больше по величине, поэтому с каждым тактовым импульсом напряжение на конденсаторе будет уменьшаться, а на выходе интегратора — стремиться к нулю. Как только оно опять сравняется с нулем, компаратор переключится, и тактовые импульсы перестанут поступать на счетчик и на ключ. Заряд, который сообщается интегратору за каждый тактовый импульс, строго одинаков, поэтому количество таких тактовых импульсов в единицу времени N, необходимых для уравновешивания заряда, сообщаемого источником входного напряжения, будет в точности пропорционально входному напряжению. Разумеется, токозадающие резисторы в цепи входного и опорного напряжения вовсе не обязаны быть равны друг другу, но в любом случае число N будет пропорционально входному току и обратно пропорционально опорному, если соблюдается соотношение I оп >= I вх . При их равенстве число импульсов N за секунду будет равно тактовой частоте. Манипулируя величиной U оп и номиналами резисторов, можно получать различный масштаб. Отметьте, что импульсы на входе счетчика, представляющие число N, могут быть неравномерно распределены во времени — этим ПНК отличается от ПНЧ.
Здесь точность преобразования зависит практически только от стабильности I оп (U оп ) — при условии, конечно, выбора остальных компонентов по быстродействию в соответствии с рекомендациями для АЦП двойного интегрирования. Автор этих строк строил схему подобного ПНК на самых что ни на есть рядовых элементах: ключах 590КН2, ОУ 544УД1 и КМОП 561-й серии, в качестве источника тока использовалась схема по типу рис. 12.5, г на ОУ 140УД20 и стабилитроне КС170. Тем не менее, при тактовой частоте 2048 Гц (т. е. разрешающей способности 11 разрядов при времени измерения 1 с) стабильность схемы составляла не хуже 3 единиц кода (0,15 %) в диапазоне от -18 до +40 градусов! А если тщательно проработать вопрос стабильности и быстродействия элементов, то можно получить нечто вроде МАХ1400 — прецизионного 18-разрядного АЦП с быстродействием 4800 отсчетов в секунду.
Конструируем цифровой термометр
Цифровые термометры конструировать самостоятельно имеет смысл по крайней мере потому, что рынок подобных бытовых устройств достаточно беден. Фирменные приборы для расположения на стенке комнаты или офиса обычно имеют невзрачный дизайн с корпусами белого или «компьютерного» серого цвета и с ЖК-индикаторами, которые из-за их «слепоты» я бы категорически не рекомендовал применять в бытовых приборах, особенно тех, что предназначены для разглядывания издалека. Терпеливый радиолюбитель вполне может сделать конструкцию куда лучше фирменной — удобную, красивую и приспособленную под свои нужды, а «приставить» к такому термометру измерители влажности, давления и еще чего угодно, получив настоящую метеостанцию, — вопрос только денег, и мы еще этим будем заниматься.
Но сначала поговорим об одной из самых популярных микросхем АЦП, специально приспособленной для конструирования таких приборов, как цифровые измерители или мультиметры. Впервые обе ее разновидности выпущены более четверти века назад и до сих пор не потеряли своего значения — большая часть мультиметров, поступающих в продажу, изготовлена на таких микросхемах или их современных аналогах.
АЦП 572ПВ2 и ПВ5
Основой принципиальной схемы нашего термометра будет микросхема 572ПВ2 (ICL7107), которая представляет собой АЦП двойного интегрирования с выходом в параллельном семисегментном коде с расчетом на 3,5 десятичных разряда. Что означает цифра 3,5 — не может же использоваться полразряда? Действительно, при использовании полного выходного диапазона этой микросхемы, который составляет число ±1999, нужно подключать 4 индикатора, однако последний (старший) из них будет использоваться только для индикации цифры 1 и, при необходимости, знака минус. Число 3,5 и означает, что старший разряд используется не полностью (бывают и более заковыристые обозначения, вроде 3 % разряда, но их оставим на совести авторов). Заметим, что разрешающая способность (а при соблюдении некоторых требований — и точность) этого АЦП эквивалентна приблизительно 11 двоичным разрядам, т. е. приведенная погрешность составит 0,05 %, что очень и очень неплохо.
Основная (типовая) схема включения микросхемы 572ПВ2 показана на рис. 17.8. Микросхема имеет два собственных питания: положительное 5 В (от 4,5 до 6 В) и отрицательное, которое может варьироваться в довольно большом диапазоне от -9 до -3,5 В. Это обстоятельство позволяет при необходимости использовать для отрицательного питания не слишком стабильные преобразователи-инверторы, о чем далее.
Рис. 17.8. Типовое включение микросхемы 572ПВ2 ( ICL7107 ) в корпусе DIP-40
Семисегментные LED-индикаторы можно подключать напрямую, без каких-либо дополнительных резисторов (ток через сегмент при этом равен 5–8 мА). Управление индикаторами осуществляется коммутацией на «землю», поэтому нужен индикатор с общим анодом, который целесообразно подключать к отдельному источнику питания, чтобы не вносить лишние помехи. Однако выходы управления индикатором не являются выходами с открытым коллектором (точнее — истоком), а есть обычный комплементарный КМОП-выход (см. рис. 15.1, схему инвертора справа).
Вытекающий ток в состоянии логической единицы может составить примерно 0,5 мА, а в состоянии логического нуля — примерно 5–8 мА (для вывода 19, который управляет одновременно двумя сегментами при засветке 1 в старшем разряде, этот ток составляет 10–16 мА).
* * *
Заметки на полях
Это обстоятельство можно использовать для управления индикаторами через внешние ключи. Дело в том, что для питания LED, потребляющих достаточно большой ток (при максимальном количестве зажженных сегментов, т. е. при индикации -1888, он может составить от 120 до 200 мА), естественно было бы использовать нестабилизированное повышенное напряжение, например, от входа стабилизатора положительного напряжения. Это особенно актуально при подключении крупных индикаторов с повышенным падением напряжения, поскольку при напряжении 5 В они будут светиться очень тускло (если загорятся вообще). Однако ставить более 20 штук ключей не очень хочется, если конструкция не слишком капитальная. К сожалению, в технической документации ни один из производителей не упоминает о возможности подключения LED-индикатора к повышенному напряжению. Можно ожидать, что при пиковом значении напряжения питания, не превышающем суммы основного питания (5 В) и падения напряжения на индикаторе (1,8–2 В для обычных и 3,5–4 В для крупных индикаторов), микросхеме ничего не грозит. В крайнем случае, можно поставить небольшие резисторы, ограничивающие ток через защитные диоды. Автор этих строк на свой страх и риск провел долгосрочный эксперимент по питанию LED-индикатора высотой 1 дюйм от пульсирующего напряжения 6,5–7 В с амплитудным значением, соответственно, около 9-10 В (от отдельной обмотки трансформатора через один диод в качестве выпрямителя). Опыт показал, что такой режим микросхема вполне выдерживает. При этом из-за «однополупериодности» напряжения средний ток через сегменты примерно в полтора раза ниже номинального, чего вполне достаточно для нормальной яркости свечения. Здесь мы также применим этот режим питания, однако в некоторых случаях это неудобно, и приходится ставить отдельный мощный стабилизатор, как и положено.
* * *
Выпускается совершенно идентичная по функциональности и разводке выводов микросхема 572ПВ5 (ICL7106), которая отличается только тем, что она предназначена для управления ЖК-индикаторами, а не светодиодными, так что, если есть нужда в малом потреблении, можно почти без изменений основной схемы использовать такой вариант. Просто заменить LED-индикатор на ЖК и наоборот, как мы уже говорили, нельзя, потому что для управления ЖК-индикаторами требуется переменное напряжение, иначе отключенные сегменты «зависнут» в поглощающем свет состоянии. Поэтому при замене ПВ2 на ПВ5 отличие в схеме заключается в том, что вывод 21 представляет собой не «цифровую землю» (GND4), а подсоединяется к общему выводу ЖК-индикатора. При этом отдельное питание, естественно, не требуется. Управление ЖК-сегментами происходит так: на общем выводе 21 все время присутствует меандр, а на тот сегмент, который нужно засветить, подается точно такой же меандр, но в противофазе. При отключении сегмента фаза на выводе его управления меняется на противоположную и становится такой же, как на выводе 21, поэтому постоянное напряжение на сегмент никогда не подается.
Отдельный вопрос представляет засветка запятой, если ее по ходу дела надо гасить. В LED-варианте это несложно (можно просто засветить постоянно или через какой-то ключ), а для ЖК-варианта нужно для нее также обеспечить подобный режим управления. Иначе при подаче постоянного напряжения она просто засветится навсегда (и будет светиться еще долго после выключения питания) и к тому же станет резко выделяться большим контрастом. Разработчики рекомендуют использовать для этой цели отдельный логический инвертор, подключенный к выходу 21. При этом (как и в случае подключения внешнего тактового генератора, см. далее) в качестве «цифровой земли» в 572ПВ5 следует использовать вывод 37 (TEST).
Ввиду отсутствия у микросхемы ПВ5 «цифровой земли» как таковой, эту микросхему можно питать от одного источника, напряжение которого может составлять от 9 до 15 В (что эквивалентно диапазону от ±4,5 до ±7,5 В). Только при этом не следует забывать, что для обеих микросхем опорное и входное напряжения не должны выходить за пределы, на 1 В отступающие от потенциалов +U пит и -U пит .
Для микросхемы ПВ2, вообще говоря, требуется двуполярное питание во всех случаях, т. к. «цифровая земля» GNDц должна иметь общую точку с аналоговой частью для внутреннего согласования уровней управляющих сигналов. Однако можно обойтись одним питанием +5 В (подсоединив вход — U пит к «земле»), если, в соответствии с ранее сказанным, опорное и измеряемое напряжения по абсолютной величине не превышают 1,5 В, причем эта величина должна отсчитываться от середины U пит .
Есть и более современные варианты этих преобразователей — например, с очень малым потреблением, но параметры рассмотренных микросхем и так достаточно хороши — при тактовой частоте 50 кГц время преобразования составляет 0,32 с (16 000 периодов тактовой частоты), а потребление при этом не превышает 0,6 мА (не считая, конечно, потребления индикаторов в LED-варианте).
Удобство микросхем ПВ2 и ПВ5 заключается и в том, что они оперируют с двухполярными входными напряжениями, автоматически определяя и высвечивая знак. Диапазон входного измеряемого напряжения определяется опорным, с помощью которого и задается масштаб, при этом опорное должно находиться в пределах 0,1–1 В, а измеряемое может по абсолютной величине превышать его, в соответствии с разрешающей способностью, ровно в два раза. Если, например, опорное напряжение равно 1 В, то измеряемое может быть в пределах ±2 В (точнее ±1,999 В), а в общем случае выходной код определяется выражением N = 1000·U вх /U оп . При превышении значением входного напряжения предела +2U оп младшие три разряда гаснут, а при снижении ниже -2U оп — гаснет все, кроме знака минус.
На схеме рис. 17.8 показан именно такой вариант включения с общими «землями». Однако оба входных напряжения — опорное и измеряемое — могут быть и «плавающими», без общей «земли», единственное требование — чтобы их значения не выходили за пределы питания (а по абсолютной величине они, естественно, должны соответствовать указанным ранее требованиям). В этом случае вывод 32 («аналоговая земля») не используется. На этом выводе тогда присутствует напряжение, равное (U +пит — 2,8) В. Если очень надо, его можно использовать в качестве опорного (не само напряжение относительно «земли», которая в данном случае есть довольно условное понятие, а именно разность между положительным питанием и выводом 32). Однако стабильность этого напряжения невелика, и так рекомендуется поступать только в уж очень экономичных схемах. Особенно это плохо в случае ПВ2, в которой выходные каскады за счет большого тока сильно (и неравномерно по времени из-за разного количества подключенных сегментов) нагревают кристалл, и напряжение это начинает «плавать». Ошибка при этом может составить до 0,5 %, т. е. точность снижается до 9 разрядов вместо 11.
Тактовую частоту микросхем рекомендуется выбирать из ряда 200, 100, 50 и 40 кГц, при этом частота помехи 50 Гц уложится в длительность фазы интегрирования входного напряжения (см. далее) целое число раз, и такая помеха будет интегрироваться полностью. Тактовую частоту можно задавать тремя способами: с помощью RC-цепочки, как показано на рис. 17.8, с помощью кварца, подключаемого к выводам 39 и 40, а также внешним генератором, выход которого подключается в выводу 40 (в ПВ2 при этом в качестве общего провода используется вывод 21 «цифровая земля», а в ПВ5 — вывод 37 «TEST»). На практике чаще всего используется первый способ, при этом частота будет равна примерно 0,45R г С г .
В фирменной документации на этот счет есть некоторая неясность, т. к. рекомендуется выбирать R г = 100 кОм при С г = 100 пф, и тогда согласно формуле частота должна составить 45 кГц. Это далеко и от 40, и от 50 кГц, рекомендуемых для частоты помехи 50 Гц, и не вполне совпадает с 48 кГц, рекомендуемыми для помехи 60 Гц. Все отечественные описания микросхем ПВ2 и ПВ5 изящно обходят этот вопрос, просто повторяя фирменные рекомендации. Думается, что составители документации имели в виду все же 60-герцовую помеху (т. е. тактовую частоту 48 кГц), поэтому в отечественных пенатах следует снизить емкость С г до 91 пф — так будет корректнее. Вообще, ошибка в ±5 %, конечно, тут вполне допустима.
Из особенностей внутреннего функционирования этих микросхем нам интересен еще один момент. Цикл работы ПВ2 и ПВ5 состоит из трех фаз, первые две из которых идентичны циклу работы ПНВ по рис. 17.5. После окончания фазы интегрирования опорного напряжения и формирования, собственно, измерительного интервала начинается последняя (или первая для следующего измерения) часть цикла, носящая название фазы автокоррекции. В этой фазе происходит не только сброс интегрирующей емкости (который у нас в схеме по рис. 17.6 занимал некоторое время из отведенного для фазы интегрирования), но и, кроме этого, на конденсаторе С ак происходит накопление напряжения смещения всех участвующих в процессе ОУ и компараторов. В рабочих циклах это напряжение учитывается. Но для нас еще интереснее, что в фазе автокоррекции одновременно происходит заряд емкости С оп до значения опорного напряжения, и последующее интегрирование в рабочем цикле оперирует именно с этой величиной, а вход опорного напряжения при этом отключается. Собственно, сделано это для того, чтобы была возможность автоматического внутреннего инвертирования опорного напряжения при смене знака измеряемого. Однако для нас это важно, потому что позволяет сгладить наличие высокочастотных помех на входе опорного напряжения. К сожалению, длительность фазы автокоррекции является неопределенной (т. к. она занимает всю оставшуюся часть фазы интегрирования опорного напряжения, к которому прибавляется фиксированный интервал времени в 4000 периодов тактовой частоты), и низкочастотная помеха при этом интегрируется плохо.
Номиналы емкостей и резисторов на рис. 17.8 приведены для случая опорного напряжения, равного 1 В, и тактовой частоты 50 кГц. При опорном напряжении 0,1 В емкость С ак нужно увеличить до 0,47 мкФ, С инт уменьшить до 0,1 мкФ, а R инт уменьшить до 47 кОм. В остальных случаях эти номиналы должны быть изменены в указанных пределах примерно пропорционально изменению опорного напряжения.
К выбору типов компонентов следует подходить весьма тщательно, от этого сильно зависит в первую очередь линейность преобразования. Резисторы все могут быть типа МЛТ, хотя при наличии стоит предпочесть С2-29В. Конденсатор тактового генератора С ген может быть керамическим (типа КМ73-10, КМ-5, КМ-6). Остальные конденсаторы (С инт , С оп и С ак ) должны иметь органический диэлектрик, лучше всего подойдут фторопластовые (К72П-6, К72-9) или полистироловые (К71-4, К71-5), но сойдут и полиэтилентерефталатные (К73-16, К73-17). Эти конденсаторы могут ужаснуть вас своими размерами, но ничего не поделаешь — такова плата за стабильность. Высокие конденсаторы (как К73-17) следует устанавливать лежа — хотя при этом площадь платы увеличивается, но зато конденсаторы не торчат над всеми остальными компонентами. Это, кроме всего прочего, повышает надежность монтажа, ибо меньше вероятность выломать конденсатор с корнем, случайно положив поверх платы каталог продукции фирмы MAXIM.
Практическая схема термометра
Теперь, вооружившись всеми этими знаниями, приступим, наконец, к нашему термометру. И сначала нам надо будет посчитать — что мы имеем на входе и что мы хотим при этом получить на выходе?
Начнем с выхода — температура традиционно демонстрируется в виде «ХХ,Х». Таким образом, мы должны использовать только три младших разряда, при этом диапазон температур получится от -99,9 до +99,9 °C. Собственно говоря, такой диапазон чересчур широкий, практически для «погодного» термометра хватило бы и диапазона от -50 до +50 °C. В чем и состоит, как мы уже говорили, недостаток использования готовых микросхем — мы вынуждены устанавливать диапазон в соответствии с возможностями отображения чисел с помощью ПВ2. И при этом мы теряем ровно два двоичных разряда, ужимая диапазон в 4 раза. Никто нам, конечно, не запретит подключить все четыре индикатора и демонстрировать температуру от -199,9 до +199,9 °C. Но если диапазон выше 100 °C еще может пригодиться в быту (скажем, признаком готовности варенья служит температура 105–106 °C), то отрицательный диапазон аж до -200 °C вряд ли потребуется даже для самых специфических производственных нужд, а для научных задач такие температуры измеряются своими способами. Но, конечно, никто не запрещает вам использовать, например, половину диапазона со сдвигом, от -50 до +150 °C — все будет определяться соотношением резисторов, как мы увидим, и наличием индикаторов. Калибровку для простоты будем производить от 0 до 50 градусов, полагая (и это оправдывается на практике), что термодатчик при не слишком большом углублении в отрицательную область ведет себя линейно.
О выборе датчиков мы говорили в главе 13. Так как мы собираемся делать более-менее точный прибор, то выберем не полупроводниковый, а медный резистивный датчик и прикинем, какое было бы желательно иметь его сопротивление. Обычные токи через датчик должны составлять порядка 1–3 мА, иначе медная катушка приемлемых размеров будет сама нагреваться. Проще всего в качестве датчика использовать обмотку малогабаритного реле из серий, например, РЭС-60, РЭС-80, РЭС-79 или РЭС-49 — какое окажется под рукой, и чем старше возрастом, тем лучше, т. к. медь при хранении стабилизирует свои характеристики. Нет проблем использовать и любое другое реле, только крупные конструкции будут иметь значительную тепловую инерцию, к тому же многие, особенно старые, реле не герметизированы.
Указанные мной типы имеют полностью герметизированный металлический корпус, остается только изолировать от внешней среды выводы. У меня «под рукой» оказалось реле типа РЭС-60 с обмоткой 800+120 Ом (паспорт РС4.569.435-01). Изменения на диапазон 100 °C составят в среднем 320 Ом (напомним, что у меди температурный коэффициент сопротивления равен 0,4 %/°). Выберем U оп = 0,5 В, тогда ток через датчик-обмотку должен составить 0,5 В/320 Ом ~= 1,5 мА. Так как рабочие напряжения здесь не превышают по абсолютной величине 0,5 В, то мы сможем обойтись для АЦП одним питанием +5 В, только надо будет максимально приблизить эти напряжения к середине питания.
Общая схема термометра показана на рис. 17.9.
Рис. 17.9. Прецизионный цифровой термометр на микросхеме 572ПВ2
Рассмотрим сначала включение датчика. Для того чтобы при нуле градусов термометр показывал 0, нужно на вход АЦП подавать разность текущего напряжения на датчике и значения его при нулевой температуре. В данном случае это делается с помощью мостовой схемы. Два идентичных источника тока 1,5 мА (ОУ DA1, транзисторы VT1-VT2 и резисторы R16-R19) образуют верхнюю половину моста, а нижняя состоит из датчика температуры R t и опорного резистора R20, сопротивление которого равно сопротивлению датчика при 0 °C. Разность этих напряжений подается на АЦП в качестве входного напряжения. Фильтр R22-C6 нужен для лучшего сглаживания помех (конденсатор С6 может быть керамическим). ОУ МАХ478, как указывалось в главе 12, можно заменить, например, на ОР293 (или, с небольшой переработкой схемы, на счетверенный ОР493). Так как в этой схеме общее питание не превышает 5 В, то выбор ОУ с хорошими характеристиками несколько расширяется (ОР296, АБ8607,АО8616 и др.).
Обратим теперь внимание на хитрую схему включения самого датчика, которая носит название трехпроводной. Такая схема позволяет избежать влияния соединительных проводов и, главное, помех, которые наводятся на них. Сами по себе провода влияют слабо, т. к. в данном случае достаточно, чтобы они имели сопротивление, меньшее, чем 1/2000 сопротивления датчика, что составляет примерно 0,4 Ом. Это вполне обеспечит провод МГТФ-0,35, если его суммарная длина не превысит 40 м. Однако в этой схеме и столь малые изменения нивелируются тем, что два одинаковых провода, соединяющие опорный резистор с датчиком и датчик с источником тока, оказываются включенными в разные плечи моста, потому их изменения взаимно компенсируются. Наведенные на этих проводах помехи ведут себя точно так же. А третий провод, соединяющий датчик с «землей», оказывается включенным в оба плеча сразу и создает чисто синфазную помеху, которая игнорируется преобразователем. Дополнительный резистор R23, включенный в этот провод, «подтягивает» напряжение разбаланса моста к середине напряжения питания (падение напряжения на R23 составляет около 1 В). При возможном изменении напряжения питания опорное напряжение и сигнал с выхода моста будут меняться пропорционально, поэтому ошибки не возникнет.
Цепочка R21-C7 есть дополнительный фильтр по питанию ОУ в источниках тока. Остальные компоненты схемы вызвать вопросов не должны. Все резисторы, выделенные темным, должны быть с точностью не хуже 1 % — например, типа С2-29В. Номиналы их, естественно, необязательно должны быть именно такими, как указано на схеме, и могут меняться в очень широких пределах, но соотношения должны быть выдержаны точно. При ином сопротивлении датчика соотношения этих резисторов, а также сопротивления резисторов R20 и R23 придется пересчитать, при этом желательно приблизительно сохранить значения напряжений в схеме, особенно это касается близости к середине напряжения питания.
Индикаторная часть также не должна вызвать вопросов. Питание индикаторов в этой схеме обязательно должно осуществляться от отдельной обмотки трансформатора. Индикаторы зеленого свечения (с буквой G) можно заменить любыми другими, по вкусу. Так как мы четвертый разряд не используем, то не имеет смысла ставить целый индикатор для одного только знака минус, и его индикация производится с помощью одного плоского светодиода. Они бывают разных размеров, и чтобы прибор выглядел красиво, следует подогнать светящуюся полоску по ширине сегментов индикатора. В данном случае светодиод L113 имеет размеры 5x2 мм, но сегменты заметно уже, поэтому часть торцевой поверхности нужно аккуратно закрасить любой непрозрачной краской. Залить такой краской следует и боковые поверхности светодиода, иначе вместо минуса вы получите неопределенное светящееся пятно.
Если яркость минуса, запятой (вывод 5 индикатора Н2) и индикаторов Н4-Н5, постоянно демонстрирующих знак «°С», будет отличаться от яркости основных разрядов, нужно подобрать резисторы R1-R10. Источник питания нужно рассчитывать на 250 мА по напряжению ~6,3 В (по напряжению +5 В потребление не достигает и 10 мА). Конечно, в целях экономии места, стоимости и потребления тока индикаторы Н4-Н5 можно исключить.
Датчик можно изготовить следующим образом (рис. 17.10).
Рис. 17.10. Конструкция датчика на основе реле РЭС-49 , РЭС-60 , РЭС-79 , РЭС-80 и аналогичных
1 — реле, 2 — места пайки выводов, 3 — пластмассовая трубка, 4 — эпоксидная смола, 5 — кембрик
Берется трубка (лучше пластмассовая) длиной примерно 10 см и такого диаметра, чтобы все выводы реле, в том числе выводы обмотки с припаянными проводами, свободно помещались внутри. Места пайки на всякий случай следует изолировать термоусадочным кембриком. Затем нужно пропустить провода через трубку и обязательно в месте выхода из трубки также надеть на них отрезок кембрика, чтобы ограничить радиус перегиба (позиция 5 на рис. 17.10). Потом надо залепить пластилином щели между корпусом реле и торцом трубки и залить ее внутренность эпоксидной смолой. Пластилин удаляется потом начисто с помощью бензина. Если датчик будет расположен снаружи помещения, его лучше покрыть атмосферостойким лаком или краской.
Схему следует собрать всю сразу (проверив отдельно, конечно, источник питания). Измерив величину сопротивления датчика при комнатной температуре, следует рассчитать необходимую величину резистора R20 (на схеме дана его величина, исходя из сопротивления датчика ровно 800 Ом при 20 °C). Затем на место калибровочных резисторов R14 и R20 нужно впаять резисторы большего номинала, а параллельно им — переменные резисторы с таким значением сопротивления, чтобы вместе они составляли номинал примерно на 5-10 % больший расчетного. Наладку надо начинать с проверки правильности разводки индикаторов. Для этого вывод «TEST» следует замкнуть с напряжением питания — индикаторы должны загореться все, показав значение «888».
Затем можно приступать к процедуре калибровки. Набейте термос толченым льдом (зимой лучше использовать для этой цели снег) пополам с водой — это будет первая калибровочная точка. Вторая может быть обеспечена просто теплой водой с температурой от 40 до 60 градусов, причем поддерживать точную температуру необязательно, только за ней нужно все время следить (хотя, разумеется, наличие термостата предпочтительнее). Помещая датчик в смесь льда и воды, с помощью резистора R20 устанавливают нулевые показания термометра. Затем датчик помещают в теплую воду вместе с образцовым термометром и с помощью резистора R14 устанавливают показания, соответствующие показаниям этого термометра. В обоих случаях размещать датчик нужно так, чтобы и он, и эталонный термометр не касались стенок, причем воду и смесь в термосе при этом следует обязательно перемешивать. Не забывайте, что каждый раз датчик следует выдерживать при соответствующей температуре не менее нескольких минут — до установления показаний.
Так как у нас при 0° мост находится в равновесии, то корректировки нуля и крутизны в целом независимы, и одной итерации достаточно, но на всякий случай следует несколько раз перенести датчик из нулевой температуры в теплую воду и обратно и при необходимости подкорректировать показания. Окончательно переменные резисторы заменяют на постоянные, которые подпаивают прямо к выводам основных (на схеме они показаны пунктиром). Эти дополнительные резисторы могут быть типа МЛТ — при условии, что основной резистор не слишком отличается от окончательного номинала. Если все сделано аккуратно, то погрешность такого термометра не превысит приблизительно 0,2 °C во всем диапазоне от -50 до +50 °C.
При использовании иных типов датчиков, например полупроводниковых, отрицательное напряжение питания в 572ПВ2 может, все же, понадобиться. Лучший способ, безусловно, — сделать нормальный двуполярный источник ±5 В. На рис. 17.11 приведены различные варианты паллиативных решений.
Рис. 17.11. Варианты организации отрицательного напряжения питания для 572ПВ2
Первый вариант (рис. 17.11, а) представляет собой однополярный источник +10 В с искусственным расщеплением. Расщепитель представляет собой просто повторитель напряжения на ОУ с умощненным выходом на комплементарных транзисторах. Обратите внимание на схему включения стабилизатора LM78L09, которая позволяет получить напряжение несколько большее, чем номинальное. Излишне предупреждать, что питание индикаторов при такой схеме обязательно должно осуществляться от отдельного источника.
Вторая схема (рис. 17.11, б) представляет собой инвертор-преобразователь положительного питания +5 В в отрицательное. Различных типов таких инверторов выпускается очень много, здесь выбран простейший нестабилизированный вариант. Преимущество преобразователя 1168ЕП1 (ICL7660, МАХ 1044) — в простоте включения, недостаток — высокое выходное сопротивление, так что при входном напряжении +5 В уже при потребляемом токе 20 мА отрицательное выходное напряжение снижается по абсолютной величине до 4,0 В (величина -4,4 В показана условно). Однако для нужд микросхемы 572ПВ2 этого вполне достаточно. Это полностью иллюстрирует рис. 17.11, в, на котором приведена схема инвертора напряжения, рекомендуемая самими разработчиками АЦП. Это на самом деле просто ухудшенный вариант того же инвертора, только работающий от тактовой частоты АЦП. Микросхема CD4009 может быть заменена на 561ПУ4 (CD4050) или на 561ЛН2 с соответствующей коррекцией разводки выводов. Подобные схемы могут особенно пригодиться для ПВ5 в случае батарейного питания — ведь обеспечить напряжение порядка 12–14 В, требующееся для нормального двуполярного источника ±5 В, в этом случае непросто.