?

Log in

No account? Create an account

Previous Entry | Next Entry

Демоны в АЦП STM32

DSC_9526_s

Немного освоившись с ЦАП STM32, начал знакомиться с АЦП. Довольно много информации по нему содержится в документе AN2834. Но там полезные рекомендации, как на стр. 37: «Do not add any external capacitor (Cext) to the input pin when applying this above workaround» чередуются с вредными советами, как на стр. 39: «An extra large Cext enables sampling more often». Это подтолкнуло к написанию данного поста (updated).



Современные АЦП, как правило, имеют в своем составе УВХ. Причем этот УВХ подключен прямо к входному пину без всяких буферов, поскольку при однополярном питании сделать буфер проблематично. В некоторых сигма-дельта АЦП такой буфер есть, но он обычно отключаемый, так как при его использовании накладываются ограничения на допустимый диапазон входного напряжения. В STM32 входного буфера нет. Во время выборки к входному пину через ключ подключается конденсатор УВХ. Но что происходит с этим конденсатором дальше? К моменту следующей выборки на нем будет прежний заряд? Вряд ли. Дело в том, что современные интегральные АЦП подобного класса строятся на базе емкостного ЦАП. Во время преобразования методом последовательного приближения производится балансировка зарядов (а не токов, как было в АЦП на основе R-2R ЦАПа). Поэтому заряд входного конденсатора «расходуется» во время преобразования. Да и вообще, во многих АЦП конденсатор УВХ - это не какой-то отдельный элемент, а вся матрица конденсаторов емкостного ЦАП. Так что же будет с конденсатором в конце преобразования, он разрядится до нуля, или будет заряжен каким-то другим зарядом? Это зависит от конкретной схемы АЦП. Документация внятного ответа на этот вопрос не дает, придется прибегнуть к измерениям.

Последовательно со входом АЦП я включил резистор 10 кОм, падение напряжения на котором контролировал осциллографом. На всех осциллограммах по горизонтали 2 мкс/дел, по вертикали 100 мВ/дел. АЦП работает с частотой дискретизации 100 кГц. Измерения, конечно, не совсем достоверны в плане формы выброса, так как ко входу АЦП я подключил небольшую дополнительную емкость (щуп 1:10 имеет емкость около 18 пФ). Но качественно картина не меняется.

ch1_min

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

ch1_mid

При напряжении, равном половине шкалы, выбросы исчезают.

ch1_max

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

Чтобы не появлялась погрешность измерения, за время выборки конденсатор УВХ должен успевать заряжаться до входного напряжения с точностью не хуже 1 LSB. Получить это несложно, так как емкость конденсатора маленькая, около 8 пФ. В datasheet приведена соответствующая табличка, величина сопротивления на входе АЦП может быть порядка десятков кОм. Для источников сигнала с высоким входным сопротивлением можно увеличить время выборки АЦП, в STM32 такая возможность есть.

Но что будет происходить, если со входа АЦП включить емкость на землю? Это типичный прием, рекомендуемый почти везде. Вместе с входным резистором этот конденсатор образует anti-alias фильтр, который всегда необходим, плюс получается фильтр от помех. Если включить на входе АЦП емкость, выбросы напряжения «размажутся» во времени и к концу выборки напряжение может не успеть достигнуть входного с точностью 1 LSB. Придется увеличивать время выборки, чтобы все стало на свои места. Но это возможно для небольших емкостей порядка десятков пФ. Однако обычно речь идет о емкостях порядка 10 – 100 нФ. Тут никакое увеличение времени выборки не поможет. На входе АЦП выбросы исчезнут, мы будем видеть некоторое среднее значение напряжения. Но это значение не равно измеряемому напряжению. При увеличении емкости ошибка АЦП стремится к своему теоретическому максимуму. Хотя казалось бы, какой может быть вред от емкости на входе АЦП, кроме сужения полосы сигнала?

Проверим на практике. На входе АЦП те же 10 кОм, показания АЦП 4001, что соответствует поданному входному напряжению. Подключаем на вход АЦП емкость 10 нФ. Показания стали 3987, т.е. АЦП начал врать на 14 единиц вниз. Теперь уменьшим входное напряжение. Показания АЦП без емкости 101. Подключаем 10 нФ. Показания стали 116, т.е. АЦП начал врать на 15 единиц вверх. Совет включать на вход АЦП емкость является вредным.

Рассмотренные эффекты легко рассчитать, оперируя средним входным током АЦП. Этот ток легко измерить, тестер на основе АЦП двойного интегрирования покажет именно средний входной ток. При нулевом входном напряжении ток оказался равным -1.13 мкА, на середине шкалы он равен нулю, при максимальном входном напряжении он равен +1.09 мкА. Что хорошо согласуется с расчетами. Согласно datasheet конденсатор УВХ имеет емкость 8 пФ. Перезаряжается он максимум на 1/2 шкалы, что при опорном напряжении 3.3 В составляет 1.65 В. Заряд будет равен Q = V * C. А средний ток при частоте дискретизации Fs будет равен Iavg = V * C * Fs = 1.65 * 8E-12 * 1E5 = 1.32 мкА. Что практически совпадает с измеренным значением. Входной ток пропорционален частоте дискретизации, измерение при нулевом входном напряжении и частоте 50 кГц дало значение -0.56 мкА, что тоже соответствует теории.

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

ch1_min_ch2_max

АЦП1 = 0, АЦП2 = 4000. Iavg(АЦП1) = -2.45 мкА.

ch1_min_ch2_mid

АЦП1 = 0, АЦП2 = 2048. Iavg(АЦП1) = -1.64 мкА.

ch1_max_ch2_mid

АЦП1 = 4000, АЦП2 = 2048. Iavg(АЦП1) = +1.99 мкА.

ch1_max_ch2_min

АЦП1 = 4000, АЦП2 = 0. Iavg(АЦП1) = +2.51 мкА.

Как видим, напряжение на входе канала 2 непосредственно влияет на входной ток канала 1. Причем этот ток может быть вдвое выше, чем при работе одного канала. На показания это тоже влияет, при наличии на входе RC-цепочки показания канала 1 менялись при изменении напряжения на входе канала 2, ошибка достигала 30 единиц. Для худшего случая ответ на вопрос "что с конденсатором УВХ происходит потом" можно дать таким образом: во время каждой выборки конденсатор УВХ нужно перезаряжать на величину Vref. Средний входной ток АЦП для худшего случая нужно принимать Iavg = Vref * Cувх * Fs.

Выводы - первый случай: чтобы иметь право подключать конденсатор большой емкости на вход АЦП, сопротивление резистора на входе АЦП (вместе с внутренним сопротивлением источника сигнала) не должно превышать такого значения, когда средний входной ток создает на нем падение напряжения не больше 1/2 LSB. Т.е. R < 1 / (2^(N+1) * Cувх * Fs), где N - разрядность АЦП, Cувх - емкость внутреннего УВХ, Fs - частота дискретизации. Для встроенного АЦП STM32 и Fs = 100 кГц сопротивление должно быть не более 153 Ом. При понижении частоты дискретизации сопротивление можно пропорционально увеличить. А вот время выборки в данном случае не влияет.

Выводы - второй случай: если по каким-то причинам резистор не может быть таким маленьким (например, если источник сигнала сам обладает более высоким выходным сопротивлением), тогда на вход АЦП не может быть подключена произвольная емкость. Если емкость будет превышать некоторое значение, будет появляться ошибка, которая с ростом емкости достигнет своего максимума, о чем было сказано выше. Возникает вопрос, какой номинал емкости является допустимым для выбранного резистора. Чем ниже частота выборок и чем больше время выборки, тем емкость может быть больше. Можно, наверное, составить формулу, но я вместо этого составил модель входной части АЦП. Кроме внешней RC-цепочки учитывается внутренняя емкость УВХ и сопротивление ключа.

adc_model

Для частоты выборок Fs = 100 кГц и времени выборки 2 мкс для получения ошибки не более 1/2 LSB при сопротивлении резистора 100 Ом емкость не должна превышать 10 нФ, а при сопротивлении 1 кОм емкость должна быть не более 330 пФ.

adc_vin

Следующий график снят для резистора 1 кОм и емкости 4.7 нФ. Видно, что напряжение на входе АЦП никогда не достигает входного, поэтому будет присутствовать ошибка. При еще большем увеличении емкости пульсации на входе АЦП уменьшаются, но эти пульсации происходят не вокруг входного измеряемого напряжения, а вокруг некого среднего входного напряжения АЦП, которое отличается от измеряемого напряжения на величину падения на входном резисторе.

adc_vin_4n7

Чтобы не прибегать к моделированию, номиналы RC-цепочки можно рассчитать, пользуясь упрощенными эмпирическими формулами. В [1] рекомендуют выбирать внешнюю емкость примерно в 20 раз больше емкости УВХ. Резистор выбирается из соображений времени установления напряжения на емкости с точностью 1/2 LSB. При этом можно ввести некий коэффициент k, который для выбранной разрядности АЦП показывает, во сколько раз постоянная времени цепочки должна быть меньше времени выборки. Для 10 бит k = 8, для 12 бит k = 9, для 14 бит k = 11, для 16 бит k = 12. Надо сказать, что значения этого коэффициента приблизительные, так как не учитывается отношение внешней емкости к емкости УВХ. Но этими значениями вполне можно пользоваться, взяв постоянную времени с некоторым запасом меньше расчетной. Для приведенного выше примера расчет для 12 бит, Tвыборки = 2 мкс, C = 330 пФ дает R примерно 700 Ом. По результатам моделирования R = 1000 Ом. Вполне хорошее соответствие.

Есть и еще одна функция у RC-цепочки на входе АЦП. Она изолирует выход буферного ОУ от входа АЦП и предотвращает паразитные колебания. Если источником сигнала служит ОУ, то при резком изменении тока нагрузки (что происходит в момент начала выборки) на его выходе может начаться затухающий колебательный процесс. В этом случае при малых временах выборки можно получить непредсказуемую величину погрешности. Вот как ведет себя встроенный буферный ОУ ЦАП STM32, нагруженный на вход АЦП через резистор 100 Ом (масштаб - 100 мв/делю и 1 мкс/дел.):

100R

Видны затухающие колебания, которые длятся почти 2 мкс. Увеличение резистора до 1 кОм увеличивает выброс на входе АЦП и немного укорачивает колебательный процесс. Но полностью его не устраняет:

1K

При подключении после резистора 1 кОм даже небольшой емкости, такой как 100 пФ, колебания исчезают:

1K_100PF

Поэтому совет "Do not add any external capacitor" тоже нельзя отнести к полезным. В datasheets на большинство подобных АЦП рекомендуется на входе включать RC-цепочку. Главное - правильно выбрать номиналы. Нужно отметить, что подключая RC-цепочку на выход ОУ, нужно убедиться в устойчивости ОУ при работе на такую нагрузку. Разные типы ОУ имеют разные способности по работе на емкостную нагрузку, определяющим параметром здесь является выходное сопротивление ОУ с разомкнутой петлей ОС. Обычно соответствующие данные есть в datasheet на ОУ.

Озвученный выше выбор емкости "в 20 раз больше емкости УВХ" является во многом произвольным, никакого физического смысла этот коэффициент не несет. Внешнюю емкость часто называют "резервуаром заряда" для емкости УВХ. В идеале величина этой емкости должна быть такой, чтобы при зарядке емкости УВХ напряжение на ней упало не более, чем на 1/2 LSB. Т.е. величина внешней емкости для 12-разрядного АЦП должна быть больше емкости УВХ в 8192 раза. Соответствующий номинал R будет очень малым, реальные ОУ вряд ли смогут работать на такую нагрузку. Поэтому используют менее жесткий критерий выбора емкости. Тогда часть заряда емкость УВХ получает от внешней емкости, а часть - за счет выходного тока ОУ.

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

И еще один аспект: если аналоговый сигнал, который поступает на вход АЦП, используется еще для чего-нибудь, то вход АЦП может явиться дополнительным источником помех - "иголок" с частотой сэмплирования. Лучший вариант - развязать вход АЦП от остальной аналоговой схемы отдельным буфером на ОУ. Тогда и необходимую фильтрацию можно выполнить на входе буфера, не ограничивая себя рамками допустимого сопротивления на входе.

Иногда для повышения эффективной разрядности АЦП используют оверсемплинг. В этом случае частота выборок выбирается побольше, что влечет за собой увеличение среднего входного тока. К тому же, в расчетах нужно брать ошибку 1/2 LSB не для исходного АЦП, а для выходного кода повышенной разрядности. Это еще больше ограничит значения номиналов R и C сверху.

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

Ниже добавил несколько ссылок на документы, где обсуждаются подобные вопросы. Надо отметить, что нигде не рассмотрен момент, касающийся погрешности, связанной со средним входным током АЦП. Вероятно, это связано с тем, что обычно рассматривают внешние АЦП, а там постоянную времени входной RC-цепочки выбирают малой, чтобы не потерять полосу входного сигнала АЦП. В тех случаях, когда требуется оцифровка медленных сигналов, выбирают более медленный АЦП, у него за счет меньшей частоты сэмплирования будет меньше и средний входной ток. Особенность встроенного АЦП состоит в том, что мы его не выбираем. Он, обладая довольно высокой скоростью, может использоваться для оцифровки медленных сигналов. В этом случае легко столкнуться с ситуацией, когда RC-цепочка еще не ограничивает спектр полезного сигнала, но уже приводит к появлению ошибки по DC. Средний входной ток иногда рассматривается при описании сигма-дельта АЦП, для них оцифровка более медленных сигналов, чем позволяет сам АЦП, является типичной ситуацией.

1. Optimize Your SAR ADC Design
2. External components improve SAR-ADC accuracy
3. Using a SAR ADC for Current Measurement in Motor Control Applications
4. The operation of the SAR-ADC based on charge redistribution
5. Start with the right op amp when driving SAR ADCs
6. ADS8342 SAR ADC Inputs
7. Front-End Amplifier and RC Filter Design for a Precision SAR Analog-to-Digital Converter

Comments

(Anonymous)
Feb. 27th, 2014 06:38 am (UTC)
Ридико, как обычно, пропиарился, пересказывая очередной апноут своими словами ))))
Но такое впечатление, что ты сам этот AN2834 прочитал наискосок, иначе бы не писал ересь про якобы "вредные советы" на 35 и 37 стр.
Никаких вредных советов там нет, все предельно четко и точно, и даже даны все необходимые формулы, чтобы не надо было ничего придумывать и рожать лишние сущности, типа "среднего тока". Понятие "среднего тока" здесь вообще неуместно. Поэтому его нет в апноуте.
Про минимальное значение конденсатора ничего не читали?
leoniv
Feb. 27th, 2014 09:51 am (UTC)
Ваше право, можете руководствоваться рекомендациями AN2834. Только не удивляйтесь, когда воспользовавшись советом для высокоимпедансных источников сигнала "An extra large Cext enables sampling more often" увидите, что ошибка не снижается с увеличением Cext, а при увеличении частоты выборок она растет. Формула в конце стр. 40 документа AN2834 справедливая, но не сказано то, что при Cext, стремящейся к бесконечности, tc стремится к своему пределу tc = Csh * Rin * (Vmax/Vlsb). Это же значение получается при расчетах, оперирующих средним входным током. Поэтому применение "extra large Cext" ничего не дает.

По поводу минимальной емкости есть рекомендация "Do not add any external capacitor (Cext)". Именно без внешней емкости в datasheet даны значения максимального значения Rain. Не устанавливать внешнюю емкость - правильная рекомендация с точки зрения погрешности АЦП, но она не учитывает реакцию буферного усилителя на скачок тока нагрузки. В большинстве случаев все-таки Cext желательна. Не зря в datasheet производителей микросхем АЦП она практически всегда есть.

Про выбор этой емкости в AN2834 не сказано ничего. Внешняя емкость рассматривается только для высокоимпедансных источников сигнала, где дана ее минимальная оценка как Cext > Csh*(Vmax/Vlsb). Такое большое значение емкости чаще всего не может быть использовано во входном RC-фильтре, так как для получения нужной полосы пропускания потребуется очень малое значение R, на такую нагрузку ОУ не сможет работать. На Figure 26, даны рекомендуемые значения элементов внешней RC-цепочки в зависимости от полосы входного сигнала. Если просто взять и применить номиналы, указанные на графике, это может привести к заметной ошибке по DC из-за влияния входного тока, который здесь не учтен. В целом документ AN2834 хороший, но полной картины он не дает.
(Anonymous)
Feb. 28th, 2014 01:05 am (UTC)
Благодарю за разрешение пользоваться AN2834. Всем изучающим могу посоветовать тоже пользоваться именно им, а не пересказами с дикими добавлениями. Напомню еще, что за апноуты кое-кто несет некоторую ответственность и они проходят некоторую проверку перед публикацией, за них отвечает не один человек. Только читать их надо более внимательно, а не наискосок. Но это так, к слову.

"An extra large Cext enables sampling more often" абсолютно справедливо и ошибка снижается с увеличением Cext, если только вы следуете остальным рекомендациям, то есть работаете еще и в single mode c достаточным интервалом между преобразованиями. Формула в конце стр. 40 документа AN2834 справедливая, все там сказано, и при Cext, стремящейся к бесконечности, tc стремится не к tc = Csh * Rin * (Vmax/Vlsb), а к 0(нулю), потому что ln(1)=0.

В апноуте нет фразы "Do not add any external capacitor (Cext)". В апноуте другая фраза. И если бы вы сразу честно и правильно её перевели, в полном соответствии с контекстом того абзаца, то не манипулировали бы новичками и теми, кто невнимателен или еще хуже читает по-английски.

Буферизация и подготовка входного сигнала для АЦП - это отдельная тема и правильно, что она очень подробно не разбиирается в AN2834, потому что тут многое зависит от задачи и нельзя объять необъятного.

leoniv
Feb. 28th, 2014 06:35 am (UTC)
Не позорьтесь, логарифм, стремящийся к нулю, умножается на Cext, стремящуюся к бесконечности. Предел будет иметь конечное значение, формулу я приводил. С увеличением Cext ошибка стремится не к нулю, а к своему пределу Verr = Vmax * Csh * Fs * Rin. Поэтому сколь угодно сильно увеличивая Cext, невозможно свести ошибку ниже этого значения. Уменьшением Fs можно сделать ошибку ниже 1/2 LSB, но "extra large Cext" не позволяет поднять частоту выборок.

Вот дословная фраза: "Do not add any external capacitor (Cext) to the input pin when applying this above workaround. Its capacity will increase the timing constant (Rin * Csh || Cext) and the problem will remain." А workaround заключался в том, чтобы пропорционально Rin увеличивать время выборки. Смысл фразы однозначный - не ставить никакой внешней емкости. С точки зрения погрешности АЦП это правильно. Но здесь ничего не сказано о возможных проблемах при работе ОУ с импульсным характером тока нагрузки. Проблему легко продемонстрировать на примере встроенного в STM32 буфера ЦАП: при измерении с помощью АЦП выхода встроенного ЦАП при временах выборки порядка 1 мкс без емкости Cin получаем заметную ошибку. Я привел ссылку [1] на документ от TI, где подробно рассмотрен вопрос выбора емкости Cin. В большинстве случаев она нужна, TI рекомендует выбирать Cin = 20 * Csh.
(Anonymous)
Feb. 28th, 2014 03:47 pm (UTC)
Это вы не позорьтесь, логарифм, стремящейся к нулю, умножается в формуле не на Cext, а на (Rin*Csh), что есть константа. И формула эта вообще не про ошибку, а про tc. Ну разуйте уже глаза-то, откройте стр.40 и посмотрите.

Вот именно, что Do not add any external capacitor (Cext) to the input pin только для этого случая workaround. То есть только тогда, когда вы собираетесь лишь увеличивать время выборки и все. Эта фраза относится только к этому случаю, а вы треплете ее где надо и где не надо, чем вводите в заблуждение.

О проблемах поведения ОУ с импульснфм характером нагрузки и работы на емкостную нагрузку подробно рассказывают в других местах, эта вообще не тема AN2834.


leoniv
Feb. 28th, 2014 04:45 pm (UTC)
Вот скриншот со стр. 40. Обратите внимание, какая подстановка сделана для Csh - 220 нФ. Потому что это никакая не Csh, а Cext. В формуле ошибка. Правильная формула на этой же странице выше. Вот Вам и пресловутая проверка и ответственность за содержание аппноут.

error
(Anonymous)
Mar. 2nd, 2014 09:08 pm (UTC)
Какая разница-то? важно- что формул в апноуте с избытком даже для того,чтобы найти опечатку, и ни я, ни вы других формул пока не вывели.

Latest Month

June 2018
S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930

Tags

Page Summary

Powered by LiveJournal.com
Designed by Jamison Wieser