реклама на сайте
подробности

 
 
> Точность АЦП Меги48 при переключении каналов
Burner
сообщение Dec 4 2009, 19:16
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 068
Регистрация: 14-01-08
Из: Винница
Пользователь №: 34 083



Кто знает - если АЦП работает примерно при 60 ksps, как рекомендует даташит, но им все время меряют по очереди 3 или 4 канала - он сохраняет свою 10-битную точность? И сколько тактов при этом уходит на каждое измерение?
Go to the top of the page
 
+Quote Post
4 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 14)
ILYAUL
сообщение Dec 4 2009, 20:24
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Burner @ Dec 4 2009, 22:16) *
Кто знает - если АЦП работает примерно при 60 ksps, как рекомендует даташит, но им все время меряют по очереди 3 или 4 канала - он сохраняет свою 10-битную точность? И сколько тактов при этом уходит на каждое измерение?


Он сохраняет, а куда ему деваться и от переключения каналов это не зависит , если Вы не дергаете его до окончания преобразования. Tпреоб=14x(количество циклов преобраз)/Fацп. Где (количество циклов преобраз)= 1 -> бесконечность , Fацп = частота самого ацп , после предварительного делителя. Да , забыл 14 - это как раз такты

Сообщение отредактировал ILYAUL - Dec 4 2009, 20:52


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Dx!
сообщение Dec 4 2009, 21:31
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 108
Регистрация: 6-02-09
Из: Новочеркасск
Пользователь №: 44 469



Цитата
как рекомендует даташит

Где же он такое рекомендует? Где вы такие даташиты берете???

Цитата
By default, the successive approximation circuitry requires an input clock frequency between 50
kHz and 200 kHz to get maximum resolution. If a lower resolution than 10 bits is needed, the
input clock frequency to the ADC can be higher than 200 kHz to get a higher sample rate.

И такое, за редкими правками, практически в любом даташите на авр, во всяком случае на mega48 точно...

Up to 15 kSPS at Maximum Resolution

Цитата
A normal conversion takes 13 ADC clock cycles. The first conversion after the ADC is switched
on (ADEN in ADCSRA is set) takes 25 ADC clock cycles in order to initialize the analog circuitry.


Сообщение отредактировал Dx! - Dec 4 2009, 21:36
Go to the top of the page
 
+Quote Post
Burner
сообщение Dec 5 2009, 14:28
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 068
Регистрация: 14-01-08
Из: Винница
Пользователь №: 34 083



Спасибо, что отписали!
- Где же он такое рекомендует? - Видимо, выдал желаемое за действительное - там написано • Up to 76.9 kSPS (Up to 15 kSPS at Maximum Resolution).
в ПДФ вроде написано - если переключать ADMUX через один такт АЦП(ну или еще позже) после начала преобразования, то выборка будет сделана из того канала, который был включен при начале преобразования. Это когда "normal conversion takes 13 ADC clock cycles".
Это правда, и измерение при этом получается не хуже, чем если ADMUX вообще не трогать? У меня возникли сомнения, потому что в другом месте ПДФ написано, что выборка при "normal conversion" занимает 1,5 такта АЦП.
Если я запущу АЦП Меги48 в режиме Free running на 53 kSPS - на какую точность и линейность можно рассчитывать?
Предположим, плата разведена правильно, переключать каналы буду при каждом измерении.

Сообщение отредактировал Burner - Dec 5 2009, 14:29
Go to the top of the page
 
+Quote Post
niXto
сообщение Dec 6 2009, 06:04
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 24-06-09
Из: Беларусь
Пользователь №: 50 607



При 53 Ксэмплов будет точность 9...8 бит... АЦП в АВРках - это не АЦП а диверсия...

Если переключать каналы В КОНЦЕ каждого измерения (в прерывании от АЦП или ПЕРЕД стартом нового), то никаких задержек не будет и при выходе из прерывания и старте нового измерения будет захвачен новый канал. Это только если менять канал ПОСЛЕ СТАРТА преобразования, когда он УЖе работает - тогда новый канал будет захвачен только после финиша текущего преобразования
Go to the top of the page
 
+Quote Post
Burner
сообщение Dec 8 2009, 12:52
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 068
Регистрация: 14-01-08
Из: Винница
Пользователь №: 34 083



Спасибо, вроде понял.
Ну альтернативы покуда не вижу.. Дешево и сердито, такскать. И к АВР я привык, а другой контроллер еще изучать надо.

Сообщение отредактировал Burner - Dec 8 2009, 12:54
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 8 2009, 13:01
Сообщение #7


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Это для моторных применений? Если да - то Free Running там не нада. Лучше по таймеру, в середине фазокорректного (треугольного) ШИМа
Go to the top of the page
 
+Quote Post
oran-be
сообщение Jan 20 2010, 13:34
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



В даташитах на АВРы есть конретная дырень - в них совершенно не описана УВХ. И при переключении каналов необходимо учитывать время на заряд емкости УВХ. В противном случае результат изиерения будет среднепотолочный между двумя соседними каналами. Если надо быстро переключать каналы - единственный выход - вешать входы мультиплексора АЦП прямо на выходы операционников. При сопротивлении источника сигнала примерно 500 ом на заряд емкости УВХ до 10-битной точности надо потратить примерно 1000 тактов процессора (при 8 Мгц) - это где (это один цикл преобразования на частоте около 100кГц). Следует учесть, что преобразование можно осуществлять в то время, пока УВХ заряжается от другого канала - т.е. можно запустить преобразование, а потом сразу же, не дожидаясь конца преобразования, переключить канал.
З.Ы. !!! если мерить внутреннюю опору в АВР, то у нее выходое сопротивление около 30 кОм и, для нормального ее измерения, необходимо удерживать мультиплексор на ней в течении не менее 10000 тактов (при 8 Мгц)
З.Ы. З.Ы. Для более полной информации можно почитать даташиты на Микрочиповские контроллеры - там это расписано дастаточно подробно, а схемы УВХ, как я понимаю, особой разницы не имеют.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Jan 20 2010, 13:45
Сообщение #9


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
В даташитах на АВРы есть конретная дырень - в них совершенно не описана УВХ.


Не хочу Вас расстраивать, но все там описано. И в худшем случае время до достижения точности 0.1% будет порядка 9мкс - 100кОм (максимальное последовательное сопротивление последовательно с ключом УВХ согласно даташиту) на 14пФ (емкость конденсатора УВХ, смотри там же).

Посему, где Вы взяли мифические 1000 тактов - я хз. Сотня - еще куда ни шло, это при худшем раскладе.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
smk
сообщение Jan 20 2010, 13:46
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата
З.Ы. !!! если мерить внутреннюю опору в АВР, то у нее выходое сопротивление около 30 кОм и, для нормального ее измерения, необходимо удерживать мультиплексор на ней в течении не менее 10000 тактов (при 8 Мгц)

Подскажите, если не трудно. Мне нужно непрерывно мерять 4 канала по очереди. Тактовая 10 МГц / 64. Как это правильно делать чтоб иметь корректный результат по каждому каналу? Спасибо.

Раньше часто говорилось про некорректность первого результата после переключения канала.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
oran-be
сообщение Jan 20 2010, 15:39
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



Цитата(smk @ Jan 20 2010, 17:46) *
Подскажите, если не трудно. Мне нужно непрерывно мерять 4 канала по очереди. Тактовая 10 МГц / 64. Как это правильно делать чтоб иметь корректный результат по каждому каналу? Спасибо.

Раньше часто говорилось про некорректность первого результата после переключения канала.

Я строил движок так - запускал АЦП в режиме Free Running Conversion и разрешал прерывания по АЦП. В прерывании я вынимаю значение значение из регистра ADC, а потом переключаю канал. Можно запускать АЦП и в обычном режиме, но тогда надо ручками его каждый раз запускать.
Вот пример для ИАРа:
Код
#pragma vector = ADC_vect
__interrupt void AdcHdr(void){
          switch((ADMUX & MUX_MASK))  // поднимаем контекст преобразования
          {                                            //
                  case 2:   // Мультиплексор был установлен на канал 2
                  {  //!!! ВНИМАТЕЛЬНО !!! Преобразован канал 1 (!) - канал 2 закончил заряжать УВХ    
                         wCurrCh1 = ADC;   //Сохраняем канал 1
                         ADMUX |= 1;          //  Включаем мультиплексор на канал 3 - канал 2
                                                             //конвертируется, канал 3 заряжается
                         break;
                  }
                  case 3:
                     ..........................................................
          }
}

Если необходимы задержки в случае высокого выходного сопротивления источника сигнала, необходимо задерживать переключение мультиплексора и делать пустые преобразования.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 20 2010, 17:08
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Я могу только добавить, что лучше порт ADC полностью освободить от цифровых задач.
У меня 2 аналогичных проекта. Один на м8/м88 - там задействованы несколько ног PORTC(ADC) для управления нагрузкой ~ 20ма. Всё делается синхронно с переключением каналов и т.д. Пробовал DIDR использовать.
Во втором проекте используется CAN128. Там порт АЦП полностью свободен.

Качество работы АЦП на CAN128 - отличное. На м8/м88 - значительно хуже (~7 разрядов).
Go to the top of the page
 
+Quote Post
Александр Куличо...
сообщение Jan 20 2010, 18:59
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017



Цитата
Следует учесть, что преобразование можно осуществлять в то время, пока УВХ заряжается от другого канала

У авр ацп последовательного приближения. И УВХ используется преобразователем во время процесса преобразования. Соответственно, преведенное выше утверждение неверное. Чтобы это понять, достаточно посмотреть на блок-схему ацп в даташите или посмотреть вышеприведенную ссылку.
Кроме того, в даташите совершенно конкретно указано, когда и на протяжении какого времени осуществляется выборка и захват:
Цитата
The actual sample-and-hold takes place 1.5 ADC clock cycles after the start of a normal conversion

И анилизируя графики из даташита, видим что выборка и захват почти всегда (кроме первого запуска) осуществляется чарез 1,5 цикла АЦП после обновления адреса на мультиплексоре. То есть при рекомендованой максимальной частоте 200 кГц имеем время выборки 7,5 мкс
А " в случае высокого выходного сопротивления источника сигнала" на него нужно ставить повторитель, так как рекомендуемое выходное сопротивление источника сигнала - не более 10кОм. Как вариант можно попробывать уменьшить частоту АЦП до 50 кГц. Или сменить чип (напр, на мегу16) и использовать дифференциальный режим (для него сопротивление источника - не более "пару сотен" кОм).
Цитата
Подскажите, если не трудно. Мне нужно непрерывно мерять 4 канала по очереди. Тактовая 10 МГц / 64. Как это правильно делать чтоб иметь корректный результат по каждому каналу? Спасибо.

Если запустить в режиме непрерывного преобразования (Free Running Mode), то по прерыванию от АЦП:
a) читаем регистр ADC б) меняем канал. Порядок пунктов а) и б) в общем случае не важен. При этом прочитанный регистр ADC будет показывать значение из канала, который был выбран в позапрошлом прерывании.
А первые 2 прерывания (после запуска АЦП) дадут занчение канала, который был выбран при запуске.

Для понимания сути:
когда мы вошли в прерывание, то:
1. ADCH:ADCL содержит значение из канала, выбранном в позапрошлом прерывании
2. канал, выбранный в прошлом прерывании, в данный момент обрабатывается
3. новый канал, который мы записали в ADMUX, попадает в буферный регистр. Он
автоматически будет перезаписан в ADMUX за 1 такт(АЦП-ешный) до конца преобразования. По истечению этого такта получим новое прерывание от АЦП.

Естественно, что нельзя допускать пропусков прерываний от АЦП и в прерывании обязательно вычитывать ADCL (опционально) и после него ADCH.
Go to the top of the page
 
+Quote Post
stells
сообщение Jan 20 2010, 19:10
Сообщение #14


внештатный сотрудник
******

Группа: Участник
Сообщений: 2 458
Регистрация: 10-05-08
Из: МО, Медвежьи озера
Пользователь №: 37 401



Цитата(Александр Куличок @ Jan 20 2010, 21:59) *
выборка и захват почти всегда (кроме первого запуска) осуществляется через 1,5 цикла АЦП после обновления адреса на мультиплексоре. То есть при рекомендованой максимальной частоте 200 кГц имеем время выборки 7,5 мкс

но действительно
Цитата(smk @ Jan 20 2010, 16:46) *
Раньше часто говорилось про некорректность первого результата после переключения канала.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 20 2010, 20:40
Сообщение #15


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(stells @ Jan 20 2010, 22:10) *
но действительно

Такое получалось при высокоомном источнике только...
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 07:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01491 секунд с 7
ELECTRONIX ©2004-2016