Вы находитесь на странице: 1из 18

Датчики и АЦП — для чайников-практиков

26.10.2012 для http://we.easyelectronics.ru

Датчики и АЦП — для чайников-практиков


Обещал я недавно моему знакомому —
хорошему электрику и чайнику в электронике —
сделать небольшое устройство с парочкой АЦП и
счетчиком импульсов. И по ходу постановки задачи я
увидел, что понятие «частота измерений»,
«допустимая погрешность» и «разрядность» для него
— пустой звук. «Непорядок!» — подумал я и решил
найти статьи, где это было бы описано. Кое-что
нашлось (например, http://habrahabr.ru/post/125029/ и
http://habrahabr.ru/post/112913/), но это было отнюдь не
для его познаний в этой области. Посему я решил
написать сам такую статью (в результате вышла серия
статей...). А потом решил добавить ее сюда — может,
кому-то она сэкономит время при изучении новой для себя темы? Результат — перед вами.
Эта статья для тех, кто действительно чайник в этой области! Ну, или же все-таки
кофейник, но не для зубров в электронике. Тут почти нет теории, математика тоже в
минимальном количестве. Цель статьи — помочь разобраться в базовых понятиях для того,
чтобы можно было дать постановку задачи специалисту. Т. е. прочитав ее, вы сможете
внятно ответить на вопрос про разрядность, диапазон измерений и частоту выборки.
Статья немаленькая, и вообще за раз ее осилить будет начинающему трудновато.
Посему — оглавление:

Пару слов про систему управления..................................................................................... 1


Немного о терминах............................................................................................................. 2
Документация....................................................................................................................... 4
Специфика цифровой обработки информации с датчиков ................................................ 4
Какие датчики и зачем......................................................................................................... 5
Датчики событий.............................................................................................................. 5
… и аналоговые датчики ................................................................................................. 5
Датчики событий ................................................................................................................. 6
Счетчики событий................................................................................................................ 7
Окна интегрирования....................................................................................................... 8
Часы реального времени................................................................................................ 10
Аналоговые датчики .......................................................................................................... 10
Собственно датчик и его параметр................................................................................ 11
Параметр датчика в напряжение ................................................................................... 12
Напряжение в код........................................................................................................... 12
Код в величину............................................................................................................... 14
Аппроксимация .......................................................................................................... 14
Дискретность преобразования................................................................................... 16
Величину в… интерпретацию? ..................................................................................... 16
Итоги преобразования ................................................................................................... 16
Вкратце об АЦП................................................................................................................. 17

Пару слов про систему управления


Немного теории для ответа на вопрос «а зачем нужны датчики???».

1 / 18
Датчики и АЦП — для чайников-практиков

Много ли знает электропила о том, что она режет — дерево, метал, веревку?.. И как она
режет — прямо, криво? И режет ли вообще — может, она в воздухе крутится? И не сгорел ли
у нее движок — напряжение-то подается, но уже ничего не крутится?
А стоит ей добавить глаза — и все сразу станет понятно! Хотя потом к глазам надо
добавить мозги…
Ну ладно, решим вопрос попроще. По поводу «сгорел ли движок» самое простое
решение — поставить датчик тока. Ток течет — значит, потребление есть. А если еще знать
текущее потребление, то мы можем уже понять: 1) пилится ли оно? 2) крутится с превеликим
трудом?.. А если еще поставить датчик оборотов, то мы четко сможем сказать про частоту
вращения. А если еще в моторе разместить датчик температуры, то мы узнаем, когда мотор
начинает перегреваться. А если еще…
Вот так вот банальная электропила превращается в весьма умное устройство и
начинает понимать, что происходит кругом. Или, говоря более корректно, датчики
позволяют узнать состояние окружающей среды. Под «окружающей средой» тут можно
понимать то, что нам надо в данном случае. У этой умнеющей электропилы «окружающей
средой» будет режим работы мотора.
А можно эту электропилу сделать не просто умнеющей, а и мудрой. Всего-то делов —
задать ей нужные обороты двигателя.
Выставили отметку — 400 оборотов в минуту — и пошли пилять. Разумеется, пока
зубья пилы не вгрызаются в плоть материал, частота будет более или менее удовлетворять
заданной. Но вот, начинаем рвать дерево. Частота сразу падает. А если же пила начнет
постоянно сверять текущие обороты с заданными, то она сможет увеличивать задание до тех
пор, пока обороты не достигнут заданных (тут, конечно, надо знать меру, чтобы мотор не
сгорел, но это уже другой вопрос).
Вот так и работаем — установили обороты — подсчитали текущие — поняли, как их
надо подправить — установили —
подсчитали — на что подправить Что думает оператор?
— подправили… В итоге
Общение
получили систему управления с
обратной связью.
Автоматическая ли она или
автоматизированная — это уже Расчет Измерение
зависит от алгоритма управления
и кучи других вещей. Что будем И что там?
Говоря более корректным делать? Объект
языком, круг работы такой
системы выглядит следующим
образом: 1) производится расчет
— какое нам надо подать
воздействие на мотор
электропилы (напряжение, Делаем!
импульсы или еще что-нибудь),
чтобы выдержать установленное число оборотов? 2) если надо — советуемся с оператором;
3) подаем это воздействие; 4) смотрим результат — с помощью датчиков измеряем текущее
состояние; 1) делаем следующий расчет.

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

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

2 / 18
Датчики и АЦП — для чайников-практиков

толку. Если вы четко себе представляете взаимосвязь миллисекунды и килогерца, знаете что
такое «Absolute ratings» в документации, то можете смело пропускать этот раздел.

T
скважность = /t = 3
t
duty cycle, коэф. заполнения = D = / T = 33%
F = 2 Hz (Гц )
frequency, частота
rising edge, fallin g edge,
передний задний
( восходящий) (падающий)
фронт фронт

1 1 1
T = /2 sec (сек) t = /2 * 33% = /6 sec (сек)
delay, период duration, длительность
1 сек

Итак, мы имеем некоторый процесс — какое-то периодически меняющееся


напряжение. «Периодически» — значит, оно меняется, но строго одинаково. Период
повторения (delay) составляет в данном случае 1/2 секунды.
Данный процесс состоит в том, что напряжение падает то в одно (нижнее) состояние,
то поднимается в другое (верхнее). Нижнее условно обозначается «0», верхнее — «1».
Переход из «0» в «1» называется восходящим фронтом или передним фронтом или
rising edge. Он в документации часто обозначается стрелкой вверх или эдакой зюкой — так,
как красная линия на рисунке. Переход из «1» в «0» называется падающим фронтом или
задним фронтом или falling edge, в документации обозначается, соответственно, стрелкой
вниз.
Повторяющаяся комбинация выглядит как «0», на котором на 1/6 секунды поднимается
положительный импульс. Длительность импульса (pulse duration) составляет 1/6 секунды.
Соотношение периода повторения к длительности импульса называется скважностью
импульса (http://ru.wikipedia.org/wiki/Скважность) и в данном случае составляет 3. В
западной литературе принята обратная величина, коэффициент заполнения (duty cycle),
который (коэффициент) в данном случае равен 33%. Частный (но весьма важный) случай со
скважностью 2 (duty cycle = 50%) называется меандром. Здесь длительность «0» равна
длительности «1».
Как было сказано выше, период повторения = 1/2 секунды. Количество колебаний в
секунду называется герцем. Тут будет 2 колебания (2 одинаковых процесса) за секунду —
получаем 2 Герца. Это называется частотой (frequency) (не путать с «круговой частотой» —
она тут нам не нужна). Как мы видим, частота-период — это взаимно обратные величины.
Неплохо для себя составить и запомнить такую таблицу:

Период времени Время (секунды) Частота (Герцы)


1 1 сек/sec 1 Гц/Hz
0.02 2 * 10-2 = 20 мсек/msec 0.05 кГц/kHz = 50 Гц/Hz
0.001 10-3 = 1 мсек/msec 1 кГц/kHz
0.00003 3 * 10-5 = 30 мксек/µsec 0.033 МГц/MHz = 33 КГц/KHz
0.000001 10-6 = 1 мксек/µsec 1 МГц/MHz
0.000000001 10-9 = 1 нсек/nsec 1 ГГц/GHz

3 / 18
Датчики и АЦП — для чайников-практиков

Документация
Прежде всего, выразим сочувствие тем, кто хочет разбираться в тематике и не владеет
английским… Практически вся документация в мире дается на английском языке. Поэтому
незнание английского тут сильно затруднит жизнь. Впрочем, достаточно знать основные
термины, чтобы понимать о чем речь. У меня есть знакомый, который уже больше
десятилетия занимается электроникой, у него серьезные заказчики и куча проектов, но в
английском он ни бум-бум (поэтому, читая «eBay» (http://www.ebay.com/), он делает
многозначительную паузу «е — бай», хотя на самом деле оно читается «и-бай»). Ему вполне
хватает знания терминов и четкого представления что где искать.
Тут я хочу дать основное представление о такой документации, что где искать, и
немного помочь с терминами.
Берем мы, например, описание такого славного АЦП как ADS8320
(http://www.ti.com/lit/gpn/ads8320) Техасского инструментального завода Texas Instruments
(http://www.ti.com/). Скачиваем PDF-ку и видим в ней много красивого. Сверху крупными
буквами — об чем речь. И там уже есть масса информации: это 16-битное АЦП, работает в
диапазоне от 2.7 до 5В.
На той же первой странице, как правило, есть «Features» — особенности изделия, чего
оно может. Тут же обычно есть «Applications» — то, для чего оно может использоваться. И
«Description» — краткое описание.
Далее по тексту обязательно надо найти «Absolute maximum ratings» — это те условия,
при которых изделие работать будет, но при их малейшем нарушении бобик сдох и
реанимации уже не подлежит. Это — самый важный блок информации, он дает понятие о
тех условиях, в которых можно эксплуатировать датчик. И по ним надо сразу оценить —
попадает ли ваш диапазон измерений в эти требования.
Тоже важно, но во вторую очередь — «Electrical characteristics», «Specifications»,
«Timing specifications». Это (как правило, длиннющая таблица на несколько страниц) — все
остальные характеристики работы модуля. Тут его задержки, интерпретация входных
воздействий и т. п.
И вот тут вы столкнетесь с такой неожиданностью. Почти любой параметр дается в
виде «Min» (минимальное значение), «Typ» (типичное) и «Max» (максимальное значение).
Дело в том, что мир не идеален, и каждый новый кристалл, микросхема имеют небольшие
расхождения в параметрах. Или же в разных схемах они могут вести себя немного по-
разному. Но, если вы придерживаетесь Absolute maximum ratings, то у вас будет как правило
типичное значение, но возможны расхождения в указанных пределах.
Где-то далее в тексте всегда есть «theory of operation» — описание принципа
функционирования и всяких хитростей. Это надо для четкого понимания работы устройства.
Всегда тут же есть «Digital interface» — как оно взаимодействует с вашим
микроконтроллером.
В конце описания почти всегда есть (а если нет — то дается ссылка в каком документе
есть) «Mechanical data». Это варианты размеров корпусов, их схема. Тоже важно при заказе
датчика — где-то рядом есть «Package type», «Device» с названием элемента для заказа.
Например, для этого модуля есть заказ ADS8320E/250 — корпус такой-то, количество в
коробке такое-то (для больших партий). А есть ADS8320EB/2K5 — совсем другое дело.
Иногда ошибка в одной букве приводит к необходимости заново разводить плату.

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


Но, прежде чем перейти к датчикам, рассмотрим их «заказчика» — компьютер или же
микроконтроллер.
И тот и другой — электрическое устройство. И тот и другой… стоп, все-таки давайте
для определенности остановимся уже на микроконтроллере!
Так вот, микроконтроллер «общается» с внешним миром языком напряжений. У него
есть понятие «0» — как правило, электрическая земля. И еще есть понятие «1» — как
правило уровень питания. Если разделения на 0 и 1 недостаточно, то используется

4 / 18
Датчики и АЦП — для чайников-практиков

параллельная или последовательная передача битов. Нам тут не так важно, какое это питание
— 1.1В или 5В. Важно лишь то, что это некоторый диапазон электрического напряжения.
ВременнОй режим микроконтроллеров существенно отличается от человеческого. Для
него 1 секунда — это бесконечно долго. 1 миллисекунда — это тоже много (но для
компьютера ввиду его монструозных Windows-ов и включенной MP3-музыки при обработке
информации — это уже маловато). 1 микросекунда — это уже нижний порог для массовых
недорогих микроконтроллеров, но тоже не предел. 1 наносекунда — это уже, пожалуй,
предел для общедоступной цифровой логики, DSP-контроллеров. Поэтому, когда мы будем
говорить о периоде какого-нибудь импульса в 10 микросекунд — это будет вполне доступно
для обработки любым микроконтроллером.

Какие датчики и зачем


Смысл любого датчика — перевести некоторую физическую величину в понятную для
головы нашего устройства. Голова же — не забываем — это микроконтроллер или
компьютер. И в том и в другом случае требуется цифровая форма передачи информации.
Это мы можем взглянуть на ртутный термометр, повертеть его перед глазами, углядеть
рядом шкалу и… э-э… 36,8 градусов Цельсия. Микроконтроллеру же вынь и подай число
(«цифру» в жаргоне)- «36.82». Ему этого может быть мало — ему нужно знать до 3-его или
4-го знака после запятой! Вот всеми этими вопросами — измерить в данной единице
измерения, перевести в числовой вид — датчик и занимается.
Все датчики можно разделить на два принципиально разных вида — датчики событий
(и всевозможные счетчики) и аналоговые датчики. Первый отвечает «да» или «нет» (или
«сколько раз да»), второй — «какое значение».
Деление, конечно же, условное — в Википедии (http://ru.wikipedia.org/wiki/Датчик) все
гораздо сложнее. Но для практики начинающего электронщика этого вполне сойдет.

Датчики событий...
— Машина проехала? Да. А сейчас? Нет. А теперь? Да. А после?..
— Сколько частиц пролетело в сцинтилляционной камере?
— На кнопку нажали?
Это все вопросы для датчика событий. Прежде всего он определяет — произошло
какое-нибудь событие или нет? Ему не важно — насколько однозначно оно произошло,
когда и как. Все просто — да или нет. Если ваш параметр можно описать таким вот простым
способом — это датчик события.
Правда, часто приходится отвечать на вопрос «сколько раз произошло событие?» —
например, для всевозможных датчиков радиации. Но все равно — вначале идет сам факт
наличия или отсутствия события. Подсчитать же их — событий — количество несложно.
Еще один очень принципиальный момент — счетчики событий считают неделимые
величины. Когда мы считаем количество проезжающих машин, мы всегда четко можем
сказать — 5 или 6. 5 с половиной — это уже не сюда.

… и аналоговые датчики
Тут же всегда стоит вопрос «сколько в таких-то единицах?» В отличие от предыдущих
датчиков, аналоговые датчики дают числовой ответ в пределах заданной (не
бесконечной) точности. Сколько голубей на крыше? — ответ будет всегда предельно четок
(если мы четко уверены в том, что такое «голубь» и является ли голубем оный без крыла и
ноги). Сколько литров в ведре? — тут уже ответ будет всегда нечеткий.
А компьютеру и микроконтроллеру надо дать четкое число (мы ограничиваемся
цифровым вычислительным устройством). 10 литров ли, 10.1 литра или 9.9997 литра — это
не годится. Всегда оговаривается желаемая точность — допустим, с точностью до 0.1 литра
(тут сразу же возникает проблема округления, когда 10.198 литра — это все-таки не 10.2
литра. А, может, 10.2?..).

5 / 18
Датчики и АЦП — для чайников-практиков

Если от вашего параметра требуется результат его измерения в таких-то физических


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

Датчики событий
Самый распространенный случай такого датчика — это банальная кнопка. Вот уж
действительно да/нет — нажали или нет???
Кнопки бывают разные — емкостные (http://ru.wikipedia.org/wiki/Ёмкостной_датчик),
резистивные (http://ru.wikipedia.org/wiki/Сенсорный_экран), еще какие-нибудь. Но факт в
том, что у всех у них результат один: состояние «нажатия нет», состояние «нажатие есть»,
состояние «нажатия нет… есть… есть… нет… нет… нет… есть… нет» и состояние «бобик
сдох».
Первая зона — уверенное
«нет». Палец от кнопки еще далек,
да
емкость/сопротивление (или просто
«параметр») достаточно мал. Палец
нет приближается к кнопке, но
расстояние еще достаточно далеко,
и параметр достаточно мал.
нет э-э... да ой! Но вот, палец подошел
достаточно близко, и параметр подходит к границе, когда датчик начинает говорить «да».
Если это емкостной датчик, то емкость уже близка границе, разделяющей «да» и «нет».
Допустим, палец замер на очень близком расстоянии от такого датчика (в пределах
миллиметра). Допустим, замер, как вкопанный. Но температура воздуха непостоянна, на
пальце могут быть волосинки, которые наэлектризованы… А по емкостному датчику гуляют
всякие токи… Микроскопические, но они слегка меняют емкость, и она иногда выдает «да»,
хотя должна бы говорить «нет». Наступает дребезг контактов.
Слава Богу, палец устал висеть в воздухе и таки ткнул кнопку. Все, параметр перешел
граничное значение и попал в зону уверенного «да».
Ну а коли палец оказался варварским и давит все сильнее и сильнее, то датчик рано или
поздно сломается. Что нам выдаст кнопка — да или нет? Это знает лишь разработчик, и то
он не всегда может это предусмотреть… Но не будем о печальном.
Итак, мы имеем четыре зоны работы датчика — зона устойчивого ответа «нет» (или
«0» по науке), устойчивого «да» (соответственно, «1»), неустойчивое состояние («0» или «1»,
выпадающее непредсказуемым образом) и поломка (четкое «0» или «1», не соответствующее
параметру). Хороший датчик зону неустойчивого состояния минимизирует (делает
предельно узкой), а при поломке устанавливается в некоторое оговоренное заранее
состояние. Но все равно — зона неустойчивости всегда есть, а поломку можно создать
кувалдой, и тогда уже ничего заранее предсказать нельзя.
Впрочем, с зоной неустойчивости бороться можно. И призван это делать гистерезис
(http://ru.wikipedia.org/wiki/Гистерезис). Суть предельно проста.
Для начала мы в состоянии «нет». Параметр нарастает.
Подошли к зоне неустойчивости — но мы все равно говорим
«нет». Параметр в зоне — все равно говорим «нет». Параметр
уже вышел за зону неустойчивости — о! тогда говорим «да».
Обратная дорога — палец начинает кнопку отжимать. Еще
уверенное «да» — говорим «да». Зона неустойчивости — по-
прежнему говорим «да». Параметр уже упал настолько, что
устойчивое «нет» — тогда начинаем говорить «нет».
Гистерезис может использоваться и в других случаях и
другими методами (например, тот же дребезг контактов может оцениваться временем —
скажем, устойчивое нажатие должно длиться не менее 30 микросекунд). Но суть все равно
одна и та же.

6 / 18
Датчики и АЦП — для чайников-практиков

Мы все это время говорили только о кнопках. Те же зоны присутствуют и в других


датчиках. Например, в метро используется датчик прохождения человека — слева горит
лампочка, справа стоит фотоприемник. Человек не прошел — свет принимается. По мере
прохождения человека луч света начинает отклоняться, переотражаться и т. п. Приемник
примет много разного шума — это и будет зоной неустойчивости. Когда человек таки
загородил луч света — света нет. А потом какой-нибудь малолетний преступник лазерной
указкой посветил в фотоприемник — может вывести из строя, если мощность достаточно
большая и милиционер не расторопный!
В конце концов, не забываем, что датчик общается с микроконтроллером. Те говорят на
языке напряжений. Как правило, «0» — это напряжение от минимального (земляного) до
трети питания. «1» — это напряжение от 2/3 питания до питания. Посередке присутствует
некоторая неопределенность — те же дребезги, но уже в электрической цепи.
Также нужно учесть, что физическая величина не мгновенно превращается в
электрическую интерпретацию «да»/«нет». Иными словами, изменение емкости в емкостном
датчике с некоторым запаздыванием на выходе датчика порождает «0»/«1». Это время, как
правило, измеряется в наносекундах.
Запаздывание возможно и по другим причинам. Это запаздывание в документации к
датчику всегда есть. И датчик нужно выбирать такой, чтобы это запаздывание было как
минимум в 4 раза меньше ожидаемых событий.

Итак, мы подошли к основным характеристикам датчиков событий:


 Физическая природа. Вы должны четко себе представлять какой физический процесс
вы используете. Емкостной датчик нажатия? Значит, речь о емкости, единица измерения
Фарады. Фоторезистор? Значит, меняется сопротивление, единица измерения Омы.
 Начало области чувствительности. Очевидно, что у любой физической величины
есть значение «0». Но не всегда с этим значением будет работать ваш датчик. Иногда «0»
означает поломку. В случае фоторезистора «0» может означать полное отсутствие света
(залепили жвачкой?) или максимально допустимую яркость.
 Границы зоны дребезга. Это выражается в измеряемой величине.
 Максимально допустимый параметр. Это та граница, после которой датчик уже
становится неисправным.
 Электрические параметры. Это очевидно — датчику для работы нужно
определенное (строго и четко определенное!) напряжение питания, потребляемый им в
разных режимах ток. Также оговаривается напряжение для «0» и «1». Впрочем, эти
характеристики относятся к взаимодействию датчика и микроконтроллера. Они не так важны
при определении условий задачи, но важны при выборе конкретного датчика.
 ВременнЫе параметры. Оговаривается время установки «0»/«1» в зависимости от
физического параметра (ну или в формальном виде: время установки соответствующего
выходного состояния при достижении определенного порогового значения воздействующей
величины).
 Интерфейс. «Интерфейс» дословно с английского переводится как «между лицами»
и обозначает способ взаимодействия. С компьютером можно взаимодействовать по
Ethernet/WiFi/Bluetooth (локальные сети), USB, COM-порту, LPT-порту. С
микроконтроллером общение другое — это UART, I2C, SPI, CAN… Это тоже не важно на
начальном этапе, но существенно при выборе конкретного типа датчика.

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

7 / 18
Датчики и АЦП — для чайников-практиков

Есть и другие примеры счетчиков событий. На некоторых дорогах используются


счетчики потока машин — считается количество машин, проехавших по датчику давления, в
единицу времени.
Можно привести другие примеры, но, если события достаточно редкие, чтобы их
можно было разделить во времени, и достаточно частые, чтобы восприниматься
«непрерывными», то имеет смысл использовать датчик событий. Скажем, те же
счетчики элементарных частиц. Если ожидаемый поток частиц редкий, то единичные
вспышки микросекундных интервалов вполне могут быть сосчитаны. При этом нас
интересует кол-во частиц за секунду — т. е. мы воспринимаем именно поток частиц, а не
каждую в отдельности. Аналогично если нам нужно получить характеристику для
перекрестка «кол-во машин в минуту» (мы можем без труда выделить каждую отдельную
машину, но нас интересует их поток), то это то что надо.
Очевидно, что основой таких датчиков будет являться датчик события. На его совести
стоит решение задачи о разделении событий во времени, зона дребезга и прочее. Задача
счетчика событий — воспринимать единичные события и превращать их в необходимую
единицу измерений. Не забываем о том, что время реакции датчика на события должно быть
значительно меньше ожидаемой величины (т. е. мы способны воспринять одну машину за 50
мсек — порядок, вряд ли на дороге по одной полосе способны пролететь 20 машин в
секунду).

Окна интегрирования
Продолжаем тему счетчика машин — допустим, что мер района Shibuya города Токио
заказал нам установить на нескольких основных дорогах датчики потока машин. Его
интересует простой параметр — сколько машин за минуту проезжает. На основании этих
данных он надеется оптимизировать работу светофоров и полиции. Нам — лестно, и лицом в
грязь ударить не хочется.
Мы решили проблему с датчиком событий — в дороги будут вмонтированы датчики
давления, которые способны обслужить поток 20 машин/секунда. От них проведены провода
(или радио) к постам полиции, и там надо поставить простой стрелочный индикатор: кол-во
машин / минута.
Поехали!
Самое первое решение —
делаем счетчик, вначале минуты
машины,
штуки

он равен 0. Проехала машина —


добавили. Еще проехала — еще
добавили. И так считаем целую
минуту. Потом вновь
сбрасываем. И что тогда будет
видеть полицейский? Когда
часы будут подходить к 0-ой
0 1 2 3 секунде, стрелка будет резко
падать в ноль и снова расти.
Нет, это не фонтан! Эдак мы опозоримся перед японцами!
Для решения этой проблемы придумана такая гениальная вещь, как плавающее окно
интегрирования. Суть этого подхода заключается в следующем (прощу прощения у
корифеев этой тематики — единой терминологии я найти не смог, тут я приведу ту, которой
сам пользуюсь).
Нам надо узнать количество машин за одну минуту? Значит, у нас размер окна
интегрирования составляет минуту. Мы разбиваем это окно на 4 кадра — каждый по 15
секунд. Один кадр — это обыкновенный счетчик. Вначале кадра он равен 0, через 15 секунд
мы оставляем это значение и переходим к следующему. На рисунке значения счетчиков в
кадрах составляет для первого 6, для второго — 5, потом 3, 6, 6, 7, 4.
За первую минуту окно заполняется — значение постепенно растет. К концу первой
минуты мы суммируем все 4 кадра и получаем 6 + 5 + 3 + 6 = 20 машин.

8 / 18
Датчики и АЦП — для чайников-практиков

В следующий момент времени (на 1-ой секунде 2-ой минуты) мы сдвигаем окно.
Теперь у нас первый кадр, уже заполненный, равен 5, 2-ой 3, 3-ий 6. А новый кадр вначале
равен 0.
Итак, 1 мин 0 сек — значение равно 20.
За последующие 15 секунд последний кадр 23
составил 6. В 1:15 счетчик равен 5 + 3 + 6 + 22
6 = 20.
Опять сдвигаем окно. Теперь у нас 20
младший кадр 3, потом 6, потом 6, потом 0.
За 15 секунд последний кадр вырос до 7 — к 20
01:30 счетчик составил 3 + 6 + 6 + 7 = 22. За 14
следующие 15 секунд счетчик составит 6 + 6
+ 7 + 4 = 23. 11
Какая тут специфика?
До заполнения текущего кадра мы его 6
в результат не выводим. Т. е. в 14 секунд у 0
нас значение было по-прежнему 0, потом в 6 5 3 6 6 7 4
15 секунд оно резко дернулось в 6.
Также у нас все время наблюдается запаздывание. Если, допустим, после последней
минуты поток машин резко иссяк, то мы увидим вначале 23, потом 23 — 6 = 17, потом через
15 секунд 11, потом еще через 15 секунд 4, и лишь к концу минуты — 0.
Это два недостатка. А достоинство — у нас все время плавно меняющееся значение. И
если в случае машин это не так важно, то для счетчиков радиации эта плавность важна.
С этими недостатками легко, впрочем, бороться.
Во-первых, необходимо здорово уменьшить размер кадра. Сделаем его равным 1-ой
секунде — и тогда у нас значение будет изменяться раз в секунду. Можно и меньше сделать
— тогда оно будет меняться еще быстрее.
Во-вторых, окно интегрирования может составлять не весь период, а какую-то его
часть — допустим, 20 секунд. Это означает, что, если машины остановились, то за 20 секунд
стрелка упадет в 0.
Но при этом надо учитывать, что окно уже
показывает количество машин за 20 секунд, а нам нужно
машины,

за минуту! Это, впрочем, не беда — в минуте таких 20-


штуки

секундных окон 3. Значит, мы можем значение окна


умножить на 3, предполагая, что за минуту поток сильно
меняться не будет. Мы делаем в данном случае
аппроксимацию, но она всегда дает погрешность, что
хорошо видно на рисунке. Зеленая линия показывает, что
было бы, если бы поток машин сохранился. Синяя —
аппроксимация после 40 секунд. Ну а красная — реальное
20 40
0 60 значение за минуту. Как видим, первое расхождение было
слишком уж большим, второе — поменьше, а истина
оказалась посередине… э-э… выше середины, не важно. Погрешность есть, и она слабо
предсказуемая. Поэтому так имеет смысл поступать в случае статистически однородных
последовательностей. Для нашего случая это все-таки не очень допустимо.
В нашем случае я бы сделал 2 индикатора: первый для мгновенной индикации (с окном
не более 10 секунд), второй для сбора статистики (тут окно должно быть с минуту или даже
вообще без окон — прямой подсчет).
А можно поступить иначе. Делаем окно на всю минуту. Но, если за десять секунд
движения машин все-таки нет, то выводим текущее значение как 0, но счетчик все равно
ведем. Если машины пошли, то выводим значение всего кадра.

Итак, можно подвести итоги и перечислить основные характеристики счетчиков


событий:

9 / 18
Датчики и АЦП — для чайников-практиков

 Параметры базового датчика событий. Это и тип физической величины, дребезги и


границы чувствительностей базового датчика, его электрические и временнЫе параметры,
интерфейс.
 Размер окна интегрирования. Не забываем, что он должен быть не больше и
кратным итоговой величине. Если "… за минуту", то это может быть 60 секунд, 30, 20 и так
далее.
 Размер кадра / количество кадров. Понятное дело, что размер кадра = размер окна /
количество кадров.
 Алгоритм отработки резких изменений. Как в нашем примере: если машин нет
длительное время, то предусмотрено ли резкое изменение итогового показателя?
Если величина статистически более или менее однородная (говоря математически,
производная у нее небольшая), то можно кол-во окон увеличивать. Но если важна
корректность значений, то лучше окно интегрирования делать максимально большим.
Меняя размер кадра, мы управляем резкостью изменения показаний. Это также влияет
на память — на количество значений в памяти микроконтроллера.

Часы реального времени


Слегка особняком стоит такой полезный класс датчиков, как часы реального времени
(real-time clock — RTC). Их задача — выдавать наружу точное время в формате «год-месяц-
день-день_недели-час-минута-секунда». Их можно отнести к счетчикам событий, т. к. они
считают такты от кварцевого генератора или резонатора (и те и другие в данном случае
являются задающим элементом). Их точность напрямую зависит от точности задающего
элемента.
Это именно часы, хотя их также можно отнести и к датчикам.
Весьма распространенным и дешевым примером является микросхема DS1307
(http://www.maxim-ic.com/datasheet/index.mvp/id/2688) фирмы Maxim.

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

Ом код о
С

код
t U
о о
С С В

о о о
С Ом / С В / Ом код / В С / код
Параметр Напряжение Код Воздействие
датчика от параметра от напряжения от кода

1. Прежде всего, мы имеем некоторое воздействие и предмет, на которое оно


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

10 / 18
Датчики и АЦП — для чайников-практиков

воздействия (сопротивление от температуры). Кстати, грамотнее в данном случае будет


сказать "параметр", а не «свойство».
3. У разных датчиков, разумеется, разные параметры. Поэтому на следующем этапе их
всех приводят к единому «интерфейсу» — к напряжению. Другими словами, теперь мы
имеем зависимость напряжения от воздействия (тут бывают исключения — например,
емкость может быть измерена микроконтроллером без преобразования в напряжение).
4. Далее необходимо перевести напряжение в цифровой код, который получит
микроконтроллер. Этим занимается аналогово-цифровое преобразование (или АЦП или
analog to digital conversion — ADC). Доступно для начинающих они описаны тут). В
подавляющем большинстве ваших устройств на вход им будет подаваться напряжение в
диапазоне 0 — 2.5… 5В, на выходе будет появляться число в виде, доступном
микроконтроллеру.
5. Думаете, победа? Ан нет! Вот сказал вам микроконтроллер — «датчик температуры
мне выдал 1734». Это сколько же в градусах Цельсия?.. Поэтому дальше идет процедура
преобразования кода в то, что вам надо.
Вот такая последовательность действий. Иногда все это находится в одной микросхеме
(например, измерение напряжения в пределах 0… 5В микроконтроллер может выполнить
сам), иногда ряд этапов находится в одном устройстве (например, датчик температуры,
выдающий напряжение или цифровой код), но в большинстве случаев все эти действия
выполняют различные устройства.
Если все эти этапы осуществляются в одном устройстве, то оно будет называться
цифровым датчиком. Они проще для работы, но дороже.
Теперь рассмотрим все эти этапы преобразования отдельно.

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


На первом этапе мы имеем воздействие некоторой природы на наш датчик (в нашем
случае это будет воздействие температуры на внутренний материал резистора KTY81/110
(http://www.ru.nxp.com/#/pip/pip=[pip=KTY81_SER]%7Cpp=[t=pip,i=KTY81_SER]) фирмы
NXP). Что там внутри происходит, как и когда — это целиком зависит от конкретного
датчика. Тут нет каких-либо общих характеристик. Но всегда есть некоторое изменение
какого-либо электрического параметра (в нашем случае — сопротивление). Поэтому можно
перечислить общие характеристики для любого датчика:
 Физическая природа и электрический параметр. Это первый вопрос, который
возникает при отборе датчиков. В большинстве случаев параметром будут изменение
сопротивления, напряжения или емкости (для KTY81 это сопротивление).
 Допустимый диапазон воздействия. Любой прибор всегда требует определенных
условий для своей эксплуатации (для KTY81 это работа в диапазоне температур -55…
+150оС).
 Характеристика зависимости параметра от физического воздействия. Тут нет
общего описания, для каждого типа датчика будет своя характеристика (для KTY81 дается
температурный коэффициент, смещение сопротивления в зависимости от длительности
использования). Также не забываем, что тело не мгновенно реагирует на физическое
воздействие (у KTY81 дается температурная константа для измерения в воздухе, стоячей
жидкости и текущей жидкости).
 Собственно зависимость параметра от воздействия. Это таблица или график,
который описывает изменение параметра при приложенном воздействии. Эта зависимость
может быть линейной (что хорошо), а может и не быть (что хуже).
 Описание корпуса. Датчик имеет корпус — микросхему. Это может быть трехножка,
пятиножка, стоножка (да-да, и такое бывает!). Она может быть с торчащими выводами (DIP-
корпусы)), могут быть ножки в сторону (TQFP-корпусы), а могут быть вообще без торчащих
ножек (всевозможные SMD-корпуса или — каково запаять такое пяльником??? — BGA).
Чтобы поразить свое воображение — посмотрите хотя бы здесь:
http://ru.wikipedia.org/wiki/Типы_корпусов_процессоров.

11 / 18
Датчики и АЦП — для чайников-практиков

 Самая частая ошибка начинающих схемотехников — оставить вопрос выбора


корпуса на потом. Это вроде бы мелочь, но потом, при монтаже и пайке готового изделия
может вылиться в головняк. Каждая фирма придумывает свою маркировку и название для
корпусов, расстояния между ножками и прочее. Бывает, что заказал один корпус и проглядел
ничем не примечательную буковку в названии. А потом, в плату уже не впаивается из-за не
тех размеров… (вот заказываете вы ATmega32U4 и видите, что есть ATmega32U4-AU и
ATmega32U4-MU. Разница есть? Есть — у одной ноги торчат в сторону, у другой под пузо).
Эту информацию надо учитывать (за KTY81 можно расслабиться — тут только один вариант
корпуса).

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


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

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

12 / 18
Датчики и АЦП — для чайников-практиков

Итак, мы имеем некоторое напряжение x. Мы уверены в том, что оно больше


некоторого 0 и меньше некоторого +U. Уверены? Тогда смело подаем на вход АЦП, которое
ограничено 0 и +U вольтами.
Есть много всяких разновидностей и вариантов процедуры измерения (вот, например,
прекрасная статья про сигма-дельта АЦП: http://we.easyelectronics.ru/Theory/sigma-delta-
acp.html), я же возьму самый простой и понятный.
1 Измерение проводится в несколько шагов. У нас первый шаг
0 0 Ј x < /2 U — диапазон 0… U. Делим его пополам и сравниваем: x > 1/2U или
1 1
01 /4U Ј x < /2U же x < /2U? В нашем случае x < 1/2U. Прекрасно, тогда результат
1

011 3/8U Ј x < 1/2U первого шага — знак «меньше», что отмечается первым двоичным
+U числом «0», результат лежит в диапазоне 0… 1/2U.
Второй шаг — предыдущий результат «0», диапазон 0… 1/2U.
0 Снова делим диапазон пополам и делаем сравнение: x > 1/4U или x
1 < 1/4U? Оказалось выше, что отмечается двоичным числом «1»,
/ 2U
добавляется к имеющемуся. Результат: «01», 1/4U < x <
7
/16U x которое
1
3
/2U.
1
/ 8U 011 Третий шаг: снова выше середины. Получаем «011», 3/8U < x
/ 4U 1
< /2U.
01
Четвертый шаг — у нас середина будет 7/16U, новое
сравнение. Потом дальше и дальше…

Суть понятна?

Меня попросили проверить правильность еще нескольких преобразований. Выложу тут


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

Диапазон измерений, Напряжение на АЦП,


Результирующий код
В мВ
5 4 999 1111-1111-1111-0010
5 735 0010-0101-1010-0001
3.3 735 0011-1001-0000-0100
1 735 1011-1100-0010-1000
2.5 0.01 0000-0000-0000-0000
2.5 8 900 дымок над АЦП

Как мы видим, у нас на каждом шагу есть зона неопределенности, в которой и лежит
искомый результат. Каждым новым шагом мы зону неопределенности делим пополам. И так,
за заданное количество шагов мы получим результат. Количество шагов называется
разрядностью АЦП — первая исключетльно важная характеристика АЦП. Количество
разрядов определяют количество битов, необходимых для представления результата.
Поэтому, например, АЦП с разрядностью 10 назовут 10-битным АЦП. Как правило, в
англоязычной документации так и пишут — «16-bit, sampling analog-to-digital (A/D)
converter» (это я про ADS8320 (http://www.ti.com/lit/gpn/ads8320)).
Каждый шаг занимает время — пусть и микроскопическое в масштабах Вселенной, но
тем не менее вполне конечное (а часто недостаточно малое). Количество всех шагов и
образует время преобразования — вторая фундаментальная величина (на самом деле оно
— время преобразования — зависит еще и от массы других параметров, но они значительно
меньше влияют на общее время, чем разрядность).
Вот по этим двум параметрам и еще допустимый диапазон измерений (что является
ответом на вопрос «что такое 0 и что такое +U?») производится первичный выбор АЦП из
всей кучи имеющихся.
Разрядность и диапазон измерения прямым образом влияют на результирующую
погрешность преобразования. Какова погрешность у нашего примера?

13 / 18
Датчики и АЦП — для чайников-практиков

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

Шаг Диапазон Точность Шаг Диапазон Точность

1 2-1U = 2.5В 50% 13 2-13U = 610.3мкВ 0.012%


2 2-2U = 1.3В 25% 14 2-14U = 305.2мкВ 0.006%
3 2-3U = 625мВ 13% 15 2-15U = 152.6мкВ 0.003%
4 2-4U = 312.5мВ 6% 16 2-16U = 76.3мкВ 0.002%
5 2-5U = 156.3мВ 3% 17 2-17U = 38.1мкВ 762 * 10-6%
6 2-6U = 78.1мВ 2% 18 2-18U = 19мкВ 381 * 10-6%
7 2-7U = 39.1мВ 0.781% 19 2-19U = 9.5мкВ 190 * 10-6%
8 2-8U = 19.5мВ 0.391% 20 2-20U = 4.8мкВ 95 * 10-6%
9 2-9U = 9.8мВ 0.195% 21 2-21U = 2.4мкВ 48 * 10-6%
10 2-10U = 4.9мВ 0.098% 22 2-22U = 1.2мкВ 24 * 10-6%
11 2-11U = 2.4мВ 0.049% 23 2-23U = 0.6мкВ 12 * 10-6%
12 2-12U = 1.2мВ 0.024% 24 2-24U = 0.3мкВ 6 * 10-6%

Поражают воображения числа на последних шагах таблицы? А именно такие АЦП и


используются как правило. В составе микроконтроллеров ATmega, например, используются
10-битные. Предел на сегодняшний день (насколько мне известно) — 31-х битные. И цена их
отнюдь не фантастическая, а вполне реальная. На момент написания статьи реальным
пределом, при котором получается стабильно точный результат, был 24 бита. А оставшиеся
биты — просто для рекламы (я, в частности, о ADS1281 (http://www.ti.com/product/ads1281).
Там, впрочем, хитро написано: в заголовке речь про 24-хбитный преобразователь, в
характеристиках про 31 бит. И кто их — техасцев — поймет?..)
Но! Точность преобразования все равно конечна! И поэтому результат будет таким,
каким был на картинке — ступеньками. Ступеньки могут быть сколь угодно малыми (почти
сколь угодно...), но все равно это будет ступенька. Это надо четко понимать. И подбирать
параметры исходя из требуемой точности.
Диапазон самого последнего сравнения называют ценой младшего разряда. Этот
параметр используется при преобразовании получившегося кода в величину.
Обычно точность измерений при подходе к последним шагам падает. И часто
последние разряды будут «шуметь» — вы напряжение не меняете, а код скачет. Поэтому еще
говорят об эффективных разрядах — это те разряды, которые свое значение не меняют при
неизменном значении на входе. Обычно у 24-х битных АЦП шумят последние 2 — 3 разряда.

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

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

y = F(x) = K*x + B.

Простая линейная функция… И в большинстве случаев ее хватает. Но — опять же —


только для линейной зависимости кода (с учетом всех перипетий его получения) от исходной

14 / 18
Датчики и АЦП — для чайников-практиков

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


функцию. Я где-то слышал, что делали тензометр —
о
С измеритель веса. Он должен был работать в диапазоне от
0 до 5 тонн. И там с помощью кубической функции
100 аппроксимации добились точности в пару килограмм — и
y это круто!
20 Так вот, задача теперь заключается в получении этих
самых K и B. Как их узнать? Из математики известно, для
2560 x 3340 получения этих констант достаточно знать два значения
код-величина. И тогда получаем решение. Где их взять —
y = K* x + 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оС не будет (а если будет — нам уже
будет не до датчиков!), и нелинейный участок нас интересовать не будет. Все! Значит,
порядок!
В этом и заключается магия четкого отслеживания всех погрешностей и условий
работы прибора: если в заданных условиях получившаяся у нас в результате всех
преобразований погрешность допустима, то к большей точности стремиться не надо. У

15 / 18
Датчики и АЦП — для чайников-практиков

нас, скажем, допустима погрешность в 1оС. Попадаем в нее (в условиях комнатной


температуры)? Да. Тогда считаем, что устройство работает правильно!

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

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

Величину в… интерпретацию?
Для чего нам нужен датчик? Если нас просто интересует, допустим, температура, то на
этом можно и остановиться — вот она, температура в Цельсиях! Но если температура, в
свою очередь, описывает какой-то другой процесс?
Например, по ходу заряда аккумуляторы постепенно начинают нагреваться. Вначале
процесса заряда они нагреваются несущественно, но к концу нагрев растет экспоненциально.
Если 1) измерять температуру на аккумуляторах с высокой точностью, 2) знать их емкость и
прочие характеристики, а также 3) четко управлять током заряда, то по температуре можно
предсказать оставшееся время заряда.
Тогда нам в цепочку преобразований надо вставить еще один этап — график
«температура -> время заряда». У этого преобразования будут тоже свои погрешности и
особенности. Впрочем, это совсем отдельная тема, и она специфична для каждого случая.
Поэтому рассматривать ее тут подробно бессмысленно.

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

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

16 / 18
Датчики и АЦП — для чайников-практиков

Вкратце об АЦП
У нас осталась еще одна нерассмотренная тема — это АЦП. Вкратце о них было
сказано выше, да и вообще тема очень изъеденная в Интернете, но все-таки для полноты
картины нужно о них рассказать и тут. Я ограничусь самыми краткими сведениями — теми
особенностями, которые надо учитывать при проектировании устройства.
Вы уже познакомились с зависимостью точности преобразования от разрядности?
Нет??? Тогда знакомьтесь, иначе дальше ничего не поймете! Ну а коли познакомились (не
правда ли, приятное знакомство!), двигаемся дальше.
Там было сказано, что АЦП характеризуется тремя важными параметрами:
1. Разрядность — эту тему обсудили.
2. Скорость преобразования — это тоже было показано. Вернее, мы остановились на
том, что разрядность прямо влияет на скорость преобразования.
3. Опорное напряжение — то самое, в пределах которого производится измерение.
Опорное напряжение — это базовый параметр. Какой диапазон мы можем измерить?
Массовые АЦП в микроконтроллерах (беру, например, ATMega) дают нам возможность
измерять в диапазоне от единиц до 5 Вольт. «Опорное напряжение» в этом случае — это
верхняя граница диапазона. Нижнюю, как правило, приравнивают к нулю.
Впрочем, самое то сделать оговорку. Нижняя граница может быть и отрицательной.
Есть еще дифференциальный режим измерения — когда есть два входа — нижнее значение и
измеряемое. Тогда мы меряем напряжение между ними (а не разницу между данным
напряжением и 0). Это используется в случае так называемого «дифференциальног
опдключения». Объяснять специфику тут долго, да и выходит оно за рамки статьи. Вкратце:
диф. подключение позволяет здорово минимизироват ьвлияние помех. Разницы почти нет.
Поэтому для упрощения дальнейшего изложения будем говорить только об измерении
текущего напряжения между 0 и опорным.
Увеличивая опорное напряжение, мы «растягиваем» как гармошку «лестницу»
результата. Т. е. меняется цена разряда. Уменьшая — соответственно, наоборот. Как
правило, опорное напряжение — это константа.
Для создания опорного напряжения используют отдельную микросхему. Она дает
высокоточное напряжение (0.1% точности у REF5050 (http://www.ti.com/lit/gpn/ref5050)),
слабо зависящее от температуры. Ток у таких источников питания совсем небольшой (у того
же элемента +-10мА), но этого вполне хватает для АЦП. И вообще, запомните: АЦП
потребляет мизерный ток от измеряемого сигнала (он измеряется в микроамперах, а
часто и в наноамперах). Но, как всегда, есть исключения: есть такой класс
усилителей/буферов — драйверы АЦП. Из-за входных сопротивлений и емкостей тех же
высокоскростных АЦП приходится очень быстро прокачивать несколько мА, а иногда и
десятки мА.
Скорость преобразования, или же, что корректней, частота дискретизации — это
следующий ключевой момент, и его надо учитывать в случае периодических измерений.
Допустим, у вас меняется ток в устройстве, и вы хотите быстро реагировать на эти
изменения. Значит, вы должны уметь их быстро отслеживать. Насколько быстро? Это уже
характеристика АЦП.
Загляните на выбор АЦП у Analog Devices: http://www.analog.com/en/analog-to-digital-
converters/products/index.html. Вы увидите таблицу (или их уже две?..) «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 —
17 / 18
Датчики и АЦП — для чайников-практиков

собственно, без таких АЦП невозможны современные оптические сети. Такие вот нынче
цифры — меряет от доли микровольта до 5 Вольт меньше чем за микросекунду!
На практике необходимо прежде всего решить для себя — какая частота измерений вам
нужна? Полоса частот видеосигнала, если я не ошибаюсь, составляет с десяток МГц — это
будет один АЦП. Нужно измерять потребление тока в домашней электросети 50 Гц — там
будет совсем другой АЦП.
Слишком быстрое АЦП тоже не нужно — микроконтроллер должен успевать
обработать результат.
Лично я как максимальную величину устанавливаю ту скорость, что мне выдает мой
контроллер (что мой алгоритм успеет обработать). Эта величина у меня никогда не была
выше 1 MSPS. Минимальная величина — это предполагаемая частота, увеличенная (грубо) в
10 раз. В http://ru.wikipedia.org/wiki/Частота_дискретизации вы видите примеры различных
частот дискретизации.
Если вы измеряете, например, обычные колебания (синусоиду), то необходимо
учитывать ее частоту. Если вы выберете частоту АЦП, близкую к частоте колебаний, то вы
можете получить красивую, но совсем неправильную информацию о колебаниях. На рисунке
представлен как раз этот случай — исходные колебания (синя кривая) опрашиваются весьма,
но недостаточно быстро (зеленые линии), в итоге получаем, по сути дела, эффект биения
(красная кривая) — результат сложения
двух колебаний близких частот.
А вообще — есть теорема
Найквиста-Котельникова
(http://ru.wikipedia.org/wiki/Теорема_отсчётов_Уиттакера_—_Найквиста_—
_Котельникова_—_Шеннона) по поводу выбора частоты дискретизации. Исходя из этой
теоремы надо оценить спектр сигнала, найти максимальную гармонику… Испугал? Если да,
то запомните простое правило, которое я для себя вывел: нужно делать где-то в 10 раз
бОльшую частоту дискретизации, чем частота изменения сигнала. UPD: это правило
теоретически некорректное и не всегда правильное, но для быстрого подбора АЦП сойдет.
Тему АЦП можно мурыжить бесконечно — но тут я, наверное, и остановлюсь. Для
начального понимания вопроса тут написано достаточно, а дальше нужно погружаться в
описания микросхем и мучить вопросами специалистов.
Также пора завершать всю тему про датчики. Надеюсь, своей статьей я кому-то
сэкономил время (и место на рабочем столе).

Литература

[1] моя голова


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

P. S. Все комментарии и обсуждение статьи вы можете найти на 3-х страницах, где


размещена статья:
 http://we.easyelectronics.ru/Theory/datchiki-i-acp-dlya-chaynikov-praktikov-1-3-vvedenie.html
 http://we.easyelectronics.ru/Theory/datchiki-i-acp-dlya-chaynikov-praktikov-2-3-datchiki-i-schetchiki-sobytiy.html
 http://we.easyelectronics.ru/Theory/datchiki-i-acp-dlya-chaynikov-praktikov-3-3-analogovye-datchiki.html

18 / 18