180. Аналоговый тракт вокруг АЦП: ёмкость выборки, буфер, мультиплексор, драйвер
Раздел 50.6 объяснил, зачем конденсатор у входа АЦП, раздел 14 — как устроен сам преобразователь. Здесь — что происходит в первые сотни наносекунд после того, как АЦП замыкает ключ выборки, и почему высокоомный датчик нельзя подключать к входу напрямую.
Числа ниже — модель ngspice: ёмкость выборки 5 пФ, сопротивление ключа 1 кОм, время выборки 200 нс, источник 2,0 В с сопротивлением 10 кОм; ёмкость выборки перед замыканием заряжена до 1,0 В от прошлого измерения.
Как это называется в документации
Оригинал Перевод sample and hold (S&H) устройство выборки и хранения sampling capacitor (CADC) ёмкость выборки sampling time / acquisition time время выборки input impedance / source impedance входное сопротивление / сопротивление источника ADC driver драйвер АЦП charge injection / kickback бросок заряда на входе multiplexer channel crosstalk перекрёстная помеха каналов settling to N bits установление до N разрядов reconstruction filter восстанавливающий фильтр
180.1 Что происходит при выборке
Внутри АЦП ключ подключает ко входу конденсатор выборки. Он заряжен от
прошлого измерения, и за время выборки должен зарядиться до нового
напряжения через сопротивление источника и ключа. Постоянная времени —
(Rист + Rключа) · Cвыб = (10 кОм + 1 кОм) · 5 пФ = 55 нс; чтобы
установиться до 12 разрядов, нужно ln 2¹³ ≈ 9 постоянных, то есть
496 нс. Выборка длится 200 нс:
| Что стоит перед АЦП | Через 200 нс | Ошибка | В кодах |
|---|---|---|---|
| источник 10 кОм напрямую | 1,973 В | −26,6 мВ | 33 |
| источник и 100 нФ у входа | 1,99995 В | −0,05 мВ | 0,06 |
| буфер на ОУ | 2,00001 В | +0,01 мВ | 0 |
| буфер, 100 Ом и 1 нФ | 1,99921 В | −0,79 мВ | 1 |
Через 50 нс разница ещё нагляднее: напрямую от источника на ёмкости 1,594 В вместо 2,0 — измерять нечего, а с буфером уже 2,000 В.
180.2 Конденсатор у входа или буфер
Конденсатор 100 нФ у входа работает как местный источник заряда: ёмкость выборки в 20 000 раз меньше, и при перезаряде конденсатор проседает всего на 0,05 мВ. Это дёшево и не требует усилителя — но есть цена:
- конденсатор с источником 10 кОм даёт постоянную времени 1 мс: быстрый сигнал он сгладит (иногда это и нужно — раздел 178);
- при переключении каналов встроенного мультиплексора конденсатор как раз помогает: он свой у каждого вывода и отдаёт заряд ёмкости выборки, которую зарядил прошлый канал. В модели после скачка с 3,0 на 0,5 В ошибка — 0,125 мВ (5 пФ · 2,5 В / 100 нФ). Не помогает он за внешним мультиплексором, где один вывод АЦП обслуживает несколько датчиков: там конденсатор общий, и его тоже надо перезарядить (180.3);
- конденсатор выручает только при редких выборках. Каждая забирает у
него
Cвыб · ΔU(ΔU — разница с прошлым каналом), а подзаряжается он через источник с той же постоянной времени 1 мс. Если выборки идут чаще, просадки копятся, и в среднем вход ведёт себя как резистор1 / (Cвыб · f): 200 кОм при 5 пФ и миллионе выборок в секунду. С источником 10 кОм это делитель — ошибка почти 5 % перепада, около 120 мВ. Меньше половины кода (0,4 мВ) она остаётся примерно до 2700 выборок канала в секунду; - ток утечки конденсатора и входа складывается с ошибкой (раздел 164.1).
Буфер решает обе задачи: держит низкое выходное сопротивление и на постоянном, и на быстром сигнале. Типовой драйвер АЦП — буфер, затем развязывающий резистор 100 Ом и конденсатор 1 нФ у самого входа: резистор развязывает ёмкость от выхода усилителя (раздел 163.3), а конденсатор отдаёт заряд ёмкости выборки. В модели такой драйвер даёт ошибку 0,79 мВ — один код.
180.3 Мультиплексор: соседний канал догоняет
У микроконтроллера один АЦП на много каналов: внутренний мультиплексор переключает вход. От прошлого канала заряженной остаётся ёмкость за мультиплексором. У встроенного это ёмкость выборки и сам ключ — единицы пикофарад, а дорожка и защита у каждого вывода свои и заряжены своим сигналом. Если же несколько датчиков заведены на один вывод АЦП через внешний мультиплексор, к общему узлу добавляются дорожка, защита и ёмкость самой микросхемы — в модели 20 пФ. Переключаем такой мультиплексор с канала 3,0 В на канал 0,5 В при источниках 10 кОм:
| Время после переключения | Напряжение на входе АЦП | Ошибка в кодах |
|---|---|---|
| 200 нс | 1,431 В | 1155 |
| 400 нс | 0,846 В | 429 |
| 1 мкс | 0,518 В | 22 |
| 2 мкс | 0,500 В | 0,1 |
Постоянная времени здесь (10 кОм + 100 Ом) · 20 пФ = 202 нс, и после
переключения нужно выждать те же девять постоянных. Если этого не
сделать, соседний канал «просвечивает» в измерение — на большом перепаде
это сотни кодов. Лечится тремя способами: увеличить время выборки в
настройках АЦП, понизить сопротивление источника (буфер), либо измерять
каждый канал дважды и брать второе значение.
180.4 Сопротивление источника: что говорит документация
В документации на микроконтроллер есть таблица «максимальное
сопротивление источника» для каждого времени выборки. Смысл её тот же,
что в 180.1, только запас строже: в документации берут ln 2^(N+2) — для
12 разрядов 9,7 постоянной (установление до четверти кода), а не 9:
9,7 · (Rист + Rключа) · Cвыб должно уложиться во время выборки. Отсюда практические выводы:
- датчик с делителем на мегаомах напрямую не измерить ни на каком времени выборки: нужен буфер или конденсатор у входа с редкими выборками (180.2) — так в разделе 166.5 меряют делитель батареи 1 МОм / 1 МОм;
- термистор в делителе 10 кОм — на грани: нужно самое долгое время выборки;
- если каналов много и они разные, время выборки задают по худшему каналу или переключают его программно перед каждым измерением.
180.5 На выходе ЦАП — то же самое наоборот
У ЦАП внутри тоже резисторы. Свой выходной буфер у ЦАП STM32 есть (раздел 15.3): с ним выход держит нагрузку от 5 кОм, но не доходит до шин примерно на 0,2 В; без него выходное сопротивление до 15 кОм, и для точности 1 % нагрузка нужна от 1,5 МОм. Внешний буфер ставят для нагрузки тяжелее или для сигнала от самой земли, а за ним, если сигнал ступенчатый, — восстанавливающий фильтр (раздел 178), который сглаживает ступеньки до частоты обновления. ШИМ с RC из раздела 50.5 — тот же приём в более дешёвом исполнении.
180.6 Грабли
Показания АЦП занижены и зависят от предыдущего канала. Не хватает времени выборки: в модели с внешним мультиплексором через 200 нс после переключения на входе 1,431 В вместо 0,5.
Высокоомный датчик даёт заниженные коды. Сопротивление источника больше допустимого для выбранного времени выборки — буфер.
После добавления конденсатора 100 нФ сигнал «затупился». Постоянная времени с источником 10 кОм — 1 мс; для быстрого сигнала нужен буфер.
Драйвер на ОУ возбудился на ёмкость у входа. Нет развязывающего резистора (раздел 163.3).
ЦАП врёт под нагрузкой. Выход ЦАП имеет своё сопротивление — нужен буфер.
180.7 Итоги
- Постоянная времени выборки
(Rист + Rключа) · Cвыб= 55 нс; для 12 разрядов нужно девять постоянных — 496 нс, а выборка длится 200 нс. - Источник 10 кОм напрямую даёт ошибку 26,6 мВ (33 кода), конденсатор 100 нФ у входа — 0,05 мВ, буфер — 0,01 мВ, драйвер с 100 Ом и 1 нФ — 0,79 мВ.
- После переключения канала общий узел за внешним мультиплексором (20 пФ) ещё держит прошлое напряжение: через 200 нс 1,431 В вместо 0,5 В — 1155 кодов ошибки. У встроенного мультиплексора конденсатор 100 нФ у вывода сводит это к 0,125 мВ.
- Таблица «максимальное сопротивление источника» в документации — это и
есть условие
9,7 · (Rист + Rключа) · Cвыб≤ время выборки.
Дальше: раздел 181 «Аналоговая разводка и земля».