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

Распечатать

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

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

Если совсем лень искать спец деталь, а точность нужна в пределах показометра, то достаточно просто завести на Vref напряжение питания через дроссель в 10..100uH и повесить кондер емкостью 0.1uF на землю, как можно ближе к выводам. На картинке я нарисовал подачу Vref пунктиром, т.к. в данном случае я привожу пример для AVR, а там AREF можно подключить изнутри кристалла, программно.

Разумеется нужно отфильтровать и питание контроллера, поставив блокирующие емкости из керамики в 0.1uF между Vcc и GND, как можно ближе к выводам МК, чтобы помехи, возникающие при переключении логических уровней внутри МК, подавлялись.

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

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

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


Частота среза это такая частота, с которой начинается подавление сигнала. Можно еще и дроссель поставить, последовательно входу.

О фильтрах я еще напишу, а тем кто загорелся фильтровать все подряд я припас две серьезные книжки по фильтрам:

Запись опубликована в рубрике AVR. Учебный курс, Начинающим с метками , , . Добавьте в закладки постоянную ссылку.

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

  1. SWG говорит:

    Для простых применений я бы рекомендовал опору TL431. 3х-выводный, стоит недорого (брал по 20-30тенге — 0,15-0,25$), нпряжение от 1,2 до 30в, точность для 10бит, да еще при 2 неточных разрядах, за глаза. Нормально работает начиная от долей миллиампера.

  2. nwanomaly__ говорит:

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

    может всё таки фильтр низких частот?

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

    • DI HALT говорит:

      Да, вечно оговариваюсь.

      • Dmitri говорит:

        Да, люди действительно оговариваются. ФНЧ — есть фильтр нижних частот, а не низких. Даже в Хоровиц&Хилл эта оговорка. В названии «нижних частот» действительно есть смысл, допустим у тебя частота среза сотни мегагерц, язык не поворачивается назвать эти частоты низкими.

        P.S. В плане терминов очень преуспели американцы. Low-pass и никаких гвоздей, тут уж точно не перепутаешь.

        • nwanomaly__ говорит:

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

    • DI HALT говорит:

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

      • nwanomaly__ говорит:

        я тоже так делаю, но думал — вдруг чего не понимаю? )

        • UncleRus говорит:

          И действительно не понимаете :)
          В спринте для соединения с заливкой следует проложить отдельную дорожку на заливку и поставить ей нулевую дистанцию (расстояние от заливки до дорожки).
          Дистанция меняется на нижней панели, рядом со значком ground plane.

          • DI HALT говорит:

            Вау!!! А я думал, чего это расстояние от дорожек до заливок не меняеются, глюк из версии в версию, а это не бага, это фича. Вручную каждую дорожку можно задавать дистанцию. Круто.

            Гы, попутно нашел как можно писать дырчатый текст.

          • nwanomaly__ говорит:

            я так понимаю — тоже нулевыми линиями? )

          • UncleRus говорит:

            Неа :) Достаточно поставить галку «Cutout» в свойствах надписи :)

  3. Dmitri говорит:

    Да, блин обложили nwanomaly__ со всех сторон. Один со своими «нижними частотами» другой со спринтом. Окружили демоны :)

  4. pspost говорит:

    Можно ли использовать внешний MUX для ацп мк? Например, HC4051.

    В моей корявой макетке импульсного источника есть и RC фильтр ацп и усреднение (по 64-м выборкам). Но всё это ложится, если не учитывать наводки (от самой себя). А думал прокатит))
    Читаю вот это «Уилльямс Т. ЭМС для разработчиков продукции» и тихо подвисаю. Риторический вопрос: какая разница между радиолюбителем и человеком с радиотехническим образованием?

  5. pspost говорит:

    Вопросик. Надо мерять напряжение в диапазоне от 0 до 0.1В. В качестве ИОН — TL431B(0.5%). Что лучше: 1)использовать усиление сигнала 20Х (опция в тайни) и установить ИОН в 2В; или 2) ничего не усилять и поставить ИОН в 0.1В (через делитель на резисторах)??

    • DI HALT говорит:

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

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

      • pspost говорит:

        Да, я так и подразумевал, что будет использоваться дифференциальный режим. Но чем не подходит внутренный усилитель в мк? (AD627ARZ ~10USD :( )

        А вообще вопрос меня интересовал об усиление сигнала vs низкое напржение ИОН.

  6. pspost говорит:

    Вопрос по ИОН.
    Буду использовать TL431. Там с помощью резистивного делителя задаётся значение опорного напряжения. Подбирая значения этих резисторов близкие к расчётным, получаются цепочки из 3-х 4-х номиналов для каждого. Что, если их заменить подстроечными?

    Собственно вопрос: насколько подстроечный резистор держит выставленное значение, и смысл применять его тут в ИОН?

    • DI HALT говорит:

      От подстроечника зависит. От его точности.
      В принципе, можно заменить. Вопрос только какая тебе нужна точность?

      Еще подстроечник может чуток плавать от температуры или от механических вибраций.

  7. gelos говорит:

    Вопросик. Поставил на выход AREF атмеги8 ADJ пин микрухи LM336-2.5, запрограммировал контроллер на посылку данных из АЦП на ком порт, включаю устройство принимаются только значения 1023. Что я неправильно сделал? (Напряжение между землей и ADJ замерял 0.98В(хотя должно вроде быть 2.5В). Если поставить чтобы опорное напряжение бралось из AVCC то данные идут нормально)

  8. rodonanto говорит:

    просьба не пинать….
    какой МК посоветуете?
    нужно чтобы были и ЦАП, и АЦП.

    задача такова — сделать генератор синусоиды 20-20кГц с довольно большой точностью.
    ЦАП как выход хочу заюзать, а АЦП на считывание ввода поставить.

    • DI HALT говорит:

      20кгц довольно большая частота, ее же генерить надо. А ЦАП я видел только на ARM Cortex M3 (LPC1343, LPC1751, STM32F103C8 вот в каком то из них)

      • rodonanto говорит:

        а если один порт убить на преобразователь R-2R? сея выйдет
        а если два порнта включитть?

        • DI HALT говорит:

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

          • rodonanto говорит:

            млин…
            просто препод требует минимум 10бит клепать…
            ну чтобы за 1000 делений завалило…

          • DI HALT говорит:

            Десять бит можно, только плавать будет на младших разрядах. Но зато препод будет доволен :)

          • rodonanto говорит:

            то есть плавать?

            вот если взять, скажем, мегу16.
            задать частоту на 8 МГц.
            по заданию макс — 20 кГц.
            то есть по 400 тактов на полное колебание.

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

          • DI HALT говорит:

            В смысле что младшие три значения не будут тем, Что ты запускаешь. Т.е. на дискрете 10бит и 5ти вольтах у тебя ЦАП должен выдавать 1024 ступеньки напряжений. 5/1024 = 0.0049 это вес одной ступеньки. Т.е.

            1 = 0.0049В
            2 = 0.0097В и так далее. Это как бы математически

            1024 = 5В

            Но изза теплового и точностного разброса резисторов 1 не будет равно 0.0049, он будет чем то сильно приблизительным. И только со значенияя старше 8ми будет что то более менее похоже на правду. Т.е. младшие разряды не будут точными, а значит смысла их делать нет.

          • rodonanto говорит:

            гм…
            а вот над этим как-то не подумал…
            сам дурак…

          • rodonanto говорит:

            блин, таки я валенок…

            хорошо, если юзать один порт — тогда получается приблизительно по 0.02вольта…
            ладно, с этим посмотрим. а вот как организовать алгоритм — вот тут я подвисаю.

            чего посоветовать можеш?

          • rodonanto говорит:

            а может ну его на асме? я еще не силен в нем.
            могЁт на сях написать софтину?
            но после этого баги ловить — замаюсь…

            и таки скажите шо мине делать?

  9. husky говорит:

    «Если совсем лень искать спец деталь, а точность нужна в пределах показометра, то достаточно просто завести на Vref напряжение питания через дроссель в 100uH и повесить кондер емкостью 0.1uF на землю»

    Уважаемый DI HALT, скажите, пожалуйста, а как определяется значение индуктивности дросселя, которое здесь необходимо? В вашей статье приведено 100uH, в даташитах на контроллеры в схемах питания АЦП указана индуктивность в 10uH. В каких пределах можно ее менять?

    • DI HALT говорит:

      Хм. Всегда думал что в даташите 120мкГн дроссель на АЦП. Видимо когда то прочитал что то не то :)

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

  10. Br.Misha говорит:

    поставил LM336Z-5.0 для питания АЦП ADS1100. Но на выходе LM336Z-5.0 почему то 1,5В.
    В чем может быть проблема?
    Спасибо!

  11. Алмаз говорит:

    «…Аналоговая земля должна быть соединена с землей цифровой в одной точке…»
    А как сделать вольтметр, у которых они не соединены? Ведь возьмем самый обычный тестер, — у него два вывода и для использования его совсем не нужно какой-либо из них цеплять именно на землю измеряемого сигнала!

    • DI HALT говорит:

      У вольтметра на щуп идет аналоговая земля скорей всего. А цифровая земля (от процессора) отдельно, внутри она. И где то они соединены в одной точке.

      • Алмаз говорит:

        Как это? Вот только что своим тестером замерил напряжение на участке электрической цепи: один щуп приложил к точке с потенциалом 4.0 В, другой щуп — к точке 3.2 В. Тестер мне выдал значение — 0.8 В. Земли данной электрической схемы (аналоговой земли) я не касался в принципе!

        • DI HALT говорит:

          Причем тут земля твоей аналоговой цепи и вольтметр? У вольтметра своя земля. И за ее потенциал он берет потенциал своего черного щупа.

          • Алмаз говорит:

            Не подскажешь как это реализуется (устройство за потенциал земли берет не 0 своего питания, а потенциал другой точки, «черного щупа»)?

          • DI HALT говорит:

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

            Кури ТОЭ и потенциальные диаграммы. А также падения напряжения при протекании тока через сопротивления.

  12. Алмаз говорит:

    ТОЭ я обкурен, — дым из ушей валит). А все равно не пойму: для того чтобы измерить разность потенциалов двух точек с помощью АЦП по идее необходимо три щупа: 1-ый щуп соединить землю вольтметра с аналоговой землей, 2-ой — приложить к точке №1, 3-ий — приложить к точке №2. Потенциал для каждой точки измеряется относительно земли. Разность потенциалов и есть напряжение между двумя точками.
    Как тестер обходится двумя щупами и как это реализовать?

    • DI HALT говорит:

      Хреново курил, не пробрало. Пыхни еще раз.

      Повторяю еще раз. У тестера СВОЕ СОБСТВЕННОЕ ПИТАНИЕ. Своя батарейка. И его земля не привязана к земле измеряемой схемы. Он за землю принимает ту точку куда мы ткнули черным щупом. Куда мы ее ткнули относительно земли измеряемой схемы совершенно не важно — т.к. ему главное замерить потенциал относительно своей земли.

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

      • Алмаз говорит:

        Курнул мимоходом даташит на МК и осенило: чтобы тестер принял за землю черный щуп, нужно аналоговую землю прицепить на AGND, т.е. agnd не цеплять к gnd микроконтроллера. До этого я agnd и gnd соединял между собой, от того и получался кавардак. Спасибо за совет пыхнуть)))

  13. TKV говорит:

    Здравствуй, DI HALT! Вопрос: питание 5 Вольт через дроссель 100 мкГн. Может стоит поставить защитный диод? И если нет, насколько это критично?

Добавить комментарий