КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Аналого-цифровые преобразователи в PIC-микроконтроллерахВсе микроконтроллеры семейства PIC18 имеют встроенные многоканальные аналого-цифровые преобразователи (АЦП), используемые для преобразования аналогового входного напряжения в диапазоне от 0 до UDD (напряжение питания МК) в цифровой код. АЦП выдают 10-разрядный код, а число аналоговых каналов зависит от конкретного типа МК. Так, например, PIC18F242 имеет 6 аналоговых каналов. Для ввода аналоговых сигналов обычно используются линии порта А, которые требуется настроить на ввод. Реальная величина погрешности преобразования, характер использования выводов портов и скорость выполнения операций зависит от конкретного типа МК, а также тактовой частоты его работы. После запуска АЦП требуется определенное время, называемое временем преобразования, необходимое для преобразования аналогового входного напряжения в цифровой код. Изменение входного напряжения во время процесса преобразования вносит нежелательную погрешность в генерируемый выходной код. Для уменьшения этой погрешности на входе АЦП включают устройство выборки-хранения (УВХ), состоящее из аналогового ключа и запоминающего конденсатора. Модуль АЦП имеет внутренний делитель частоты, обеспечивающий деление тактовой частоты МК в 2, 4, 8, 16, 32 и 64 раза. Результат АЦ-преобразования запоминается в двух регистрах МК: старший байт в ADRESH и младший байт в ADRESL. Этот результат может размещаться в двух различных форматах, которые называются: с правым выравниванием; с левым выравниванием. В формате «с правым выравниванием» в шесть старших разрядах регистра ADRESH записываются нули, а в два младших разряда - соответственно два старших бита полученного результата. В формате «с левым выравниванием» восемь старших бит результата записываются в регистр ADRESH, а младшие биты результата запоминаются в регистре ADRESL. Библиотека функций управления аналогово-цифровым преобразователем компилятора С18 Функции компилятора С18 для АЦП
Рассмотрим вкратце библиотечные функции управления АЦП. OpenADC( ) – конфигурирует АЦП. Прототип функции: void OpenADC(unsigned char config, unsigned char config2); Аргументы функции: config – это бинарная маска, которая создается с помощью операции поразрядного И ( & ) со значениями от каждой категории, перечисленными далее. Источник тактирования АЦП: ADC_FOSC_2 Коэффициент деления частоты FOSC ADC_FOSC_4 генератора тактовых импульсов МК на ………………. 2, 4, 8, 16, 32, 64 ADC_FOSC_64 ADC_FOSC_RC Внутренний RC-генератор модуля АЦП Способ размещения результата АЦ-преобразования: ADC_RIGHT_JUST Правое выравнивание ADC_LEFT_JUST Левое выравнивание Источник опорного напряжения: ADC_1ANA_0REF AN0 – аналоговый вход, UREF+ = UDD, UREF- = USS ADC_1ANA_2REF AN0 – аналоговый вход, AN3 = UREF+, AN2 = UREF- ADC_2ANA_2REF AN0, AN1 – аналоговые входы, AN3 = UREF+, AN2 = UREF- ADC_3ANA_0REF AN0, AN1, AN3 – аналоговые входы, UREF+ = UDD, UREF- = USS config2 – это бинарная маска, которая создается с помощью опер-и поразрядного И ( & ) со значениями от каждой категории,переч-ми далее. Выбор канала АЦП: ADC_CH0 Канал 0 ADC_CH1 Канал 1 ADC_CH2 Канал 2 ……………………….. Прерывания от АЦП: ADC_INT_ON Прерывания разрешены ADC_INT_OFF Прерывания запрещены Пример записи функции OpenADC( ), OpenADC(ADC_FOSC_4 & ADC_RIGHT_JUST & ADC_1ANA_ 0REF, ADC_CH0 & ADC_INT_OFF); Эта функция задает тактирование АЦП от генератора МК, коэффициент деления частоты FOSC равен 4; правое выравнивание результата АЦ-преобр; один аналоговый вход AN0, опорные напряжения UREF+ = UDD, UREF- = USS ; выбирается канал 0 (вход AN0); запрещаются прерывания от АЦП. Следующая функция SetChanADC( ) выбирает канал, который будет использовать АЦП. Прототип функции: void SetChanADC(unsigned char channel); Аргумент функции: channel ADC_CH0 Канал 0 ADC_CH1 Канал 1 ADC_CH2 Канал 2 SetChanADC(ADC_CH0); Выбирается канал 0, т.е. аналоговый сигнал должен подаваться на линию AN0 (вывод RA0 порта А). Функция ConvertADC( ) осуществляет запуск (старт) АЦ-преобразования. Прототип функции: void ConvertADC(void); Функция BusyADC( ) – АЦП в данный момент выполняет преобр.? Прототип функции: char BusyADC(void); Эта функция возвращает значение 1, если АЦП выполняет преобразование (АЦП занят), и возвращает значение 0, если АЦП не выполняет преобразование (АЦП свободен). Функция ReadADC( ) – чтение результата АЦ-преобразования. Прототип функции: int ReadADC(void); Эта функция возвращает двухбайтное число, в котором размещается 10-разрядный код АЦП. Он размещается в младших или старших разрядах числа в соответствие с параметром, заданным в функции OpenADC( ). Функция CloseADC( ) – отключение АЦП. Прототип функции: void CloseADC(void); выбрать канал для ввода аналог-го сигнала с помощью функции SetChanADC( ); выполнить задержку на время 20 мкс для заряда конденсатора схемы выборки-хранения; запустить преобразование с помощью функции ConvertADC( ); производить периодический опрос готовности данных АЦП с помощью функции BusyADC( ); в случае готовности данных считать результат АЦ-преобразования с помощью функции ReadADC( ).
|