Последовательный интерфейс AD7705 может работать в 3-проводном режиме, связывая вход CS низким таймингом. В этом случае линии SCLK, DIN и DOUT используются для связи с AD7705, а данные с DRDY можно получить путем опроса MSB регистра связи. Данная схема подходит для сопряжения с микроконтроллерами. Если CS требуется в качестве сигнала декодирования, он может быть сгенерирован из бита порта. Для интерфейсов микроконтроллера рекомендуется, чтобы SCLK работал на холостом ходу между передачами данных.
AD7705 можно также эксплуатировать с CS используемым как сигнал синхронизации рамки. Эта схема подходит для интерфейсов DSP. В этом случае первый бит (MSB) эффективно синхронизируется CS, потому что CS обычно происходит после падения края SCLK в интерфейсах DSP. SCLK может продолжать работать между передачами данных при условии, что номера синхронизации соблюдаются.
Последовательный интерфейс можно сбросить, выполнив вход сброса.
Он также может быть сброшен путем записи серии 1S на входной DIN. Если логика 1 записывается в линию AD7705 DIN не менее 32 последовательных тактов, последовательный интерфейс сбрасывается. Это гарантирует, что в 3-проводных системах, если интерфейс потерян из-за ошибки программного обеспечения или сбоя в системе, он может быть сброшен в известное состояние. Это состояние возвращает интерфейс туда, где AD7705 ожидают операции записи в свои регистры связи. Операция сама по себе не сбрасывает содержимое каких-либо регистров, но нужно производить настройку всех регистров снова, потому что информация, записанная в регистры, неизвестна из-за потери интерфейса.
Некоторые последовательные интерфейсы микропроцессора или микроконтроллера имеют одну последовательную линию данных. В этом случае можно подключить данные AD7705 и данные в строках вместе и подключить их к одной строке данных процессора. Подтягивающий резистор 10 кОм должен быть использован на этой одиночной линии данных. В этом случае, если интерфейс потерян, процедура сброса его обратно в известное состояние несколько отличается от описанной ранее, поскольку операции чтения и записи разделяют одну и ту же строку. Вместо этого требуется операция чтения 24 последовательных синхроимпульсов, за которой следует операция записи, где логика 1 записывается по крайней мере для 32 последовательных тактов, чтобы гарантировать, что последовательный интерфейс сбрасывается в известное состояние.
Настройка AD7705
AD7705 содержит шесть встроенных регистров, к которым можно получить доступ через последовательный интерфейс. Связь с любым из этих регистров начинается с первой записи в регистр связи. На рис. 7 показана блок-схема последовательности, используемой для настройки регистров после включения питания или сброса на AD7705;
Рисунок 7 Блок-схема для настройки и считывания с AD7705
Кроме того, на рис.7 показан ряд символов, которые следует записать в регистры для следующих условий работы: усиление 1, отсутствие синхронизации фильтра, биполярный режим, буфер выкл., тактовая частота 4,9512 МГц и выходная частота 50 Гц.
Интерфейс микроконтроллера
Гибкий последовательный интерфейс AD7705 позволяет легко взаимодействовать с большинством микрокомпьютеров и микропроцессоров.
Последовательный интерфейс способен работать от 3 проводов и совместим с протоколами интерфейса SPI. 3-проводная операция делает эти части идеальными для изолированной системы, в которой минимизация количества интерфейсных линий минимизирует количество оптико-изоляторов, необходимых в системе. Время подъема и падения других цифровых входов AD7705 не должно превышать 1 мкс.
Большинство регистров на AD7705 являются 8-разрядными регистрами, что облегчает взаимодействие с 8-разрядными последовательными портами микроконтроллеров. Регистр данных на AD7705 составляет 16 бит, а регистры смещения и усиления-24 бит, но передача данных в эти регистры может состоять из нескольких 8-битных передач в последовательный порт микроконтроллера. Процессоры DSP и микропроцессоры обычно передают 16 бит данных в последовательной операции передачи данных. Поскольку некоторые регистры в AD7705 имеют длину всего 8 бит, последовательные операции записи в два из этих регистров могут обрабатываться как одна 16-разрядная передача данных. Например, чтобы обновить регистр установки, процессор должен записать в регистр связи, чтобы указать, что следующая операция является записью в регистр установки, а затем записать 8 бит в регистр установки. Это может быть сделано в одной 16-разрядной передаче, потому что как только восемь последовательных синхроимпульсов операции записи в регистр связи завершены, эта часть немедленно настраивается для операции записи в регистр установки.
Алгоритм для конфигурации AD7705
В этом разделе показан алгоритм для сопряжения микроконтроллера Atmega328 с AD7705.
Примерная программа настраивает различные регистры на AD7705 и считывает 1000 образцов из одного канала в Atmega328. Условия установки со стороны такие же, как описано для схемы на рис. 7. В приведенном здесь примере кода вывод DRY опрашивается, чтобы определить, доступно ли новое допустимое слово в регистре данных.
Последовательность событий в этой программе:
1) Запись в регистр связи, выбор канала 1 в качестве активного канала и настройка следующей операции для записи в регистр часов
2) Запись в регистр тактового канала, установка в бит CLKDIV, который делит внешний тактовый канал на два внутренних. Это предполагает, что внешний кристалл составляет 4,9512 МГц. Частота обновления выбирается равной 50 Гц.
3) Запись в регистр связи выбор канала 1 в качестве активного канала и настройка следующей операции для записи в регистр установки.
4) Запись в регистр установки, устанавливая увеличение до 1, устанавливая биполярный режим, буфер, очищая синхронизацию фильтра, и начиная калибровку.
5) Опрос вывода DRDY.
6) Чтение данных из регистра данных.
7) Повторение шагов 5 и 6 (цикл) до тех пор, пока не будет взято заданное количество образцов из выбранного канала.
Библиотека AD7705/AD7706
Для взаимодействия с АЦП с микроконтроллером в работе используется специальная библиотека, которая подключается во время загрузки скетча на устройство. Она была несколько модифицирована, для более удобной работы с ней. Библиотека работает в своем базовом состоянии, но для этого требуется углубленные знания базового чипа, что несколько затрудняет ее использование. Большинство проблем можно решить, отрегулировав время в пользовательском коде, но это весьма сложно для пользователей, которые не знакомы с чипом. Было решено добавить следующие функции, которые призваны облегчить использование библиотеки.
Одним из изменений исходного кода является добавление функции готовности данных. Эта функция запрашивает бит в регистре связи и возвращает true, когда бит готовности данных очищается.
Используя эту функцию, осуществляется задержка, пока преобразованные данные будут готовы, прежде чем считывать результат преобразования (без использования оператора delay):
В ReadADResult добавлен дополнительный параметр refOffset смещения. Если Vref-не привязан к земле, можно использовать эту переменную для установки напряжения смещения, которое будет вычитаться из результата преобразования. Режим работы по умолчанию - биполярный. Для AD7705 и AD7706 разница между униполярной и биполярной работой заключается в том, как ссылается входной сигнал, поэтому, установив режим ввода на биполярный, все равно можно измерять униполярные напряжения. Все, что нужно, это привязать Vref - к земле и оставить refOffset со значением по умолчанию (т. е. 0).
Также добавлена функция сброса reset. Вызывая эту функцию сначала в коде настройки, гарантированно чип приводится в известное состояние. Некоторые из трудностей, с которыми сталкиваются при использовании оригинальной библиотеки, заключаются в том, что в зависимости от того, как работает система, AD770x может быть не в согласованном режиме, и поэтому результаты A/D кажутся случайными. Сброс микросхемы может быть достигнут с помощью пин-кода RESET или кода возврата. Реализация в коде является желаемым методом, если не нужна максимальная производительность. Еще одним преимуществом является то, что эта реализация требует на один вывод MCU меньше, чем стандартная библиотека AD770X.
Более того, было добавлено несколько параметров в альтернативный конструктор. Например, для конфигурации настроек коэффициента усиления/скорость, для этого используется альтернативный конструктор.
Разработка пользовательского ПО
Для написания непосредственно ПО, которое будет обрабатывать полученные с МК данные в удобный для пользователя вид, был выбран высокоуровневый язык программирования Python. Он является динамически типизированным и поддерживает несколько парадигм программирования, включая процедурное, объектно-ориентированное и функциональное программирование. Python включает в себя большое количество библиотек, которые делают из него мощный инструмент для разработки.
Для работы с этим языком достаточно использовать консольный редактор текста, например vim, sed или nano. И запускать программы файлы также через консоль официальный компилятором. Но это довольно не удобно и замедляет процесс отладки кода. Поэтому разумнее также, как и с прошивкой использовать IDE.
На сегодняшний день существует достаточное количество ПО. Но почти каждое может узко специализироваться под конкретную задачу.
1) Komodo IDE- это многоязычная IDE, разработанная Active State, предлагающая поддержку Python, PHP, Perl, Go, Ruby, веб-разработки (HTML, CSS, JavaScript) и многое другое. Продукт оснащен интеллектуальным автозаполнением и рефакторингом. Он также предоставляет инструменты для отладки и тестирования. Платформа поддерживает несколько форматов управления версиями, включая Git, Mercurial и Subversion, среди прочих.
2) Codenvy-это IDE основанная на инструменте с открытым исходным кодом Eclipse Che. Она разработана и поддерживается компанией Red Hat. Codenvy бесплатно для небольших команд (до трех пользователей). Инструмент сочетает в себе функции среды IDE и функции управления конфигурацией в одной среде на основе браузера. Рабочие пространства являются контейнерным, защищая их от внешних угроз. Функции разработчика включают в себя полностью функционирующую среду IDE, автозаполнение, проверку ошибок и отладчик.
3) Но общепризнанным лидером считается PyCharm от компании JetBrains. Это ПО, которое предлагает актуальные передовые функции, такие как интеллектуальное редактирование кода и интеллектуальная навигация по коду. PyCharm предоставляет готовые инструменты разработки для отладки, тестирования, и что главное в этом проекте развертывания. Оно доступно для всех современных операционных систем компьютеров и может быть настроено под высокие требования задачи путем добавления плагинов. Этот софт и был выбран в качестве инструмента разработки.
Разработка и тестирование макета оптического датчика перемещений
Аппаратная часть
Для создания макета была выбрана плата Arduino UNO, работающая на базе выбранного в разработке микроконтроллера. Данная плата удобна тем, что представляет собой микроконтроллер со всей обвязкой, при этом стоимость платы ниже, чем отдельного контроллера и обвязки. Кроме того, она обладает удобными разъемами для подключения периферии и встроенными isp программатором и USB-TTL модулем. В качестве АЦП взята выбранная модель, но в составе готового модуля с обвязкой, который тоже обходится дешевле, чем самостоятельная сборка такового. Измерительный модуль выполнен без изменений.
Программная часть
Для программной части требуется настройка частоты считывания данных с АЦП. Данная операция осуществляется по средствам изменениям строки
init(channel, CLK_DIV_1, BIPOLAR, GAIN_1, UPDATE_RATE_100);
В библиотеке AD7705.
Стандартные значение заложенные в нее:
· UPDATE_RATE_20
· UPDATE_RATE_25
· UPDATE_RATE_50
· UPDATE_RATE_60
· UPDATE_RATE_100
· UPDATE_RATE_200
· UPDATE_RATE_250
· UPDATE_RATE_500
Также она позволяет изменить усиление АЦП в следующем диапазоне
· GAIN_1
· GAIN_2
· GAIN_4
· GAIN_8
· GAIN_16
· GAIN_32
· GAIN_64
· GAIN_128
Но для снятия показаний с оптического датчика это не используется
После сборки макеты было проведено множество тестов. Было установлено, что система функционирует корректно. В процессе тестирования была отлажена и настроена прошивка для конкретного измерительного модуля. Кроме того, было установлено, что 16 разрядов АЦП избыточно (точность 0.08мВ), для измерений, при этом было проведено тестирование с подключением модуля к встроенному в микроконтроллер 10-ти разрядному АЦП (точность 4.9мВ). Такое количество разрядов не обеспечило достаточною точность. В итоге при сравнении получили, что 16 разрядов - получаем в значениях слишком много разбросов из-за шумов, при 10 разрядах не можем добиться достаточной точности, при опорном напряжении +5В. Из этого был сделан вывод, что оптимальным АЦП для этого устройства будет 12-ти разрядный модуль. Такого разрешения будет достаточно для обеспечения необходимой точности (точность измерения 1.2мВ)
Руководство пользователя
· Готовый собранный макет подключается к питанию от USB порта персонального компьютера (рис. 8)
Рисунок 8
Далее необходимо сконфигурировать скетч, который будет залит на микроконтроллер через какой именно USB порт идет питание на макет и непосредственная загрузка прошивки и как следствие получение обратно данных.