Автор: Антон
В этой статье пойдет речь об интегральной схеме AD7142 фирмы Analog Devices, которая предназначена для построения сенсорных клавиатур, полос и колес прокрутки высокого разрешения. Данный чип так же имеет возможность совмещения вышеперечисленных устройств на одной плате.
Краткие ТХ:
- Максимальный период обновления данных - 36 мс;
- Разрешение - 1 фФ (фемтофарад);
- Количество каналов для сенсоров - 14;
- Все настройки выполняются посредством внутренних средств чипа, какие-либо внешние корректирующие цепи не требуются;
- Встроенные возможности автоматической калибровки чипа под изменяющиеся условия окружающей среды (влажность, температура, загрязнения клавиатуры), а так же автоматическая настройка чувствительности каждого сенсора в отдельности, под различные размеры пальцев пользователей;
- В зависимости от модификации, микросхемы доступны с двумя интерфейсами - SPI и I²C, в данной статье рассмотрена работа с микросхемой, оснащенной интерфейсом SPI;
- Возможность работы интерфейса на пониженном напряжении - до 1,8 В;
- Вывод для генерации прерываний во внешнем обрабатывающем контроллере;
- Вывод индикации прерываний (GPIO);
- Напряжение питания чипа 2,6-3,6 В (номинальное 3,3 В);
- Ток потребления в полнофункциональном режиме около 1 мА, в спящем режиме - 50 мкА.
Примечание: В документации на AD7142 написано, что предельная частота интерфейса SPI - 5 МГц, читать дальше я не стал, поскольку знаю как работает этот протокол и недолго думая задал ближайшую возможную частоту обмена 4 МГц - обмен данными происходил крайне неустойчиво, с большим количеством ошибок и потерь данных. Причину искал неделю - не мог понять причины сбоев. Чего только не проверил. Дело оказалось в следующем - внимательно изучив раздел документации о работе встроенного в микросхему интерфейса SPI обратил внимание на то, что судя по значениям таймингов - предельная частота интерфейса 2,5 МГц, а не 5 МГц, как написано! После задания частоты синхронизации в 2 МГц микросхема заработала как часы. Внимательно читайте документацию, особенно на такие непростые микросхемы.
Данная микросхема в первую очередь предназначена для работы в портативных устройствах: мобильные телефоны, пульты ДУ, но ничто не мешает применить её и в стационарных устройствах. Когда всё же дошли руки до практического использования купленной когда-то «на будущее» микросхемы, то возникли сложности:
1) Полное отсутствие каких-либо практических наработок в сети, касаемо AD7142;
2) «Труднопаябельный» корпус - 5 × 5 мм LFCSP_VQ.
С первым все ясно - нужно читать даташит, а со вторым пунктом были сложности, пришлось делать переходник, поскольку макетирование устройства в таком корпусе затруднительно. В последствии я оставил микросхему на переходнике, впаяв его в плату готовой клавиатуры.
Рисунок 1 - Переходник
Для начала немного общей информации о том, как это работает:
Рисунок 2 - Принцип работы ёмкостного сенсора
В AD7142 для измерения ёмкости используется метод шунтирования. Источник сигнала генерирует электрическое поле, силовые линии которого наводят в приемнике ЭДС, значение которой измеряется сигма-дельта АЦП с разрядностью в 16 бит. Как только палец или другой заземленный объект, появляется между приемником и передатчиком, часть силовых линий шунтируется, что приводит к изменению ЭДС на приемнике.
В общем виде механизм работы AD7142 выглядит следующим образом:
Рисунок 3 - Механизм работы AD7142
Настройки микросхемы позволяют активизировать до 12 стадий преобразования, каждая стадия имеет набор полностью независимых настроек. Подобный приём необходим, поскольку даже одинаковые на плате сенсоры будут иметь совершенно разные параметры, что связано с разной длиной дорожек, влиянием соседних деталей устройства и многими другими причинами. Так же это позволяет совмещать под управлением всего одной AD7142 разные виды сенсоров, например, обычные и дифференциальные кнопки, полосы и колёса прокрутки.
В качестве примера на рисунке 4 приведена схема матричной клавиатуры, подключенной к блоку управления с напряжением питания 5 В. Поскольку в AD7142 максимальное входное напряжение составляет 3,6 В, то пришлось делать согласование уровней на специализированных микросхемах MC74VHC125D. Естественно, можно применить детали попроще и подешевле, просто у меня в запасах были именно такие. Совсем бюджетный, но вполне работоспособный вариант - согласование с помощью резисторных делителей. Допустимый разброс логических уровней 10 %, потому делители даже на неподобранных резисторах с 5 % допуском работают без нареканий.
Рисунок 4 - Принципиальная схема
Теперь пора приступать к запуску. Для начала посмотрим на карту регистров AD7142:
Рисунок 5 - Карта регистров
После подачи питания необходимо выполнить следующие действия:
1) Включить питание, прочитать ID устройства из регистра №23 (в десятичном представлении) из банка 1;
2) В регистры банка 2 прописать конфигурации стадий преобразования;
3) В регистры 0-7 прописать конфигурацию схемы энергопотребления, режима работы прерываний и прочие ключевые функции;
4) Прописать число 0x0FFF в регистр по адресу 0x001;
5) Прочесть регистры с адресами 0x008, 0x009 или 0x00A;
6) Повторять шаг 5 при каждой обработке прерывания от AD7142.
После выполнения всего вышеуказанного - устройство начинает функционировать в штатном режиме.
Подробная пошаговая расшифровка всех шагов и побитное описание каждого регистра находится в приложениях к статье.
Так же мной было написано программное обеспечение для МК ATmega32 в среде CVAVR, позволяющее читать любой регистр AD7142, прописывать туда любые данные без перепрошивки управляющего МК. При этом новые значение автоматически прописываются и в EEPROM МК для того, чтобы после сброса МК или выключения питания прописывались изменённые значения регистров. Исходные коды ПО с подробнейшими комментариями так же находятся в приложениях.
На рисунке 6 проиллюстрировано, как можно настраивать AD7142 и просматривать содержимое регистров из меню устройства:
Рисунок 6 - Вход в меню настроек AD7142
На рисунке 7 изображен пример входа в меню, где можно в режиме реального времени просматривать значения различных регистров. В меню, показанном на средней картинке, можно просматривать текущие значения различных регистров для стадии преобразования «0», причем номер стадии можно задавать с пульта ДУ. При выборе, например, ADC_RES (ADC_Result - значения снимаемые с выхода АЦП, правая картинка) можно сразу смотреть результаты измерения для всех стадий. В данном случае отличается только цифра в стадии 0, поскольку в процессе изучения работы устройства «в железе» я задействовал только стадию 0.
Рисунок 7 - Вход в меню просмотра регистров
На рисунке 8 показано, как можно попасть в меню, из которого можно конфигурировать параметры каждой стадии преобразования. На правой картинке справа сверху черным выделен номер стадии, при его изменении с пульта, сразу выдаются номера соответствующих регистров AD7142, прописанные в них значения и подсказка, в каком банке регистров находятся эти значения, по каким адресам и в какую таблицу даташита необходимо обращаться за исчерпывающими разъяснениями.
Рисунок 8 - Вход в меню конфигурации параметров
На рисунке 9 показан пример конфигурации параметров запуска и работы чипа:
Рисунок 9 - Пример конфигурации параметров
На рисунке 10 изображено меню доступа к произвольному регистру, этот диалог появляется при попытке конфигурирования любого регистра из любого меню.
Рисунок 10 - Меню доступа к регистру
Приложения:
А) «Appnotes» (руководства по применению) от производителя - в них много полезной информации;
Б) «Example» - вложен сам пример из Appnote и документ, где переведены основные моменты из даташита (справочного листа), а также объяснено каждое действие, которое произведено в примере производителя;
В) «Additional» - здесь находится подробное руководство по конфигурированию аппаратного SPI для контроллеров серии ATmega;
Г) «Project» - здесь находятся исходные коды программного обеспечения;
Д) AD7142 datasheet.