.
Принцип работы АЦП заключается в зарядке внутреннего конденсатора СHOLD и преобразование в соответствующий 10 разрядный цифровой код методом последовательного приближения. Результат преобразования сохраняется в регистрах ADRESH, ADRESL (старший и младший регистр ). Хотя каналов и несколько, но преобразование производится через коммутатор (некий переключатель каналов) , соответственно в момент времени может преобразоваться только один канал и по завершению обработки результата можно приступать к следующему.
Для настройки модуля аналого-цифрового преобразования в МК PIC18xx2 предусмотрено два регистра специального назначения:
В других микроконтроллерах семейства PIC18XXXX регистров управление может быть больше, это зависит от количества каналов АЦП. К примеру, в МК PIC18F25k20 12 каналов и соответственно для их управления добавлен регистр ADCON2. По аналогии легко понять его назначение.
1. Настроить модуль АЦП:
• Настроить выводы как аналоговые входы, входы VREF или цифровые каналы ввода/вывода
(ADCON1)
• Выбрать входной канал АЦП (ADCON0)
• Выбрать источник тактовых импульсов для АЦП (ADCON0)
• Включить модуль АЦП (ADCON0)
2. Настроить прерывание от модуля АЦП (если необходимо):
• Сбросить бит ADIF в '0'
• Установить бит ADIE в '1'
• Установить бит PEIE в '1;
• Установить бит GIE в '1'
3. Выдержать паузу, необходимую для зарядки конденсатора CHOLD
4. Начать аналого-цифровое преобразование:
• Установить бит GO/-DONE в '1' (ADCON0)
5. Ожидать окончания преобразования:
• Ожидать пока бит GO/-DONE не будет сброшен в '0' ИЛИ
• Ожидать прерывание по окончанию преобразования
6. Считать результат преобразования из регистров ADRESH:ADRESL, сбросить бит ADIF в '0', если
это необходимо.
7. Для следующего преобразования необходимо выполнить шаги начиная с пункта 1 или 2. Время
преобразования одного бита определяется как время TAD. Минимальное время ожидания перед
следующим преобразованием должно составлять не менее 2TAD.
В МК PIC18F252 (который в качестве примера мы рассматриваем) линий AN5-AN7 нет (в таблице выделено серым цветом).
PCFG -3:0- |
AN7 | AN6 | AN5 | AN4 | AN3 | AN2 | AN1 | AN0 | VREF+ | VREF- |
Кан./ VREF(2) |
0000 | A | A | A | A | A | A | A | A | VDD | VSS | 8/0 |
0001 | A | A | A | A | VREF+ | A | A | A | AN3 | VSS | 7/0 |
0010 | D | D | D | A | A | A | A | A | VDD | VSS | 5/0 |
0011 | D | D | D | A | VREF+ | A | A | A | AN3 | VSS | 4/1 |
0100 | D | D | D | D | A | D | A | A | VDD | VSS | 3/0 |
0101 | D | D | D | D | VREF+ | D | A | A | AN3 | VSS | 2/1 |
011X | D | D | D | D | D | D | D | D | - | - | 0/0 |
1000 | A | A | A | A | VREF+ | VREF- | A | A | AN3 | AN2 | 6/2 |
1001 | D | D | A | A | A | A | A | A | VDD | VSS | 6/0 |
1010 | D | D | A | A | VREF+ | A | A | A | AN3 | VSS | 5/1 |
1011 | D | D | A | A | VREF+ | VREF- | A | A | AN3 | AN2 | 4/2 |
1100 | D | D | D | A | VREF+ | VREF- | A | A | AN3 | AN2 | 3/2 |
1101 | D | D | D | D | VREF+ | VREF- | A | A | AN3 | AN2 | 2/2 |
1110 | D | D | D | D | D | D | D | A | VDD | VSS | 1/0 |
1111 | D | D | D | D | VREF+ | VREF- | D | A | AN3 | AN2 | 1/2 |
А - аналоговая линия порта.
D - цифровая линия порта.
ADCON1 -ADCS2- |
ADCON0 -ADCS1:ADCS0- |
Тактовый сигнал АЦП |
0 | 00 | FOSC/2 |
0 | 01 | FOSC/8 |
0 | 10 | FOSC/32 |
0 | 11 | FRC (внутренний RC генератор модуля АЦП) |
1 | 00 | FOSC/4 |
1 | 01 | FOSC/16 |
1 | 10 | FOSC/64 |
1 | 11 | FRC (внутренний RC генератор модуля АЦП) |
Как видим из таблицы, тактирования модуля АЦП может производиться как от кварцевого резонатора (далее Fosc) , так и от встроенного RC генератора. Период преобразования (Tad) для получения корректного результата, должен быть не менее 1,6 мкс.. Допустимое значение Tad достигается выбором коэффициента деления Fosc на 2, 4,...64 (ADCS2:ADCS0). В случаи если модуль АЦП используется в SLEEP режиме , то выбирается внутренний RC-генератор (Tad = 2-6 мкс). Внутренний RC генератор можно также применять при тактовой частоте микроконтроллера до 1 МГц.
В качестве примера рассмотрим расчет TAD для тактовой частоты микроконтроллера 4 и 10 МГЦ:
- при Fosc 4МГц интервал времени периода тактового генератора микроконтроллера (далее Tosc) 0.25 мкс., для выполнения условия (TAD не менее 1,6 мкс.) выбираем коэффициент 8 и получаем 2 мкс. (1:4000000*8).
- при Fosc 10МГц интервал времени периода тактового генератора микроконтроллера (далее Tosc) 0.1 мкс., для выполнения условия (TAD не менее 1,6 мкс.) выбираем коэффициент 16 и получаем 1,6 мкс. (1:10000000*16).
внутренний RC генератор модуля АЦП в обоих случаях использовать нельзя (Fosc больше 1МГц).
После включения модуля АЦП необходимо определенное время для зарядки конденсатора CHOLD, которое зависит в основном от входного сопротивления . Понятно, что чем больше входное сопротивление , тем дольше будет заряжаться конденсатор. Напряжение питания МК серии PIC18xxxx различны (5 , 3.3 , 1.8-5.5 ) и соответственно минимальное время задержки (Tacq), необходимое для зарядки конденсатора у них тоже различны. По этому при расчете Tacq необходимо пользоваться формулой и необходимыми данными приведенных в даташитах на конкретный микроконтроллер.
Что касается PIC18F252, то формула для расчета следующая :
Tacq = Tamp +Tc +Tcoff
Tamp - время задержки усилителя.
Tc - время заряда конденсатора Hold.
Tcoff - температурная поправка.
Время задержки усилителя берется из расчета 2 мкс..
Температурная поправка учитывается при температуре свыше 25 гр.
Время зарядки конденсатора в основном зависит от входного сопротивления источника аналогового сигнала и не рекомендуется, что бы сопротивление было больше 2.5 кОм. Из этого следует, что при максимальном входном сопротивлении 2.5 кОм (PIC18F252) и максимально возможной температуре 50гр. минимальное время задержки составляет 12,86 мкс..
На преобразования аналогового сигнала затрачивается 12 TAD, минимальное время преобразования , при условии Tad 1,6 мкс.- 12х1,6 =19,2 мкс.. Соответственно весь цикл АЦП легко подчитать, добавив к 12 TAD время зарядки конденсатора.
Все, результат в регистрах ADRESH:ADRESL, старший и младший байты соответственно. В зависимости от бита ADFM регистра ADCON1 результат АЦП выравнивается.
1 = правое выравнивание, 6 старших бит ADRESH читаются как ‘0’
0 = левое выравнивание, 6 младших бит ADRESL читаются как ‘0’
Можно скачать пример АЦП. MPLAB,Протеус.
В видеоуроке показан этот же пример в Протеусе, с выравниваем результата и отображением на светодиодах, подключенным к портам "B" и "C" .
Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2021 © ChipMK.ru
![]() |
|