|
|
  |
ATxmega |
|
|
|
Sep 24 2009, 18:52
|
Группа: Участник
Сообщений: 6
Регистрация: 24-09-09
Пользователь №: 52 554

|
Цитата(Hope! @ Sep 24 2009, 13:07)  Всем привет! Тут поднимали тему про АЦП Xmega. Может кто-то тоже сталкивался с подобной проблемой: Я пыталась добиться точного измерения на 12-битном разрешении. Все настроила, сделала калибровку (переписала калибровочные значения в регистры CAL).В бесконечном цикле запускаю функцию:
void ADC__read(ADC_t * adc, int countOfMeasure, countOfMeasure)... ... Может это нормально для XMEga, но все-таки хотелось большей точности от 12-разрядного АЦП Полагаю, что это AVR-специфика. Нечто аналогичное у меня работало на mega32. Постоянный циклический опрос 8 каналов. Начало преобразования (измерения) последующего канала после сохранения результата предыдущего (в прерывании). Использовал только 8 бит (сдвинутый влево 10-ти битный результат). Два младших бита постоянно "фонили". К счастью, мне было достаточно 6-ти бит, но тогда я стал понимать тех, кто ставил к mege специализированный ADC на SPI, например. Ваши 40 единиц - это, очевидно, младших 5 бит (с хвостиком), т.е. выше 7 битной (относительной) точности xmega не поднялась, хотя это почти на 1 бит выше, чем у просто-meg'и.
|
|
|
|
|
Sep 24 2009, 19:17
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Цитата(Prov @ Sep 24 2009, 21:52)  Полагаю, что это AVR-специфика. Нечто аналогичное у меня работало на mega32. Постоянный циклический опрос 8 каналов. Начало преобразования (измерения) последующего канала после сохранения результата предыдущего (в прерывании). Использовал только 8 бит (сдвинутый влево 10-ти битный результат). Два младших бита постоянно "фонили". К счастью, мне было достаточно 6-ти бит, но тогда я стал понимать тех, кто ставил к mege специализированный ADC на SPI, например. Ваши 40 единиц - это, очевидно, младших 5 бит (с хвостиком), т.е. выше 7 битной (относительной) точности xmega не поднялась, хотя это почти на 1 бит выше, чем у просто-meg'и. Это специфика разработчика. Даже не особо заморачиваясь с разводкой земли и фильтрацией питания, можно получить точность 8бит. Больше мне просто как-то не требовалось. Конечно при опросе нескольких каналов есть свои ньюансы, но и это не повод "обижать" процессор. Впрочем, на мой взгляд, рассмотрение особенностей АЦП AVR-ок лучше обсуждать не в этой ветке.
|
|
|
|
|
Sep 24 2009, 21:26
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Artem_Petrik @ Sep 24 2009, 22:17)  Это специфика разработчика. ...не повод "обижать" процессор. Тем не менее Процессор здесь тоже "при делах". Например, смею утверждать, что если на том же порте, что и АЦП у вас находится сильноточные цепи с импульсной нагрузкой ~ 20ма, то вы не получите точность выше 6 бит. При всех ухищрениях. Разработчики кристалла рекомендуют на время измерения вообще "засыпать". А это значит, что добится нормальной точности только схемотехническими методами не удаётся. Но процессор - есть процессор. Что если я не могу спать и отключать нагрузку? Значит я не получу объявленную точность? Тогда надо откровенно писать - точность 8бит если процессор используется как АЦП. Короче качество АЦП AVR мне очень не нравится. Думаю, что можно было разработать получше. Видимо сэкономили. (Я про стандартные меги).
|
|
|
|
|
Sep 25 2009, 09:08
|
Группа: Участник
Сообщений: 4
Регистрация: 22-07-09
Пользователь №: 51 458

|
Цитата Тем не менее Процессор здесь тоже "при делах". Например, смею утверждать, что если на том же порте, что и АЦП у вас находится сильноточные цепи с импульсной нагрузкой ~ 20ма, то вы не получите точность выше 6 бит. При всех ухищрениях. Разработчики кристалла рекомендуют на время измерения вообще "засыпать". А это значит, что добится нормальной точности только схемотехническими методами не удаётся. Но процессор - есть процессор. Что если я не могу спать и отключать нагрузку? Значит я не получу объявленную точность? Тогда надо откровенно писать - точность 8бит если процессор используется как АЦП. SasaVitebsk, переводить процессор xmega в режим сна я тоже пробовала, но это вообще не помогло. В Atmega бЫл режим сна специальный "Снижение шумов АЦП" и при преобразовании АЦП контроллер в него переводили, что если верить документации существенно повышало точность. Также в Atmega и в режиме холостого хода тоже написано что шумы снижаются. В XMEGA же ничего подобного не написано и режима "Снижения шумов АЦП" нет, есть только холостой ход.
|
|
|
|
|
Sep 25 2009, 10:07
|
Группа: Участник
Сообщений: 6
Регистрация: 24-09-09
Пользователь №: 52 554

|
Цитата(Artem_Petrik @ Sep 24 2009, 21:17)  Это специфика разработчика... и это не повод "обижать" процессор... рассмотрение особенностей АЦП AVR-ок лучше обсуждать не в этой ветке. Это специфика разрабатываемого устройства. Факты не "обижают" процессор, а уточняют сферу его применения и подтверждают необходимость внешних специализированных ADC при повышенных требованиях к точности измерения. Для AVR - это реально 7-8 бит. Опыт Hope! дополнительно подтверждает это и, если кто-то знает как получить более высокую точность, пусть прокомментирует. Полагаю, многим это будет интересно.
|
|
|
|
|
Sep 25 2009, 18:57
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Цитата(Hope! @ Sep 24 2009, 15:07)  Может это нормально для XMEga, но все-таки хотелось большей точности от 12-разрядного АЦП Errata для камня ATXMEGA серии А1 и последней ревизии G. Цитата 5. The ADC has up to ±2 LSB inaccuracy
The ADC will have up to ±2 LSB inaccuracy, visible as a saw-tooth pattern on the input voltage/ output value transfer function of the ADC. The inaccuracy increases with increasing voltage reference reaching ±2 LSB with 3V reference.
Problem fix/Workaround
None, the actual ADC resolution will be reduced with up to ±2 LSB. Может это ?
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
Sep 25 2009, 19:16
|
Местный
  
Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006

|
Цитата(Prov @ Sep 25 2009, 13:07)  Это специфика разрабатываемого устройства. Факты не "обижают" процессор, а уточняют сферу его применения и подтверждают необходимость внешних специализированных ADC при повышенных требованиях к точности измерения. Для AVR - это реально 7-8 бит. Опыт Hope! дополнительно подтверждает это и, если кто-то знает как получить более высокую точность, пусть прокомментирует. Полагаю, многим это будет интересно. Чтож, у меня тоже в одном проете были проблемы с точностью АЦП. Тоже получалось чтото около 5-6разрядов. Однако ранее я уже работал с АЦП AVR, и знал, что уж 8 бит он точно может выдать, поэтому, вместо того, чтоб грешить на процессор, стал искать проблему "у себя". Там АВР-ка, помимо всего прочего, рулила преобразователем напряжения, и питалась с его выхода. Выяснилось, что на выходе преобразователя были довольно большие пульсации, около 100mVp-p. Для той нагрузки, для которой формировалось данное напряжение, пульсации были не особо важны, поэтому я решил фильтровать толко питание AVR-ки. Больших токов она у меня через себя не пропускала, поэтому я поставил ей на питание 10 Ом + 10мкф, а потом еще что-то подобное (точно уже не помню, может дроссель был) для фильтрации AVCC. Этого было достаточно для того, чтоб нужные мне 8 бит стояли железно. Такой вот нехитрый опыт.
|
|
|
|
|
Sep 25 2009, 20:18
|
Группа: Участник
Сообщений: 6
Регистрация: 24-09-09
Пользователь №: 52 554

|
Цитата(Artem_Petrik @ Sep 25 2009, 21:16)  ...у меня тоже в одном проете были проблемы с точностью АЦП. В проекте, о котором я писал выше, и AVCC, и AREF были достаточно хорошо стабилизированы, разводка соответствовала DS. Возможно, нужно было дать задержку на запуск следующего преобразования (не очень похоже) или поюзить предметнее и выйти на 8 бит, но меня устраивало 6 и я просто не стал тратить время понимая, что универсальных устройств нет и AVR не предназначено для относительно прецизионных (10-12 бит, что-бы "они там" не рекламировали) измерений. Учитывая, что в xmege AREF почти в два раза ниже чем у meg'и, действительно, нужно уделить внимание качеству питания.
|
|
|
|
|
Sep 29 2009, 09:41
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(Prov @ Sep 25 2009, 14:07)  если кто-то знает как получить более высокую точность, пусть прокомментирует. Полагаю, многим это будет интересно. Как ее получить - знают все, об этом написано во всех учебниках, но почему-то большинство с завидным упрямством этого не делают. Для этого надо в непосредственной близости от процессора ставить хотя бы по два электролита и две керамики по 0.1 мкф, земли от сильноточных потребителей вести к источнику питания отдельным проводом, питание к процессору подводить широкими проводниками по одному слою, если же требуется переход, то делать переходные отверстия большого диаметра и т.д. Наконец, выполнять преобразование в те моменты, когда нет помех (переключение чего-л.) или хотя бы синхронизировать время преобразования с этими моментами. Уж 10 разрядов от АВРки добиться можно легко, и я не понимаю что нужно делать, чтобы у нее стали дрожали два разряда.
|
|
|
|
|
Sep 30 2009, 08:27
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Вот именно, что рекомендации знают все. И, естественно, их стараются исполнять. При этом, при применении внешнего АЦП получаешь 16 разрядов и претензий к точности никаких, а на AVR вылизываешь всё и с трудом получаешь 7. Понятно, что если написано в даташите, то получить объявленную точность - реально. Но цена за её получение слишком высока. По моим оценкам лучше всего освободить порт АЦП от цифровых нагрузок. Регистр DIDR, введенный в новых однокристалках мало помогает. Синхронное измерение-переключение - делал, тоже влияет незначительно. Внешняя опора не повышает точность существенно. Значительно влияет - снижение частоты преобразования и повторные измерения. Получается что если хочется точности, то область использования - значительно уже чем область использования МК. Тут нет ничего плохого, просто надо это знать. Одно дело если вы можете измерять а потом обрабатывать - тут всё Ok, другое - если обрабатываете "на лету" и при этом машете ногами.
Читал, что АЦП встроенные в МК от AD имеют сопоставимую точность с внешними.
|
|
|
|
|
Sep 30 2009, 09:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886

|
Цитата(SasaVitebsk @ Sep 30 2009, 12:27)  Вот именно, что рекомендации знают все. И, естественно, их стараются исполнять. При этом, при применении внешнего АЦП получаешь 16 разрядов и претензий к точности никаких, а на AVR вылизываешь всё и с трудом получаешь 7. Понятно, что если написано в даташите, то получить объявленную точность - реально. Но цена за её получение слишком высока. По моим оценкам лучше всего освободить порт АЦП от цифровых нагрузок. Регистр DIDR, введенный в новых однокристалках мало помогает. Синхронное измерение-переключение - делал, тоже влияет незначительно. Внешняя опора не повышает точность существенно. Значительно влияет - снижение частоты преобразования и повторные измерения. Получается что если хочется точности, то область использования - значительно уже чем область использования МК. Тут нет ничего плохого, просто надо это знать. Одно дело если вы можете измерять а потом обрабатывать - тут всё Ok, другое - если обрабатываете "на лету" и при этом машете ногами.
Читал, что АЦП встроенные в МК от AD имеют сопоставимую точность с внешними. Полностью разделяю точку зрения. Могу добавить что у меня получалось получить все 10 разрядов стоящими, только используя цифровую обработку: медианный фильтр минимум на 5 отсчётов, только после этого ФНЧ. Понятно, что от этого встроенный АЦП лучше не работает, но в задачах где не требуется большая точность, а требуется большое разрешение такой подход очень даже применим. Само собой ценой уменьшения фактической частоты АЦП на несколько порядков.
|
|
|
|
|
Oct 2 2009, 18:30
|
Группа: Участник
Сообщений: 6
Регистрация: 24-09-09
Пользователь №: 52 554

|
Цитата(Petka @ Sep 30 2009, 11:18)  Полностью разделяю точку зрения. ...у меня получалось получить все 10 разрядов стоящими, только используя цифровую обработку: медианный фильтр минимум на 5 отсчётов... Согласен на 100%. Не хотелось вспоминать, но был прецедент... Срочно (!) сделать цифровой вольтметр. Была плата с mega8: кварц 4,194304 МГц (время считать), три семисегментных индикатора с ключами на РС0..2 (именно на ADC), кнопки и реле. Измеряемое напряжение подключил на PC5 (ADC5). Буфер на 64 отсчета и достаточно "хитрый" анализ. Напряжение индицировалось в двух форматах: XX.X и X.XX (т.е. самым неприятным был переход 9.99-10.0, пришлось "притормаживать" в этом месте). Точность измерения была не хуже 1%, естественно, путем программной подгонки. Поэтому если не заниматься ничем более (про разводку, конденсаторы и проч. не говорю - это аксиома), то можно получить эти 10 бит. Думаю, что разработчики AVR это знают, но, естественно, специально не рекламируют. Формально они правы: 10 бит - это реально, но какой ценой и устроит ли это Вас. У меня более "приземленный" вопрос для тех, кто уже работает с xmeg'ой: на сколько реально она работает на 32 МГц? Кто-то уже пробовал? Вопрос не праздный. У меня альтернатива выбора LPC или xmega. Самая сложная функция - поиск записи в массиве из 120-150 тыс.записей. Пробы на макете из LPC2378 (45 МГц) дают 6-10 мс (меня устроит и 50 мс). Но, как посмотрю на разводку - xmega гораздо проще и удобнее. Ищу и другие плюсы кроме, ес-но, и стоимости.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|