Next revision | Previous revision |
ru:avr:adc [2013/08/14 16:28] – создано eduardtlmk | ru:avr:adc [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
---|
====== Analoog-digitaalmuundur ====== | ====== Аналого-цифровой преобразователь ====== |
| |
Analoog-digitaalmuundur (inglise keeles //analog to digital converter//, lühend ADC) muundab analoogpinge väärtuse digitaalseks väärtuseks. AVR-i ADC analoogpinge sisend on lubatud 0-5,5 V piires. Digitaalne väärtus on 10-bitine, kuid selle täpsus on ±2 ühikut. Viga võib veelgi kasvada, kui kiibi toitepinget häirete eest ei kaitsta. ADC jaoks on AVR-il eraldi toite ja võrdluspinge viik. Eraldi toide on mürakindluse pärast ja see ei tohi kiibi toitepingest erineda rohkem kui 0,3 V. Võrdluspinge määrab maksimaalse digitaalse väärtuse. Ehk kui võrdluspinge on 3 V, siis sama pingega sisend annab väärtuseks 2<sup>10</sup> - 1 ehk 1023. | Аналого-цифровой преобразователь или АЦП (англ. //analog to digital converter//, сокращ. ADC) преобразовывает аналоговое значение напряжения в цифровое значение. Разрешённый диапазон напряжения АЦП AVR микроконтроллера находится в рамках 0-5,5 V. Цифровое значение 10-битное, но его точность ±2 единицы. Ошибка может увеличиться, если не защитить напряжение питания чипа от помех. У AVR существует отдельное питание для АЦП и отдельный вывод напряжения сравнения. Отдельное питание помогает снизить интерференцию и не должно отличаться от напряжения питания чипа больше, чем на 0,3 V. Питание сравнения определяет максимальное цифровое значение. Другими словами, если питание сравнения 3 V, то вход с таким же напряжением выдаёт значение в 2<sup>10</sup> - 1 т.е. 1023. |
| |
AVR ADC töötab võrdlusmeetodil (inglise keeles //successive approximation//). Lühidalt öeldes toimub mõõdetava pinge võrdlemine kindlate nivoopingetega ja tulemuste esitamine tõeväärtuste-, ehk bitijadana. See meetod on suhteliselt aeganõudev, sest iga biti leidmine lõppväärtuses toimub eraldi. AVR-il kulub töö ajal 13 takti ühe mõõtmise tegemiseks ja 25 takti kõige esimesel mõõtmisel (käivitusel). Need taktid pole aga kontrolleri töötaktid, vaid spetsiaalselt ADC üksuse jaoks sagedusjaguriga saadud taktid. Maksimaalse täpsuse saamiseks peaks ADC takt olema 50-200 kHz. Kõrgemal taktil kaob täpsus. Vahel on ka mõõtmiste suur arv olulisem kui täpsus ja siis on põhjendatud suurema sageduse kasutamine. Ühele mõõtmisele kuluvaks ajaks on AVR dokumentatsioonis antud 13-260 µs. | АЦП AVR работает по методу последовательного приближения (англ. //successive approximation//). Вкратце, измеряемое напряжение сравнивается с конкретными уровнями напряжения, а представление результатов происходит битовыми массивами. Данный метод требует много времени, так как нахождение каждого бита из окончательного значения происходит отдельно. Контроллеру AVR требуется во время работы 13 тактов для одного измерения и 25 тактов для самого первого измерения (при запуске). Эти такты не являются рабочими тактами контроллера, они получены частотным делителем специально для АЦП. Для получения максимальной точности такт АЦП должен быть 50-200 kHz. На более высоком такте пропадает точность. Иногда большое количество измерений важнее, чем точность и в таком случае оправдано использование большей частоты. Время, требующееся для одного измерения, в документации к AVR указано как 13-260 µs. |
| |
Mõõtetulemust saab kasutaja lugeda 8- ja 10-bitisena. Kuna AVR on 8-bitine, siis ADC mõõteväärtuste jaoks on sel kaks 8-bitist registrit. Seadistustes saab määrata, kas 10-bitisest väärtusest 2 esimest või 2 viimast bitti lähevad eraldi registrisse. Kui eraldatakse 2 noorimat ehk tulemust vähem iseloomustavat bitti, saab mõõtetulemuse 8-bitisena lugeda - sellist kombinatsiooni nimetatakse vasak-asetusega mõõtetulemuseks (//left align//). Teistpidist kombinatsiooni, kus kaht tulemusregistrit lugedes tekib 10-bitine arv, nimetatakse parem-asetusega mõõtetulemuseks (//right align//). | Пользователь может считать результат измерения 8- и 10-битным. Так как AVR 8-битный, для значений измерения у АЦП имеется два 8-битных регистра. В настройках можно указать, какие 2 бита (первые или последние) 10-битного значения пойдут в отдельный регистр. Если отделяются 2 бита, которые меньше всего характеризуют результат, можно результат измерения считать 8-битным – подобная комбинация называется выравниванием по левому краю (англ. //left align//). Обратную комбинацию, когда оба регистра считываются и результат представлен в 10-битном формате, называют выравниванием по правому краю (англ. //right align//). |
| |
Mõõdetavaid analoogpinge sisendkanaleid on AVR-idel tavaliselt 8, ATtiny seerial üksikud, mõnel ATmega seeria kiibil 16, kuid muundureid on siiski üks. Erinevate sisendite kasutamiseks on kiibis multiplekser. Multiplekseri sisend on spetsiaalse registriga määratav. ADC üksusel on veel mõned omadused: muundamine protsessori magamisrežiimis müra vähendamiseks ja sisemise fikseeritud võrdluspinge (2,56 V, mõnel ka 1 V) kasutamise võimalus. | Измеряемых каналов входного напряжения у AVR обычно 8, в серии ATtiny они одиночные, у некоторых чипов серии ATmegal 16, но преобразователь всё же один. Для использования разных входов в чипе существует встроенный мультиплексор. Вход мультиплексора определяется специальным регистром. АЦП обладает некоторыми другими свойствами: преобразование в спящем режиме процессора для уменьшения помех и возможность использования внутреннего фиксированного напряжения сравнения (2,56 V, у некоторых и 1 V). |
| |
~~PB~~ | <pagebreak> |
| |
<box 100% round #EEEEEE|Näide> | <box 100% round #EEEEEE|Пример> |
| |
Vaja on mõõta ATmega128 ADC kanali 3 pinget vahemikus 0-5 V 8-bitise täpsusega. | Требуется измерить 3 напряжения канала АЦП ATmega128 в промежутке 0-5 V с 8-битной точностью. |
| |
<code c> | <code c> |
unsigned char result; | unsigned char result; |
| |
// Võrdluspingeks AREF viigu valimine | // Выбор вывода AREF сравнительным напряжением |
// (eeldatavasti on see ühendatud +5V toiteahelasse) | // (предположительно он включен в +5V питание) |
// Multiplekseriga kanali 3 valimine | // Выбор канала 3 мультиплексором |
// Tulemus on vasak-asetusega | // Результат с левым расположением |
ADMUX = (1 << REFS0) | (1 << ADLAR) | (3); | ADMUX = (1 << REFS0) | (1 << ADLAR) | (3); |
| |
// ADC üksuse käivitamine, | // Запуск АЦП, налаживание преобразовательного такта |
// teisendustakti seadmine 16 korda aeglasemaks töötaktist | // в 16 раз медленнее рабочего такта |
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADSC); | ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADSC); |
| |
// Mõõtmise lõpetamise ootamine | // Ожидание завершения измерения |
while (ADCSRA & (1 << ADSC)) continue; | while (ADCSRA & (1 << ADSC)) continue; |
| |
// 8-bitise tulemuse lugemine | // Считывание 8-битного результата |
result = ADCH; | result = ADCH; |
} | } |