Что такое АЦП

Микроконтроллеры / Для начинающих /

Микроконтроллеры для начинающих Что нужно для того, чтобы стать профессиональным разработчиком программ для микроконтроллеров и выйти на такой уровень мастерства, который позволит с лёгкостью найти и устроиться на работу с высокой зарплатой (средняя зарплата программиста микроконтроллеров по России на начало 2017 года составляет 80 000 рублей). Подробнее...

АПЦ - это Аналого-Цифровой Преобразователь. По английски ADC (Analog-to-Digital Converter). То есть специальное устройство, которое преобразует аналоговый сигнал в цифровой.

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

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

Например, если вы создаёте программу для микроконтроллера, которая отслеживает температуру, то микропроцессор должен каким-то образом понять, что, например, напряжение 1В на его аналоговом входе соответствует температуре 10 градусов, а 5В - температуре 100 градусов (это просто пример, пока не обращайте внимание на числа).

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

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

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

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

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

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

Поэтому первая задача АЦП - это разбить измеряемый диапазон на какое-то конечное количество значений.

Например, мы хотим измерить напряжение в диапазоне от 0 до 9 В. Допустим, нам достаточно точности в 1В. Тогда мы разбиваем этот диапазон на 10 значений и получаем, что каждому значению напряжения соответствует такое же число. То есть 0 - это 0 В, 5 - 5 В и т.п.

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

Принцип работы АЦП (линейный график роста напряжения и дискретное его изменение).

Возникает вопрос - а как измерять большие напряжения? Или как повысить точность (например, если мы хотим измерять напряжение с точностью до 0,1В)?

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

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

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

Например, 8-разрядный АЦП может выдать 28 = 256 значений - от 0 до 255 (если речь идёт о положительных числах).

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

Х = Д / 2Р

Где Р - это разрядность АЦП, Д - диапазон измеряемых значений, Х - точность (дискретность).

Например, если вам надо измерять напряжение в диапазоне 0...9В, то Д = 10. А если в диапазоне -5...15В, то Д = 21 (не забываем про ноль).

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

256 / 28 = 256 / 256 = 1 В

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

16 / 28 = 16 / 256 = 0,0625 В

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

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

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

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

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

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

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

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

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

Least significant bit (LSB) - младший значащий разряд (МЗР). Это наименьшее входное напряжение, которое может быть измерено АЦП. Определяется по формуле:

1 LSB = Uоп / 2Р

Где Uоп - это опорное напряжение (указывается в характеристиках АЦП). Например, при опорном напряжении 1 В и разрядности 8 бит, получим:

1 LSB = 1 / 28 = 1 / 256 = 0,004 В

Integral Non-linearity - интегральная нелинейность выходного кода АЦП. Понятно, что любое преобразование вносит искажения. И эта характеристика определяет нелинейность выходного значения, то есть отклонение выходного значения АЦП от идеального линейного значения. Измеряется эта характеристика в LSB.

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

Нелинейность выходного сигнала АЦП

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

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

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

Напомню, что аналоговые сигналы, в основном, бывают двух видов: токовые и напряжения. Кроме того, сигналы могут иметь стандартный диапазон значений, и нестандартный. Стандартные диапазоны значений аналоговых сигналов описаны в ГОСТах (например, ГОСТ 26.011-80 и ГОСТ Р 51841-2001). Но, если в вашем устройстве используется какой-то самодельный датчик, то сигнал может и отличаться от стандартного (хотя я советую в любых случаях выбирать какой-нибудь стандартный сигнал - для совместимости со стандартными датчиками и другими устройствами).

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

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

Итак, допустим, что мы хотим измерять температуру в диапазоне -40…+50 градусов с помощью специального датчика со стандартным выходом 0...1В. Допустим, что у нас есть датчик, который может измерять температуру в диапазоне -50…+150 градусов.

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

Что такое линейный закон? Это когда диапазон значений на графике выглядит как прямая линия (см. рис.). Зная, что температура от -50 до +150 даёт на выходе датчика напряжение, изменяемое по линейному закону, мы, как я уже сказал, можем вычислить это напряжение для любого значения температуры на заданном диапазоне.

Преобразование температуры в напряжение

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

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

Первым делом определяем диапазон температур. Он у нас от -50 до 150, то есть 201 градус (не забываем про ноль).

А диапазон измеряемых напряжений - от 0 до 1 В.

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

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

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

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

Проверяем характеристики АЦП микроконтроллера, который мы планируем использовать. Значение LSB не должно быть более К (более 0,005 в нашем случае, точнее, это допустимо, если вас устроит погрешность более 1 единицы измерения - более 1 градуса в нашем случае).

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

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

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

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

Т = (U / К) - 50 (2)

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

Т = (U / К) - 50 = (0,5 / 0,005) - 50 = 100 - 50 = 50 градусов

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

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

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

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

Или 3 градуса.

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

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

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

Например, если вам удастся найти датчик с диапазоном -40…+50, как мы и хотели, и с таким же выходом 0...1В, то

К = 1 / 90 = 0,01

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

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

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

К = 5 / 90 = 0,05

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

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

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

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

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

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

U = K * (Tв + 50) = 0,005 * (150 + 50) = 1

P.S. Писал эту статью после тяжёлого рабочего дня, так что если что где напутал - прошу прощения )))


Вступить в группу "Основы программирования"

Подписаться на RUTUBE-канал

Подписаться на Дзен-канал

Подписаться на рассылки по программированию

Микроконтроллеры для ЧАЙНИКОВ Микроконтроллеры для ЧАЙНИКОВ

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

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su