- настроить выводы портов А и В на: ввод – для аналоговых каналов и опорных напряжений Vref в соответствии с конкретной задачей, на ввод / вывод для цифровых каналов (см. регистр ADCON1 ),
- выбрать входной канал аналогового сигнала (см. регистр ADCON0),
- выбрать источник тактовых сигналов для преобразователя (регистр ADCON0),
-включить модуль АЦП («1» в 0 разряд регистра ADCON0),
2. Настроить прерывание от модуля АЦП, если это необходимо:
- сбросить бит ADIF (регистр PIR1) в «0»,
- установить бит ADIE (регистр PIE1) в «1»,
- установить бит PEIE (регистр INTCON) в «1»,
- установить бит GIE (регистр INTCON) в «1»,
3. Выдержать паузу для зарядки входного конденсатора АЦП (см. ниже).
4. Начать аналого-цифровое преобразование: установить бит GO/-DONE (регистр ADCON0) в «1».
5. Ожидать окончания преобразования:
- ожидать сброса бита GO/-DONE,
или
- обработать прерывание по окончанию преобразования.
6. Считать результат преобразования из регистра ADRESH – старший байт двоичного числа, из регистра ADRESL – младший байт, сбросить бит ADIF (регистр PIR1)/
7. Для следующего преобразования необходимо:
- сделать выдержку не менее 2TAD, где TAD – время одного преобразования,
- повторить этапы, начиная с пункта 1 или 2.
2.3.2.Временные требования к работе модуля АЦП.
На входе модуля имеется накопительный конденсатор CHOLD, необходимый для стабилизации входного сигнала на время преобразования. Поэтому перед включением преобразования необходимо сделать выдержку. Расчетная схема входной части модуля приведена на рис. Временную задержку можно рассчитать по формуле:
TACQ = TAMP + TC + TCOFF , где:
TAMP – время задержки входного усилителя модуля,
TC - время заряда конденсатора CHOLD,
TCOFF – температурный коэффициент.
TAMP = 2MKC;
Tc = CHOLD (RIC + RSS +RS) Ln(1/2047); где:
RIC – входное сопротивление модуля = 1ком,
RSS - входное сопротивление канала = 7ком,
RS – максимальное рекомендуемое внутреннее сопротивление источника аналогового сигнала 10ком.
TCOFF = [(t – 25) (0,05 / t)], где: t температура окружающей среды в градусах.
При подстановке приведенных данных можно получить следующее значение выдержки:
TACQ = 2 + 16,47 + 1,25 = 19,72 мкс.
После очередного преобразования необходимо также сделать выдержку длительностью не менее 2TAD, где TAD – время работы модуля для получения одного бита выходного кода, зависит от частоты входных импульсов преобразователя. Значения TAD для различных режимов приведены в таблице 21.
Таблица 25.
TAD | FOSC | |
Режим | Значения битов ADCS1:ADCS0 | Максимальное значение частоты |
2TOSC | 00 | 1,25МГц |
8TOSC | 01 | 5МГц |
32TOSC | 10 | 20МГц |
2-6 мкс (RC-генератор модуля АЦП) | 11 | (см. характеристики модуля) |
2.3.4. Последовательность преобразования аналогового сигнала.
Преобразование начинается после установки в «1» бита G0/-DONE (бит 2) в регистре ADCON0. Последовательность операций приведена на рис. После окончания преобразования результат перепишется в регистры ADRESH и ADRESL, где могут быть прочитаны программно. Перед следующим преобразованием необходимо дать выдержку не менее 2TAD.
2.3.5. Выравнивание результата преобразования.
Поскольку модуль АЦП 10 – разрядный, а результат преобразования хранится в двух спаренных 8 – разрядных регистрах, то окончательный результат преобразования можно «выравнять», как показано на рис. 16. Вид выравнивания задается битом ADFM (бит 7) регистра ADCON1 (адрес 9Fh): при ADFM =1 результат преобразования хранится в регистре ADRESL – восемь младших разрядов и регистре ADRESH – два старших разряда цифрового кода преобразования, шесть старших разрядов регистра ADRESH равны 0, при ADFM = 0 результат преобразования хранится в регистре ADRESH – восемь старших разрядов и в регистре ADRESL – два младших разряда цифрового кода, шесть младших разрядов регистра ADRESL равны 0.
бит9 бит8 бит7 бит6 бит5 бит4 бит3 бит2 бит1 бит0 бит0 |
Начало преобразования |
Отключение конденсатора СHOLD |
Установка в «1» бита GO/-DONE |
Загрузка результата в регистры ADRESH и ADRESL, Сброс бита GO/-DONE в «0», Установка бита ADIF в «1» в регистре PIR1 (бит 6), Подключение конденсатора CHOLD к аналоговому входу. |
Рис.16. |
TAD0 TAD1 TAD2 TAD3 TAD4 TAD5 TAD6 TAD7 TAD8 TAD9 TAD10 TAD11 |
2.3.6. Работа модуля АЦП в SLEEP режиме.
Модуль АЦП можно запустить в работу в SLEEP с целью экономии энергопотребления, при этом в качестве генератора тактовых импульсов должен быть выбран внутренний RC-генератор (биты ADSC1:ADSC0 =11). После завершения преобразования аппаратно сбрасывается бит пуска преобразования GO/-DONE (бит 2 в регистре ADCON0) и если был установлен режим обслуживания прерывания, то микроконтроллер выйдет из SLEEP режима и обработает прерывание. Повторный запуск SLEEP режима может быть осуществлен подпрограммой обработки прерывания. Если режим обслуживания прерывания изначально не был установлен, то после окончания прерывания модуль АЦП выключается, хотя результат преобразования сохраняется в регистрах ADRESH:ADRESL и бит включения модуля ADON остается установленным. То есть работа может быть продолжена, если микроконтроллер будет выведен из SLEEP режима другим способом, например, внешним прерыванием.
Правое выравнивание |
7 6 5 1 0 7 6 |
10 – разрядный результат преобразования |
ADFM=1 |
ADFM=0 |
2 1 0 7 6 1 0 |
0…...0 |
0…….0 |
ADRESH ADRESL |
ADRESH ADRESL |
10 – разрядный результат |
10 – разрядный результат |
Рис. 17. Схема формирования результата преобразования. |
Левое выравнивание |
2.3.7. Пример программирования модуля АЦП.
Описание задачи.
Измерить силу тока в цепи якоря двигателя постоянного тока. Допустимая сила тока по паспорту двигателя составляет 10А.
1. Схема эксперимента:
Якорь |
Uпит.. |
U вых. |
R ш. |
Рис.18 Схема измерения тока якоря двигателя. |
В качестве датчика тока используем стандартный шунт Rш, рассчитанный на максимальный ток 10А и выдающий при этом токе напряжение на выходе U вых. = 0,75mV.
Схема подключения в этом случае имеет вид:
АЦП |
К |
С HOLD |
ADRESH |
ADRESL |
Микроконтроллер |
Рис.19. Схема измерения тока двигателя. |
U вх.(Uвых.) |
Выходной код АЦП |
Коммутатор каналов АЦП |
Текст программы:
#define XTAL_FREQ 4MHZ
#define byte unsigned char
#define word unsigned int
#include <pic.h>
#include <stdio.h>
__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);
void main() {
TRISA = 0x01; // RA0 на выход
ADCON0 = 0x41; // настройка АЦП
ADCON1 = 0X80
OPTION = 0x08; // настройка TMR0
TOIF = 0; // сброс флага TMR0
TMR0 = 0x13; // пуск TMR0 //задержка на таймере TMR0 lkz pfhzlrb
for(; !TOIF ;) { } // ожидание срабатывания таймера
ADIF = 0; // сброс флага АЦП
GO/-DONE = 1; // пуск АЦП
for (;!ADIF ;) { } // ожидание конца преобразования АЦП
TXREG = ADRESH; // передача в USART старшего байта АЦП
TXREG = ADRESL; // передача в USART младшего байта АЦП
} // конец main
Примечания:
1. Настройку модуля USART см. в соответствующем разделе.
2. Настройка АЦП:
а. ADCON0: 0x41 (двоичный код 01000001)
Биты <7,6> = 01 – источник тактового сигнала Fosc /8
Биты <5,4,3> = 000 – выбран для аналогового входа канал 0
Бит <2> = 0 - преобразование не запущено
Бит <1> - не используется
Бит <0> = 1 - модуль АЦП включен
б ADCON1: 0x80 (двоичный код 10000000)
Биты <3,2,1,0> = 0000 – все входы аналоговые, в качестве опорного напряжения применяется напряжение питания микроконтроллера Vdd , Vss/
Бит <7> = 1 – выбрано правое выравнивание по следующим соображениям.
Максимальное входное напряжение не превышает напряжение питания т.е. 5вольт, что соответствует выходному коду АЦП равному 03FFh. В нашем случае максимальное входное напряжение не превышает 0,075 вольт, что соответствует выходному коду АЦП равному 0Fh, т.е. диапазон выходных кодов АЦП полностью размещается в младшем байте выходного регистра АЦП.
в. В зависимости от версии компилятора программного комплекса MPLAB могут быть различные варианты оператора пуска АЦП: GO/-DONE, GODONE, GO.
Дата: 2019-04-23, просмотров: 289.