Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Нелинейности внутреннего АЦП в STM32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
Леонид Иванович
Документ AN3137 во многом повторяет AN2834. Там содержится такое же описание структуры АЦП, и даже та же ошибка в формуле для вычисления периода выборок с большой входной емкостью.
ViKo
Цитата(Леонид Иванович @ Mar 3 2014, 00:22) *
Документ AN3137 во многом повторяет AN2834. Там содержится такое же описание структуры АЦП, и даже та же ошибка в формуле для вычисления периода выборок с большой входной емкостью.

У меня в разных местах лежали разные версии этого документа. В первой картинок с конденсаторами не было.
Посмотрел вашу статью. Похоже, вы не поняли их совета подключать большой внешний конденсатор. Такой, чтобы напряжение на нем не сильно изменялось при заряде внутреннего конденсатора УВХ, не более, чем половина младшего разряда. Этот совет "вреден" только тем, что сильно уменьшается полоса измеряемого сигнала.
Что творится в цепи сигнала до УВХ, значения не имеет (кроме помех соседям, и импульсной нагрузки ОУ). Важно, что мы имеем после УВХ.
Леонид Иванович
Цитата(ViKo @ Mar 3 2014, 14:50) *
Этот совет "вреден" только тем, что сильно уменьшается полоса измеряемого сигнала.


Нет. Этот совет может быть вреден еще и тем, что способен привести к ошибке измерения по постоянному току. Большая емкость на входе АЦП обеспечит среднее значение напряжения, которое будет отличаться от измеряемого на величину Verr = Rin * Iin_avg, где Rin - сопротивление на входе АЦП (вместе с внутренним сопротивлением источника сигнала), Iin_avg - средний входной ток АЦП. Для худшего случая Iin_avg = Vref * Csh * Fs, где Vref - опорное напряжение, Csh - емкость УВХ, Fs - частота выборок АЦП.
ViKo
Входной ток у АЦП - это ток заряда внутреннего конденсатора, во время выборки. Если бы напряжения на внешнем и внутреннем конденсаторах были равными, вообще никакого тока не было бы.
Это не постоянная величина. Здесь ошибка.

Если источник сигнала (с его внутренним сопротивлением, или дополнительным последовательным резистором) способен зарядить внешнюю большую емкость за время от выборки к выборке, то почему он не справится с суммой внешней и маленькой внутренней? Если не справляется и с внешней - это и есть ограничение полосы.

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

Если же говорить о постоянном входном токе АЦП (утечки, и т.п.), то он создает на сопротивлении источника постоянную ошибку. Это уже не зависит от емкостей вообще никак.
Леонид Иванович
Цитата(ViKo @ Mar 3 2014, 16:06) *
Если бы напряжения на внешнем и внутреннем конденсаторах были равными, вообще никакого тока не было бы.


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

Цитата(ViKo @ Mar 3 2014, 16:06) *
Это не постоянная величина. Здесь ошибка.


Понятное дело, что не постоянная, я же написал: "для худшего случая".

Цитата(ViKo @ Mar 3 2014, 16:06) *
Если источник сигнала (с его внутренним сопротивлением, или дополнительным последовательным резистором) способен зарядить внешнюю большую емкость за время от выборки к выборке


Если способен зарядить с точностью до 1/2 LSB, то ошибки нет. Но с повышением частоты выборок появляется ошибка. Я предложил простую формулу, основанную на расчете среднего входного тока АЦП, которая дает оценку максимальной допустимой частоты выборок для конкретного Rin при условии Cext >> Csh.

Цитата(ViKo @ Mar 3 2014, 16:06) *
Если не справляется и с внешней - это и есть ограничение полосы.


Ограничение полосы - это совсем другое. Можно взять две разных RC-цепочки с одинаковым тау, но с разным соотношением R и C. Они будут иметь одинаковую частоту среза. Но одна будет давать погрешность по DC, другая - нет. Это зависит от R.

Цитата(ViKo @ Mar 3 2014, 16:06) *
Если же говорить о постоянном входном токе АЦП (утечки, и т.п.)


Ток утечек я вообще не рассматриваю из-за его малости.
ViKo
Цитата(Леонид Иванович @ Mar 3 2014, 17:25) *
Я предложил простую формулу, основанную на расчете среднего входного тока АЦП, которая дает оценку максимальной допустимой частоты выборок для конкретного Rin при условии Cext >> Csh.

Нужно вот как считать. Внутренний конденсатор в конце преобразования Csh заряжен до некоего значения (наверное, до половины опорного), имеет заряд
Q = Uh * Csh
В режиме выборки внешний конденсатор Cext подключается к внутреннему, и внутренний заряд распределяется между обоими конденсаторами. Напряжение (без учета того, что уже есть на Cext, посчитаем выброс при выборке) будет рассчитываться так:
Uh * Csh = Us * (Csh + Cext)
Us = Uh * (Csh / Csh + Cext)
Чем больше внешний конденсатор, тем меньший выброс на входе АЦП будет при переключении в режим выборки.
Резистор Rin в расчете выброса не участвует. Он определяет наклон, с которым выброс спадает. Чем меньше резистор, тем короче выброс, согласно постоянной времени Rin * (Csh + Cext).
Леонид Иванович
Цитата(ViKo @ Mar 3 2014, 20:46) *
Чем больше внешний конденсатор, тем меньший выброс на входе АЦП будет при переключении в режим выборки.


Я говорил про случай, когда Cext >> Csh и выброс не превышает 1/2 LSB. Т.е. по причине выброса ошибки нет вообще. Но, тем не менее, ошибка появляется, если Rin > Vlsb / (2 * Vref * Csh * Fs). И эта ошибка не зависит от Cext, а только от Rin и Fs. Скажем, при частоте выборок 1 кГц ошибка начнет появляться при увеличении Rin выше 15 кОм. И никаким увеличением емкости на входе АЦП ее не устранить.
ViKo
Если от Cext не зависит, то почему вы назвали совет повесить дополнительный конденсатор "вредным"?

Если нет выброса, откуда возьмется ошибка?

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

Ваша формула годится для постоянного тока, заряжающего (разряжающего) внутренний конденсатор. В данном случае это не так.

Цитата(Леонид Иванович @ Mar 4 2014, 00:54) *
Скажем, при частоте выборок 1 кГц ошибка начнет появляться при увеличении Rin выше 8 кОм.

Можете показать на спайс-модели?
Леонид Иванович
Цитата(ViKo @ Mar 4 2014, 11:03) *
Если от Cext не зависит, то почему вы назвали совет повесить дополнительный конденсатор "вредным"?


Потому что Вы невнимательно читали то, что я написал. Возможны два случая, когда ошибка будет отсутсвовать: это или маленькая емкость Cext (в пределе - только емкость УВХ), которая успевает заряжаться с точностью лучше 1/2 LSB за время выборки, или большая емкость Cext, которая за время выборки разряжается менее чем на 1/2 LSB. В первом случае на величину ошибки влияет значение RC и время выборки, период выборок значения не имеет. Во втором случае имеет значение период выборок и величина R, время выборки значения не имеет. "Вредным" Cext может оказаться в первом случае, его добавление может привести к появлению заметной ошибки.

Цитата(ViKo @ Mar 4 2014, 11:03) *
Если нет выброса, откуда возьмется ошибка?


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

Цитата(ViKo @ Mar 4 2014, 11:03) *
В ваших формулах фигурирует Fs. Напоминаю еще раз, что ток идет только во время выборки. Во время преобразования тока нет. А источник заряжает внешний конденсатор постоянно.


Так и есть. Между Cext и Csh течет импульсный ток, а между источником сигнала и Cext - практически постоянный. Вот этот ток и создает падение на Rin, что приводит к ошибке.

Цитата(ViKo @ Mar 4 2014, 11:03) *
Ваша формула годится для постоянного тока, заряжающего (разряжающего) внутренний конденсатор. В данном случае это не так.


Моя формула для среднего входного тока, который по переносу заряда в единицу времени соответствует импульсному входному току АЦП.

Цитата(ViKo @ Mar 4 2014, 11:03) *
Можете показать на спайс-модели?


Легко. И на модели, и вживую на плате с STM32. Вот скриншот результатов моделирования, схему модели приводил у себя в LJ.
ViKo
Если не трудно, покажите, что будет при Cext = 200 uF
Леонид Иванович
Без проблем. Видно, что время переходного процесса сильно увеличилось, но ошибка стремится к тому же значению, что и для емкости 1 uF.
ViKo
Вы правы. Попробую сам в LTspice.
Леонид Иванович
Вообще, выводы находятся в соответствии с рекомендациями документа AN2834. Там на стр. 40 приведена точная формула для минимального периода выборок tc (величина, обратная Fs) для случая большой Cext. Только там может сбить с толку фраза "An extra large Cext enables sampling more often". Формула в документе приведена верная, вот только не сказано, что при увеличении Cext величина Fs не может быть сделана сколь угодно большой, так как она стремится к своему пределу, который дает приведенная мной формула.

Поэтому если источник сигнала обладает высоким внутренним сопротивлением Rin, то на вход АЦП нужно подключить большую емкость Cext > Csh * 2^(N+1) (для АЦП STM32F100 получается Cext > 68 нФ) и установить частоту выборок не более предельного значения Fs < 1 / (2^(N+1) * Csh * Rin).
Для АЦП STM32F100 получается Fs < 15*10^6 / Rin. Например, для Rin = 100 кОм частота выборок не должна превышать 150 Гц.

Для случая низкоимпедансного источника сигнала (например, выход ОУ), тоже рекомендуется на вход АЦП утанавливать RC-цепочку. Ее назначение - изолировать выход ОУ от входа АЦП с его большими импульсными токами в момент начала выборки. Только в этом случае емкость выбирается значительно меньшей. Рекомендуют порядка 20..50 * Csh, для STM32F100 это около 220..470 пФ. Для получения ошибки меньше 1/2 LSB постоянная времени входной RC-цепочки должна быть в ln(2^(N+1)) раз (для случая 12-разрядного АЦП примерно в 9 раз) меньше времени выборки ts.
ViKo
Возник один вопрос, вспомнил про эту тему.
Зачем в STM32 можно задавать разное время выборки для АЦП? Про высокое выходное сопротивление источника сигнала - говорили. А, ну да, повесить большой конденсатор параллельно входу, подавить ВЧ-помехи. И это всё?
О - специально добавить последовательный резистор, ограничить полосу!
Леонид Иванович
Увеличение времени выборки ts может потребоваться в том случае, если источник сигнала имеет высокое внутреннее сопротивление. Тогда для зарядки емкости УВХ с точностью 1/2 LSB может потребоваться значительное время, которое и достигается увеличением ts. Другой случай - если мы добавляем на вход RC-цепочку для ограничения полосы, тогда тоже требуется увеличивать ts, обеспечивая зарядку емкости УВХ + внешняя емкость с точностью до 1/2 LSB. При этом допустимыми являются очень ограниченные значения постоянной времени ввиду ограниченности значения ts. Только малая часть графика Figure 26 из AN2834 лежит в рамках допустимого. Если по каким-то причинам постоянная времени входной цепи большая (например, имеем высокоомный источник сигнала), то время выборки увеличивать бесполезно. Тогда для устранения погрешности требуется снижать частоту выборок.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.