Tag Archives: АЦП

Работа с резистивным сенсорным экраном

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

Конструктив
Итак, как он устроен. Там все очень и очень просто. Есть две пленки, сделанные из проводящего материала, а между ними гранулы диэлектрика. Когда касаемся пальцем, то продавливаем зазор между пленками и контачим верхнюю на нижнюю. Ну, а определить координаты касания уже дело несложное.

Для этого на каждую пленку нанесено по два электрода. Слева-справа на одной и сверху-снизу на другой. Крест на крест, в общем. Поскольку сопротивление пленки довольно большое, под сотни ом, то образуются как бы два перпендикулярных резистора, висящие друг над другом.
(далее…)

Read More »

Измерительные цепи

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

Выход с датчика может быть трех основных видов (если кто вспомнит еще, добавьте в комментах)
Напряженческий, токовый и резистивный. Как понятно из названия, тут выходная датчик превращает колебания измеренной величины в колебания напряжения, тока или сопротивления, осталось только эти величины привести к виду удобному для запихивания в АЦП микроконтроллера.
(далее…)

Read More »

Стюарт Болл «Аналоговые интерфейсы микроконтроллеров»

Автор: Стюарт Болл
Название: Аналоговые интерфейсы микроконтроллеров
Издательство: Додэка

Чертовски мощная книжка. Даже сейчас, многие вещи оттуда мне были почти как откровения. Знать то я это знал, но не было четкой системы в голове и тут… Непередаваемое ощущение. А ведь я пролистал ее бегло, по диагонали. Надо курнуть посерьезней. Она не совсем для начинающих, требует некоторой первоначальной подготовки, например предварительно не помешает загрузить в мозги начала от Свореня или Борисова.

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

Причем расписано все буквально на пальцах, математика, конечно, есть. Но укладывается в пределы школьного курса. Как говорит сам автор: «Я не хочу писать книгу о вычислениях с теоретическими выкладками, и думаю, вы бы не стали ее читать. Эта книга — о реальных встроенных микропроцессорных системах, поэтому я хочу сфокусироваться на практических примерах. »

А за раздел по Автоматическому управлению автору можно смело ставить памятник. Все, что нам безуспешно пытались втереть на протяжении почти двух лет в универе, Стюарт разжевал буквально на пальцах, да так что становится понятно мгновенно, уложившись в десяток страниц. Попадись мне его труд на третьем курсе, то я бы не завалил, в свое время экзамен по ТАУ :) Как я ТАУ сдавал потом это отдельная история, а моя фраза «А что, вам западло поставить отл коллеге по цеху?» стала кафедральным бояном :) Да что я вам тут рассказываю, вот содержание, изучайте и, мелко забив в косяк, выкуривайте махом. Очень многие вопросы отпадут на раз :)

Read More »

AVR. Учебный курс. Делаем АЦП из Аналогового компаратора

Так сложилось, что основной МК с которым я работаю постоянно и на котором делаю подавляющее большинство задач это ATTiny2313 — он популярен, а, главное, это самый дешевый контроллер из всей линейки AVR с числом ног более 8. Я их брал числом около трех сотен за 18, чтоль, рублей штучка. Но вот западло — у него нет АЦП. Совсем нет. А тут он понадобился — нужно замерить сигнал с датчика. Засада. Не переходить же из-за такой фигни на более фаршированную ATTiny26 — она и стоит дороже и фиг где купишь у нас, да и что тогда делать с той прорвой ATTiny2313 что уже закуплена? Пораскинул мозгами…

А почему бы не сварганить АЦП последовательного сравнения? Конечно, быстродействие и точность будет не фонтан, зато, не меняя тип МК и всего с двумя копеечными деталями дополнительного обвеса, я получу полноценный, хоть и тормозной, 8ми разрядный АЦП, вполне удовлетворяющий моим скромным запросам! (далее…)

Read More »

Работа с АЦП. Программные средства повышения точности

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

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

Берем и снимаем не одно измерение, а сразу кучу. А потом берем по ним среднее арифметическое. Так как полезный сигнал у нас константен, то его составляющая такой и останется, как ее не усредняй, а вот шум изрядно приглушит. И чем больше выборок мы сделаем, тем сильней задавит шумовую составляющую. Западло этого метода очевидно — резко снижается скорость обработки. Так как вместо одной выборки нам приходится делать серию и объявлять ее как одну, но это неизбежное зло.

В качестве демонстрации метода я приведу пример усреднения. Программка простая, хватает 64 выборки, усредняет их и отправляет по UART. Сразу отмечу тот факт, что для эффективного подавления шума нужно чтобы частота выборок была ниже частоты всяких паразитных колебаний (вроде 50Гц наводок от сети) раза в два три, иначе у нас эти колебания благополучно пролезут как полезный сигнал. А еще число выборок нужно брать кратным двойке, чтобы можно было делить простым сдвигом. Впрочем, смотрите на код, там будет более понятно. Весь код я выкладывать не буду, только главный файл. Все инициализации АЦП и UART, а также ряд служебных процедурок я оставлю за кадром. Если интересно, то вы всегда можете скачать проект и посмотреть сами. Сбор числа у меня идет в прерывании от АЦП, а деление в прерывании по передаче. Так минимизируется число действий выполняемых процом. Хотя растягивание прерываний это не есть гуд. Но городить флаговую операционную систему мне тут впадлу, впрочем, дойдет и до нее время. (далее…)

Read More »

Работа с АЦП. Аппаратные средства повышения точности

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

АЦП = (Vin * 2n)/Vref

Где, n — разрядность АЦП.
Поэтому желательно использовать специальную микросхему — Источник Опорного Напряжения, например, ADR420 или REF195. Стоить они могут недешево — сотни рублей, но зачастую оно стоит того. Прецизионная аналоговая электроника в принципе не дешевая. По началу я тоже пугался ценам в 500-600 рублей за какой то там усилитель. А сейчас ничего, привык :) Впрочем, в фанатизм впадать не стоит. На худой конец, если используется AVR, точность которой 2МЗР (младший значащий разряд, если забыл) на десяти битах, то можно не заморачиваться с дорогущими ИОН и городить что попроще, например на LM336Z-5.0, включаемых подобно стабилитрону, только куда более точному. (далее…)

Read More »

AVR. Учебный Курс. Выдача данных с АЦП на UART. Мультиплексирование каналов АЦП

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

Задача:
Получить по очереди напряжение с трех каналов АЦП и отправить его по последовательному порту в комп. По запросу с компа показвыать напряжение на каждом из измеряемых каналов. В компе полученный поток байт представить в виде графика.

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

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

Поглядеть крупнее

(далее…)

Read More »

AVR. Учебный курс. Использование АЦП

Многие AVR имеют на борту АЦП последовательного приближения.
АЦП это десятиразрядное, но при точности +/- 2 минимально значащих разрядов его можно смело считать восьмиразрядным :) Так как в младших двух разрядах всегда мусор какой то, не похожий на полезный сигнал. Тем не менее это неплохой инструмент для контроля напряжения, в восьмиразрядном режиме имеющий 256 отсчетов и выдающее частоту дискретизации до 15кГц (15 тысяч выборок в секунду).
 

Конфигурация источника
Сигнал в АЦП подается через мультиплексор, с одного из восьми (в лучшем случае, часто бывает меньше) входов. Выбор входа осуществляется регистром ADMUX, а точнее его битами MUX3…MUX0. Записанное туда число определяет выбраный вход. Например, если MUX3..0 = 0100, то подключен вывод ADC4.
 

Кроме того, существует несколько служебных комбинаций битов MUX, использующихся для калибровки.
Например, 1110 подключает к АЦП внутренний источник опорного напряжения на 1.22 вольта. А если записать в MUX3..0 все единицы, то АЦП будет изнутри посажено на землю. Это полезно для выявления разных шумов и помех.
 
(далее…)

Read More »

AVR. Учебный курс. Использование аналогового компаратора

Есть почти в каждой AVRке, такая полезная приблуда как аналоговый компаратор. Это уже почти стандартное устройство и встречается очень часто во множестве разных контроллеров. Даже в древнем, как говно мамонта, АТ89С2051 он уже есть. Штучка прикольная, позволяет сравнивать два аналоговых сигнала и выносить свой вердикт 0 первый больше второго, 1 второй больше первого.

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

Например, на входе у нас 8 вольт. Со стабилитрона, рассчитанного на 3.3 вольта, выходит всегда одно и то же напряжение — 3.3 вольта. А с симметричного резистивного делителя выходит половина напряжения то есть 4 вольта. 4 это больше чем 3.3, (3.3 — 4 = -0.7 результат меньше нуля) с компаратора выходит 0

Теперь если просядет батарейка и напряжение снизится до 6 вольт, то с делителя будет уже 3 вольта, а с опорного как было 3.3 так и осталось. Зато теперь на компараторе ситуация в корне поменялась — 3 меньше чем 3.3 (3.3 — 3 = 0.3 результат больше нуля) , а значит на выходе у него будет 1

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

Настройка компаратора в контроллере AVR ATMega16
Для других моделей AVR все очень и очень похоже, просто мне так удобней. Если будет затруднение спросишь в комментах.
Мега16 имеет на борту компаратор, со входами AIN0(прямой вход) и AIN1(инверсный вход) (далее…)

Read More »