В большинстве микроконтроллеров используется 8- или 10-битная матрица конденсаторов. Теоретически этот метод можно легко применить и для преобразования с большей разрядностью, однако на практике при этом возникают проблемы, связанные с согласованием конденсаторов большей емкости. Кроме того, наличие помех от работы внутренних логических узлов приводит к тому, что в подавляющем большинстве процессоров разрядность модуля АЦП ограничивается 12 битами. Также выпускаются внешние быстродействующие АЦП последовательного приближения разрядностью больше 12 бит, но они обычно используют наборы резисторов, соединенные по лестничной схеме, и относительно дороги (по сравнению с 8-битными микроконтроллерами).
Разброс емкостей конденсаторов, напряжения смещения, сопротивление внутренних ключей, токи утечки, а также нелинейность характеристики аналогового компаратора — все это является причиной погрешностей, возникающих при преобразовании. Анализ различных методик измерения указанных погрешностей выходит за рамки данной книги, однако в документации на любую микросхему АЦП (или модуль АЦП микроконтроллера) приводится список источников этих погрешностей и их величины, выраженные в единицах младшего значащего бита (LSB). Так, в справочных данных модуля 10-битного АЦП микроконтроллера PIC16F675 указано, что его суммарная абсолютная погрешность составляет ±1 LSB. Это гарантирует монотонность передаточной характеристики, т. е. что при любом приращении входного напряжения изменение двоичного кода никогда не произойдет в обратном направлении. Эта ошибка нормируется при
В микроконтроллере PIC12F675, а также в моделях линейки PIC16F87X имеется интегрированный модуль 10-битного АЦП. В более старых устройствах, таких как PIC16F73, использовался 8-битный вариант этого модуля, очень похожий по своей структуре и принципу работы на своего старшего 10-битного собрата, показанного на Рис. 14.11, который мы и будем рассматривать. Модули АЦП во всех микроконтроллерах PIC используют наборы конденсаторов с параметрами, указанными выше. Однако, с точки зрения пользователя, подробности процесса преобразования гораздо менее важны, нежели вопросы практического использования этого модуля.
Во всех микроконтроллерах с АЦП на входе последнего расположен аналоговый мультиплексор. Это позволяет программе обрабатывать до восьми аналоговых сигналов, по одному в каждый момент времени. Два регистра управления позволяют выбрать конкретный канал и определяют источник тактового сигнала. Кроме того, с помощью этих регистров можно сконфигурировать соответствующие выводы микроконтроллера как аналоговые (состояние по умолчанию после подачи питания) или цифровые, а также задать конфигурацию источника опорного напряжения. Преобразование инициируется установкой бита
Разобьем наше описание модуля АЦП на две части. Сначала рассмотрим процесс инициализации и конфигурирования модуля, а уже только потом — собственно процесс преобразования.
Инициализация
При конфигурировании модуля необходимо учитывать следующие моменты:
1. Каким образом можно включить модуль?
2. Как следует тактировать модуль?
3. Какие каналы требуется использовать?
4. Хватит ли 8-битного результата?
Все эти опции задаются с помощью регистров управления АЦП ADCON0 и ADCON1[181].
ADON (включение модуля АЦП)
После подачи питания на микроконтроллер модуль АЦП находится в выключенном состоянии. Для его включения необходимо записать 1 в бит ADON (ADCON[0]). Включенный модуль потребляет в среднем 220 мкА (PIC16F87X), даже не осуществляя преобразований. Поэтому в тех случаях, когда энергопотребление микроконтроллера является критичным фактором, модуль АЦП следует выключать (если, разумеется, он не используется в программе). Обратите внимание, что бит
Рис. 14.11.
ADCS[1:0] (выбор тактового сигнала АЦП)