Ацп датчика что это
ShIoTiny и окружающий мир: аналоговые датчики или АЦП для самых маленьких
Основные тезисы или о чем эта статья
Продолжение серии статей о ShIoTiny — визуально программируемом контроллере на базе чипа ESP8266. Ключевой особенностью данного контроллера является возможность его программирования путем рисования программы в браузере.
В данной статье описана краткая теория аналого-цифрового преобразования и практическое применение АЦП контроллера ShIoTiny.
Предыдущие статьи серии.
Вступление или вместо серьезной теории
В предыдущей статье мы рассмотрели подключение основных типов датчиков с бинарным выходом к бинарным входам контроллера ShIoTiny.
Но, как известно большей части людей, а также школьников и студентов, основная часть информации об окружающем мире — это аналоговые величины различной физической природы: сила света и звука, скорость движения, давление воздуха, уровень жидкости и так далее.
Практически все современные микропроцессоры и микроконтроллеры способны обрабатывать только дискретные значения в двоичном представлении.
Для тех, кто еще не знает чем отличается аналоговая величина от дискретной напишу краткие пояснения. Кто уже все и так знает — может их пропустить. Сразу оговорюсь — аналогии и упрощения имеют место быть. Это не диссертация, а скорее краткие объяснения на пальцах.
Аналоговые и дискретные величины (профессорам, академикам и вундеркиндам можно не читать)
Математику в школе изучали все. Поэтому обратимся к ней и проведем аналогии между аналоговыми и дискретными величинами и числами.
С точки зрения математики — аналоговая величина есть число вещественное, определенное в любой точке заданного отрезка числовой прямой.
Дискретная величина с точки зрения математики есть число целое. И определено оно только в определенных точках заданного отрезка числовой прямой.
На рисунке ниже схематично представлено расположение аналоговых и дискретных величин-чисел на числовой прямой.
Для примера рассмотрим отрезок числовой прямой от -4 до 3. Как видим, дискретных величин, обозначенных красными точками — целых чисел на нем всего 8 штук. Аналоговых величин, показанных зеленой линией на рисунке — бесконечное множество.
Например, у нас есть некая величина X, имеющая диапазон значений от 0 до 127. Если мы представляем эту величину как аналоговую, то теоретически мы можем представить ее с любой точностью — например 12.123455454980 или 126.00000000007 или вообще с миллионом знаков после запятой.
Но как только в дело вступает микроконтроллер и величина X обретает дискретное представление — то ни о какой «бесконечной точности» и речи идти не может даже теоретически. Точность ограничена числом двоичных разрядов, которое мы отводим под представление величины Х.
Например, мы возьмем 7 двоичных разрядов. В этом случае мы можем представить величину Х с точностью единица. То есть можно будет указать X=1 или X=112. А вот Х=112.5 уже указать не получится — разрядности не хватит. Если мы возьмем для представления той же величины Х не 7, а 10 разрядов, то точность представления будет уже не единица, а 0.125. И в таком виде можно представить Х=95.125 или X=112.5. Но точнее, например в виде X=112.13 — уже представить эту величину нельзя.
Если вас смущает то, что я пишу дробные значения и при этом говорю о них как о целых числах то вспомните, что «дискретные точки» можно расставить на числовой прямой не через единицу, а например через 0.5 или 0.125 единицы. Но их как было, так и останется конечное значение на любом отрезке. И все свойства дискретной величины сохранятся.
Ключевое отличие дискретной величины от аналоговой — это то, что на любом конечном отрезке числовой прямой будет конечное число дискретных (целых) значений и бесконечное число значений аналоговых (вещественных). Соответственно получаем, что дискретное представление величин всегда обладает конечной точностью.
В итоге всего выше сказанного получаем тривиальный вывод. Большая часть измеримых величин реального мира — аналоговые. Микроконтроллеры работают только с дискретными числовыми представлениями величин. Поэтому, прежде, чем обрабатывать какую-нибудь аналоговую величину с помощью микроконтроллера — эту величину необходимо представить в виде дискретной. Да еще и в двоичном виде.
Такое преобразование из аналогового представления в дискретное называется аналого-цифровым преобразованием.
Аналого-цифровой преобразователь
Устройство для преобразования аналогового сигнала в цифровой называется АЦП (аналого-цифровой преобразователь).
Обычно такое устройство имеет один или несколько аналоговых входов, на которые подается аналоговый сигнал и цифровой выход с заданной разрядностью (обычно — от 8 до 16 разрядов).
В современных микроконтроллерах, в том числе и в нашем ESP8266, имеются встроенные блоки АЦП.
Какие характеристики имеют АЦП вообще и АЦП ESP8266 в частности?
Первая характеристика — это какую именно входную аналоговую величину АЦП преобразует в выходной цифровой код. Чаще всего эта величина — напряжение на аналоговом входе АЦП. Так будет и в нашем случае. Но в природе существуют и АЦП с токовым входом.
Вторая характеристика АЦП, которая нужна на практике — это диапазон значений входной величины АЦП. В нашем случае — это минимальное и максимальное значения напряжения на входе АЦП. Эти значения будут 0В и 1В соответственно. Диапазон входных значений 1В кажется небольшим, но большие напряжения всегда можно поделить и уменьшить, а малые напряжения — усилить.
Третья и, пожалуй, самая важная характеристика АЦП это его разрядность. Эта величина определяет точность преобразования или (по нашей аналогии) — как часто расставлены «дискретные» точки на «вещественной» числовой прямой. В нашем случае АЦП имеет разрядность 10. Что это значит? А это значит, что выходной цифровой код представлен 10 двоичными разрядами и имеет 1024 значения — от 0 до 1023.
Строго говоря, стоит помнить, что точность преобразования зависит не только от разрядности, но и от ряда других параметров, например линейности АЦП. Но об этом уже много написано очень умными дядями в очень умных книгах, поэтому в этой статье я оставлю читателя без подробностей.
Кроме того АЦП ESP8266 умеет определять переполнение, то есть ситуацию, когда на вход подано напряжение больше 1В.
Если вы возьмете умный справочник по АЦП и загляните туда — то там будут еще десятки характеристик. Все они нужные и важные, но так далеко мы углубляться не будем. Например, мы не будем касаться в временных параметров АЦП, так как считаем, что в нашем случае измеряемые величины изменяются достаточно медленно и АЦП их преобразует в цифровое представление «мгновенно».
Подведем предварительный итог.
В контроллере ShIoTiny имеется АЦП, встроенный в ESP8266.
На вход АЦП ESP8266 подается напряжение в диапазоне от 0 до 1В.
На выходе АЦП ESP8266 мы получаем число, пропорциональное входному напряжению в диапазоне от 0 до 1023. Напряжению 0В соответствует код 0 на выходе АЦП, напряжению 1В соответствует код 1023 на выходе АЦП.
Считывание данных с АЦП в ShIoTiny производятся со скоростью примерно 10 раз в секунду.
Аппаратно вход АЦП защищен от перенапряжения, аналогично тому, как защищены бинарные входы Input1,2,3 (см. тут).
Вот и все, что касается аппаратного обеспечения АЦП ShIoTiny.
Займемся теперь узлом ADC1, который обрабатывает данные с аппаратного АЦП ESP8266.
Программные навороты или узел ADC1
На схеме-программе в редакторе ElDraw, узел аналого-цифрового преобразователя называется ADC1.
Как уже упоминалось, узел ADC1 примерно 10 раз в секунду получает данные с аппаратного АЦП ESP8266. Но на этом указанный узел не успокаивается, а начинает эти данные обрабатывать и даже чуть-чуть анализировать.
Во-первых, проверяется — а не было ли переполнения АЦП? То есть — а не подали ли на вход АЦП больше 1В? Если такая ситуация обнаружена — то на выход узла ADC1 выставляется значение NAN (не число).
Во-вторых, если не было переполнения, то выходное значение АЦП 0..1023 преобразуется в величину напряжения на входе АЦП — число с плавающей точкой в диапазоне 0..1.
В-третьих, это преобразованное значение 0..1 пересчитывается по формуле , где — напряжение на входе АЦП (от 0 до 1В); k — диапазон (ADC range) и b — смещение (ADC offset). И, наконец, полученное значение X выставляется на выход узла ADC1.
И, наконец в пятых. Если значение величины Х изменилось на заданный процент (от 1 до 100%), то узел АЦП генерирует события, вызывая пересчет значений подключенных к нему узлов. Это по сути параметр «чувствительности АЦП» (ADC changes, range %). Ведь обычно нет смысла реагировать «на каждый чих», то есть на мизерные изменения в младших разрядах АЦП — они часто «шумят». Поэтому параметр чувствительности имеет большое практическое значение.
Встает законный вопрос — как нам настроить эти параметры? Ткните указателем мыши в узел ADC1 на схеме и тут же у вас появится окно настройки.
В нем можете выставить все, что вам нужно. Для нашего случая это будет такое окно, как на рисунке.
В этом окне можно задать все параметры, о которых говорилось выше — диапазон, смещение и чувствительность АЦП.
Если вы ничего не задали, то диапазон будет равен 1. Смещение — ноль. И чувствительность — 1%.
То есть по умолчанию, фактически на выходе узла ADC1 будет значение аналогового напряжения, подаваемого на вход АЦП.
Как видим, узел ADC1 довольно сложен. Зачем все это сделано? Да для вас, дорогие мои пользователи! Шучу, конечно, как злобный эгоист я учел предыдущий опыт и постарался облегчить себе жизнь.
Нам, как простым инженерам, хочется чтобы величины были представлены не в «попугаях», а в нормальных и понятных значениях — вольтах, амперах, килограммах или метрах.
Многие датчики выдают значение именно «в попугаях», надеясь на то, что умный микроконтроллер пересчитает их в нужные величины.
Именно для этого и был введен пересчет измеренного АЦП значения по функции заданной.
Но, как водится, лучше один раз увидеть, чем десять раз услышать. Так же как лучше один раз попробовать, чем десять раз увидеть… Но не о том речь.
Потому приведу пару не сложных примеров: систему контроля питающей сети и систему измерения температуры на основе датчика с токовым выходом 4-20мА.
Контроль питающей сети
Измерение напряжения — часто возникающая задача. Например, мы хотим измерить напряжение питающей сети
220В. Если у нас плохо с электросетью — задача очень реальная. Нам не нужно очень-очень точного изменения. Достаточно чтобы при превышении напряжения на 15% от нормы на ShIoTiny срабатывало реле Relay1, а при понижении напряжения на 15% от нормы срабатывало реле Relay2.
Разумеется, воткнуть вход ADC1 контролера ShIoTIny в розетку мы не можем. Что делать? Во-первых напряжение надо понизить до приемлемого уровня — 0..1В. И, во-вторых его надо выпрямить: переменное напряжение наш АЦП измерить не может.
Напряжение в сети может быть как ниже нормы, так и выше нормы. Для простоты положим, что 220В сетевого напряжения будет соответствовать 0.5В напряжения на входе АЦП.
Далее — ищем любой понижающий трансформатор, который при
220В входного напряжения выдаст нам, скажем
3В выходного напряжения и собираем такую схему, как на рисунке ниже.
Тут несведущего в электронике может поджидать сюрприз. На выходе выпрямителя неожиданно появляется не 3В постоянного напряжения, а какие-то 4В с лишним! На самом деле все просто объясняется. Когда мы измеряем переменное напряжение, то вольтметр показывает нам действующее значение напряжения. А когда мы это напряжение выпрямляем — то на выходе выпрямителя получаем пиковое значение напряжения, которое для синусоидального сигнала примерно в 1.41, а точно в раз больше действующего. Отсюда и «непонятные» 4.23В на выходе выпрямителя.
Ну и наконец, нам надо рассчитать делитель напряжения, то есть сопротивления R1 и R2. Нам необходимо получить на выходе делителя 0.5В при напряжении на его входе 4.23В. Значит выпрямленное напряжение 4.23В надо поделить в 8.46 раз. Для этого надо установить резистор R2=100 Ом, а резистор R1=746 Ом. Но это в идеале. Реально резисторов сопротивлением 746 Ом не бывает. Да и трансформаторы особой точностью не отличаются. Поэтому, если кто рискнет попробовать это решение, я настоятельно советую поставить резистор R1=760 Ом, а резистор R2 взять подстроечный, сопротивлением 180 Ом или на 220 Ом. Тогда вы сможете, вооружившись вольтметром, отрегулировать R2 так, что при
220В напряжения на первичной обмотке трансформатор, на выходе делителя (или, что то же самое, на входе ADC1) будет =0.5В.
Мы измеряем напряжение не просто так, а чтобы по его превышению или понижению от нормы что-то делать. Например, включать резервное питание, чтобы какое-то устройство не сгорело и не отключилось.
Поэтому нарисуем простейшую схему-программу, которая при превышении напряжения на 15% от нормы заставляет срабатывать реле Relay1, а при понижении напряжения на 15% от нормы заставляет срабатывать реле Relay2. Кроме того, повышенное или пониженное напряжение должны продержаться в сети не менее 1 минуты, чтобы вызвать срабатывание реле. Этим мы избежим ложных срабатываний при коротких пиках напряжения, которые часто возникают в сети. Схема-программа, реализующая нашу задумку, показана на рисунке.
Чтобы эта схема работала, надо в настройках параметров АЦП выставить коэффициент k (диапазон) равный 440, как показано на рисунке.
При коэффициенте 440 и напряжении напряжении на входе АЦП 0.5В на выходе узла ADC1 будет значение 220. То есть реальное сетевое напряжение!
Это очень удобно, потому что позволяет задать константы сразу в вольтах: 220В+15% это 253В и 220В-15% это 187В. При необходимости эти значения можно легко изменить, не тратя время на расчет и перевод напряжения в «попугаи».
Датчик температуры 4-20мА
Датчики, имеющие токовый выход 4-20мА очень распространены в промышленности. В быту их встретишь не часто. Но тем не менее у кого-то они есть и этот кто-то хочет приспособить их к делу.
АЦП позволяет использовать такие датчики совместно с контролером ShIoTiny.
Почему выход датчика токовый и именно 4-20мА? Поясню.
Токовые выходы хорошо работают на длинных линиях. Скажем километр. Им плевать на сопротивление проводов: ток одинаков по всей длине провода вне зависимости от сопротивления проводников.
Начальное значение тока 4мА, а не просто отсутствие тока позволяет легко обнаружить обрыв провода. Если датчик целый и провод не оборван — то ток всегда есть. Хотя бы 4мА. А если оборвался провод — тока нет (0мА).
Предположим, у нас есть датчик температуры с токовым выходом 4-20мА и диапазоном измеряемой температуры от -40С до +125С. Мы хотим его подключить к ShIoTinу. Первое, что нам нужно сделать — это преобразовать ток в напряжение. Идеальным средством для такого преобразования является обычный резистор.
Так как максимальное напряжение на входе АЦП 1В, а максимальный ток в линии — 20мА, то несложно посчитать, что резистор, преобразующий 20мА в 1В будет иметь сопротивление 50 Ом. (Не знаешь закон Ома — сиди дома!).
Мы подключим наш датчик так, как показано на рисунке.
Датчик является генератором тока, пропорционального измеренной температуре. При сопротивлении 50 Ом, подключенном параллельно входу ADC1, на входе АЦП будут следующие значения напряжения, в зависимости от тока, создаваемого в цепи датчика:
Предположим, мы хотим измерить температуру и опубликовать ее по MQTT. Кроме того мы будем публиковать состояние датчика (обрыв линии, КЗ или все в порядке).
Первое, что нам надо сделать — пересчитать значение из «попугаев» в градусы. Зная, что температуре -40С соответствует ток 4мА и напряжение на входе АЦП 0.2В, а температуре +125С соответствует ток 20мА и напряжение на входе АЦП 1В, получаем коэффициенты: k=206.25 и b=-81.25. Вводим эти коэффициенты в окне настройки АЦП, как показано на рисунке.
Кто хочет сам проверить правильность расчета k и b — решите сами простейшую систему систему уравнений:
Ну а схема-программа будет совсем не сложной и приведена на рисунке ниже.
В случае, когда все хорошо и датчик температуры 4-20мА исправен — температура публикуется на MQTT сервере под именем /t_sens. Признаки аварии так же публикуются под именами /sens_short и /sens_break. Если все хорошо, то признаки аварии — нулевые.
Если произошел обрыв линии, то значение температуры будет меньше -40С. В этом случае параметр /sens_break на MQTT брокере будет опубликован как единица.
Если произошло КЗ в линии, то значение температуры будет больше +125С. В этом случае у нас на входе АЦП будет напряжение больше 1В и узел АЦП выставит на своем выходе значение NAN (не-число). В этом случае параметр /sens_short на MQTT брокере будет опубликован как единица.
При возникновении любой из аварий сработает реле Relay3, которое может, например, отключить питание датчика.
Получился вполне себе «умный» датчик, который можно вынести, например, за 200 метров от контроллера и измерять температуру.
Заключение
Закончив обзор примеров АЦП на ShIoTiny я понял, что его можно продолжать и продолжать. Но это будет уже на статья, а учебник.
Прошу снисхождения, если кому-то материал показался излишне «детским» и подробным, а кому-то напротив, что-то осталось не ясно.
Как обычно — конструктивная критика и предложения приветствуются. Кроме этого приветствуются замечания и предложения.
Отправлять все это можно как обычно в комментарии или на почту: shiotiny@yandex.ru.
Ссылки
Так как в статье есть масса стороннего материал, который требует пояснения, то без ссылок не обойтись.
Аналого-цифровое преобразование для начинающих
В этой статье рассмотрены основные вопросы, касающиеся принципа действия АЦП различных типов. При этом некоторые важные теоретические выкладки, касающиеся математического описания аналого-цифрового преобразования остались за рамками статьи, но приведены ссылки, по которым заинтересованный читатель сможет найти более глубокое рассмотрение теоретических аспектов работы АЦП. Таким образом, статья касается в большей степени понимания общих принципов функционирования АЦП, чем теоретического анализа их работы.
«
В качестве отправной точки дадим определение аналого-цифровому преобразованию. Аналого-цифровое преобразование – это процесс преобразования входной физической величины в ее числовое представление. Аналого-цифровой преобразователь – устройство, выполняющее такое преобразование. Формально, входной величиной АЦП может быть любая физическая величина – напряжение, ток, сопротивление, емкость, частота следования импульсов, угол поворота вала и т.п. Однако, для определенности, в дальнейшем под АЦП мы будем понимать исключительно преобразователи напряжение-код.
Понятие аналого-цифрового преобразования тесно связано с понятием измерения. Под измерением понимается процесс сравнения измеряемой величины с некоторым эталоном, при аналого-цифровом преобразовании происходит сравнение входной величины с некоторой опорной величиной (как правило, с опорным напряжением). Таким образом, аналого-цифровое преобразование может рассматриваться как измерение значения входного сигнала, и к нему применимы все понятия метрологии, такие, как погрешности измерения.
Основные характеристики АЦП
АЦП имеет множество характеристик, из которых основными можно назвать частоту преобразования и разрядность. Частота преобразования обычно выражается в отсчетах в секунду (samples per second, SPS), разрядность – в битах. Современные АЦП могут иметь разрядность до 24 бит и скорость преобразования до единиц GSPS (конечно, не одновременно). Чем выше скорость и разрядность, тем труднее получить требуемые характеристики, тем дороже и сложнее преобразователь. Скорость преобразования и разрядность связаны друг с другом определенным образом, и мы можем повысить эффективную разрядность преобразования, пожертвовав скоростью.
Существует множество типов АЦП, однако в рамках данной статьи мы ограничимся рассмотрением только следующих типов:
Наибольшим быстродействием и самой низкой разрядностью обладают АЦП прямого (параллельного) преобразования. Например, АЦП параллельного преобразования TLC5540 фирмы Texas Instruments обладает быстродействием 40MSPS при разрядности всего 8 бит. АЦП данного типа могут иметь скорость преобразования до 1 GSPS. Здесь можно отметить, что еще большим быстродействием обладают конвейерные АЦП (pipelined ADC), однако они являются комбинацией нескольких АЦП с меньшим быстродействием и их рассмотрение выходит за рамки данной статьи.
Среднюю нишу в ряду разрядность-скорость занимают АЦП последовательного приближения. Типичными значениями является разрядность 12-18 бит при частоте преобразования 100KSPS-1MSPS.
Наибольшей точности достигают сигма-дельта АЦП, имеющие разрядность до 24 бит включительно и скорость от единиц SPS до единиц KSPS.
Еще одним типом АЦП, который находил применение в недавнем прошлом, является интегрирующий АЦП. Интегрирующие АЦП в настоящее время практически полностью вытеснены другими типами АЦП, но могут встретиться в старых измерительных приборах.
АЦП прямого преобразования
АЦП прямого преобразования получили широкое распространение в 1960-1970 годах, и стали производиться в виде интегральных схем в 1980-х. Они часто используются в составе «конвейерных» АЦП (в данной статье не рассматриваются), и имеют разрядность 6-8 бит при скорости до 1 GSPS.
Архитектура АЦП прямого преобразования изображена на рис. 1
Рис. 1. Структурная схема АЦП прямого преобразования
Принцип действия АЦП предельно прост: входной сигнал поступает одновременно на все «плюсовые» входы компараторов, а на «минусовые» подается ряд напряжений, получаемых из опорного путем деления резисторами R. Для схемы на рис. 1 этот ряд будет таким: (1/16, 3/16, 5/16, 7/16, 9/16, 11/16, 13/16) Uref, где Uref – опорное напряжение АЦП.
Пусть на вход АЦП подается напряжение, равное 1/2 Uref. Тогда сработают первые 4 компаратора (если считать снизу), и на их выходах появятся логические единицы. Приоритетный шифратор (priority encoder) сформирует из «столбца» единиц двоичный код, который фиксируется выходным регистром.
Теперь становятся понятны достоинства и недостатки такого преобразователя. Все компараторы работают параллельно, время задержки схемы равно времени задержки в одном компараторе плюс время задержки в шифраторе. Компаратор и шифратор можно сделать очень быстрыми, в итоге вся схема имеет очень высокое быстродействие.
Но для получения N разрядов нужно 2^N компараторов (и сложность шифратора тоже растет как 2^N). Схема на рис. 1. содержит 8 компараторов и имеет 3 разряда, для получения 8 разрядов нужно уже 256 компараторов, для 10 разрядов – 1024 компаратора, для 24-битного АЦП их понадобилось бы свыше 16 млн. Однако таких высот техника еще не достигла.
АЦП последовательного приближения
АЦП последовательного приближения реализует алгоритм «взвешивания», восходящий еще к Фибоначчи. В своей книге «Liber Abaci» (1202 г.) Фибоначчи рассмотрел «задачу о выборе наилучшей системы гирь», то есть о нахождении такого ряда весов гирь, который бы требовал для нахождения веса предмета минимального количества взвешиваний на рычажных весах. Решением этой задачи является «двоичный» набор гирь. Подробнее о задаче Фибоначчи можно прочитать, например, здесь: http://www.goldenmuseum.com/2015AMT_rus.html.
Аналого-цифровой преобразователь последовательного приближения (SAR, Successive Approximation Register) измеряет величину входного сигнала, осуществляя ряд последовательных «взвешиваний», то есть сравнений величины входного напряжения с рядом величин, генерируемых следующим образом:
1. на первом шаге на выходе встроенного цифро-аналогового преобразователя устанавливается величина, равная 1/2Uref (здесь и далее мы предполагаем, что сигнал находится в интервале (0 – Uref).
2. если сигнал больше этой величины, то он сравнивается с напряжением, лежащим посередине оставшегося интервала, т.е., в данном случае, 3/4Uref. Если сигнал меньше установленного уровня, то следующее сравнение будет производиться с меньшей половиной оставшегося интервала (т.е. с уровнем 1/4Uref).
3. Шаг 2 повторяется N раз. Таким образом, N сравнений («взвешиваний») порождает N бит результата.
Рис. 2. Структурная схема АЦП последовательного приближения.
Таким образом, АЦП последовательного приближения состоит из следующих узлов:
1. Компаратор. Он сравнивает входную величину и текущее значение «весового» напряжения (на рис. 2. обозначен треугольником).
2. Цифро-аналоговый преобразователь (Digital to Analog Converter, DAC). Он генерирует «весовое» значение напряжения на основе поступающего на вход цифрового кода.
3. Регистр последовательного приближения (Successive Approximation Register, SAR). Он осуществляет алгоритм последовательного приближения, генерируя текущее значение кода, подающегося на вход ЦАП. По его названию названа вся данная архитектура АЦП.
4. Схема выборки-хранения (Sample/Hold, S/H). Для работы данного АЦП принципиально важно, чтобы входное напряжение сохраняло неизменную величину в течение всего цикла преобразования. Однако «реальные» сигналы имеют свойство изменяться во времени. Схема выборки-хранения «запоминает» текущее значение аналогового сигнала, и сохраняет его неизменным на протяжении всего цикла работы устройства.
Достоинством устройства является относительно высокая скорость преобразования: время преобразования N-битного АЦП составляет N тактов. Точность преобразования ограничена точностью внутреннего ЦАП и может составлять 16-18 бит (сейчас стали появляться и 24-битные SAR ADC, например, AD7766 и AD7767).
И, наконец, самый интересный тип АЦП – сигма-дельта АЦП, иногда называемый в литературе АЦП с балансировкой заряда. Структурная схема сигма-дельта АЦП приведена на рис. 3.
Рис.3. Структурная схема сигма-дельта АЦП.
Принцип действия данного АЦП несколько более сложен, чем у других типов АЦП. Его суть в том, что входное напряжение сравнивается со значением напряжения, накопленным интегратором. На вход интегратора подаются импульсы положительной или отрицательной полярности, в зависимости от результата сравнения. Таким образом, данный АЦП представляет собой простую следящую систему: напряжение на выходе интегратора «отслеживает» входное напряжение (рис. 4). Результатом работы данной схемы является поток нулей и единиц на выходе компаратора, который затем пропускается через цифровой ФНЧ, в результате получается N-битный результат. ФНЧ на рис. 3. Объединен с «дециматором», устройством, снижающим частоту следования отсчетов путем их «прореживания».
Рис. 4. Сигма-дельта АЦП как следящая система
Ради строгости изложения, нужно сказать, что на рис. 3 изображена структурная схема сигма-дельта АЦП первого порядка. Сигма-дельта АЦП второго порядка имеет два интегратора и две петли обратной связи, но здесь рассматриваться не будет. Интересующиеся данной темой могут обратиться к [3].
На рис. 5 показаны сигналы в АЦП при нулевом уровне на входе (сверху) и при уровне Vref/2 (снизу).
Рис. 5. Сигналы в АЦП при разных уровнях сигнала на входе.
Более наглядно работу сигма-дельта АЦП демонстрирует небольшая программа, находящаяся тут: http://designtools.analog.com/dt/sdtutorial/sdtutorial.html.
Теперь, не углубляясь в сложный математический анализ, попробуем понять, почему сигма-дельта АЦП обладают очень низким уровнем собственных шумов.
Рассмотрим структурную схему сигма-дельта модулятора, изображенную на рис. 3, и представим ее в таком виде (рис. 6):
Рис. 6. Структурная схема сигма-дельта модулятора
Здесь компаратор представлен как сумматор, который суммирует непрерывный полезный сигнал и шум квантования.
Пусть интегратор имеет передаточную функцию 1/s. Тогда, представив полезный сигнал как X(s), выход сигма-дельта модулятора как Y(s), а шум квантования как E(s), получаем передаточную функцию АЦП:
То есть, фактически сигма-дельта модулятор является фильтром низких частот (1/(s+1)) для полезного сигнала, и фильтром высоких частот (s/(s+1)) для шума, причем оба фильтра имеют одинаковую частоту среза. Шум, сосредоточенный в высокочастотной области спектра, легко удаляется цифровым ФНЧ, который стоит после модулятора.
Рис. 7. Явление «вытеснения» шума в высокочастотную часть спектра
Однако следует понимать, что это чрезвычайно упрощенное объяснение явления вытеснения шума (noise shaping) в сигма-дельта АЦП.
Итак, основным достоинством сигма-дельта АЦП является высокая точность, обусловленная крайне низким уровнем собственного шума. Однако для достижения высокой точности нужно, чтобы частота среза цифрового фильтра была как можно ниже, во много раз меньше частоты работы сигма-дельта модулятора. Поэтому сигма-дельта АЦП имеют низкую скорость преобразования.
Они могут использоваться в аудиотехнике, однако основное применение находят в промышленной автоматике для преобразования сигналов датчиков, в измерительных приборах, и в других приложениях, где требуется высокая точность. но не требуется высокой скорости.
Самым старым упоминанием АЦП в истории является, вероятно, патент Paul M. Rainey, «Facsimile Telegraph System,» U.S. Patent 1,608,527, Filed July 20, 1921, Issued November 30, 1926. Изображенное в патенте устройство фактически является 5-битным АЦП прямого преобразования.
Рис. 8. Первый патент на АЦП
Рис. 9. АЦП прямого преобразования (1975 г.)
Устройство, изображенное на рисунке, представляет собой АЦП прямого преобразования MOD-4100 производства Computer Labs, 1975 года выпуска, собранный на основе дискретных компараторов. Компараторов 16 штук (они расположены полукругом, для того, чтобы уравнять задержку распространения сигнала до каждого компаратора), следовательно, АЦП имеет разрядность всего 4 бита. Скорость преобразования 100 MSPS, потребляемая мощность 14 ватт.
На следующем рисунке изображена продвинутая версия АЦП прямого преобразования.
Рис. 10. АЦП прямого преобразования (1970 г.)
Устройство VHS-630 1970 года выпуска, произведенное фирмой Computer Labs, содержало 64 компаратора, имело разрядность 6 бит, скорость 30MSPS и потребляло 100 ватт (версия 1975 года VHS-675 имела скорость 75 MSPS и потребление 130 ватт).