Меню

Ацп с двухполярным питанием



Ацп с двухполярным питанием

Анонс:

  • Измеритель без калибровок;
  • Измеритель без подстроечных сопротивлений;
  • Измеритель с высоким входным импедансом;
  • Однополярное питание;
  • Двуполярный сигнал на входе;
  • АЦП не менее 16 бит;
  • Простая программная реализация интерфейса I2C в режиме Mаster-Slave;
  • Микроконтроллер;
  • Борьба с помехами методом медианной фильтрации;
  • Исходники для AVR-Studio;

Поставим задачу.

Имеется двуполярный сигнал от источника с высоким внутренним сопротивлением. Необходимо построить схематехнику так, чтобы ни одного подстроечного сопротивления, ни одной калибровки бы не требовалось. Таким источником, например, может быть pH электрод с внутренним сопротивлением доли GΩ и разнополярным сигналом в диапазоне ±250 мВ. (см. http://keklab.ru/articles/3-2010-10-28-21-52-23/18-phmeter.html ).

Задача не решается «в лоб». Внутренний усилитель АЦП, как правило, имеет малый импеданс. Значит надо усилитель на вход по технологии CMOS. Это во-первых. Далее раз усилитель, то чем его питать? Двуполярное питание? Не хотелось бы… А как же ±250 мВ на входе? Это означает создание смещения, а это означает зависимость от точности питания, от точности сопротивлений, организующих смещение, даже при использовании источников опорного напряжения. Вот калибровки и потянутся… Это во-вторых.

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

Но в представленном решении оказалось все проще. Пусть себе гуляет. Я имею ввиду не кошку, а искусственную среднюю точку. Она организована может быть совершенно не симметрично относительно питания 3.3V, совершенно не точными сопротивлениями. Главное, чтобы суммарный ток через Rg1 и Rg2 был бы существенно выше потребления усилителя и АЦП, они единственные потребители, которые зависят от средней точки. Почему не важна стабильность? Да, потому, что средняя точка заведена на “-” внутреннего усилителя АЦП и входной сигнал тоже на неё опирается. Вот если бы минус этого АЦП сидел бы на земле, тогда точность средней точки относительно земли имела бы важное значение.

И ещё два замечания относительно всей конструкции. Если диапазон входного сигнала ±250 мВ, то средняя точка должна быть относительно земли выше 250 мВ. Пусть она будет 1 вольт, тогда диапазон относительно земли будет от -750мВ до 1250мВ, что вписывается и в верхнее ограничение до 3.3 вольт. И последний приятный факт. Точность питания в 3.3 вольта совсем не обязательна, как известно, многие современные операционные усилители к этому относятся «спокойно», если схемотехника не привязывается к питанию для каких-то других целей. Наша цель – отсутствие подстроек и калибровок выполнена. С этим разобрались…

Теперь про усилитель.

А он ничего и не усиливает, а только повторяет и организует преобразование высокого импеданса в потребный для АЦП. Никаких сопротивлений, никаких подстроечников… красота! Если только кому-то потребуется, чтоб он усиливал сигнал, пиши пропало… Точные сопротивления и калибровки вам обеспечены. Хотя есть решение и здесь. Если вместо OPA335 поставить INA333, то можно и усиливать. Но! Точность усиления будет определяться точностью RG (см. pdf). OPA335 имеет один параметр, который позволяет «забыть» про смещения входных токов и напряжений: ZERO DRIFT: 0.05μV/°C (max).

Теперь про АЦП.

Хоть он и 18-ти разрядный, используем только 16. Это будет сказываться на скорости преобразования дельта-сигма. Вот здесь мы можем усиливать сигнал, не заботясь о точности, всё внутри. 1-2-4-8 – возможные варианты параметра усиления PGA. Правда надо отметить, что собственный входной импеданс АЦП зависит от усиления и составляет R=2.25/PGA (MΩ).

Читайте также:  Питание кошек при нефрите

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

ADC_MCP3421 = (B1

if (ADC_MCP3421

SignADC_MCP3421 = ADC_MCP3421;

else

SignADC_MCP3421 = -(65535-ADC_MCP3421+1); где

  • B1 и B2 – соответственно старший и младший байт, который выдает АЦП в 16-ти битовом режиме, их тип unsigned short имеет значение для операции сдвига влево;
  • ADC_MCP3421 – двухбайтовый код типа unsigned long , на тот случай, если понадобится все таки все 18 бит ;
  • SignADC_MCP3421 – знаковая переменная типа signed long;

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

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

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

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

  • Измерения надо проводить с интервалом, кратным 20 мс;
  • Накапливать результаты в буфер — signed shortadcdata [25];
  • После накопления проводить медианную фильтрацию;

Конечно все это справедливо для «неспешных» измерений, где истинное значение необходимо не чаще, чем раз в секунду или в две.

В микроконтроллере организуется системное прерывание. Если есть кварц, то организуется интервал проведения измерения. В данной схеме 80 мс. Буфер adcdata за две секунды накапливает 25 значений. Затем процедура qsort(), которая входит в стандартный набор AVR-Studio, сортирует этот массив по возрастанию. Значение буфера adcdata[13] – отфильтрованное. В этом заключается медианная (серединная) фильтрация. Чем это лучше просто среднего значения?

Возьмем короткий буфер array[5] = <1002, 1010, 999, 1001, 1100>, в который записываем значения АЦП SignADC_MCP3421. Такой он получился после реальных измерений, на которые действует импульсная помеха. Последнее значение резко отличается от остальных из-за этого. Среднее будет = 1022;

После сортировки массив будет таков: array[5] = <999, 1001, 1002, 1010, 1100>;

Медианная фильтрация после сортировки выдаст значение array[2] = 1002. Это значение более точное и не учитывает помеховый выброс. Конечно, можно из необработанного массива выбирать максимальное и минимальное значение и не учитывать их при подсчете среднего. А если таких максимумов будет несколько? По сути медианная фильтрация это и делает.

Важным моментом является период измерений. Контроллер ничего не знает о фазе пятидестигерцовой помехи, она не синхронизирована с моментом начала измерения.

На практике на вход данной схемы было подано 200 мВ синусоидального сигнала с частотой 50 Гц. (см. осциллограммы). Эта синусоида имитировала помеху, наведенную на постоянный сигнал в 100 мВ. Моменты измерения показаны ниже импульсами с периодом в 80 мс. Как видно в двух случаях (осц.1 и осц.2) моменты измерения приходятся на разные фазы синусоиды.

Читайте также:  Слим диет заменитель питания

Медианная фильтрация выдавала значение около 100мВ. Соотношение сигнал/шум при этом 100%. Реальный разброс измерения за несколько сеансов составил диапазон от 97.90625мВ до 100.65625мВ. Ошибка составила 2.75%. Ошибка большая, но надо иметь в виду, что реальное соотношение сигнал/шум будет на порядок меньше.

В материалах представлен проект в AVR-Studio ver 4.18 Build 716 для Atmega16A. Он без комментариев, как есть. В нем реализуется алгоритм измерения и метод медианой фильтрации. Так же представлены процедуры для простой организации интерфейса I2C. На практике этот интерфейс так же подвержен помехам. Чтобы это не приводило к «зависанию» организованы некие действия в процедуре void twi_stop(void). Эти материалы можно использовать в организации связи многочисленных Slave-Unit, которые охватывают широкий спектр приборов:

  • DS1307 — часы реального времени;
  • DS 1624 – датчик температуры;
  • DAC7571 – 12 битный ЦАП.

В заключении.

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

  • RB0505S – DC-DC преобразователь;
  • ISO1540 — Low-Power Bidirectional I2C Isolators

Источник

MAX1132, MAX1133

16 битные 200 kSPS АЦП со встроенным ИОН, работающие от однополярного источника питания +5 В

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

  • 200 kSPS (двухполярный) и 150 kSPS (однополярный) АЦП с УВХ
  • 16 битное разрешение без потери данных
  • Гарантированный INL = 1.5 LSB
  • SINAD >= 85 дБ
  • Однополярное питание + 5 В
  • Потребление в однополярном рабочем режиме 7.5 мА
  • Потребление в дежурном режиме 2.5 мкА
  • Программно перестраиваемый однополярный и двухполярный входной динамический диапазон:
    От 0 до +12 В и ±12 В (MAX1132)
    От 0 до +4.096 В и ±4.096 В (MAX1133)
    Возможность работы от внешнего или внутреннего ИОН
  • Возможность работы от внешнего или внутреннего задающего генератора
  • SPI/QSPI/MICROWIRE- совместимый последовательный интерфейс
  • Три программируемых пользователем логических выхода
  • Миниатюрный 20 выводной SSOP корпус

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

  • Управление производственным процессом
  • Индустриальные модули ввода/вывода
  • Системы сбора и накопления данных
  • Медицинские приборы
  • Переносная аппаратура и аппаратура с автономным питанием

Структурная схема MAX1132, MAX1133:

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

MAX1132/MAX1133 — 16-разрядные АЦП с производительностью 200 kSPS. Приборы имеют SPI, QSPI и MICROWIRE совместимый последовательный интерфейс. АЦП содержат входной делитель, УВХ, задающий генератор, +4.096 В ИОН и три цифровых выхода для управления внешними устройствами (мультиплексорами или ПЛМ) в 20 выводном SSOP корпусе. Превосходные динамические характеристики (SINAD > = 85 дБ), высокое быстродействие (200 ksps) и низкое потребление (7.5 мА) делает эти приборы идеальными для использовании в оборудовании управления производственными процессами, контрольно-измерительной и медицинской аппаратуре. MAX1132 имеет входной динамический диапазон от 0 до +12 В (униполярный) или ±12 В (биполярный), в то время как MAX1133 — от 0 +4.096 В (униполярный) или ±4.096 В (биполярный). Приборы работают от раздельных источников питания (аналогового и цифрового) от +4.75 до +5.25 В, при производительности 10 kSPS потребляют менее 1 мА, а при более низких скоростях — потребление может быть снижено до 20 мкА. Выход последовательного строба (SSTRB) позволяет подключать приборы напрямую к DSP семейства TMS320. MAX1132/MAX1133 могут работать от внутреннего задающего генератора или использовать в качестве задающих тактовые импульсы последовательного интерфейса.

MAX1132/MAX1133 имеют схему автокалибровки, которая позволяет скорректировать смещение и линейность. Проведение калибровки позволяет оптимизировать параметры. Три программируемых пользователем логических выхода позволяют осуществить мультиплексирование 8 каналов или управление ПЛМ.

Читайте также:  Учет питания сотрудников детского лагеря

Источник

Из двухполярного сигнала в однополярный и в цифру

Есть задача измерять двухполярное напряжение в диапазоне от -0,6В до +0,2В с помощью микроконтроллера.

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

В сети нашел интересную идею: усилить сигнал и подать на вход 1 АЦП, с ножки АЦП сигнал инвертировать и подать на вход 2 АЦП. Получается, что положительное напряжение измеряется через один вход, отрицательное — через второй.

Но может есть более простой способ выполнить оцифровку двухполярного напряжения? Двухполярное напряжение питания присутствует. АЦП нужен 12 бит.

Версия с двумя АЦП под скрепкой (Прoтеуc):

Ну так сделать сдвиг уровня(сумматор) на ОУ. Т.е. приплюсовать к вашему переменному напряжению 1В образцовых постоянных. Тогда на АЦП уже будет подаваться 0.4В. 1.2В. Или чтобы максимально реализовать динамический диапазон АЦП, сдвинуть напряжение не на 1В, а на 0.6В. Тогда на АЦП пойдёт 0. 0.8В. Естественно операционник должен быть прецизионный. На нём за одно можно и усилитель сделать, чтобы поднять напряжение до максимально возможного входного АЦП. Ну а потом програмно вычитать добавку.

Арс: Ну так сделать сдвиг уровня(сумматор) на ОУ
что-то никак не могу сообразить как. Ведь просто подать сигнал в среднюю точку резистивного делителя нельзя (или все-таки можно?).

Можно.
Но лучше сигнал на неинвертирующий вход а опорное (то, с которым суммируете) с обратным знаком на инвертирующий вход ОУ.
Вот две схемы сумматоров:


(http://www.mami.ru/kaf/aipu/theme4.html)
Естественно, ОУ должен питаться от двухполярного источника.
Первая схема инветирует входной сигнал.
Вторая, если входной сигнал подать на неинвертирующий вход, не инвертирует.
Вот ещё в википедии почитайте

спасибо, буду изучать.

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

Немного переработал схему. Она получилась проще.
Остался вопрос стабильности.

Входной сигнал -0,6. +0,2В, точность нужна минимум 0,001В.

Арс: Естественно операционник должен быть прецизионный
какой посоветуете?
Хотел поставить MCP6V01 (так называемый «Auto Zero») и только сейчас заметил, что он для однополярного питания

>Хотел поставить MCP6V01 (так называемый «Auto Zero») и только сейчас заметил, что он для однополярного питания

Это значит, что его можно использовать и при однополярном питании. При двуполярном работать тоже будет. Наоборот неверно. ОУ предназначенный только для двуполярного питания может не работать при однополярном. Разница их обычно в диапазоне входного и выходного напряжений. Однополярные работают от 0 напряжения на входе и до 0 на выходе(Real-toReal in/out). Это особо указывается как способность работы с однополярным питанием.
Нужно быть внимательным с величиной напряжения питания — не более 5,5в для этого усилителя. Например можно использовать -1 — + 4 вольта питание в данном случае.
В Вашем случае возможно использовать дешевый op07, если уж питание +-12. У него точность порядка 200uV (0С-70С)- раз в 5 лучше чем Вам надо.

12 бит это как раз 0,8/4000 = 200uV.
Еще нужно помнить, что Auto zero drift усилители шумят с частотой внутреннего генератора. Нужен фильтр на выходе для подавления шума.

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

Источник