|
Точность АЦП Меги48 при переключении каналов |
|
|
|
 |
Ответов
(1 - 14)
|
Dec 4 2009, 20:24
|

Профессионал
    
Группа: Свой
Сообщений: 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
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Dec 4 2009, 21:31
|
Частый гость
 
Группа: Участник
Сообщений: 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
|
|
|
|
|
Dec 5 2009, 14:28
|
Профессионал
    
Группа: Свой
Сообщений: 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
|
|
|
|
|
Dec 6 2009, 06:04
|
Участник

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

|
При 53 Ксэмплов будет точность 9...8 бит... АЦП в АВРках - это не АЦП а диверсия...
Если переключать каналы В КОНЦЕ каждого измерения (в прерывании от АЦП или ПЕРЕД стартом нового), то никаких задержек не будет и при выходе из прерывания и старте нового измерения будет захвачен новый канал. Это только если менять канал ПОСЛЕ СТАРТА преобразования, когда он УЖе работает - тогда новый канал будет захвачен только после финиша текущего преобразования
|
|
|
|
|
Jan 20 2010, 13:34
|
Местный
  
Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621

|
В даташитах на АВРы есть конретная дырень - в них совершенно не описана УВХ. И при переключении каналов необходимо учитывать время на заряд емкости УВХ. В противном случае результат изиерения будет среднепотолочный между двумя соседними каналами. Если надо быстро переключать каналы - единственный выход - вешать входы мультиплексора АЦП прямо на выходы операционников. При сопротивлении источника сигнала примерно 500 ом на заряд емкости УВХ до 10-битной точности надо потратить примерно 1000 тактов процессора (при 8 Мгц) - это где (это один цикл преобразования на частоте около 100кГц). Следует учесть, что преобразование можно осуществлять в то время, пока УВХ заряжается от другого канала - т.е. можно запустить преобразование, а потом сразу же, не дожидаясь конца преобразования, переключить канал. З.Ы. !!! если мерить внутреннюю опору в АВР, то у нее выходое сопротивление около 30 кОм и, для нормального ее измерения, необходимо удерживать мультиплексор на ней в течении не менее 10000 тактов (при 8 Мгц) З.Ы. З.Ы. Для более полной информации можно почитать даташиты на Микрочиповские контроллеры - там это расписано дастаточно подробно, а схемы УВХ, как я понимаю, особой разницы не имеют.
|
|
|
|
|
Jan 20 2010, 13:46
|
Гуру
     
Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446

|
Цитата З.Ы. !!! если мерить внутреннюю опору в АВР, то у нее выходое сопротивление около 30 кОм и, для нормального ее измерения, необходимо удерживать мультиплексор на ней в течении не менее 10000 тактов (при 8 Мгц) Подскажите, если не трудно. Мне нужно непрерывно мерять 4 канала по очереди. Тактовая 10 МГц / 64. Как это правильно делать чтоб иметь корректный результат по каждому каналу? Спасибо. Раньше часто говорилось про некорректность первого результата после переключения канала.
--------------------
Живи днем так, чтобы ночью ты спал спокойно.
|
|
|
|
|
Jan 20 2010, 15:39
|
Местный
  
Группа: Свой
Сообщений: 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: .......................................................... } } Если необходимы задержки в случае высокого выходного сопротивления источника сигнала, необходимо задерживать переключение мультиплексора и делать пустые преобразования.
|
|
|
|
|
Jan 20 2010, 18:59
|
Местный
  
Группа: Свой
Сообщений: 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.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|