Монитор окружающего освещения: понимание и внедрение adc

Монитор окружающего освещения: понимание и внедрение adc
Монитор окружающего освещения: понимание и внедрение adc
Anonim

Монитор окружающего света: понимание и реализация АЦП

Часть 2 в серии «Как сделать монитор окружающего света»

Рекомендуемый уровень

Новичок / Intermediate

Предыдущие статьи в этой серии

Монитор окружающего освещения: отображение измерений на ЖК-дисплее

Требуемое оборудование / программное обеспечение

  • Плата оценки SLFK2000A EFM8
  • Интегрированная среда разработки Simplicity Studio
  • Компоненты, перечисленные в спецификации:
Описание Количество Digi-Key p / n
макетировать 1 377-2094-ND
Провода перемычки между розетками 3 1471-1231-ND
Резисторы 100 кОм 2 100KQBK-ND

Обзор проекта

Наш интеллектуальный монитор окружающего света должен будет оцифровать и проанализировать сигналы от оптического детектора, поэтому пришло время изучить интегрированные функции аналого-цифрового преобразования EFM8. Заманчиво рассматривать АЦП как волшебную коробку, которая плавно преобразует аналоговый сигнал напряжения в двоичное число всякий раз, когда мы переворачиваем правый бит в регистре управления АЦП, но такой поверхностный подход является рискованным. В технике, как и в жизни, тщательное и продуманное понимание этого вопроса - это страхование от тонких, уклончивых проблем в будущем. Таким образом, этот проект послужит руководством для использования встроенного АЦП EFM8 и понимания его архитектуры и интерфейса сигналов.

Существует более чем один способ превратить напряжение в последовательность бит в регистре. Общие параметры АЦП включают топологию конвейера, сигма-дельта и последовательный регистр аппроксимации (SAR). АЦП EFM8 относится к разновидности SAR. Эта архитектура может быть описана как «общая цель». АЦП Sigma-delta предпочтительнее для приложений с очень высоким разрешением, а конвейерные АЦП обеспечивают более высокую частоту дискретизации. АЦП SAR подходят для частотной дискретизации среднего и высокого разрешения и от среднего до высокого, и они часто интегрируются в микроконтроллеры, поскольку эта архитектура компактна и совместима с маломощными проектами. Упрощенная функциональная диаграмма SAR заключается в следующем:

Image
Image

Регистр АЦП начинается с самого младшего бита высокий логический уровень, а остальные логики низкой, так что ЦАП изначально создает напряжение, которое половину опорного напряжения. MSb поддерживается высоким или установленным низким в зависимости от выхода компаратора, и этот процесс повторяется через все биты, пока значение регистра ADC не соответствует аналоговому входному напряжению. Самые важные вещи, которые нужно убрать прямо сейчас, это (1), что АЦП является синхронным - один бит регистра обновляется для каждого цикла входных часов и (2), что аналоговое входное напряжение сохраняется в образце и удержании во время процедуры SAR.

Время АЦП

Рассмотрим следующую временную диаграмму для ADC EFM8:

Image
Image

Здесь представлены два режима: «режим отложенного отслеживания» и «нормальный режим». Мы будем использовать нормальный режим в этом проекте, а режим задержки отслеживания кратко обсуждается в заключении этой статьи. В этом случае преобразование инициируется путем записи его в бит ADBUSY (есть другие способы запуска преобразования), и тогда процедура преобразования регулируется SAR-часами. Эта диаграмма должна помочь вам понять, что нет простого ответа на вопрос «сколько времени занимает конверсия» или «какая максимальная частота дискретизации». Продолжительность процесса преобразования определяется частотой SAR-часов и зависит ли АЦП от 8, 10 или 12 бит, а максимальная частота дискретизации зависит от продолжительности конверсии и количества времени отслеживания до начинается процедура преобразования.

Время отслеживания и время установления

EFM8 включает только один модуль АЦП, но этот один модуль АЦП может быть подключен к одному из 20 разных портов, установив соответствующие биты в регистре, который управляет аналоговым мультиплексором. Вы также можете подключить АЦП к различным внутренним сигналам, таким как земля, V DD и выход встроенного датчика температуры. Эта ценная функция мультиплексора значительно повышает гибкость и полезность АЦП, но также приводит к важной проблеме: времени установления. Рассмотрим следующую диаграмму, представляющую входной каскад АЦП:

Image
Image

Когда мультиплексор закрывает соединение между определенным контактом и входной схемой АЦП, аналоговое напряжение на штыре начинает заряжать конденсатор пробоотборника через сопротивление мультиплексора. Другими словами, фактический сигнал, подаваемый в АЦП, представляет собой экспоненциально возрастающее напряжение, определяемое постоянной времени RC входного каскада. Если вы инициируете процесс преобразования слишком быстро после установки мультиплексора, результат преобразования будет слишком низким. Эта проблема ухудшается, если у вас есть значительное сопротивление последовательно с входным контактом АЦП, потому что это способствует общему входному сопротивлению и увеличивает напряжение на образце C медленнее к окончательному значению. «Время установления» относится к тому, сколько времени требуется для того, чтобы входное напряжение достигло конечного значения, а «время отслеживания» относится к тому, как долго вы позволяете устанавливать напряжение до начала преобразования. Ясно, что если вы хотите получить точные измерения, время отслеживания должно превышать время установления.

Целью этого проекта является выполнение аналого-цифровых преобразований таким образом, чтобы продемонстрировать влияние времени установления АЦП. Мы используем макет, некоторые концевые провода перемычек и два резистора:

Image
Image

Провода перемычек соединены с соответствующими штифтами на расширительном коллекторе:

Image
Image

Эта простая схема посылает постоянный 1, 65 В в АЦП. Большие резисторы облегчают наш анализ, преувеличивая влияние входной емкости АЦП.

Порт ввода-вывода

Конфигурация ввода-вывода портов такая же, как и в предыдущей статье, за исключением того, что P1.1 настроен как аналоговый вход.

Image
Image

Периферийные устройства и прерывания

SPI настроен так же, как в предыдущей статье. Timer4 снова используется для коротких задержек (порядка микросекунд), и теперь у нас также есть Timer3 для длительных задержек (порядка миллисекунд или секунд).

Image
Image

Нам нужно включить встроенный низкочастотный генератор (сокращенный LFOSC), если мы хотим, чтобы он служил источником синхронизации для Timer3.

Image
Image

АЦП включен и настроен следующим образом:

Image
Image

Мы используем EFM8 в внутреннее опорное напряжение, установленный до 2, 4 В:

Image
Image

Прерывание SPI включено, поскольку передача SPI управляется конечным автоматом в процедуре обслуживания прерываний SPI. Прерывание прерываний после каждого байта передается. Для этого проекта мы также включаем «полное прерывание преобразования ADC0». Как вы могли догадаться, это прерывание указывает, что регистр ADC содержит новое значение преобразования, которое готово к обработке.

Прошивка

Новая прошивка в этом проекте состоит из простой процедуры обслуживания прерываний для АЦП и кода в «AmbientLightMonitor_main.c», которые мы используем для управления значениями преобразования АЦП и процесса.


ADCFactor = (float)ADC_VREF_MILLIVOLTS/ADC_2POWER10; for(delay = 0; delay < 16; delay+) { //connect the ADC input to ground SFRPAGE = ADC0_PAGE; ADC0MX = ADCMUXIN_GND; //delay about 20 us SFRPAGE = TIMER4_PAGE; TMR4L = 0; while(TMR4L < 40); //connect the ADC input to P1.1 and initiate a conversion /*the delay between setting the multiplexer and starting the conversion increases with each loop iteration*/ SFRPAGE = ADC0_PAGE; ADC0MX = ADCMUXIN_P1_1; SFRPAGE = TIMER4_PAGE; TMR4L = 0; while(TMR4L < delay); SFRPAGE = ADC0_PAGE; ADC0CN0_ADBUSY = START_CONV; //wait until the conversion is complete while(ADC_CONV_COMPLETE == FALSE); ADC_CONV_COMPLETE = FALSE; //Retrieve the 10-bit ADC value, convert it to a voltage amplitude, and display the measurement SFRPAGE = ADC0_PAGE; RawADCResult = ADC0; ADCMeasurement = RawADCResult*ADCFactor; ConvertMeasurementandDisplay(VOLTAGE, ADCMeasurement); //delay for about 1 second SFRPAGE = TIMER3_PAGE; TMR3 = 0; while(TMR3 < 10000); }

Скачать код

Цель этого кода - повторить выбор входного напряжения, причем каждый образец позволяет увеличить время между настройкой мультиплексора и инициированием преобразования. Перед каждым преобразованием мультиплексор сначала сконфигурирован для подключения заземления для разрядки любого напряжения на образце С. Первое преобразование использует минимально возможное время отслеживания, потому что преобразование инициируется сразу после установки мультиплексора для P1.1. Следующие 16 преобразований выполняются в цикле for, а время отслеживания увеличивается на 500 нс с каждой итерацией. Каждое измерение отображается на ЖК-дисплее после применения стандартной формулы для интерпретации значений АЦП в качестве физических измерений:

Image
Image

После каждой конверсии включается односекундная задержка, так что у нас есть время наблюдать и оценивать измерения.

Анализ

Сначала мы будем использовать LTSpice для прогнозирования напряжения на образце C, предполагая, что наша схема следующая:

Image
Image

Вот результаты:

Image
Image

Как и ожидалось, мы имеем экспоненциально возрастающее напряжение, которое приближается к номинальному значению 1, 65 В в соответствии с общей постоянной времени RC схемы. Теперь давайте запустим прошивку (см. Видео ниже). Мы видим, что отображаемое измерение постепенно увеличивается по мере увеличения времени отслеживания; первое измерение составляет 1, 04 В, потому что напряжения ниже этого уровня происходят во время неизбежных задержек, связанных с выполнением инструкций ЦПУ и синхронизацией с логикой SAR. Ваша интуиция должна сказать «экспоненциальный рост», поскольку вы наблюдаете, что увеличение количества от одного измерения до следующего постепенно уменьшается со временем. Если мы построим 17 измерений, предполагающих шаг времени 490 нс между образцами, мы получим следующее:

Image
Image

Приятно видеть, что форма кривой соответствует экспоненциальному росту. Однако в измеренных данных время, необходимое для увеличения от 1 В до 1, 6 В, составляет около 4 мкс, тогда как симуляция прогнозирует 640 нс. Почему главное несоответствие? Во-первых, входной каскад АЦП, используемый в симуляции, основан на идеальных значениях и не учитывает дополнительные источники импеданса. Замечание по применению Silicon Laboratories указывает на то, что более реалистичная модель входного каскада АЦП составляет 5 кОм последовательно с 10 пФ, вместо 550 Ом последовательно с 5 пФ. Если мы используем эти значения в моделировании, разница во времени от 1 В до 1, 6 В составляет 1, 4 мкс. По-прежнему существует значительное расхождение между 4 мкс и 1, 4 мкс; чтобы сделать экспериментальные и смоделированные результаты согласованными, нам необходимо включить паразитную емкость, внешнюю по отношению к модулю АЦП. Если мы предположим, что на входном штыре 20 пФ паразитной емкости (это значение указано в таблице данных), а еще 2 пФ от соединительной площадки, трассы печатной платы или любых других источников, мы имеем следующую эквивалентную схему:

Image
Image

Внешняя емкость не может быть просто добавлена к емкости дискретизации, так как внешняя емкость полностью заряжается, когда мультиплексор закрывает переключатель. Вместо этого напряжение на образце С очень быстро возрастает по мере того, как внешняя емкость разряжается через R MUX, а затем, когда напряжение на образце C соответствует напряжению на внешнем C, напряжение на образце C растет намного медленнее, чем в предыдущем моделировании, поскольку доступный ток должен заряжать 32 пФ вместо 10 пФ. Как указано метками курсора на следующем графике, время, необходимое для увеличения напряжения от 1 В до 1, 6 В, теперь составляет 3, 8 мкс, что хорошо согласуется с нашим экспериментальным значением около 4 мкс.

Image
Image

резюмировать

Мы успешно внедрили функциональность ADC EFM8 и в то же время изучили ограничения, связанные с сопротивлением и емкостью на входном этапе АЦП. Большие резисторы, используемые в нашем делителе напряжения и эффект внешней паразитной емкости, напоминают нам, что внешняя цепь влияет на время установления. АЦП EFM включает в себя задержанный режим слежения (упомянутый выше), который включает в себя период отслеживания 4 тактовых цикла SAR, но вы не можете всегда полагаться на задержанный режим слежения, потому что эта 4-часовая задержка может быть недостаточной, если внешняя схема содержит большие количества сопротивление. Таким образом, точные измерения АЦП зависят от понимания того, как ваша схема взаимодействует с входным каскадом АЦП, а затем обеспечивает достаточную задержку между выбором входа АЦП через мультиплексор и инициированием преобразования.

видео

Следующая статья в серии: Монитор окружающего света: измерение и интерпретация уровней окружающего света

Попробуйте этот проект сами! Получить спецификацию.