Как работает АЦП в AVR микроконтроллерах?
Привет всем, столкнулся тут с интересной проблемой связанной с АЦП в Tiny13. Судя по временным диаграммам в описании АЦП является сэмплирующим и на своем 2м такте делает выборку. Обычно такая работа АЦП дает возможность оцифровывать сигналы с частотой гораздо больше чем частота оцифровки(что вдвойне актуально для авр тк мощности порой нехватает чтобы все обработать). Так вот вопрос на который я не нашел ответа в даташите - какое там время собственно выборки? Если удастся его узнать то можно будет прикинуть максимальную частоту которую можно проанализировать.
Информация по RLC mini находится >тут<
- Реклама
Котельников в гробу перевернулся. И Найквест за компанию.Neekeetos писал(а):какое там время собственно выборки? Если удастся его узнать то можно будет прикинуть максимальную частоту которую можно проанализировать.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Конечно о стробирующих осциллографах ты не слышал и как они работают не в курсеtych писал(а):Котельников в гробу перевернулся. И Найквест за компанию.Neekeetos писал(а):какое там время собственно выборки? Если удастся его узнать то можно будет прикинуть максимальную частоту которую можно проанализировать.
Вопрос про время выборки остается в силе ессно
Информация по RLC mini находится >тут<
Нда, перечитал про сверткиNeekeetos писал(а):Конечно о стробирующих осциллографах ты не слышал и как они работают не в курсеtych писал(а): Котельников в гробу перевернулся. И Найквест за компанию.Найквист никуда не перевернулся , при оцифровке сигнала с большей чем половина частоты сэмплирования частотой происходит свертка по гармоникам частоты сэмплирования и выходной спектр укладывается в полосу половины частоты сэмплирования и содержит результат свертки(сори за повторы).
Вопрос про время выборки остается в силе ессно
Информация по RLC mini находится >тут<
"стробирующие" осциллографы - это рекламный трюк, по сути, обман обывателя, когда ему втуляют, что осциллограф с частотой дискретизации 100 МГц имеет "полосу измеряемых сигналов до 1 ГГц) - это с некоторыми оговорками верно исключительно для симметричных периодических сигналов, а большинство исследуемых сигналов далеко не симметричны и не всегда периодические. не представляю, зачем "оцифровывать" синусоиду, если про нее все заранее известно?!
кстати, практически все современные АЦП в той или иной сепени "стробирующие"
кстати, практически все современные АЦП в той или иной сепени "стробирующие"
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
Согласен, про стробирующие осциллографы пример был достаточно неудачный, приведу другой. Существуют решения цифровых приемников использующие перенос частоты с помощью стробирующего АЦП, Выглядит это так что частота ПЧ оцифровывается стробирующим АЦП с гораздо меньшей частотой чем сама ПЧ, получается перенос участка спектра ПЧ в рабочий диапазон Fs/2.ARV писал(а):"стробирующие" осциллографы - это рекламный трюк, по сути, обман обывателя, когда ему втуляют, что осциллограф с частотой дискретизации 100 МГц имеет "полосу измеряемых сигналов до 1 ГГц) - это с некоторыми оговорками верно исключительно для симметричных периодических сигналов, а большинство исследуемых сигналов далеко не симметричны и не всегда периодические. не представляю, зачем "оцифровывать" синусоиду, если про нее все заранее известно?!
кстати, практически все современные АЦП в той или иной сепени "стробирующие"
Я правда задал свой вопрос про время выборки с более прозаичной целью: есть сигнал треугольный по форме, периодический, частота у него довольно большая - около 30 килогерц. Задача минимум измерить параметры сигнала - амплитуду, среднее значение. Поскольку сигнал это следствие работы микроконтроллера есть возможность привязаться к его фазе. Имея стробирующий ацп в аврке можно запускать преобразование в определенный момент времени зная что выборка попадет скажем на минимум(ну или рядом но с известной задержкой). Тогда делая подобные измерения можно получить качественные данные без применения фильтров прочих алгоритмов обработки что потребуется если сделать кучу быстрых выборок и затем пытаться из них выдрать среднее, максимум, минимум
Последний раз редактировалось Neekeetos Чт сен 13, 2007 10:01:09, всего редактировалось 1 раз.
Информация по RLC mini находится >тут<
ты б еще синхронный детектор приплел... разумеется, промодулированный сигнал таким образом можно "перенести", но при этом наблюдать мы будем не исходный сигнал, а только его часть, скажем, низкочастотную часть его спектра. налицо потеря информации, что допустимо далеко не всегда. Если ты нуждаешься в анализе "огибающей" - отфильтруй ВЧ-гармоники и АЦП-ируй на низкой частоте - зачем извращаться?! а именно ВЧ-сигналы как ни крути, надо АЦПировать на частоте минимум вдвое большей, чем их собственная...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Как раз редактировал свое предыдущее сообщение описывая задачуARV писал(а):ты б еще синхронный детектор приплел... разумеется, промодулированный сигнал таким образом можно "перенести", но при этом наблюдать мы будем не исходный сигнал, а только его часть, скажем, низкочастотную часть его спектра. налицо потеря информации, что допустимо далеко не всегда. Если ты нуждаешься в анализе "огибающей" - отфильтруй ВЧ-гармоники и АЦП-ируй на низкой частоте - зачем извращаться?! а именно ВЧ-сигналы как ни крути, надо АЦПировать на частоте минимум вдвое большей, чем их собственная...
Информация по RLC mini находится >тут<
Нашел небольшое описание входной цепи АЦП в тини13, авторы утверждают что для успешной зарядки входной емкости схемы sample&hold требуется источник с внутренним сопротивлением менее 10килоом, сама входная емкость судя по схеме - 15пФ. Эти номиналы дают время сэмплирования 15 *10-6с , тоесть эквивалентная частота выборок порядка 6,(6)М. Эх был бы генератор толковый, можно было бы на практике все измерить.
Информация по RLC mini находится >тут<
не о том задумываешься, Neekeetos!
твой метод сэмплирования ограничен не длительностью сэмпла АЦП, а точностью отсчета момента сэмпла относительно начала периода твоего сигнала. а эта точность определятеся в конечном счете частотой тактового генератора МК, а я так вообще думаю, что все еще хуже - все определится максимальной частотой возникновения прерывания от таймера... не уверен, что тини13 сумеет шустрить прерывания от таймера 6 миллионов раз в секунду... да и на всякие программные штуки время потребуется...
твой метод сэмплирования ограничен не длительностью сэмпла АЦП, а точностью отсчета момента сэмпла относительно начала периода твоего сигнала. а эта точность определятеся в конечном счете частотой тактового генератора МК, а я так вообще думаю, что все еще хуже - все определится максимальной частотой возникновения прерывания от таймера... не уверен, что тини13 сумеет шустрить прерывания от таймера 6 миллионов раз в секунду... да и на всякие программные штуки время потребуется...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Я как раз хочу с точностью до наоборот сделать - понизить частоту измерений, а полоса нужна чтобы понять будет ли входной сигнал искажен при оцифровке. Понятное дело что 6 миллионов отсчетов в секунду тини13 не сделаетARV писал(а):не о том задумываешься, Neekeetos!
твой метод сэмплирования ограничен не длительностью сэмпла АЦП, а точностью отсчета момента сэмпла относительно начала периода твоего сигнала. а эта точность определятеся в конечном счете частотой тактового генератора МК, а я так вообще думаю, что все еще хуже - все определится максимальной частотой возникновения прерывания от таймера... не уверен, что тини13 сумеет шустрить прерывания от таймера 6 миллионов раз в секунду... да и на всякие программные штуки время потребуется...
Информация по RLC mini находится >тут<
во-первых, не стоит цитировать полностью сообщения - толку в том ноль, а модераторам не понравится.
во-вторых, я прекрасно понял, в чем смысл. допустим, первый отсчет ты делаешь сразу в начале периода твоего сигнала, а второй - через время N*Т+D*k, где N - любое целое число, T - длительность периода входного сигнала, k - номер сэмпла, а D - как раз величина, определяющая "эффективную частоту сэмплирования". Так вот, это самое D будет определяться именно "разрешающей способностью" таймера (в конечном счете - тактовой частотой МК), а вовсе не длительностью сэмпла АЦП... именно F=1/D и будет частотой, о которой ты все время говоришь
во-вторых, я прекрасно понял, в чем смысл. допустим, первый отсчет ты делаешь сразу в начале периода твоего сигнала, а второй - через время N*Т+D*k, где N - любое целое число, T - длительность периода входного сигнала, k - номер сэмпла, а D - как раз величина, определяющая "эффективную частоту сэмплирования". Так вот, это самое D будет определяться именно "разрешающей способностью" таймера (в конечном счете - тактовой частотой МК), а вовсе не длительностью сэмпла АЦП... именно F=1/D и будет частотой, о которой ты все время говоришь
Последний раз редактировалось ARV Чт сен 13, 2007 12:46:34, всего редактировалось 1 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Подумалось что я не больно прозрачно описал для чего мне это нужно и вообще как можно применить. В природе существуют широкополосные импульсные сигналы, понятно что для оцифровки таких сигналов нужно обычно поставить фильтр для ограничения полосы при этом (если сигнал был импульсный/широкополосный) неизбежно исказится его форма и в разы уменьшится амплитуда. Если же делать некую привязку к фазе сигнала и делать измерение в нужный момент фильтры становятся ненужными. Можно например сделать приемник ик, который будет измерять амплитуду принимаемых импульсов (для классической схемы фильтры просто уничтожат такую информацию)ARV писал(а):не о том задумываешься...
Информация по RLC mini находится >тут<
именно о получении нужного момента я и говорил - см. выше. если минимальный шаг отсчета этого момента 10 мкс, то как ни крути, эквивалентная частота АЦП при "стробоскопическом" методе (он именно так называется) будет 100 кГц - хоть ты лопни... даже если длительность самого сэмпла всего 1 нс...Neekeetos писал(а):Если же делать некую привязку к фазе сигнала и делать измерение в нужный момент ...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Понятно что полоса для анализа будет ограничена Fs/2 речь не про то. С помощью этой фичи АЦП можно без массивной постобработки получать точные данные(забавно то что при этом хоть полоса сигнала и большая выбираются только нужные данные).ARV писал(а):то как ни крути, эквивалентная частота АЦП при "стробоскопическом" методе (он именно так называется) будет 100 кГц - хоть ты лопни... даже если длительность самого сэмпла всего 1 нс...
По поводу предыдущего сообщения с формулами. Если взять абсолютно идеальный АЦП и начать им оцифровывать сигнал. Скажем частота оцифровки 10Гц а сигнал 1Гц, получаем отсчеты содержащие синусоиду 1Гц. Что будет если попытаться оцифровать этим АЦП сигнал с частотой 11Гц? Получим в виде сэмплов сигнал с частотой опять 1Гц это разностная частота! Тоже самое справедливо для частот 19Гц,21Гц и так далее для N*10Гц+-1Гц. Для идеального АЦП этот ряд частот продолжается бесконечно. У реального АЦП есть ненулевое время выборки схемы sample&hold. Конденсатор этой схемы начнет действовать как ФНЧ начиная с частоты 1/Tвыб так как он не будет успевать зарядиться за период выборки. Вот эту частоту я и назвал эффективной тк это максимально возможная частота выборок.
Информация по RLC mini находится >тут<
Практическая реализация - есть ШИМ и есть сигнал обратной связи который с сигналом ШИМ синхронен. Я могу привязать момент начала преобразования АЦП к началу периода ШИМ с точностью 1-2 такта процессора. При этом момент выборки в АЦП будет через 2,5такта АЦП, получается момент выборки задается четко с той же точностью - 1-2 такта процессора. Непонятно тогда откуда взялись 10мкс и прочие цифры.ARV писал(а):именно о получении нужного момента я и говорил - см. выше. если минимальный шаг отсчета этого момента 10 мкс, то как ни
Информация по RLC mini находится >тут<
1. 10 мкс и прочие цыфры взяты с потолка, просто для пояснения рассуждений 
2. на счет того, как время выборки ограничивает полосу - спорить бесполезно (я и не собираюсь), я вовсе не об этом говорил. я говорил о реализации стробоскопического метода - считаю, что ограничения, накладываемые реализацией этого метода будут существенно выше, чем ограничения, накладываемые длительностью сэмплирования. 1-2 такта при отсчете момента сэмпла?! интересно, каким образом?! если путем опроса флага таймера, то это минимум 3 такта (три ассемблерных команды - чтение регистра с флагом таймера, проверка на установку бита и вывод в регистр АЦП команды на запуск), и то при идеальном стечении обстоятельств, т.е. когда нет никаких "мешающих" задач для МК (например, фоновые прерывания, сброс WDT и т.п.). значит (я не помню максимальную тактовую для тини13, будем считать для 1 МГц) имеем минимальный шаг отсчетов АЦП 3 мкС - следовательно, максимальная эффективная (или как там ее называть) частота АЦП составит 333 кГц - говорить о мегагерцах не приходится.
С учетом того, что МК может решать (и скорее всего, так и есть) и другие задачи, помимо отслеживания фазы сэмплирования, имеем еще более пессимистичные прогнозы. я не прав?
2. на счет того, как время выборки ограничивает полосу - спорить бесполезно (я и не собираюсь), я вовсе не об этом говорил. я говорил о реализации стробоскопического метода - считаю, что ограничения, накладываемые реализацией этого метода будут существенно выше, чем ограничения, накладываемые длительностью сэмплирования. 1-2 такта при отсчете момента сэмпла?! интересно, каким образом?! если путем опроса флага таймера, то это минимум 3 такта (три ассемблерных команды - чтение регистра с флагом таймера, проверка на установку бита и вывод в регистр АЦП команды на запуск), и то при идеальном стечении обстоятельств, т.е. когда нет никаких "мешающих" задач для МК (например, фоновые прерывания, сброс WDT и т.п.). значит (я не помню максимальную тактовую для тини13, будем считать для 1 МГц) имеем минимальный шаг отсчетов АЦП 3 мкС - следовательно, максимальная эффективная (или как там ее называть) частота АЦП составит 333 кГц - говорить о мегагерцах не приходится.
С учетом того, что МК может решать (и скорее всего, так и есть) и другие задачи, помимо отслеживания фазы сэмплирования, имеем еще более пессимистичные прогнозы. я не прав?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Точно нет, я абсолютно другие цели преследуюARV писал(а):тини13, будем считать для 1 МГц) имеем минимальный шаг отсчетов АЦП 3 мкС - следовательно, максимальная эффективная (или как там ее называть) частота АЦП составит 333 кГц - говорить о мегагерцах не приходится.
С учетом того, что МК может решать (и скорее всего, так и есть) и другие задачи, помимо отслеживания фазы сэмплирования, имеем еще более пессимистичные прогнозы. я не прав?
1. Прикрепил проект протеуса и исходники с реализацией этого строба.
АЦП тактируется своими тактами и его прерывание оказывается синхронизировано с фазой этих тактов, это важный момент тк дает возможность привязать что угодно включая таймер к тактам АЦП с точностью до 1-2 тактов(если использовать сон в теле программы то 1 такт). Далее, момент выборки в АЦП происходит на 2,5 такте АЦП, поскольку привязка есть то момент выборки вполне предсказуем и составляет 2,5 * Коэфф._деления_ADC_prescaler с момента старта преобразования, с учетом привязки получается +1-2 такта процессора.
В самом проекте я попробовал сделать немного иначе, не знаю как оно будет на практике(проверю в сб). Там меняется частота АЦП в ходе преобразования - первые три такта проходят при частоте FSYS/2 соответственно момент выборки еще более предсказуем и оказывается ровно в 5 тактах процессора от начала преобразования что дает возможность в идеале вообще не думать о какой либо синхронизации тк время между стартом преобразования и выборкой минимально и фиксировано. В протеусе собрана простенькая схема - RC цепочка, и измеряется напряжение на конденсаторе, которое меняется нелинейно. Можно по результатам измерений сделать вывод о моменте выборки. Прикрепил картинку с курсором установленным на напряжение которое посчитало ацп(действительно момент находится правее пика тк показания выводятся каждое второе измерение).
На что можно обратить внимание:
- в примере частота сигнала и частота выборок совпадает!
- несмотря на то что спектр сигнала на конденсаторе распространяется гораздо дальше его основной частоты (тк форма сильно отличается от синусоиды) все же удается чтото измерить.
- вполне предсказуемо что момент выборок стабилен и соответственно результат тоже одинаков для всех измерений тк выборка приходится на один и тот же момент(результат там нарисован желтым графиком в немного шифрованой форме)
- Вложения
-
- _adc.zip
- (29.9 КБ) 395 скачиваний
-
- adc_loop.jpg
- (46.12 КБ) 827 скачиваний
Информация по RLC mini находится >тут<
Проверил все вышеперечисленное на практике, используя tiny13.
Выводы следующие:
- Выборка происходит половину периода тактовой частоты АЦП, видимо поэтому в даташите указан момент ее окончания
- Схема выборки не работает при тактовой частоте АЦП выше ~1,2Мгц , огромное количество шума вместо данных
- Переключение тактовой частоты АЦП в ходе преобразования возможно и работает! Можно используя это сократить время измерений увеличивая тактовую частоту АЦП в моменты измерения старших значащих битов когда шум не оказывает сильного влияния. Сама тактовая частота - для момента выборки, те первые 3 такта АЦП видимо не должна превышать указанную в даташите.
Тема себя исчерпала, можно закрывать.
Выводы следующие:
- Выборка происходит половину периода тактовой частоты АЦП, видимо поэтому в даташите указан момент ее окончания
- Схема выборки не работает при тактовой частоте АЦП выше ~1,2Мгц , огромное количество шума вместо данных
- Переключение тактовой частоты АЦП в ходе преобразования возможно и работает! Можно используя это сократить время измерений увеличивая тактовую частоту АЦП в моменты измерения старших значащих битов когда шум не оказывает сильного влияния. Сама тактовая частота - для момента выборки, те первые 3 такта АЦП видимо не должна превышать указанную в даташите.
Тема себя исчерпала, можно закрывать.
Информация по RLC mini находится >тут<
Если, я в эту тему попал...
Есть вот такой вопросик. Как можно получить стабильный чистый «0»Вольт в моей схемке, с выхода масштабирующего усилителя? Нагрузив выход на 1кОм, удалось добиться 0,04В. И ещё. В формулах
для пересчёта результатов преобразования АЦП (10bit mega16) в напряжение, используют 1024bit
вместо 1023bit, согласно даташиту (на мегу16) для компенсации «увеличивающейся ошибки» или «ошибки прироста». Поэтому в формуле ADC =(Vin*1024)/Vref; Vin(5V)=/=Vref(5V), если не учитывать 1 bit.
ATmega16;ATmega16L;Preliminary
Gain Error: After adjusting for offset, the Gain Error is found as the deviation of the
last transition (0x3FE to 0x3FF) compared to the ideal transition (at 1.5 LSB below
maximum). Ideal value: 0 LSB
Figure 108. Gain Error
For single ended conversion, the result is
where VIN is the voltage on the selected input pin and VREF the selected voltage reference
(see Table 82 on page 211 and Table 83 on page 212). 0x000 represents analog
ground, and 0x3FF represents the selected reference voltage minus one LSB.
Если, АЦП Uref=5V и Uпит=5V, при измерении 5V получаем ошибку в 1bit. Это надо учитывать программно?
Есть вот такой вопросик. Как можно получить стабильный чистый «0»Вольт в моей схемке, с выхода масштабирующего усилителя? Нагрузив выход на 1кОм, удалось добиться 0,04В. И ещё. В формулах
для пересчёта результатов преобразования АЦП (10bit mega16) в напряжение, используют 1024bit
вместо 1023bit, согласно даташиту (на мегу16) для компенсации «увеличивающейся ошибки» или «ошибки прироста». Поэтому в формуле ADC =(Vin*1024)/Vref; Vin(5V)=/=Vref(5V), если не учитывать 1 bit.
ATmega16;ATmega16L;Preliminary
Gain Error: After adjusting for offset, the Gain Error is found as the deviation of the
last transition (0x3FE to 0x3FF) compared to the ideal transition (at 1.5 LSB below
maximum). Ideal value: 0 LSB
Figure 108. Gain Error
For single ended conversion, the result is
where VIN is the voltage on the selected input pin and VREF the selected voltage reference
(see Table 82 on page 211 and Table 83 on page 212). 0x000 represents analog
ground, and 0x3FF represents the selected reference voltage minus one LSB.
Если, АЦП Uref=5V и Uпит=5V, при измерении 5V получаем ошибку в 1bit. Это надо учитывать программно?
- Вложения
-
- SCHEMATIC2 _ PAGE1_Tornado-M.rar
- (84.33 КБ) 415 скачиваний
Простите,-спросили Мартовского Кота,-действительно ли в марте месяце?
Какая чушь,- ответил Мартовский Кот,- и март месяц не исключение!
Какая чушь,- ответил Мартовский Кот,- и март месяц не исключение!


