Adc описание. Аналого-цифровой преобразователь микроконтроллеров AVR. Делаем светодиодный индикатор напряжения

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

Индикатор переменного напряжения 220 В

Рассмотрим первый, наиболее простой вариант индикатора сети на светодиоде. Его применяют в отвертках для нахождения фазы 220 В. Для реализации нам понадобится:

  • светодиод;
  • резистор;
  • диод.

Светодиод (HL) вы можете выбрать абсолютно любой. Характеристики диода (VD) должны быть ориентировочно такими: прямое напряжение, при прямом токе 10-100 мА – 1-1,1 В. Обратное напряжение 30-75 В. Резистор (R) должен иметь сопротивление не меньше 100 кОм, но и не больше 150 кОм, иначе просядет яркость свечения индикатора. Такое устройство можно самостоятельно выполнить в навесной форме, даже без использования печатной платы.

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

Индикатор переменного и постоянного напряжения до 600 В

Следующий вариант представляет собой немного более сложную систему, из-за наличия в схеме кроме уже известных нам элементов, двух транзисторов и емкости. Но универсальность этого индикатора вас приятно удивит. Ему доступна безопасная проверка наличия напряжения от 5 до 600 В, как постоянного, так и переменного.

Основным элементом схемы индикатора напряжения выступает полевой транзистор (VT2). Пороговое значение напряжения, которое позволит сработать индикатору фиксируется разностью потенциалов затвор-исток, а максимально возможное напряжение определяет падение на сток-истоке. Он выполняет функции стабилизатора тока. Через биполярный транзистор (VT1) осуществляется обратная связь для поддержания заданного значения.

Принцип работы светодиодного индикатора заключается в следующем. При подаче на вход разности потенциалов, в контуре возникнет ток, значение которого определяется сопротивлением (R2) и напряжением перехода база-эмиттер биполярного транзистора (VT1). Для того чтобы слабенький светодиод загорелся, достаточно тока стабилизации 100 мкА. Для этого сопротивление (R2) должно быть 500-600 Ом, если напряжение база-эмиттер примерно 0,5 В. Конденсатор (С) необходим неполярный, емкостью 0,1 мкФ, служит он защитой светодиода от скачков тока. Резистор (R1) выбираем величиной 1 МОм, он исполняет роль нагрузки для биполярного транзистора (VT1). Функции диода (VD) в случае индикации постоянного напряжения – это проверка полюсов и защита. А для проверки переменного напряжения он играет роль выпрямителя, срезая отрицательную полуволну. Его обратное напряжение должно быть не меньше 600 В. Что касается светодиода (HL), то выбирайте , для того, чтобы его свечение при минимальных токах было заметно.

Автомобильный индикатор напряжения

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

Предлагаем вам обратить внимание на схему автомобильного индикатора напряжения на , с помощью которой вы поймете, как изготовить устройство самостоятельно. RGB-светодиод отличается от обычного, наличием 3-х разноцветных кристаллов внутри своего корпуса. Данное свойство мы будем использовать для того, чтобы каждый цвет сигнализировал нам об уровне напряжения.

Схема состоит из девяти резисторов, трех стабилитронов, трех биполярных транзисторов и одного 3-цветного светодиода. Обратите внимание, какие элементы рекомендуется выбирать для реализации схемы.

  1. R1=1, R2=10, R3=10, R4=2.2, R5=10, R6=47, R7=2.2, R8=100, R9=100 (кОм).
  2. VD1=10, VD2=8.2, VD3=5.6 (В).
  3. VT – BC847C.
  4. HL – LED RGB.

Результат такой системы следующий. Светодиод загорается:

  • зеленым – напряжение 12-14 В;
  • синим – напряжение ниже 11,5 В;
  • красным – напряжение свыше 14,4 В.

Это происходит за счет правильно собранной схемы. С помощью потенциометра (R4) и стабилитрона (VD2) выставляется низший предел напряжения. Как только разность потенциалов между клеммами батареи становится меньше указанного значения – транзистор (VT2) закрывается, VT3 открывается, синий кристалл индуцирует. Если напряжение на клеммах находится в указанном диапазоне, то ток проходит через резисторы (R5,R9), стабилитрон (VD3), светодиод (HL), естественно, светит зеленым, транзистор (VT3) находится в закрытом состоянии, а второй (VT2) – в открытом. С помощью настройки переменного резистора (R2), превышение напряжения больше 14,4 В будет отображаться свечением светодиода красного цвета.

Индикатор напряжения на двухцветном светодиоде

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

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

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

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

Внимание! Приведенные в статье схемы только лишь сигнализируют о низком напряжении на аккумуляторе. Для предупреждения глубокого разряда необходимо вручную отключить нагрузку либо использовать .

Вариант №1

Начнем, пожалуй, с простенькой схемки на стабилитроне и транзисторе:

Разберем, как она работает.

Пока напряжение выше определенного порога (2.0 Вольта), стабилитрон находится в пробое, соответственно, транзистор закрыт и весь ток течет через зеленый светодиод. Как только напряжение на аккумуляторе начинает падать и достигает значения порядка 2.0В + 1.2В (падение напряжение на переходе база-эмиттер транзистора VT1), транзистор начинает открываться и ток начинает перераспределяться между обоими светодиодами.

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

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

Таким образом, не смотря на свою простоту, схема позволяет заранее узнать, что батарейка начала подходить к концу. Пока напряжение на аккумуляторе составляет 3.25В или более, горит зеленый светодиод. В промежутке между 3.00 и 3.25V к зеленому начинает подмешиваться красный - чем ближе к 3.00 Вольтам, тем больше красного. И, наконец, при 3V горит только чисто красный цвет.

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

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

Вариант №2

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

Порог срабатывания определяется делителем напряжения R2-R3. При указанных в схеме номиналах он составляет 3.2 Вольта. При снижении напряжения на аккумуляторе до этого значения, микросхема перестает шунтировать светодиод и он зажигается. Это будет сигналом к тому, что полный разряд батареи совсем близок (минимально допустимое напряжение на одной банке li-ion равно 3.0 В).

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

Для настройки схемы подключаем вместо батарей регулируемый блок питания и подбором резистора R2 (R4) добиваемся зажигания светодиода в нужный нам момент.

Вариант №3

А вот простая схема индикатора разрядки li-ion аккумулятора на двух транзисторах:
Порог срабатывания задается резисторами R2, R3. Старые советские транзисторы можно заменить на BC237, BC238, BC317 (КТ3102) и BC556, BC557 (КТ3107).

Вариант №4

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

При подключении схемы к источнику питания, положительное напряжение на затворе транзистора VT1 формируется с помощью делителя R1-R2. Если напряжение выше напряжение отсечки полевого транзистора, он открывается и притягивает затвор VT2 на землю, тем самым закрывая его.

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

Транзисторы подойдут любые n-канальные с низким напряжением отсечки (чем меньше - тем лучше). Работоспособность 2N7000 в этой схеме не проверялась.

Вариант №5

На трех транзисторах:

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

Не смотря на громоздкий вид схемы, готовая плата имеет достаточно скромные габариты:

С коллектора VT2 можно брать сигнал, разрешающий подключение нагрузки: 1 - разрешено, 0 - запрещено.

Транзисторы BC848 и BC856 можно заменить на ВС546 и ВС556 соответственно.

Вариант №6

Эта схема мне нравится тем, что она не только включает индикацию, но и отрубает нагрузку.

Жаль только, что сама схема от аккумулятора не отключается, продолжая потреблять энергию. А жрет она, благодаря постоянно горящему светодиоду, немало.

Зеленый светодиод в данном случае выступает в роли источника опорного напряжения, потребляя ток порядка 15-20 мА. Чтобы избавиться от такого прожорливого элемента, вместо источника образцового напряжения можно применить ту же TL431, включив ее по такой схеме*:

*катод TL431 подключить ко 2-ому выводу LM393.

Вариант №7

Схема с применением так называемых мониторов напряжения. Их еще называют супервизорами и детекторами напряжения (voltdetector"ами). Это специализированные микросхемы, разработанные специально для контроля за напряжением.

Вот, например, схема, поджигающая светодиод при снижении напряжения на аккумуляторе до 3.1V. Собрана на BD4731.

Согласитесь, проще некуда! BD47xx имеет открытый коллектор на выходе, а также самостоятельно ограничивает выходной ток на уровне 12 мА. Это позволяет подключать к ней светодиод напрямую, без ограничительных резисторов.

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

Вот еще несколько вариантов на выбор:

  • на 3.08V: TS809CXD , TCM809TENB713 , MCP103T-315E/TT , CAT809TTBI-G ;
  • на 2.93V: MCP102T-300E/TT , TPS3809K33DBVRG4 , TPS3825-33DBVT , CAT811STBI-T3 ;
  • серия MN1380 (или 1381, 1382 - они отличаются только корпусами). Для наших целей лучше всего подходит вариант с открытым стоком, о чем свидетельствует дополнительная циферка "1" в обозначении микросхемы - MN13801, MN13811, MN13821. Напряжение срабатывания определяется буквенным индексом: MN13811-L как раз на 3,0 Вольта.

Также можно взять советский аналог - КР1171СПхх:

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

Сетка напряжений не очень-то подходит для контроля за li-ion аккумуляторами, но совсем сбрасывать эту микросхему со счетов, думаю, не стоит.

Неоспоримые достоинства схем на мониторах напряжения - чрезвычайно низкое энергопотребление в выключенном состоянии (единицы и даже доли микроампер), а также ее крайняя простота. Зачастую вся схема умещается прямо на выводах светодиода:

Чтобы сделать индикацию разряда еще более заметной, выход детектора напряжения можно нагрузить на мигающий светодиод (например, серии L-314). Или самому собрать простейшую "моргалку" на двух биполярных транзисторах.

Пример готовой схемы, оповещающей о севшей батарейке с помощью вспыхивающего светодиода приведен ниже:

Еще одна схема с моргающим светодиодом будет рассмотрена ниже.

Вариант №8

Крутая схема, запускающая моргание светодиода, если напряжение на литиевом аккумуляторе упадет до 3.0 Вольта:

Эта схема заставляет вспыхивать сверхяркий светодиод с коэффициентом заполнения 2.5% (т.е. длительная пауза - коротка вспышка - опять пауза). Это позволяет снизить потребляемый ток до смешных значений - в выключенном состоянии схема потребляет 50 нА (нано!), а в режиме моргания светодиодом - всего 35 мкА. Сможете предложить что-нибудь более экономичное? Вряд ли.

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

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

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

Вариант №9

Схема на 74HC04.

Рабочее напряжение стабилитрона должно быть ниже напряжение срабатывания схемы. Например, можно взять стабилитроны на 2.0 - 2.7 Вольта. Точная подстройка порога срабатывания задается резистором R2.

Схема потребляет от батареи около 2 мА, так что ее тоже надо включать после выключателя питания.

Вариант №10

Это даже не индикатор разряда, а, скорее, целый светодиодный вольтметр! Линейная шкала из 10 светодиодов дает наглядное представление о состоянии аккумулятора. Весь функционал реализован всего на одной-единственной микросхеме LM3914 :

Делитель R3-R4-R5 задает нижнее (DIV_LO) и верхнее (DIV_HI) пороговые напряжения. При указанных на схеме значениях свечению верхнего светодиода соответствует напряжение 4.2 Вольта, а при снижении напряжения ниже 3х вольт, погаснет последний (нижний) светодиод.

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

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

Сама микросхема потребляет около 2.5 мА, плюс 5 мА на каждый зажженный светодиод.

Недостатком схемы можно считать невозможность индивидуальной настройки порога зажигания каждого светодиода. Можно задать только начальное и конечное значение, а встроенный в микросхему делитель разобьет этот интервал на равные 9 отрезков. Но, как известно, ближе к концу разряда, напряжение на аккумуляторе начинает очень стремительно падать. Разница между аккумуляторами, разряженными на 10% и 20% может составлять десятые доли вольта, а если сравнить эти же аккумуляторы, только разряженненные на 90% и 100%, то можно увидеть разницу в целый вольт!

Типичный график разряда Li-ion аккумулятора, приведенный ниже, наглядно демонстрирует данное обстоятельство:

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

Полный контроль над моментами включения светодиодов дает схема, представленная ниже.

Вариант №11

Данная схема является 4-разрядным индикатором напряжения на аккумуляторе/батарейке. Реализована на четырех ОУ, входящих в состав микросхемы LM339 .

Схема работоспособна вплоть до напряжения 2 Вольта, потребляет меньше миллиампера (не считая светодиода).

Разумеется, для отражения реального значения израсходованной и оставшейся емкости аккумулятора, необходимо при настройке схемы учесть кривую разряда используемого аккумулятора (с учетом тока нагрузки). Это позволит задать точные значения напряжения, соответствующие, например, 5%-25%-50%-100% остаточной емкости.

Вариант №12

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

Как пример приведем простейшую схему на контроллере ATMega328.

Хотя тут, для уменьшения габаритов платы, лучше было бы взять 8-миногую ATTiny13 в корпусе SOP8. Тогда было бы вообще шикарно. Но пусть это будет вашим домашним заданием.

Светодиод взят трехцветный (от светодиодной ленты), но задействованы только красный и зеленый.

Готовую программу (скетч) можно скачать по этой ссылке .

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

Свежезаряженный аккумулятор выдает порядка 4.1В — светится зеленый индикатор. Во время зарядки на АКБ присутствует напряжение 4.2В, при этом будет моргать зеленый светодиод. Как только напряжение упадет ниже 3.5В, начнет мигать красный светодиод. Это будет сигналом к тому, что аккумулятор почти сел и его пора заряжать. В остальном диапазоне напряжений индикатор будет менять цвет от зеленого к красному (в зависимости от напряжения).

Вариант №13

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

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

Внимание!!! Попадаются платы, включающие защиту от переразряда при недопустимо низком напряжении (2.5В и ниже). Поэтому из всех имеющихся у вас плат необходимо отобрать только те экземпляры, которые срабатывают при правильном напряжении (3.0-3.2V).

Чаще всего PCB-плата представляет собой вот такую схемку:

Микросборка 8205 - это два миллиомных полевика, собранных в одном корпусе.

Внеся в схему некоторые изменения (показаны красным цветом), мы получим прекрасный индикатор разряда li-ion аккумулятора, практически не потребляющий ток в выключенном состоянии.

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

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

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

Вместо 2N3906 подойдет любой имеющийся под рукой маломощный p-n-p транзистор. Просто подпаять светодиод напрямую не получится, т.к. выходной ток микросхемы, управляющий ключами, слишком мал и требует усиления.

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

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



Описание работы Аналого-цифрового преобразователя.
Прерывания от АЦП

ATMega16 содержит в себе 10-битовый АЦП, вход которого может быть соединён с одним из восьми выводов Port A. АЦП Mega16, как и любому другому АЦП, нужно опорное напряжение для целей сравнения со входным (если измеряемое равно опорному, то получаем максимальный код в двоичном виде). Опорное напряжение подаётся на вывод ADRef или может использоваться внутренний генератор с фиксированным напряжением 2,65 В. Полученный результат можно представить в таком виде:

АЦП включается установкой бита ADEN в регистре ADCSRA. После преобразования, 10-битный результат оказывается в 8-битных регистрах ADCL и ADCH. По умолчанию, младший бит результата находится справа (то есть в bit 0 регистра ADCL, так называемое правое ориентирование). Но порядок следования битов на левое ориентирование можно сменить установив бит ADLAR в регистре ADMUX. Это удобно, если требуется получить 8-битовый результат. В таком случае требуется прочитать только регистр ADCH. В противном случае, Вы должны сначала прочитать регистр ADCL первым, а ADCH вторым, чтобы быть уверенным в том, что чтение этих двух регистров относится к результату одного преобразования.

Одиночное преобразование может быть вызвано записью бита ADSC в регистр ADCSRA. Этот бит остаётся установленным всё время, занимаемое преобразованием. Когда преобразование закончено, бит автоматически устанавливается в 0. Можно также начинать преобразования по событиям из разных источников. Модуль АЦП также может работать в режиме "свободного полёта". В таком случае АЦП постоянно производит преобразование и обновляет регистры ADCH и ADCL новыми значениями.

Для выполнения преобразования модулю АЦП необходима тактовая частота. Чем выше эта частота, тем быстрее будет происходить преобразование (оно, обычно, занимает 13 тактов, первое преобразование занимает 25 тактов). Но чем выше частота (и выше скорость преобразования), тем менее точным получается результат. Для получения максимально точного результата, модуль АЦП должен тактироваться частотой в пределах от 50 до 200 КГц. Если необходим результат с точностью менее 10 бит, то можно использовать частоту больше 200 КГц. Модуль АЦП содержит делитель частоты, чтобы получать нужную тактовую частоту для преобразования из частоты процессора.

Регистр ADMUX задаёт входной контакт порта A для подключения АЦП, ориентирование результата и выбор опорной частоты. Если установлен бит ADLAR, то результат лево-ориентирован. Опорная частота от внутреннего генератора задаётся выставленными в 1 битами REFS1 и REFS0. Если оба бита сброшены, то опорная частота берётся от контакта AREF. В случае, если REFS1=0 а REFS0=1, опорная частота берётся от AVCC с внешним конденсатором, подключенным к AREF. Выбор контакта ввода выполняется следующим образом:

Регистр контроля и статуса АЦП ADCSRA :

Бит ADEN=1 включает модуль АЦП.
Запись единицы в ADSC запускает цикл преобразования. В режиме "свободного полёта" запись единицы запускает первое преобразование, последующие запускаются автоматически.
ADIF - флаг прерывания АЦП. Этот бит устанавливается в 1 когда АЦП завершено преобразование и в регистрах ADCL и ADCH находятся актуальные данные. Этот флаг устанавливается даже в том случае, если прерывания запрещены. Это необходимо для случая программного опроса АЦП. Если используются прерывания, то флаг сбрасывается автоматически. Если используется программный опрос, то флаг может быть сброшен записью лог.1 в этот бит.
ADIE - Если в этом бите установлена единица, и прерывания разрешены глобально, то при окончании преобразования будет выполнен переход по вектору прерывания от АЦП.
Биты ADPS2..0 задают коэффициенты предделителя частоты:


Отличительные особенности:

  • Малое время преобразования: 1.4 мкс, макс
  • Встроенная функция выборки/фиксации
  • Нет потери кода
  • Не требует регулировки пользователем
  • Однополярное питание +5 В
  • Не требует внешнего тактового сигнала
  • Простое согласование с микропроцессорами

Области применения:

  • Цифровая обработка сигналов
  • Быстродействующие системы сбора данных
  • Телекоммуникации
  • Быстродействующие цепи серво - управления
  • Аудио системы

Функциональная схема:

Расположение выводов:

Описание:

ИС ADC0820 является быстродействующим, совместимым с микропроцессорами, 8-ми разрядным аналого- цифровым преобразователем (АЦП), использующим «half- flash» - технологию для получения времени преобразования 1.4 мкс. Конвертор имеет диапазон входных аналоговых сигналов от 0 В до +5 В и однополярное питание +5 В.

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

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

ИС ADC0820 производства Maxim является, совместимой по выводам, с ИС ADC0820 производства National Semiconductor и имеет более высокие эксплуатационные характеристики. ИС выпускается в корпусах типов: 20-pin SO, DIP, CERDIP.

Нужно сначала разобраться с компонентами, которые использовались нами для создания прошивки. А использовался нами только один компонент - PWM8. PWM расшифровывается как Pulse Width Modulator, что значит Широтно-импульсный модулятор. Суть прибора в том, что он позволяет изменять широту импульсов, генерируемых микроконтроллером. Тем самым, меняя выходное напряжения для устройств, не чувствительных к частоте.
Например: рабочая частота микроконтроллера 1Гц (то есть, период генерации импульсов 1с), ширина импульса 0.5с, напряжение импульса 5В.

Тогда среднее выходное напряжение за секунду равно 2.5 вольта. А получается эта величина просто: сложением подимпульсных площадей и делением их на общий промежуток времени. На всякий случай распишу подробней. Допустим, мы взяли промежуток времени в 1 секунду, из рисунка видно первый импульс длился 0.5. Умножаем 0.5с*5В (напряжение импульса) и все это делим на интервал времени. 0.5с*5В/1с = 2.5В. Если нам понадобится выходное напряжение в 3.33В, мы должны будем увеличить подимпульсную площадь до 75%. В литературе ещё часто фигурирует термин скважность. Так вот, скважность и есть отношений длительности импульса к длительности нулевого потенциала, например, для первого случая, она была 50%, для второго - 75%.

Я думаю, что теории уже достаточно и с установкой PWM на схему проблем не случилось. А вот настройки самого компонента стоит рассмотреть подробней. Для этого приведу скриншот с выделенными изменёнными параметрами.

Clock - это рабочая частота ШИМа, любой цифровой или аналогово-цифровой блок должен работать на определённой тактовой частоте. Для этого и придуманы делители частоты и поле Clock. SysClk - это системная частота, выставленная в закладке Global Resources. Интересно заметить то, что в выпадающем списке Clock присутствуют такие поля, как Row_0_Input_0. Это значит, что тактовый генератор модуля может быть снаружи чипа и синхронизироваться они будут через шину Row_0_Input_0.

Enable - уровень логической единицы данного блока. Обычно используются два стандарта: High = 5В и Low = 3В. Сам микроконтроллер, кстати, можно так же перевести на один из режимов High или Low.

CompareOut - выход широтно-импульсного модулятора.

Может возникнуть вопрос: зачем была дана выше приведенная теория, если на практике мы это нигде не использовали? А ответ в том, что мы использовали дефолтные значения для длинны импульса и времени периода (поля Period и PulseWidth) 0 0. При таких значениях на выходе PWM будет сплошной сигнал, равный по величине логической единице. Менять время периода и значения ширины импульса можно так же программно в режиме работы микроконтроллера, функциями PWM8_1_WritePeriod() и PWM8_1_WritePulseWidth().

ADC или АЦП

АЦП - аналого-цифровой преобразователь (или ADC Analog-to-digital converter) - это устройство, позволяющие преобразовать аналоговый сигнал в цифровой. Любые физические величины (давление, скорость, угол поворота, напряжение, ток, сила света) являются аналоговыми, и задача ADC - переводить их в цифровой сигнал. На практике же, для перевода в цифровой сигнал обычно используется величина напряжения.
Из многочисленных характеристик АЦП следует выделить три основных:

  1. Разрядность - это наименьшая единица аналогового сигнала, изменение которой может зафиксировать ADC, обычно измеряется в битах.
  2. Частота преобразования - количество измерений в секунду, измеряется в SPS (samples per second)
  3. Рабочий диапазон - диапазон величин, в котором работает данный преобразователь.

Так как АЦП уже не такой простой прибор, как PWM. Придется разобрать ещё некоторые теоретические аспекты микроконтроллера и некоторые фичи самого АЦП.

Общие характеристики микроконтроллера

Перечень некоторых понятий и обозначений о которых нужно знать при работе c чипами PSoC(кстати и не только всё ниже сказанное будет верно и для микроконтроллеров AVR)

В описаниях и на принципиальных схемах в даташитах часто фигурируют такие обозначения как Vcc, Vdd, Vss, AGND. И разница между ними порой не самая очевидная. Vcc - это напряжение питания микроконтроллера (сс - collector-to-collector), то же самое что и Vdd, так уж исторически сложилось что одна и та же величина имеет 2 обозначения. Vss - минимальный потенциал на микроконтроллере, очень часто бывает, что эта величина эквивалентна AGND. Буква "A" в аббревиатуре AGND указывает на что, это artificial граунд или искусственная земля. Стоит упомянуть про такое напряжение на схеме, которое обычно называется как BandGap. BandGrap - это опорное напряжения. Опорное напряжение означает то что оно остаётся постоянным не зависимо от напряжения питания МК, температуры и других внешних показателей. Vref - опорное напряжения отдельно рассматриваемого модуля. Очень долго я не мог врубиться, что такое Rail-to-Rail. А попадалась мне эта фраза в контекстах типа: "Данный модуль может работать в режиме Rail-to-Rail". Так вот Rail-to-Rail означает то, что элемент может работать на всем размахе напряжений от Vcc до AGND.

Пример 2. Voltage Measuring

Задача: Измерить напряжение на потенциометре, зашитом в отладочную плату и вывести значение на экран.

Вот тут уже будет по интересней. Как обычно запускаем дизайнер, создаем проект. Идем в User Modules -> Misc Data -> LCD и левой кнопкой перетягиваем его на микроконтроллер. LCD очень полезный и простой модуль, да к тому же ещё и не занимающий место на цифровых блока. Увидеть его можно в закладке Workspace Explorer. Из настоек ему нужно выбрать только LCDPort = Port_2. Теперь заходим в файл main.c, напомню, что он лежит в Workspace Explorer -> [Имя проекта] -> Source Files -> main.c. И добавляем в функцию main() следующий код.

LCD_Start(); LCD_Position(0,0); LCD_PrCString("Measured Voltage");

Компилируем код, прошиваем микроконтроллер. Если всё было правильно сделано, получим на экране строку которая была прописана выше. Более простого управления экраном, и придумать не могли. И это радует. Теперь дело осталось за ADC. Выбираем User Modules -> Legacy -> ADCINC12 и выкидываем его на контроллер. Может возникнуть вопрос "Почему мы не выбрали просто ADCINC, а ADCINC12 да и ещё в придачу из папки Legacy? Причина кроется в сложности инициализации модулей. ADCINC более сложный и гибкий модуль, который требует более тщательной и доскональной настройки. В папке Legacy, что значит унаследованные, уже храниться модуль который менее гибкий, зато более простой в реализации. Далее не думая заходим в папку, amplifers и выкидываем на схему PGA(Programmable Gain Amplifier). Программируемый операционный усилитель. Он нужен не столько для усиления, сколько для повышения входного сопротивления. Что бы величина текущего тока в цепи не влияла на точность измерения.
Выставляем настройки PWM как на скриншоте.

  1. Gain - коэффициент усиления.
  2. Input - вход прибора.
  3. Reference - опорное напряжение.

Настройки ADC выставляем так:

  1. TMR Clock - тактовая частота таймера.
  2. Input - вход прибора (подключен к PGA).
  3. CNT Clock - частота счетчика.

Последнее, что понадобиться нам для нормальной работы, это глобальный ресурс называемый Ref Mux. Ref Mux - это рабочий диапазон напряжений аналоговых блоков. Если мы выставим значение (Vdd/2)+/-(Vdd/2) то получим полную разбежку напряжений от 0 до 5В. Но в этом есть один определённый минус. Так как за опорное напряжение принимается напряжение питания. Если будет плавать напряжение Vdd, это повлияет на правдивость результатов. В таком случае нам и пригодился бы BandGap. Но пока не будем париться, и выставляем (Vdd/2)+/-(Vdd/2).
Для перепроверки скину скрин получившейся коммутации аналоговых блоков.

Переходим в main.c и добавляем в функцию main() следующий код:

PGA_Start(PGA_HIGHPOWER); //запуск PGA ADCINC12_Start(ADCINC12_HIGHPOWER); //запуск АЦП ADCINC12_GetSamples(0); //установка АЦП на песперерывную работу M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts while(1) // главный цикл прошивки { if (ADCINC12_fIsDataAvailable() != 0) //проверка на данных в ADC { result = ADCINC12_iGetData() + 2048; ADCINC12_ClearFlag(); LCD_Position(1,0); //установка позиции для вывода LCD_PrHexInt(result); //вывод результата в хексе } }

К данным функции iGetData() прибавляется 2048 для того что перевести данные в беззнаковый эквиваленте (если интересно смотреть google "c++ знаковые и беззнаковые переменные").

Соединяем потенциометр с платой следующим образом.

Прошиваем микроконтроллер и оцениваем результат работы.

Осталось только перевести хексы в напряжение и проверить корректность данных тестером. Добиваться этой цели будем чисто опытным путём. Облегчим себе ситуацию, и примем нулевой потенциал за 0x0000 значение на выходе ADC. Затем запускаем нашу уже написанную программу, выкручиваем потенциометр на максимум и смотрим получившиеся значения. У меня, например, получилось 0х0FEC. Затем берём тестер и измеряем реальное напряжение на потенциометре. У меня получилось 4.78В. Теперь делим 4.78/0х0FEC (у кого проблемы с системами исчисления, советую подкачаться) и получаем шаг квантования, то есть единицу напряжения, которой соответствует одно значение выхода АЦП. У меня получилась 0.0011727183513248 вот такое вот число. Теперь просто результат с АЦП перемножаем на эту величину и выводим на экран. Для этого добавим переменные в глобальное поле видимости (это всё то что вне функции main()).

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то