Четверг, 31 мая 2012 10:54

Аналого-цифровое преобразование (АЦП).

Written by
Rate this item
(0 votes)

 Без такой возможности, как аналого-цифрового преобразование, применение   микроконтроллеров  резко бы ограничилось. Это очень часто применяемый метод измерений в различных конструкциях и устройствах. В семействе  PIC18XXXX, как правило присутствует встроенный модуль аналого-цифрового преобразования (АЦП) и несколько аналоговых каналов . Количество каналов  зависит от конкретного микроконтроллера. Что касается PIC18F252 в его составе их 5.  

 

Принцип работы АЦП  заключается в зарядке внутреннего конденсатора  СHOLD и преобразование в соответствующий 10 разрядный цифровой код методом последовательного приближения. Результат преобразования сохраняется в регистрах ADRESH, ADRESL (старший и младший  регистр ). Хотя каналов и несколько, но преобразование производится через коммутатор (некий переключатель каналов) , соответственно  в момент времени может преобразоваться только один канал и по завершению обработки результата можно приступать к следующему.

alt

Для настройки модуля аналого-цифрового преобразования в МК 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.

 

  • Для  начала процесса  аналого-цифрового преобразования (далее АЦП) выбираем  в регистре  ADCON1 линию порта (или несколько линий), на которую будем подавать  измеряемый сигнал и выбираем опорное напряжение, оно может быть как внутренним  (напряжение питания микроконтроллера, выводы Vcc, Vdd), так и внешним , подключенным к выводам порта «А» (AN3/Vref+, AN2/Vref-).  Выбор производится битами 3-0  PCFG3:PCFG0:  При этом, если выводы настраиваются как аналоговые входы, то необходимо установить соответствующие биты регистров TRIS..,т.е. настроить на вход.

В МК  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 - цифровая линия порта.

  • выбираем входной канал АЦП бит 5-3  CHS2:CHS0 регистра ADCON0.
  • выбрать источник тактовых импульсов для АЦП бит 7-6ADCS1:ADCS0 (ADCON0) и бит 6  ADCS2 (ADCON1) согласно таблице:

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МГц).

 

  • включаем модуль АЦП  установкой бита ADON регистра ADCON0.
  • при необходимости настраиваем прерывание  от модуля АЦП, для этого:
  • сбросить  флаг прерывания от модуля АЦП сбросом  бита  ADIF  регистра PIR1;
  • разрешить прерывания от модуля АЦП установкой  бита ADIE регистра PIE1;
  • разрешить  периферийные прерывания,  установкой бита PEIE регистра INTCON;
  • разрешить глобальные прерывания установкой бита  GIE  регистра INTCON.

 

  • выдержать необходимую паузу для зарядки конденсатора CHOLD .

После включения модуля АЦП необходимо определенное время для зарядки конденсатора 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 мкс..

  • начать  преобразование  установкой  бита GO/-DONE регистра  ADCON0 .
  • ожидать окончание преобразования. Ожидать сброса бита GO/-DONE регистра  ADCON0 (по окончанию преобразование бит сбросится) или если задействовано прерывания, то  ожидать прерывание от модуля АЦП, бит (флаг) ADIF  регистра PIR1.

На преобразования аналогового сигнала затрачивается 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" . 

 


ADCON0  Управляющий регистр модуля АЦП

 

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0
ADCS1  ADCS0 CHS2 CHS1    CHS0 GO/-DONE - ADON
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0

бит 7-6  ADCS1:ADCS0: Выбор источника тактового сигнала (биты ADCON0 выделены полужирным шрифтом)

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 генератор модуля АЦП)


 
бит 5-3  CHS2:CHS0: Выбор аналогового канала


000 = канал 0, (AN0)
001 = канал 1, (AN1)
010 = канал 2, (AN2)
011 = канал 3, (AN3)
100 = канал 4, (AN4)
101 = канал 5, (AN5)
110 = канал 6, (AN6)
111 = канал 7, (AN7)

Примечание.  В  микроконтроллерах PIC18F2x2 все 8 каналов  АЦП  не  реализованы.  Номера  не
реализованных  каналов  АЦП  зарезервированы.  Не  рекомендуется  выбирать  номер  не  реализованного
канала АЦП.

бит 2  GO/-DONE: Бит статуса модуля АЦП


           Если ADON=1
     1 = модуль АЦП выполняет преобразование (установка бита вызывает начало  преобразования)
           0 = состояние ожидания (аппаратно сбрасывается по завершению преобразования)

бит 1   Не используется: читается как ‘0’

бит 0  ADON: Бит включения модуля АЦП
           1 = модуль АЦП включен
           0 = модуль АЦП выключен и не потребляет тока

 


ADCON1  Управляющий регистр модуля АЦП

 

R/W-0 R/W-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0
ADFM  ADCS2 - - PCFG3 PCFG2 PCFG1 PCFG0
Бит7 Бит6 Бит5 Бит4 Бит3 Бит2 Бит1 Бит0


бит 7  ADFM: Формат сохранения 10-разрядного результата


           1 = правое выравнивание, 6 старших бит ADRESH читаются как ‘0’
           0 = левое выравнивание, 6 младших бит ADRESL читаются как ‘0’
 
 
бит 6  ADCS2: Выбор источника тактового сигнала (биты ADCON1 выделены полужирным шрифтом)
 

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 генератор модуля АЦП)

 
бит 5-4  Не используются: читаются как ‘0’


 
бит 3-0  PCFG3:PCFG0: Управляющие биты настройки каналов АЦП

 

 

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

A = аналоговый вход D = ц ифровой канал ввода/вывода

Read 2917 times Last modified on Воскресенье, 10 августа 2014 09:34

Все права принадлежат ChipMK.ru. При копировании материала ссылка обязательна. 2011-2017 © ChipMK.ru

ChipMk.ru Яндекс.Метрика
PRCY.ru