код ацп что это

Что такое АЦП

АЦП применяется в цифровой технике. В частности, почти все современные микроконтроллеры имеют встроенный АЦП.

Как вы уже наверняка знаете, микропроцессоры (как и компьютерные процессоры) не понимают ничего, кроме двоичных чисел. Из этого следует, что микропроцессор (который является основой любого микроконтроллера) не может напрямую обработать аналоговый сигнал.

Для того, чтобы объяснить это микропроцессору, который, как мы помним, понимает только двоичные числа, используется АЦП, который, как я уже сказал, преобразует аналоговый сигнал в двоичный код. Далее в общих чертах рассмотрим работу АЦП.

Принцип работы АЦП

Итак, мы узнали, что АЦП преобразует аналоговый сигнал в цифровой. Но как он это делает?

Итак, первым делом АЦП должен преобразовать аналоговый сигнал в дискретный. Для чего это нужно?

А как же, например, напряжение 4,3 В? Да никак. Оно просто округляется, и АЦП преобразует его в число 4. Этот простой пример отображён на рисунке ниже.

Расскажу и об этом, но сначала о разрядности АЦП.

Разрядность АЦП

Это значит, что измеряемый диапазон (сигнал на входе АЦП или на аналоговом входе микроконтроллера) мы можем разбить на 256 значений. Таким образом мы можем определить точность измеряемого значения, которую может обеспечить данный АЦП. Сделать это можно по формуле:

Например, если у нас 8-разрядный АЦП, и мы хотим измерять напряжение в диапазоне 0. 255В, то точность измерений будет:

256 / 2 8 = 256 / 256 = 1 В

Если же мы хотим измерять напряжение с этим же АЦП в диапазоне 0. 15В, то точность измерений будет:

16 / 2 8 = 16 / 256 = 0,0625 В

Из этого следует, что для того, чтобы повысить точность, требуется либо сузить диапазон измеряемых значений, либо повысить разрядность АЦП. Например:

256 / 212 = 256 / 4096 = 0,0625 В

То есть 12-разрядный АЦП обеспечит уже довольно высокую точность даже при измерении сигналов с относительно большим диапазоном значений.

АЦП микроконтроллера обычно измеряет только напряжение в диапазоне от 0 до напряжения питания микроконтроллера.

Характеристики АЦП

Все эти характеристики описаны в документации на АЦП (если он выполнен в виде отдельной микросхемы) или в документации на микроконтроллер (если АЦП встроен в микроконтроллер).

Кроме разрядности, о которой мы уже говорили, можно назвать ещё несколько основных характеристик.

1 LSB = 1 / 2 8 = 1 / 256 = 0,004 В

Иными словами, эта характеристика определяет, насколько “кривой” может быть линия на графике выходного сигнала, которая в идеале должна быть прямой (см. рис.).

Абсолютная точность. Также измеряется в LSB. Иными словами, это погрешность измерения. Например, если эта характеристика равна +/- 2 LSB, а LSB = 0,05 В, то это означает, что погрешность измерений может достигать +/- 2*0,05 = +/- 0,1В.

Есть у АЦП и другие характеристики. Но для начала и этого более чем достаточно.

Подключение АЦП

АЦП в основном измеряют напряжение.

Попробую рассказать о том (в общих чертах), как подключить аналоговый датчик к АЦП и как потом разобраться с теми значениями, которые будет выдавать АЦП.

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

Определить напряжение по температуре визуально можно по графику (см. рис. выше). Но микроконтроллер глаз не имеет (хотя, конечно, можно поразвлекаться и создать устройство на микроконтроллере, способное распознавать образы и определять значение температуры по напряжению на графике, но оставим эти развлечения фанатам робототехники)))

То есть в шкалу от 0 до 1 нам надо впихнуть диапазон от 0 до 200 (всего 201).

Находим коэффициент преобразования:

К = U / Tд = 1 / 200 = 0,005 (1)

Теперь у нас есть все необходимые данные, чтобы в программе микроконтроллера преобразовать значение на выходе АЦП в значение температуры.

Мы помним, что мы сместили диапазон температур на 50 градусов. Это надо учитывать при преобразовании значения на выходе АЦП в температуру.

А формула будет такая:

Например, если на выходе АЦП 0,5 В, то

Теперь нам надо определить дискретность, то есть желаемую точность измерений.

Как вы помните, абсолютная погрешность может составлять несколько LSB. К тому же ещё существуют нелинейные искажения, которые обычно равны 0,5 LSB. То есть общая погрешность АЦП может доходить до 2-3 LSB.

В нашем случае это:

Uп = 3 LSB * 0,005 = 0,015 В

Если в вашем случае не так всё гладко, то снова используем формулу, выведенную из (1):

Тд = Uп / K = 0,015 / 0,005 = 3

Если погрешность в 3 градуса вас устраивает, то можно ничего не менять. Ну а если нет, то придётся подобрать АЦП с большей разрядностью либо подыскать другой датчик (с другим температурным диапазоном или с другим выходным напряжением).

Тогда абсолютная погрешность будет:

Тд = Uп / K = 0,015 / 0,01 = 1,5 градуса.

Это уже более-менее приемлемо. Ну а если у вас будет датчик с выходом 0. 5В (это тоже стандартный сигнал), то

А абсолютная погрешность будет:

Тд = Uп / K = 0,015 / 0,05 = 0,3 градуса.

Это уже вообще ништяк.

Но! Не забывайте, что здесь мы рассматриваем только погрешность АЦП. Но и у самого датчика тоже есть погрешность, которую также надо учитывать.

Но всё это уже из области электроники и метрологии, поэтому данную статью я здесь и закончу.

А в конце на всякий случай приведу формулу обратного преобразования температуры в напряжение:

Источник

Как работают аналого-цифровые преобразователи и что можно узнать из спецификации на АЦП?

Вольфганг Райс (Wolfgang Reis, WBC GmbH)
Журнал «Компоненты и технологии», № 3’2005

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

Существует несколько основных типов архитектуры АЦП, хотя в пределах каждого типа существует также множество вариаций. Различные типы измерительного оборудования используют различные типы АЦП. Например, в цифровом осциллографе используется высокая частота дискретизации, но не требуется высокое разрешение. В цифровых мультиметрах нужно большее разрешение, но можно пожертвовать скоростью измерения. Системы сбора данных общего назначения по скорости дискретизации и разрешающей способности обычно занимают место между осциллографами и цифровыми мультиметрами. В оборудовании такого типа используются АЦП последовательного приближения либо сигма-дельта АЦП. Существуют также параллельные АЦП для приложений, требующих скоростной обработки аналоговых сигналов, и интегрирующие АЦП с высокими разрешением и помехоподавлением.

На рис.1. показаны возможности основных архитектур АЦП в зависимости от разрешения и частоты дискретизации.

Параллельные АЦП

Большинство высокоскоростных осциллографов и некоторые высокочастотные измерительные приборы используют параллельные АЦП из-за их высокой скорости преобразования, которая может достигать 5Г (5*10 9 ) отсчетов/сек для стандартных устройств и 20Г отсчетов/сек для оригинальных разработок. Обычно параллельные АЦП имеют разрешение до 8 разрядов, но встречаются также 10-ти разрядные версии.

АЦП последовательного приближения

Когда необходимо разрешение 12, 14 или 16 разрядов и не требуется высокая скорость преобразования, а определяющими факторами являются невысокая цена и низкое энергопотребление, то обычно применяют АЦП последовательного приближения. Этот тип АЦП чаще всего используется в разнообразных измерительных приборах и в системах сбора данных. В настоящий момент АЦП последовательного приближения позволяют измерять напряжение с точностью до 16 разрядов с частотой дискретизации от 100К (1х10 3 ) до 1М (1х10 6 ) отсчетов/сек.

Рис. 3 показывает упрощенную блок-схему АЦП последовательного приближения. В основе АЦП данного типа лежит специальный регистр последовательного приближения. В начале цикла преобразования все выходы этого регистра устанавливаются в логический 0, за исключением первого (старшего) разряда. Это формирует на выходе внутреннего цифро-аналогового преобразователя (ЦАП) сигнал, значение которого равно половине входного диапазона АЦП. А выход компаратора переключается в состояние, определяющее разницу между сигналом на выходе ЦАП и измеряемым входным напряжением.

Например, для 8-разрядного АЦП последовательного приближения (рис. 4) выходы регистра при этом устанавливаются в «10000000». Если входное напряжение меньше половины входного диапазона АЦП, тогда выход компаратора примет значение логического 0. Это дает регистру последовательного приближения команду переключить свои выходы в состояние «01000000», что соответственно приведет к изменению выходного напряжения с ЦАП, подаваемого на компаратор. Если при этом выход компаратора по-прежнему оставался бы в «0», то выходы регистра переключились бы в состояние «00100000». Но на этом такте преобразования выходное напряжение ЦАП меньше, чем входное напряжение (рис. 4), и компаратор переключается в состояние логической 1. Это предписывает регистру последовательного приближения сохранить «1» во втором разряде и подать «1» на третий разряд. Описанный алгоритм работы затем вновь повторяется до последнего разряда. Таким образом, АЦП последовательного приближения требуется один внутренний такт преобразования для каждого разряда, или N тактов для N-разрядного преобразования.

Тем не менее, работа АЦП последовательного приближения имеет особенность, связанную с переходными процессами во внутреннем ЦАП. Теоретически, напряжение на выходе ЦАП для каждого из N внутренних тактов преобразования должно устанавливаться за одинаковый промежуток времени. Но на самом деле этот промежуток в первых тактах значительно больше, чем в последних. Поэтому время преобразования 16-разрядного АЦП последовательного приближения более, чем в два раза превышает время преобразования 8-разрядного АЦП данного типа.

Сигма-дельта АЦП

Для проведения большинства измерений часто не требуется АЦП со скоростью преобразования, которую даёт АЦП последовательного приближения, зато необходима большая разрешающая способность. Сигма-дельта АЦП могут обеспечивать разрешающую способность до 24 разрядов, но при этом уступают в скорости преобразования. Так, в сигма-дельта АЦП при 16 разрядах можно получить частоту дискретизации до 100К отсчетов/сек, а при 24 разрядах эта частота падает до 1К отсчетов/сек и менее, в зависимости от устройства.

Обычно сигма-дельта АЦП применяются в разнообразных системах сбора данных и в измерительном оборудовании (измерение давления, температуры, веса и т.п.), когда не требуется высокая частота дискретизации и необходимо разрешение более 16 разрядов.

Принцип работы сигма-дельта АЦП сложнее для понимания. Эта архитектура относится к классу интегрирующих АЦП. Но основная особенность сигма-дельта АЦП состоит в том, что частота следования выборок, при которых собственно и происходит анализ уровня напряжения измеряемого сигнала, существенно превышает частоту появления отсчетов на выходе АЦП (частоту дискретизации). Эта частота следования выборок называется частотой передискретизации. Так, сигма-дельта АЦП со скоростью преобразования 100К отсчетов/сек, в котором используется частота передискретизации в 128 раз больше, будет производить выборку значений входного аналогового сигнала с частотой 12.8М отсчетов/сек.

Блок-схема сигма-дельта АЦП первого порядка приведена на рис. 5. Аналоговый сигнал подается на интегратор, выходы которого подсоединены к компаратору, который в свою очередь присоединен к 1-разрядному ЦАП в петле обратной связи. Путем серии последовательных итераций интегратор, компаратор, ЦАП и сумматор дают поток последовательных битов, в котором содержится информация о величине входного напряжения.

Так как внутренний цифровой ФНЧ в сигма-дельта АЦП представляет собой неотъемлемую часть для осуществления процесса преобразования, время установления ФНЧ становится фактором, который необходимо учитывать при скачкообразном изменении входного сигнала. Например, при переключении входного мультиплексора или при переключении предела измерения прибора необходимо подождать, пока пройдут несколько отсчетов АЦП, и лишь потом считывать корректные выходные данные.

Дополнительным и очень важным достоинством сигма-дельта АЦП является то, что все его внутренние узлы могут быть выполнены интегральным способом на площади одного кремниевого кристалла. Это заметно снижает стоимость конечных устройств и повышает стабильность характеристик АЦП.

Интегрирующие АЦП

На рисунке 6 показан принцип работы АЦП двухтактного интегрирования. Входной сигнал заряжает конденсатор в течение фиксированного периода времени, который обычно составляет один период частоты питающей сети (50 или 60Гц) или кратен ему. При интегрировании входного сигнала в течение промежутка времени такой длительности высокочастотные помехи подавляются. Одновременно исключается влияние нестабильности напряжения сетевого источника питания на точность преобразования. Это происходит потому, что значение интеграла от синусоидального сигнала равно нулю, если интегрирование осуществляется во временном интервале, кратном периоду изменения синусоиды.

По окончании времени заряда АЦП разряжает конденсатор с фиксированной скоростью, в то время как внутренний счетчик подсчитывает количество тактовых импульсов за время разряда конденсатора. Большее время разряда, таким образом, соответствует большему значению показаний счетчика и большему измеряемому напряжению (рис.6).

Спецификация АЦП

Существуют общие определения, которые принято использовать в отношении аналого-цифровых преобразователей. Тем не менее, характеристики, приводимые в технической документации производителей АЦП, могут показаться довольно путаными. Правильный же выбор оптимального по сочетанию своих характеристик АЦП для конкретного приложения требует точной интерпретации данных, приводимых в технической документации.

Наиболее часто путаемыми параметрами являются разрешающая способность и точность, хотя эти две характеристики реального АЦП крайне слабо связаны между собой. Разрешение не идентично точности, 12-разрядный АЦП может иметь меньшую точность, чем 8-разрядный. Для АЦП разрешение представляет собой меру того, на какое количество сегментов может быть поделен входной диапазон измеряемого аналогового сигнала (например, для 8-разрядного АЦП это 2 8 =256 сегментов). Точность же характеризует суммарное отклонение результата преобразования от своего идеального значения для данного входного напряжения. То есть, разрешающая способность характеризует потенциальные возможности АЦП, а совокупность точностных параметров определяет реализуемость такой потенциальной возможности.

АЦП преобразует входной аналоговый сигнал в выходной цифровой код. Для реальных преобразователей, изготавливаемых в виде интегральных микросхем, процесс преобразования не является идеальным: на него оказывают влияние как технологический разброс параметров при производстве, так и различные внешние помехи. Поэтому цифровой код на выходе АЦП определяется с погрешностью. В спецификации на АЦП указываются погрешности, которые дает сам преобразователь. Их обычно делят на статические и динамические. При этом именно конечное приложение определяет, какие характеристики АЦП будут считаться определяющими, самыми важными в каждом конкретном случае.

Статическая погрешность

В большинстве применений АЦП используют для измерения медленно изменяющегося, низкочастотного сигнала (например, от датчика температуры, давления, от тензодатчика и т.п.), когда входное напряжение пропорционально относительно постоянной физической величине. Здесь основную роль играет статическая погрешность измерения. В спецификации АЦП этот тип погрешности определяют аддитивная погрешность (Offset), мультипликативная погрешность (Full-Scale), дифференциальная нелинейность (DNL), интегральная нелинейность (INL) и погрешность квантования. Эти пять характеристик позволяют полностью описать статическую погрешность АЦП.

Идеальная передаточная характеристика АЦП

Из-за технологического разброса параметров при изготовлении интегральных микросхем реальные АЦП не имеют идеальной передаточной характеристики. Отклонения от идеальной передаточной характеристики определяют статическую погрешность АЦП и приводятся в технической документации.

Аддитивная погрешность

Идеальная передаточная характеристика АЦП пересекает начало координат, а первый переход кода происходит при достижении значения 1 LSB. Аддитивная погрешность (погрешность смещения) может быть определена как смещение всей передаточной характеристики влево или вправо относительно оси входного напряжения, как показано на рис.9. Таким образом, в определение аддитивной погрешности АЦП намеренно включено смещение 1/2 LSB.

Мультипликативная погрешность

Мультипликативная погрешность (погрешность полной шкалы) представляет собой разность между идеальной и реальной передаточными характеристиками в точке максимального выходного значения при условии нулевой аддитивной погрешности (смещение отсутствует). Это проявляется как изменение наклона передаточной функции, что иллюстрирует рис. 10.

У идеальной передаточной характеристики АЦП ширина каждой «ступеньки» должна быть одинакова. Разница в длине горизонтальных отрезков этой кусочно-линейной функции из 2 N «ступеней» представляет собой дифференциальную нелинейность (DNL).

Интегральная нелинейность

Погрешность квантования

Динамические характеристики

Динамические характеристики АЦП обычно определяют с помощью спектрального анализа, по результатам выполнения быстрого преобразования Фурье (БПФ) над массивом выходных значений АЦП, соответствующих некоторому тестовому входному сигналу.

На рис. 13 представлен пример частотного спектра измеряемого сигнала. Нулевая гармоника соответствует основной частоте входного сигнала. Все остальное представляет собой шум, который содержит гармонические искажения, тепловой шум, шум 1/f и шум квантования. Некоторые составляющие шума генерируются самим АЦП, некоторые могут поступать на вход АЦП из внешних цепей. Гармонические искажения, например, могут содержаться в измеряемом сигнале и одновременно генерироваться АЦП в процессе преобразования.

Отношение «сигнал/шум»

Это значение позволяет определить долю шума в измеряемом сигнале по отношению к полезному сигналу.

Шум, измеряемый при расчете SNR, не включает гармонические искажения, но включает шум квантования. Для АЦП с определенным разрешением именно шум квантования ограничивает возможности преобразователя теоретически лучшим значением отношения сигнал/шум, которое определяется как:

Спектр шума квантования АЦП стандартных архитектур имеет равномерное распределение по частоте. Поэтому величина этого шума не может быть уменьшена путем увеличения времени преобразования и последующего усреднения результатов. Шум квантования может быть снижен только путем проведения измерений с помощью АЦП большей разрядности.

Другие источника шума АЦП включают тепловой шум, шум составляющей 1/f и джиттер опорной частоты.

Общие гармонические искажения

Нелинейность в результатах преобразования данных приводит к появлению гармонических искажений. Такие искажения наблюдаются как «выбросы» в спектре частот на четных и нечетных гармониках измеряемого сигнала (рис. 15).

Эти искажения определяют как общие гармонические искажения (THD). Они определяются как:

Величина гармонических искажений уменьшается на высоких частотах до точки, в которой амплитуда гармоник становится меньше, чем уровень шума. Таким образом, если мы анализируем вклад гармонических искажений в результаты преобразования, это можно делать либо во всем спектре частот, ограничивая при этом амплитуду гармоник уровнем шума, либо ограничивая полосу частот для анализа. Например, если в нашей системе стоит ФНЧ, то высокие частоты нам просто неинтересны и высокочастотные гармоники не подлежат учету.

Отношение «сигнал/шум и искажения»

Отношение «сигнал/шум и искажения» (SiNAD) более полно описывает шумовые характеристики АЦП. SiNAD учитывает величину как шума, так и гармонических искажений по отношению к полезному сигналу. SiNAD рассчитывается по следующей формуле:

Динамический диапазон, свободный от гармоник

Динамический диапазон, свободный от гармоник, представляет собой разницу между величиной измеряемого сигнала и наибольшим пиком искажений (см. рис.16). Этот динамический диапазон обозначается как SFDR. Он ограничен снизу амплитудой максимальной гармоники паразитных выбросов на выходе АЦП в диапазоне его рабочих частот.

Спецификация АЦП, приводимая в технической документации на микросхемы, помогает обоснованно выбрать преобразователь для конкретного применения. В качестве примера рассмотрим спецификацию АЦП, интегрированного в новый микроконтроллер C8051F064 производства фирмы Silicon Laboratories.

Микроконтроллер C8051F064

Кристалл C8051F064 представляет собой скоростной 8-разрядный микроконтроллер для совместной обработки аналоговых и цифровых сигналов с двумя интегрированными 16-разрядными АЦП последовательных приближений. Встроенные АЦП могут работать в однопроводном и дифференциальном режимах при максимальной производительности до 1М отсчетов/сек. На рис. 17 приведены основные характеристики АЦП микроконтроллера C8051F064. Для самостоятельной оценки возможностей C8051F064 по цифровой и аналоговой обработке данных можно воспользоваться недорогим оценочным комплектом C8051F064EK (рис. 18). Комплект содержит оценочную плату на базе C8051F064, USB-кабель, документацию, а также программное обеспечение для тестирования аналоговых динамических и статических характеристик интегрированного высокоточного 16-разрядного АЦП.

Источник

Датчики и АЦП — для чайников-практиков (3/3) :: аналоговые датчики

Аналоговые датчики

Теперь рассмотрим датчики другого, значительно более обширного класса. Их настолько много, аналоговых (и цифровых) датчиков, что датчики событий и счетчики к собственно «датчикам» относят редко.

Итак, перед нами стоит задача — микроконтроллер должен знать температуру в комнате. Вариант «взять градусник и набрать по кнопочкам» по понятным причинам исключается.

Мы поступим так:

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

Теперь рассмотрим все эти этапы преобразования отдельно.

Собственно датчик и его параметр

На первом этапе мы имеем воздействие некоторой природы на наш датчик (в нашем случае это будет воздействие температуры на внутренний материал резистора KTY81/110 фирмы NXP). Что там внутри происходит, как и когда — это целиком зависит от конкретного датчика. Тут нет каких-либо общих характеристик. Но всегда есть некоторое изменение какого-либо электрического параметра (в нашем случае — сопротивление). Поэтому можно перечислить общие характеристики для любого датчика:

Параметр датчика в напряжение

Следующим делом необходимо убедиться в том, что мы будем работать с напряжением, а не с чем-либо другим.

Тут все зависит от параметра. Если параметром является емкость, то разговор будет совсем особым. Если же датчик сразу дает напряжение, то этот шаг уже выполнен самим датчиком. А если (как у KTY81) параметром является сопротивление, то преобразование в напряжение необходимо выполнить.

Нужно учитывать, что любое преобразование вносит погрешность. Эти погрешности бывают самыми разными. На практике я сталкивался с изменением линейности, смещением, «обрезанием» нижней или верхней границы.

Ничего общего тут сказать нельзя. Каждый вид преобразования индивидуален. В нашем примере используется делитель напряжения. Надо учитывать, что резистор, стоящий вверху, также имеет температурный коэффициент (гораздо менее выраженный, чем у терморезистора, но все равно не нулевой). Значит, при нагреве или остывании платы кривая куда-то «поплывет». Все это нужно учитывать при проектировании устройства. Если нас интересует просто комнатная температура (точность — 1оС), то такие мелочи несущественны и могут быть проигнорированы. Но если вы проектируете термометр с погрешностью не более 0.1оС для широкого диапазона температур, то все эти вопросы становятся очень существенными.

Напряжение в код

Наконец-то мы подошли к самому сердцу работы цифрового датчика — аналогово-цифровому преобразованию. Сколько много их есть, АЦП (посмотрите, например, тут — у меня выпал список в 528 позиций)! Они отличаются массой характеристик, они задают основные свойства преобразования. Тут важна схема, разводка платы, окружающая электромагнитная обстановка. Тут все важно! Всего в своей статье я и описать не могу. Да и не надо оно вам поначалу. Вам надо задать основные характеристики — а дальше умный схемотехник за бутылку пива (или купленную ему новую машину — смотря что за задача) нарисует схему и укажет особенности разводки платы.

Тут бы самое то поговорить про особенности процесса АЦПирования, но вы тогда забудете про последний этап, который не менее важен. Поэтому подробно про АЦП будет сказано после, а сейчас — исключительно в двух словах.

Задача АЦП — выдать цифровой код для напряжения в заданном диапазоне, измерение проводится с заданной погрешностью. Ответ будет представлять собой целое число в четко заданном диапазоне. Для нашего случая это может быть измерение напряжения в диапазоне 0… 5 В.

Первый важный момент (его мне напомнили в комментариях): в процессе преобразования АЦП имеет дело с напряжением, которое накопилось на устройстве выборки-хранения — или конденсатор, коммутируемый аналоговым ключом. Это важно помнить, т. к. конденсатор заряжается не моментально из-за своей емкости.

Второй важный момент: АЦП производит преобразование непрерывной величины напряжения в дискретный код. Сейчас разъясню — покажу на примере.

Итак, мы имеем некоторое напряжение x. Мы уверены в том, что оно больше некоторого 0 и меньше некоторого +U. Уверены? Тогда смело подаем на вход АЦП, которое ограничено 0 и +U вольтами.

Есть много всяких разновидностей и вариантов процедуры измерения (вот, например, прекрасная статья про сигма-дельта АЦП), я же возьму самый простой и понятный.

Измерение проводится в несколько шагов. У нас первый шаг — диапазон 0… U. Делим его пополам и сравниваем: x > 1 /2U или же x 1 /2U? В нашем случае x 1 /2U. Прекрасно, тогда результат первого шага — знак «меньше», что отмечается первым двоичным числом «0», результат лежит в диапазоне 0… 1 /2U.

Второй шаг — предыдущий результат «0», диапазон 0… 1 /2U. Снова делим диапазон пополам и делаем сравнение: x > 1 /4U или x 1 /4U? Оказалось выше, что отмечается двоичным числом «1», которое добавляется к имеющемуся. Результат: «01», 1 /4U 1 /2U.

Третий шаг: снова выше середины. Получаем «011», 3 /8U 1 /2U.

Четвертый шаг — у нас середина будет 7 /16U, новое сравнение. Потом дальше и дальше…

UPD: меня попросили проверить правильность еще нескольких преобразований. Выложу тут результаты нескольких 16-битных преобразований для желающих поупражняться:

Как мы видим, у нас на каждом шагу есть зона неопределенности, в которой и лежит искомый результат. Каждым новым шагом мы зону неопределенности делим пополам. И так, за заданное количество шагов мы получим результат. Количество шагов называется разрядностью АЦП — первая исключетльно важная характеристика АЦП. Количество разрядов определяют количество битов, необходимых для представления результата. Поэтому, например, АЦП с разрядностью 10 назовут 10-битным АЦП. Как правило, в англоязычной документации так и пишут — «16-bit, sampling analog-to-digital (A/D) converter» (это я про ADS8320).

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

Вот по этим двум параметрам и еще допустимый диапазон измерений (что является ответом на вопрос «что такое 0 и что такое +U?») производится первичный выбор АЦП из всей кучи имеющихся.

Разрядность и диапазон измерения прямым образом влияют на результирующую погрешность преобразования. Какова погрешность у нашего примера?

Первый шаг дает результат в 1 /2U (если у нас U = 5В, то точность будет 2.5В). Значит, точность первого шага — 50% от исходного диапазона. Если мы на этом остановимся, то точность у нас будет… хм… скромненькая, прямо скажем, поэтому мы двигаемся дальше.

Второй шаг еще раз делит искомую область пополам. Точность становится 1 /4U = 25% = 1.25В.

Третий шаг… Давайте, впрочем, изобразим это в таблице:

Поражают воображения числа внизу таблицы? А именно такие АЦП и используются как правило. В составе микроконтроллеров ATmega, например, используются 10-битные. Предел на сегодняшний день (то, что я встречал) — 24-х битные. И цена их отнюдь не фантастическая, а вполне реальная. UPD: впрочем, на момент написания статьи реальным пределом, при котором получается стабильно точный результат, был 22 бита. А оставшиеся 2 бита — просто для маркетинга. UPD 2: Впрочем, и это не предел! В комментариях подсказывают: есть уже и 31-битные. Вот, загляните в гости к «Техасскому инструментальному заводу» и взгляните на ADS1281. Там, впрочем, хитро написано: в заголовке речь про 24-хбитный преобразователь, в характеристиках про 31 бит. И кто их — техасцев — поймет.

Но! Точность преобразования все равно конечна! И поэтому результат будет таким, каким был на картинке — ступеньками. Ступеньки могут быть сколь угодно малыми (почти сколь угодно. ), но все равно это будет ступенька. Это надо четко понимать. И подбирать параметры исходя из требуемой точности.

Диапазон самого последнего сравнения называют ценой младшего разряда. Этот параметр используется при преобразовании получившегося кода в величину.

Обычно точность измерений при подходе к последним шагам падает. И часто последние разряды будут «шуметь» — вы напряжение не меняете, а код скачет. Поэтому еще говорят об эффективных разрядах — это те разряды, которые свое значение не меняют при неизменном значении на входе. Обычно у 24-х битных АЦП шумят последние 2 — 3 разряда.

Код в величину

Итак, мы имеем наконец-то код, который как-то соответствует исходной величине. Что с ним делать дальше?

Аппроксимация

Вопрос первый — какому все-таки реальному значению соответствует код.
Значит, у нас есть некоторый x — код, и функциональная зависимость y = F(x).

Что собою представляет эта функция F(x)? Если мы ее считаем линейной (для простоты), то ответ будет достаточно простой:

y = F(x) = K*x + B.
Простая линейная функция… И в большинстве случаев ее хватает. Но — опять же — только для линейной зависимости кода (с учетом всех перипетий его получения) от исходной величины. Углубляясь в дебри — можно использовать, если надо, квадратичную и более функцию. Я где-то слышал, что делали тензометр — измеритель веса. Он должен был работать в диапазоне от 0 до 5 тонн. И там с помощью кубической функции аппроксимации добились точности в пару килограмм — и это круто!

Так вот, задача теперь заключается в получении этих самых K и B. Как их узнать? Из математики известно, для получения этих констант достаточно знать два значения код-величина. И тогда получаем решение. Где их взять — эти две пары?

Тут есть 2 взаимодополняющих подхода для получения ответа — теоретический и экспериментальный. На практике один дополняет другой.

Для начала мы заглянули в описание KTY81/110и увидели, что при 20оС значение сопротивления у резистора равно… приблизительно… 961 Ом.… Угу, а еще оно равно минимум 950 Ом и максимум 972… Впрочем, я отвлекся.

Итак, для 20оС сопротивление равно 961 Ом. Дальше у меня был делитель напряжения. Допустим, там это сопротивление превратилось в 3.124В. Какой у нас там шаг? — 1.22мВ на один код (т. е. 12-битное АЦП). Т. е. мы должны взять 3.124В и разделить на этот шаг — получим код 2560. Прекрасно! А 100оС соответствует 1696 Ома — после делителя 4.076В — после АЦП код 3340.

Просчитали — и получили значение.

Но вся беда в том, что это только лишь тео-ория… А на практике завод не может гарантировать такую высокую точность KTY81/110 (о чем в описании честно и сказано). И мы не должны забывать о том, что используем делитель напряжения, где сверху резистор, и он тоже не шибко точный. А источник напряжения-то в делителе — тоже не идеален… Словом, от датчика к датчику будут различия. Что хорошо — величину этого различия можно всегда просчитать и вывести погрешность. Если она устраивает — все ОК, продаем датчик. Если же нет, то необходимо откалибровать данный датчик.

Для этого пары код-значения получают экспериментально.

Я это для измерителя температуры делал так.

Первая точка — моя температура тела 36.6оС (хочется верить). Засовываю датчик под мышку и смотрю — ага, код такой-то. Запомнили!

Вторая точка — кипящий чайник. Вот он, электрочайник, кипит и бурлит на столе (за час отладки программы я доливал туда воду не раз и в комнате было туманно. ) Засовываю датчик туда — ага, получил вторую точку!

В итоге получилось неплохо — в пределах погрешности, к которой я стремился.

Но вначале я записал в программу то, что было в документации. Потом исправлял для каждого нового датчика.

А что надо сделать для нелинейной характеристики? То же самое, только формула усложняется, больше точек код-значение и существенно сложнее формула получения констант.

В нашем-то примере надо было все-таки делать нелинейную аппроксимацию! Но на некотором участке кривая получается почти линейной. А у нас есть условие — «мерять комнатную температуру». «Комнатная» — это от 10оС (ну мало ли, котел сломался зимой, окна нараспашку!) до 40оС (ну мало ли, кондиционер сломался по летней жарище, окна нараспашку). Как мы видим на нашем графике, на этом участке кривая почти прямая. Прекрасно! Мы надеемся, что у нас в доме меньше 10оС не будет (а если будет — нам уже будет не до датчиков!), и нелинейный участок нас интересовать не будет. Все! Значит, порядок!

В этом и заключается магия четкого отслеживания всех погрешностей и условий работы прибора: если в заданных условиях получившаяся у нас в результате всех преобразований погрешность допустима, то к большей точности стремиться не надо. У нас, скажем, допустима погрешность в 1оС. Попадаем в нее (в условиях комнатной температуры)? Да. Тогда считаем, что устройство работает правильно!

Дискретность преобразования

Значение получили — класс! Теперь давайте проанализируем что мы получили. Мы помним, что преобразование у нас — дискретное. И результат будет ступенчатый. Но что это за ступеньки будут?

Ширина ступеньки — это код. Высота ступеньки — это величина. Код у нас растет монотонно — все время увеличивается на 1-цу. Следовательно, у всех ступенек ширина будет одинаковая. А вот величина может быть и не очень равномерно-монотонной. Если у нас линейная аппроксимация, то высота будет везде одинаковая. Но вот если любая другая, то высота будет плавать в зависимости от диапазона.

Высота ступеньки — шаг изменения исходной величины — задает нам погрешность. В случае линейной аппроксимации погрешность для всего диапазона кодов (и, значит, исходной величины) одинаковая. Но в случае остальных вариантов погрешность будет зависеть от кода (и от величины). Это надо учитывать при последующей оценке погрешности измерений.

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

Величину в… интерпретацию?

Для чего нам нужен датчик? Если нас просто интересует, допустим, температура, то на этом можно и остановиться — вот она, температура в Цельсиях! Но если температура, в свою очередь, описывает какой-то другой процесс?

Например, по ходу заряда аккумуляторы постепенно начинают нагреваться. Вначале процесса заряда они нагреваются несущественно, но к концу нагрев растет экспоненциально. Если 1) измерять температуру на аккумуляторах с высокой точностью, 2) знать их емкость и прочие характеристики, а также 3) четко управлять током заряда, то по температуре можно предсказать оставшееся время заряда.

Итоги преобразования

Итак, мы рассмотрели всю последовательность преобразования некоторого физического воздействия в цифровое его значение. Вначале мы подставили физическому воздействию датчик — подставили наш терморезистор под лампу. Это воздействие изменило свойства датчика — и изменился его какой-то электрический параметр. Следующим шагом мы превращаем изменение параметра в изменение напряжения — действие, хоть и условное, но всем удобное. Дальше мы должны преобразовать напряжение в числовой код, понятный микроконтроллеру. Этим занимается класс устройств под названием АЦП. В результате мы получаем дискретный код, который показывает изменение напряжения в некотором заданном диапазоне. В конце мы должны превратить код в число, соответствующее физической величине. По ходу дела приходится решать задачи аппроксимации.

При всех этих действиях у нас погрешность скачет туда-сюда. Каждый узел устройства, каждый шаг преобразования тем или иным образом увеличивает погрешность. Об этом надо помнить и везде закладывать такую погрешность, чтобы сумма всех этих погрешностей в конце не превысила требования к прибору. Под «суммой» тут имеется в виду не арифметическое сложение, а… ну-у… сумма, в общем.

Вкратце об АЦП

У нас осталась еще одна нерассмотренная тема — это АЦП. Вкратце о них было сказано выше, да и вообще тема очень изъеденная в Интернете, но все-таки для полноты картины нужно о них рассказать и тут. Я ограничусь самыми краткими сведениями — теми особенностями, которые надо учитывать при проектировании устройства.

Вы уже познакомились с зависимостью точности преобразования от разрядности? Нет. Тогда знакомьтесь, иначе дальше ничего не поймете! Ну а коли познакомились (не правда ли, приятное знакомство!), двигаемся дальше.

Впрочем, самое то сделать оговорку. Нижняя граница может быть и отрицательной. Есть еще дифференциальный режим измерения — когда есть два входа — нижнее значение и измеряемое. Тогда мы меряем напряжение между ними (а не разницу между данным напряжением и 0). Это используется в случае так называемого «дифференциальног опдключения». Объяснять специфику тут долго, да и выходит оно за рамки статьи. Вкратце: диф. подключение позволяет здорово минимизироват ьвлияние помех. Разницы почти нет. Поэтому для упрощения дальнейшего изложения будем говорить только об измерении текущего напряжения между 0 и опорным.

Увеличивая опорное напряжение, мы «растягиваем» как гармошку «лестницу» результата. Т. е. меняется цена разряда. Уменьшая — соответственно, наоборот. Как правило, опорное напряжение — это константа.

Для создания опорного напряжения используют отдельную микросхему. Она дает высокоточное напряжение (0.1% точности у REF5050), слабо зависящее от температуры. Ток у таких источников питания совсем небольшой (у того же элемента +-10мА), но этого вполне хватает для АЦП. И вообще, запомните: АЦП потребляет мизерный ток от измеряемого сигнала (он измеряется в микроамперах, а часто и в наноамперах). Но, как всегда, есть исключения: в комментариях enclis отметил, что «есть такой класс усилителей/буферов — драйверы АЦП. Из-за входных сопротивлений и емкостей тех же высокоскростных АЦП приходится очень быстро прокачивать несколько мА, а иногда и десятки мА.»

Скорость преобразования, или же, что корректней, частота дискретизации — это следующий ключевой момент, и его надо учитывать в случае периодических измерений. Допустим, у вас меняется ток в устройстве, и вы хотите быстро реагировать на эти изменения. Значит, вы должны уметь их быстро отслеживать. Насколько быстро? Это уже характеристика АЦП.

Загляните на выбор АЦП у Analog Devices. Вы увидите таблицу (или их уже две. ) «Resolution (Bits) x ADC Throughput Rate (SPS)». Это, соответственно, «разрешение (биты) х частота семплирования (SPS)». Разрядность (оно же разрешение) уже рассмотрели, измеряется в битах. Частота семплирования (SPS — samples per second) — это количество выборок (измерений) в секунду. Величина 10 SPS означает, что за секунду это АЦП может произвести 10 измерений. Да-да, SPS — это те же Герцы.

Правда, 10 SPS — это уже из разряда очень высокоточных измерений! В простых случаях все начинается с 1k («k» — это тут KSPS, то есть тысячи SPS)…

Вот такие времена наступили! Меньше 1k измерений в секунду уже никого (почти) не интересует. Дальше — больше: 100k (100 тысяч), 1M (1 миллион), 250+M (более 250 миллионов). Дык, мы уже доросли и до миллиарда измерений в секунду! Есть уже 58 GSPS — собственно, без таких АЦП невозможны современные оптические сети. Такие вот нынче цифры — меряет от доли микровольта до 5 Вольт меньше чем за микросекунду!

На практике необходимо прежде всего решить для себя — какая частота измерений вам нужна? Полоса частот видеосигнала, если я не ошибаюсь, составляет с десяток МГц — это будет один АЦП. Нужно измерять потребление тока в домашней электросети 50 Гц — там будет совсем другой АЦП.

Слишком быстрое АЦП тоже не нужно — микроконтроллер должен успевать обработать результат.

Лично я как максимальную величину устанавливаю ту скорость, что мне выдает мой контроллер (что мой алгоритм успеет обработать). Эта величина у меня никогда не была выше 1 MSPS. Минимальная величина — это предполагаемая частота, увеличенная (грубо) в 10 раз. Тут вы видите примеры различных частот дискретизации.

Если вы измеряете, например, обычные колебания (синусоиду), то необходимо учитывать ее частоту. Если вы выберете частоту АЦП, близкую к частоте колебаний, то вы можете получить красивую, но совсем неправильную информацию о колебаниях. На рисунке представлен как раз этот случай — исходные колебания (синя кривая) опрашиваются весьма, но недостаточно быстро (зеленые линии), в итоге получаем, по сути дела, эффект биения (красная кривая) — результат сложения двух колебаний близких частот.

А вообще — есть теорема Найквиста-Котельникова по поводу выбора частоты дискретизации. Исходя из этой теоремы надо оценить спектр сигнала, найти максимальную гармонику… Испугал? Если да, то запомните простое правило, которое я для себя вывел: нужно делать где-то в 10 раз бОльшую частоту дискретизации, чем частота изменения сигнала. UPD: это правило теоретически некорректное и не всегда правильное, но для быстрого подбора АЦП сойдет.

Тему АЦП можно мурыжить бесконечно — но тут я, наверное, и остановлюсь. Для начального понимания вопроса тут написано достаточно, а дальше нужно погружаться в описания микросхем и мучить вопросами специалистов.

Также пора завершать всю тему про датчики. Надеюсь, своей статьей я кому-то сэкономил время (и место на рабочем столе). Если уважаемые читатели увидят какие-нибудь неточности, очепятки и ошибки — пишите, благо сервис позволяет их исправлять!

[1] моя голова
[2] Интернет
[3] мои железяки, где используются датчики

P. S.Хочу поучаствовать в конкурсе, поэтому добавляю:

Источник

Большой информационный справочник
Adblock
detector