На рис. 10.1, а график демонстрирует этот процесс во времени. Если мы меряем какую-то меняющуюся во времени величину, то приходится производить измерения регулярно. Если стоит задача потом восстановить первоначальный сигнал, то эти измерения удобно проводить со строго равными промежутками времени между ними — иначе нам будет трудно узнать, какому измерению какой момент сигнала соответствует. Получаем массив чисел, который и представляет наш исходный сигнал в цифровом виде. Зная частоту дискретизации (частоту оцифровки) и принятый масштаб (т. е. какому значению физической величины соответствует максимальное число в принятом диапазоне двоичных чисел), мы всегда можем восстановить исходный сигнал, просто отложив точки на графике и соединив их плавной линией.
Но что-то мы при этом теряем? Посмотрите на рис. 10.1, б, который иллюстрирует знаменитую теорему Котельникова (как водится, за рубежом она носит другое имя — Найквиста, на самом деле они оба придумали ее независимо друг от друга). На этом рисунке показана синусоида предельной частоты, которую мы еще можем восстановить, располагая массивом точек, полученных с частотой дискретизации fд. Так как в выражении для синуса A∙sin(2πft) имеется два независимых коэффициента (А — амплитуда и f — частота), то для того, чтобы вид кривой восстановить однозначно, нужно как минимум две точки на каждый период (если сами параметры синусоиды А и f не меняются во времени, то достаточно вообще двух точек на всем интервале времени; именно такой случай показан на графике рис. 10.1, б), т. е. частота оцифровки должна быть как минимум в два раза больше, чем самая высокая частота в спектре исходного аналогового сигнала. Это и есть теорема Котельникова — Найквиста.
Попробуйте сами нарисовать другую синусоиду без сдвига по фазе, проходящую через указанные на графике точки, и вы убедитесь, что это невозможно. В то же время можно нарисовать сколько угодно разных синусоид, проходящих через эти точки, если их частота в целое число раз выше частоты дискретизации fд. В сумме эти синусоиды, или гармоники (т. е. члены разложения сигнала в ряд Фурье), дадут сигнал любой сложной формы, но восстановить их нельзя, и если такие гармоники присутствуют в исходном сигнале, то они пропадут навсегда. Следовательно, процесс оцифровки равносилен действию ФНЧ с прямоугольным срезом характеристики на частоте, равной ровно половине частоты дискретизации.
Займемся обратным преобразованием. В сущности, никакого преобразования цифра— аналог в цифроаналоговых преобразователях (ЦАП), которые мы будем здесь рассматривать, на самом деле не происходит: просто мы выражаем двоичное число в виде пропорциональной величины напряжения, т. е. занимаемся, с точки зрения теории, всего лишь преобразованием масштабов и физическим моделированием абстрактной величины — числа. Вся аналоговая шкала поделена на кванты — градации, соответствующие разрешающей способности нашей двоичной «линейки». Если максимальное значение сигнала равно, к примеру, 2,56 В, то при восьмиразрядном коде мы получим квант в 10 мВ, и что происходит с сигналом между этими значениями, и в промежутки времени между отсчетами, мы не знаем и узнать не можем.
Если взять ряд последовательных отсчетов некоего сигнала, (например, как на рис. 10.1, a), то мы в результате получим ступенчатую картину (рис. 10.2).
Рис. 10.2.Восстановление оцифрованного сигнала с рис. 10.1, а
Если вы сравните графики на рис. 10.1, а и 10.2, то увидите, что второй график представляет первый, мягко говоря, весьма приблизительно. Для того чтобы повысить степень достоверности полученной кривой, следует, во-первых, брать отсчеты почаще, во-вторых, увеличивать разрядность. Тогда ступеньки будут все становиться меньше и меньше, и есть надежда, что при некотором достаточно высоком разрешении, как по времени, так и по уровню, кривая станет, в конце концов, неотличима от непрерывной аналоговой линии. Есть и еще один способ получения гладкой кривой — пропустить полученный сигнал через ФНЧ, в результате чего ступеньки сгладятся. (Практически это равносильно вычислению промежуточных значений методом интерполяции, считая, что от отсчета к отсчету кривая меняется по линейному или какому-нибудь еще закону.) Конечно, ФНЧ — это лишь грубая полумера, и увеличения разрядности и частоты отсчетов не заменяет.
Все изложенное касается дискретизации аналоговых сигналов во времени. Но здесь нас будет больше занимать не временной ряд оцифрованных сигналов, а получение каждого отдельного значения этого ряда — как же реализовать на практике упомянутую ранее двоичную линейку?
Начнем мы с конца, т. е. с цифроаналоговых преобразователей. Будем считать, что на входе мы имеем числа в двоичной форме — неважно, результат оцифровки сигнала или синтезированный код. Нам его нужно преобразовать в аналоговый уровень напряжения в соответствии с выбранным масштабом.
Самый простой ЦАП — десятичный или шестнадцатеричный дешифратор-распределитель, подобный 561ИД1 (см. рис. 8.7). В самом деле, если на него подать четырехразрядный код, то на выходе мы получим значения в десятичной или шестнадцатеричной форме — для каждого значения кода на отдельном выводе. Присоединив к выходам этого дешифратора линейку светодиодов, получаем полосковый (шкальный) индикатор, который с разрешением в 10 или 16 ступеней на весь диапазон будет показывать уровень некоей величины. Иногда этого достаточно.
На самом деле это, конечно, еще не настоящий ЦАП, а только его часть — он не делает операции, показанной на рис. 10.2, а лишь отображает цифровую величину наглядно. Преобразовать выход дешифратора-распределителя в уровень напряжения теоретически несложно: для этого надо выстроить делитель из цепочки одинаковых резисторов, подключить его к источнику опорного напряжения и коммутировать отводы этого делителя ключами, управляемыми от дешифратора-распределителя. Для двух- или трехразрядного кода можно использовать описанные в главе 8 мультиплексоры типа 561КП1 и 561КП2.
Но для большего числа разрядов такой ЦАП с непосредственным преобразованием превращается в совершенно чудовищную конструкцию. Для восьмиразрядного кода потребовалось бы 256 резисторов (строго одинаковых!), столько же ключей и дешифратор с таким же числом выходов, а ведь восьмиразрядный код — довольно грубая «линейка», разрешающая способность ее не превышает четверти процента. Поэтому на практике такой метод употребляют для построения АЦП, а не ЦАП (потому что, несмотря на сложность, он обладает одним уникальным свойством, о котором поговорим далее), а здесь мы даже не будем рисовать такую схему.
Рассмотрим один из самых распространенных методов, который позволяет осуществлять преобразование «код — напряжение» не прибегая к подобным «монструозным» конструкциям.
На рис. 10.3, а показан вариант реализации ЦАП на основе ОУ с коммутируемыми резисторами в цепи обратной связи. Самим нам строить такие ЦАП, конечно, не придется, но для любителей укажу, что в качестве коммутирующих ключей можно применить, например, малогабаритные электронные реле серии 293 или специализированные ключи из серии 590. Однако для осуществления переключающего контакта потребовалось бы ставить по два таких ключа на каждый разряд, потому в серии 561 предусмотрена специальная микросхема 561КТЗ, которая содержит четыре одинаковых ключа, работающие именно так, как показано на данной схеме: если подать на вход управления сигнал логической единицы, то выход ключа коммутируется на вход,
Рис. 10.3. Реализация ЦАП:
а — двухразрядный ЦАП с отрицательным выходом; б — цепочка R-2R произвольной длины; в — ЦАП с положительным выходом
Для лучшего уяснения принципов я нарисовал всего лишь двухразрядный вариант. Два разряда— это четыре градации, т. е. выходное напряжение ОУ должно принимать четыре значения с равными промежутками. В данном случае эти напряжения равны 0, а также 1/4, 1/2 и 3/4 от опорного напряжения Uоп. Как это происходит?
Рассмотрим сначала цепочку резисторов с номиналами R и 2R. Так как оба нижних по схеме резистора 2R в исходном состоянии присоединены к «земле», т. е. включены параллельно, то их суммарное сопротивление равно R. Тогда верхний по схеме резистор R и эти два резистора образуют делитель, напряжение на котором равно половине от Uоп. Предположим, на входах управления ключами оба разряда имеют нулевые значения, т. е. код принимает значения «00». В этом случае цепочка резисторов отсоединена от входа и на выходе ОУ будет напряжение, равное нулю. Пусть теперь код примет значение «01». В этом случае резистор с номиналом 2R младшего разряда переключается ко входу усилителя. Для самой цепочки «все равно» — к «земле» присоединен этот резистор или ко входу, потому что потенциал инвертирующего входа ОУ равен потенциалу неинвертирующего, т. е. тому же потенциалу «земли». Ко входу ОУ через сопротивление с номиналом 2R потечет ток, величина которого будет равна величине напряжения на его входе, т. е. Uоп/2, деленной на величину этого резистора (2R). Итого значение тока будет Uоп/4R, и ток этот создаст на резисторе обратной связи ОУ, сопротивление которого также R падение напряжения, равное Uоп/4R. Можно считать и по-другому — рассматривать инвертирующий усилитель с коэффициентом усиления 0,5, что определяется отношением сопротивлений R/2R, и напряжением на входе Uоп/2. Итого на выходе всей схемы будет напряжение Uоп/4R (но с обратным знаком, т. к. усилитель инвертирующий).
Пусть теперь код принимает значение «10». Тогда все еще проще — ко входу ОУ подключается напряжение