[an error occurred while processing this directive]
Ответ: Чувак! Ззырь тело мессаджа.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Доктор ТуамОсес 31 января 2006 г. 15:55
В ответ на: AtMega8. Из-за чего может врать АЦП? (+) отправлено Швыбздик 31 января 2006 г. 15:23

Вопрос по ATtiny15.
Результат АЦП сильно зависит от температуры и от питающего
напряжения.Вначале грешил на внутренний источник опорного напряжения.Испытание в термошкафе показали,что напряжение
внутреннего опорного источника при нагревании до 60гр.изменилось
всего на 0.4%.Изменение напряжения питания +- 1V изменяет внутреннее опорное напряжение всего на 0.2%.Результат же АЦП
при этих условиях изменяется на 14-16 единиц.Испытания проводились с тремя контроллерами из одной партии.
Не могу найти нормального объяснения этому.Может Вы проясните
эту ситуацию.
Спасибо.


Обнаружил такой глючок(а может так и надо):
Ранее во всех устройствах ногу питания АЦП подключал стандартно, даже если АЦП не использовалось, а тут вот у MEGA32 повесил в воздухе и портА повел себя как открытый коллектор, то есть верхний ключ вроде как на AVCC а не на VCC.
Если так и должно быть то как быть с помехами если портА используется и в цифровых и в аналоговых цепях? (То что нежелательно переключать порт в момент измерения понятно, я имею ввиду влияние не на измерение а вообще на аналоговую цепь питающуюся вместе с АЦП контроллера).

АЦП в AVR странно функционирует.
Пытаюсь работать с внутренним АЦП ATmega8535 (10 бит).
Работает как-то странно.
Использую внутренний ИОН (2.56 В), AREF свободен.
Теоретически, чувствительность 2.56/1024 = 2.5 мВ.
До 5-6 мВ вообще не чувствует (нули). Начальный участок ужасный по точности. А дальше - приемлемо.
Работаю в режиме одиночных преобразований с оптимальной частотой (минимальную тоже пробовал - то же самое). Экземпляры менял.
Эначит ли это, что лучшего результата от встроенного АЦП добиться вобще не возможно? Или я что-то не так делаю?
Не оставляй в воздухе AREF. Вроде бы его нужно через конденсатор посадить на землю, если используются внутренние 2,56В. Ну а к чему Вам в воздухе AREF, подцепите его на питание +5В.
Насчет конденсатора то в руководстве есть схемка, правда питание на AVCC, через LC фильтр
10mH and 100nF
на моей страничке www.enigma2004.nm.ru я выложил пару примеров для работы с АЦП, промоделированных в Proteus, код на codevision посмотрите, может как то поможет.
Да еще в руководстве написано, что есть напряжение, ниже которого лучше не подовать на AREF (толи 2 толи 2.7 В)

Вопрос по АЦП в AVR
Поскажите пожалуйста.
Слышал такую вещь. Что можно используя 10 разрядное АЦП микроконтроллера (например ATMega128) получать точность 12-16 разрядов.
Используя методы цифровой обработки сигналов, фильтров первого порядка и т.д. (програмные способы)
Подскажите принцип пожалуйста.
RE[1]: Вопрос по АЦП в AVR
Действительно можно, но сигнал должен быть условно переодичный, а так как скорость преобразования не велика, то и достаточно низкочастотный... А зачем такая высокая точность?


Вопрос по ATtiny15.
Результат АЦП сильно зависит от температуры и от питающего
напряжения.Вначале грешил на внутренний источник опорного напряжения.Испытание в термошкафе показали,что напряжение
внутреннего опорного источника при нагревании до 60гр.изменилось
всего на 0.4%.Изменение напряжения питания +- 1V изменяет внутреннее опорное напряжение всего на 0.2%.Результат же АЦП
при этих условиях изменяется на 14-16 единиц.Испытания проводились с тремя контроллерами из одной партии.
Не могу найти нормального объяснения этому.Может Вы проясните
эту ситуацию.
Спасибо.


Обнаружил такой глючок(а может так и надо):
Ранее во всех устройствах ногу питания АЦП подключал стандартно, даже если АЦП не использовалось, а тут вот у MEGA32 повесил в воздухе и портА повел себя как открытый коллектор, то есть верхний ключ вроде как на AVCC а не на VCC.
Если так и должно быть то как быть с помехами если портА используется и в цифровых и в аналоговых цепях? (То что нежелательно переключать порт в момент измерения понятно, я имею ввиду влияние не на измерение а вообще на аналоговую цепь питающуюся вместе с АЦП контроллера).

АЦП в AVR странно функционирует.
О точности АЦП в AVR
Меня тут совсем запутали доброжелатели (или недоброжелатели) с этим АЦП.
Я привык считать, что LSB - это один квант, т.е. приращение входного напряжения, которое вызывает изменение младшего разряда.
Поэтому при заявленной погрешности 2LSB, на 1000 отсчетах я могу гарантировано получить результат от 998 до 1002.
Они же доказывают, что Атмел под LSB имеет в виду 2 младших значащих разряда и, используя такую путаницу в терминологии,
выдает свой 8-разрядный АЦП за 10-разрядный. Если это действительно так, то тогда понятно почему у них источник
якобы ОПОРНОГО напряжения "гуляет" в пределах от 2,4 до 2,7 вольт, при заявленном значении 2,56В. Такую ОПОРУ можно
соорудить на дешевых резисторах без подбора и не морочить голову с барьерными эффектами. На резисторах и термостабильность будет
достаточная.
Так что же все таки означает LSB в данном случае? Проверял ли кто-нибудь (и как) сколько разрядов можно в действительности получить от АЦП в AVR?

RE[1]: О точности АЦП в AVR
Путаница двух понятий.
Конечно, Atmel имел в виду LSB, как его понимают. Т.е единица мл. разряда, а не бит. И нормируется интегральная и дифф. погрешность, смещение, которые от измерения к измерению не меняются. Т.е. уж если получишь 998 вместо 1000, то так и будешь получать 998, а не 998-1002. Все эти погрешности можно убрать программно. АЦП реально по параметрам 10-разрядный, проверено.
То, что АЦП скорее 8-разрядный, объясняется шумом. Ну шумит он. И Atmel этого не скрывает. Реально действительно шумят 2 мл. бита. Если нужны мгновенные значения преобразования, то от него никуда не деться. Можно только снижать по возможности. Большое значение имеет правильно разведенная плата, питание, применение
режима sleep при преобразовании. Если большая скорость не нужна - усредняй результат и шум уберется, получишь свои 10 разрядов, даже больше можно.
Что касается внутренней опоры, то это для меня загадка. До сих пор не применял, сейчас как раз буду, результаты на серии из 100 изделий смогу проверить.
Вообще, даташите идет речь об абсолютном значении REF, а не о его случайных изменениях. Видимо, между источником на запрещенной зоне и выходом опоры есть каскад, параметры которого не настраиваются. Но в стабильности источника, имхо, можно не сомневаться. Иначе нафига бы он был нужен?
То же касается и встроенного усилителя на x20 при измерении в дифф. режиме. 20 раз - условная величина. Может и 18, а может и 22 (кстати, цифр не видел, но о приблизительности данной величины Atmel честно предупреждает). Но она стабильна для каждого экземпляра.
А вообще, в применении АЦП много тумана в даташитах... Ну ничего, скоро кое-что на практике прояснится.


RE[3]: Помогите откалибровать АЦП в мега16
Это хорошо, если АЦП имеет линейную х-ку.
Мне на 8535 пришлось сделать кусочно-линейную коррекцию, но потом обнаружил температурный и временный дрейф (+-8разрядов при t=+7...+40C). Короче АЦП д...

подводные камни у AVR
кто с чем сталкивался... глюк номер 1: при заземлении пинов AVCC, AREF, AGND он не запускается.. глюк номер 2 , с которым столкнулся буквально вчера... в общем отладил одну фиговину на макетке, все работало..вчера пришли готовые предсерийные образцы и ничего не за работало.. а смысл вот в чем, нужно было зажигать светодиоды на портах(образно говоря), конкретно мне развели на портА, ничего не горит.то-есть ПОРТA НЕ РАБОТАЕТ НА ВЫХОД либо не тянет напрямую светодиоды. проверил штук 6-7 чипов, одна фигня..даже сделал проще, просто послал единичке в дав порта (А,С) на С есть на А нет.. в общем помогите!!кто сталкивался или просто свои соображения. предложеня типа "может порт на выход не сконфигурировал ?" будут звучать глупо.. заранее спасибо всем отозвавшимся

RE[1]: подводные камни у AVR
Учти, что порт А питается от ножки AVCC,поэтому на ввод он работает нормально, а на вывод (т.к. ты садил его на массу)- не работает. Вообще вывод AVCC нужно подсоединять к +5В напрямую или (при использовании АЦП)через фильтрующую LC-цепочку.

Интересна вещь !!!
Я работаю с контроллером AT90s8535, и не пробовал заземлять пины питания АЦП (скорее всего они как-то связаны с общим питанием контроллера). Но знаю точно, что питание порта с АЦП - это питание AVCC, т.е. питание аналоговой части (АЦП)- это питание данного порта (PORTA). Напряжение логической "1" порта с АЦП (и только его) полностью повторяет питание аналоговой части, даже все "провалы и всплески" по напряжению.

Шер ами...
А Вы документацию читали?
1. О каком "заземлении" для Aref и AVcc идёт речь? Aref при некоторой наглости ещё можно заземлять ( если не используется АЦП ), но AVcc - это-же питание.
2. Вытекает из 1. AVcc - питание не только АЦП, но и выходных драйверов порта "А".

первое преобразование АЦП, хоть и пишется что оно просто дольше работает – недостоверное. Первый результат корявый на любом АЦП
На сигма дельта АЦП вообще приходится до 3 значений пропускать.
То что скачут последние разряды это тоже нормально
Точность авровских АЦП ±2 LSB плюс помехи от ядра
Это в сумме и дает вашу погрешность.
а MCU все таки лучше останавливать.
аврэровци пишут, что первое преобразование не выдается, а сразу делается второе и по окончанию выставляются флаги. Т.е. им не верить по этому вопросу?

RE[3]: Помогите откалибровать АЦП в мега16
Это хорошо, если АЦП имеет линейную х-ку.
Мне на 8535 пришлось сделать кусочно-линейную коррекцию, но потом обнаружил температурный и временный дрейф (+-8разрядов при t=+7...+40C). Короче АЦП д...

Внутренний источник опорного напряжения Mega8?
Вопрос про АЦП встроенный в ATMega8. Дело в том , что в документации написано что в контроллере есть встроенный источник опорного напряжения 2.56В. Пытаюсь его включить путем установки битов REFS1 и REFS1 в ADMUX. Вывод AREF подпаял на землю через конденсатор(к сожалерию в доках не указан номинал). Но ничего путного из этого не получаеться - опорного напряжения нет. Может кто подскажет в чем тут дело. Как сделать так чтобы заработало?
Ацп включил? Без этого источник работать не будет.

RE[1]: Как быстро работает встроенный ADC ?
Я получал максимальную частоту АЦП на AVR 16000000/2/13~ 615КГц, по одному каналу или 16000000/2/25~320КГц по перебору. Эту частоту можна получить, только в том случае, если код отработчика прерывания ADC не более 13-ти или 25-ти циклов соответственно, не используешь CLI (если работа с АЦП по прерыванию) и писать только в ОЗУ (можно внешнее). Выводишь аппаратно можно с помощью SPI интерфейса на частоте не ниже 4MГц(25) или 8Мгц(13) . Иначе получишь частоту работы единичного цикла своей программы. Про точность не спрашивай, нужен был только ADC_h.
Удачи!

RE[1]: Как быстро работает встроенный ADC ?
В документации сказано, что время преобразования АЦП (в AVR) равно 25 тактов генератора АЦП, которое привязано к кварцу контроллера. Я проверял - частоту кварца делил до 250 кГЦ и время одного преобразования АЦП примерно 0,1 мсек. Рекомендуют делителем кварца выставлять частоту 50...200 кГц для точности ответа до 1 бита. Эта скорость выбрана между инерционостью компаратора и устройством выборки-хранение (УВХ). Можно поднять скорость АЦП, но пишут что погрешность увеличится.
Я ставит частоту АЦП 500 кГЦ при этом показания колебались в пределе не более 3 последних бит и время преобразования примерно 0,05 мсек. Можно ставить скорость больше, если точность последних бит не очень важна.

RE[2]: Как быстро работает встроенный ADC ?
В документации вроде сказано, что 25 ADC clock - это только первый раз, потом 13, но может я чего-то недопонял... Я пробовал делитель на 64/32/16/8/4/2 при частоте 8Мгц. Все равно мне не удалось подсчитывать импульсы при частоте более 12300-12500 Гц. (две выборки на импульс один канал) Т.е. какая бы скорость ADC clock не была - все равно частота с которой я мог выбрать данные с АЦП не превышала 25 000 Гц. Я готов пожертвовать точностью в обмен на производительность, но все равно больше 25 000 раз в сек. не получаеться... У кого нибудь получилось замерять застоту с четырех каналов по 10 000 Гц. ? Или внутренний АЦП на это не рассчитан ?

Ошибки измерения АЦП (mega128)
Реализовано у меня устройство - процессор, используются два USART (выведены на буферную микросхему), флеш память (через SPI), восемь клавиш, вывод на четырёхстрочный дисплей (находится сверху над платой управления).
Алгоритм работы устройства в основном режиме следующий -
-Опросить клавиатуру, и если нажаты какие-то клавиши то выполнить соответствующие действия;
-Произвести измерения;
-Пересчитать и вывести на экран;
-И далее по цыклу.

На выходе устройства 5 выводов, два крайних подключены к генератору тока, средний - общий для дифференциальных входов (заведён на ADC1), и два (на ADC4, ADC0) - для дифференциальных измерений.
Для эксперимента подключил набор резисторов - с крайнего на ADC0, потом на средний, потом на ADC4 и на другой крайний. То есть два крайних задают ток через цепочку в результате чего на ADC0-ADC1 у меня приблизительно 0,89В, на ADC4-ADC1 - приблизительно -0,9В

К сожалению, плохо прочитали документацию и не развели аналоговую землю под АЦП и дорожками, позже просто поставили конденсаторы на землю.

Так вот, измерения (первый из подрежимов) проводятся по следующему алгоритму -
-Измерение по дифференциальному входу ADC0-ADC1, запись в SRAM;
-Измерение по дифференциальному входу ADC0-ADC4, запись в SRAM;
-Измерение по входу ADC5, запись в SRAM.
В этом режиме всё проходит нормально, за исключением небольшой ошибки по дифференциальных входах, которую по документации надо исправлять с помощью програмной коррекции.
В следующем подрежиме система работает следующим образом -
-Измеряется напряжение на ADC1-ADC0, пересчитывается в сопротивление (ток я знаю, так как его задаю)
-Выводится в соответсвующей части основного цыкла.
Так вот тут (даже когда пробовал Noise Reduce режим - о чём отдельный разговор в одной из предыдущих тем) после измерения у меня система сначала выдаёт 0,87В, а дальше на протяжении нескольких цыклов измерения, быстро падает до 0,79В и тут застывает.
Единственный выход, который мне пока помог - я взял весь алгоритм измерения напряжений (описан выше), перебросил его в часть где нужно мерять напряжение для сопротивления, и там после первого измерения сохраняю результаты, остальные два измерения я делаю уже в холостую. Теперь у меня меряет то, что нужно - 0,89В.
В результате вроде бы и работает, но логики его работы я так и не понял. Может кто-нибудь встречался с чем то подобным и может что-либо посоветовать? А то вдруг у меня при работе устройства в полевых условиях начнёт что-нибудь не так мерять.

Видел похожий глюк на 8535, но жить с ним можно
Сталкивался с подобной проблемой на 8535. Даже поднимал ее на конференции месяца три назад. Дело было так. Кто-то сказал, что АЦП у АВР-а работает с глюками. Вот я их и искал. Нашел только то, что при инциализации АЦП возникает скачек сигнала, длительностью около милисекунды. Я его просто пережидал. В остальном проблем не было ни каких, хотя искал я их целенаправленно: щелкал мультиплексором при разноуровневых сигналах, интенсивно опрашивал по RS-232 и т.д.
Еще добавлю, что мой друг использует АЦП на ПИК-контроллере. Не жаловался.

Михаил.


Было похожее... На том же контроллере.
Кажется, Вы столкнулись с инерционностью встроенного мультиплексора. Я напоролся на то же когда использовал поочерёдную коммутацию АЦП в дифференциальном режиме между двумя дифференциальными каналами.
Победил я эту чушь введением предварительного холостого цикла чтения. Всё в соответствии с даташЫтом. А ещё там написано, что вероятная ошибка тем выше, чем больше задано усиление в канале. Что и наблюдается.
Выходов из ситуации несколько... Можно просто подождать после переключения перед тем, как измерение запускать. А можно постараться сделать переключения как можно более редкими.
С уважением.

RE[1]: Было похожее... На том же контроллере.
дело в том, что я давал, даже несколько, дополнительных циклов запуска измерения и считывания данных без смены канала - не помогало. Правда у меня каждый раз когда я дохожу до точки где необходимо проводить измерения, я, независимо от того какой канал у меня был выставлен, записываю в мультиплексор код канала (то-есть даже тогда, когда был выбран нужный мне канал раньше, я всё равно записываю его код), и после этого я провожу несколько цыклов измерений. Результат с ошибкой.
Помог только следующий алгоритм - после того как я провожу измерение по дифференциальному каналу, я сразу же переключаюсь на измерение по одному выводу (не дифференциальному) и провожу один цикл измерения. Может дело в том, что мультиплексор начинает сбоить когда я записываю ему один и тот же код. А когда я его начал менять - то всё нормально заработало.

Но, возникла другая проблема. Опорное напряжение АЦП 2,56 (внутреннее). Так вот, когда я меряю напряжение по дифференциальному входу до 0,5В - точность более-менее нормальная, но когда у меня напряжение больше 0,6В (мерял напряжение на акумуляторе), то появляется весьма ощутимая ошибка - 0,05В.
Тут ещё надо подумать на схемном уровне - может там у меня какие-то ошибки. Но вроде бы не было

В когда


ADC AVR
У меня Mega163 выдавала жутко прыгающие показания (до 8 LSB). Причиной оказался max232. Когда его выдернул из панели, все сразу столо идеально. Бывало не единого скачка в течении нескольких минут. До того, что только не пробовал - практически все из вышеупомянутого. Топология той платы оставляла желать лучшего. Потом стал улучшать, но получилось, как всегда - все стало плясать еще хуже, чем было и появилось взаимное влияние каналов.


Reset при выходе из Sleep по прерыванию АЦП (mega128)
Вот никак не могу понять в чём проблема. Использую встроенное в atmega128 АЦП, возникли некоторые проблеммы с точностью измерения, решил попробовать Noise Reduce Sleep режим. Но ....

Когда задал переход в Sleep и разрешил прерывание от АЦП система начала вести себя странно - 99% что процессор просто перезапускается. В результате экспериментов получил следующие результаты - когда в коде коментирую строчку которая разрешает прерывание от АЦП - система виснет (то-есть переходит в Sleep режим и там остаётся - вроде бы нормальная работа), когда коментирую команду Sleep, но оставляю разрешение прерывания - система работает по старому (то-есть нормально, так как обработчик прерывания просто возвращает управление в код, пока прерывание не запрещается). Тогда закоментировал строчку которая разрешает прерывание от АЦП, но добавил инициализацию таймера и прерывание от таймера - система нормально заработала - то-есть - переходит в Sleep, потом когда выходит таймер возвращается назад к коду.
Правда использование Noise Reduce режима мне не добавило точности (подробности о проблеме с точностью в другой теме), но при этом я так и не понял логики работы устройства - почему процесоор перезапускается при выходе из Noise Reduce режима по прерыванию от АЦП.
Посоветуйте пожалуйста, куда мне молотком ударить, чтобы заработало :-)

Watchdog, Jtag - выключены с помощью Fusebits

Вопрос по Atmega 128 про АЦП!
Прописываю в ADMUX числа от 0 до 7, а в ADCL и ADCH прописывается значение не от 0 до 1023,а от 0 до 65472 как будто включили режим ADLAR=1. В чем может быть баг.
Читайте внимательнее Data Sheet. Right Adjustion нужно выбрать.

АЦП в ATmega163
Если кто нибудь сталкивался подскажите. В меге163 АЦП работает все время в режиме постоянного измерения (free running mode) в независимости от бита ADFR (пробовал и 0, и 1 результат одинаков). То есть после обработки прерывания предыдущего измерения стартует следующее хотя бит старта преобразования ADSC не выставляется и мало того, равен 0. Запрет и разрешение АЦП только на время каждого измерения не приемлимо, так как восстановление потенциала на внутренней опоре порядка 100 мкс, хотя и решает проблему. Никто не сталкивался с такой проблемой? Заранее спасибо Abrau
Там все работает, у меня по крайней мере... ищите ошибку в коде.
Да, действительно работает.
Проблема была в режиме АЦП (точные измерения при отключении процессора), входя в SLEEP MODE АЦП стартует самостоятельно.

Влияние между АПЦ в ATmege
Проблема в том что при оцифровке нескольких сигналов в 128 меге, прерыдущий ацп влияет на последующий, (тоесть если повышать сигнал на ADC1 то на ADC2 наводится какойто шум)
но на оборот не происходит,
может кто сталкивался с такой проблемой?
RE[1]: Влияние между АПЦ в ATmege
Вероятно - высокое выходное сопротивление источника сигнала.
Сам наблюдал такое в АЦП от "TI". На макете были запаяны не все входы АЦП и на незапаянных отмечалось присутствие сигнала сильно коррелированного с "предыдущим" (по последовательности опроса) каналом. То-есть конденсатору "sample-and-hold" не на что разряжаться при отключенном входе.


Вопрос по АЦП в AVR
Поскажите пожалуйста.
Слышал такую вещь. Что можно используя 10 разрядное АЦП микроконтроллера (например ATMega128) получать точность 12-16 разрядов.
Используя методы цифровой обработки сигналов, фильтров первого порядка и т.д. (програмные способы)
Подскажите принцип пожалуйста.
RE[1]: Вопрос по АЦП в AVR
Действительно можно, но сигнал должен быть условно переодичный, а так как скорость преобразования не велика, то и достаточно низкочастотный... А зачем такая высокая точность?



Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru