Рисунок 2
По схеме видно, что аппаратная часть устройства состоит из двух блоков: измерительного и логического модулей. Это должны быть 2 раздельных устройства для того, чтобы обеспечить необходимую надежность и защиту логики от внешнего воздействия.
Измерительный модуль состоит из одного или нескольких светодиодов и фотодиодов работающих в одном диапазоне излучаемых/принимаемых волн. Логический модуль отвечает за обработку сигнала с измерительного модуля, а также дальнейшую передачу обработанных данных в ПК посредством цифрового интерфейса. Работой светодиодов управляет микроконтроллер. Фотодиоды подключаются к АПЦ, который преобразует аналоговый сигнал в цифровое значение и передает его микроконтроллеру для обработки. После обработки данные выводятся через I\O интерфейс.
Было принято решение организовывать подключение к ПК по интерфейсу USB 2.0 по следующим причинам:
· высокая скорость
· полнодуплексный канал связи
· возможность питания ведомых устройств током до 500 мА
· напряжение питание стабилизировано до значения +5V
Для организации инфообмена между микроконтроллером и ПК посредством USB используется микросхема USB-TTL, что позволит использовать микроконтроллер без поддержки данного интерфейса и при этом обеспечить возможность подключения устройства к любому современному ПК на аппаратном уровне, без необходимости использовать переходник USB-COM. Кроме того, с шины USB осуществляется питание всего устройства, что очень удобно в практическом применении, поскольку у пользователей будет отсутствовать необходимость в организации дополнительного питания.
Выбор элементной базы измерительного модуля
После разработки структурно схемы была выбрана элементная база, соответствующая структурной схеме:
· Микроконтроллер Atmega328p
Данный МК представляет собой восьмиразрядный AVR микроконтроллер, располагающий на борту все необходимые блоки. Его основное преимущество перед аналогами - простота и надежность в работе. Имеет множество встроенных интерфейсов передачи данных: i2c, spi, serial port и другие. Позволяет настроить различную частоту работы, благодаря чему возможно снизить энергопотребление до очень низких значений. Кроме того, данный микроконтроллер имеет на борту встроенный многоканальный 10-ти разрядный АЦП.
· АЦП AD7705
Это внешний 16-ти разрядный аналогово-цифровой преобразователь. Необходим, поскольку встроенного в микроконтроллер АЦП недостаточно, для достижения требуемой точности измерений. Имеет два входных аналоговых канала, посредством программного управления позволяет включать встроенный усилитель различной мощности. Данный АЦП поддерживает управление по интерфейсу SPI, который поддерживается описанным ранее микроконтроллером на аппаратном уровне.
· USB TTL PL 2303
Этот модуль необходим для связи микроконтроллера и персонального компьютера по USB интерфейсу. Такое решение было принято в связи с тем, что последовательный порт занят для связи с АЦП, а то время как программное обеспечение не позволяет использовать программные реализации последовательного порта или иного, в связи с тем, что потребляют слишком много ресурсов микроконтроллера.
· ИК светодиод
Длина волны данного светодиода 860нм, выходная мощность 100мВ.
· фотодиод ФД256
Данный фотодиод имеет интегральную токовую чувствительность 0.6 мкА/лк.
· оптоволоконный световод
Для возможности измерять перемещение малых объектов и при этом не использовать дорогой лазер, было принято решение использовать оптоволоконный световод. Он позволит сконцентрировать и направить излучение от малого объекта в фотоприемник, размер которого больше, чем размер измеряемого объекта. Было рассмотрено несколько вариантов расположения жил световода, а также количество приемников-излучателей. Один из вариантов схематично показан на рисунке 3. Такое расположение жил световода позволит избежать проблем точного позиционирования датчика относительно измеряемого объекта. Другими словами, минимизируется влияние наклона датчика на получаемый с него результат. Подробно об этом влиянии рассказано в работе Н. Дубовицкой, А. Ледовского и А. Васильева «разработка датчика угловых перемещений». Фотодиод подключается к центрально жиле, а светодиод ко внешней, необходимо это для увеличения площади светового пятна от фотодиода, что позволит ещё сильнее минимизировать угловое влияние.
Рисунок 3
Однако такой метод не позволяет избежать ошибок, связанных с отражательными свойствами поверхностей, а расположить датчик ровно в лабораторных условиях проще, чем высчитывать коэффициент отражаемости. Для решения этой проблемы лучше всего подходит использование трехжильного оптоволокна, имеющего структуру как на рисунке 4.
Рисунок 4
К одной из крайних жил подключается светодиод, к оставшимся - фотодиоды, таким образом свет, отраженный от поверхности, будет по-разному достигать фотодиодов в зависимости от свойств поверхности. И в результате вычисления разности сигналов между принимающими световодами будет получено значение, отражающее непосредственно перемещение, независимо от коэффициента отражаемости поверхности.
На основе выбранных компонентов была разработана следующая аппаратная часть датчика, представляющая собой модульное устройство, состоящее из двух модулей: Измерительного и логического. Первый отвечает непосредственно за измерение аналоговой величины, а второй занимается обработкой полученных данных, преобразованием их в нормальный вид и передачей информации на внешнее устройство.
Измерительный модуль представляет собой оптоволоконный кабель один конец которого направляется на исследуемый объект, а к другому крепятся фотодиод и светодиод. Далее к их ножкам присоединяются провода, идущие к штыревому коннектору 6-pin. Логический модуль выполняется в виде печатной платы с расположенными на ней компонентами, разъемами для подключения к внешнему устройству и разъемом для подключения измерительного модуля. Кроме того, на ней располагаются элементы обвязки для микросхем и светодиода в соответствии с рекомендациями производителей.
Конструкция выполнена разборной в связи с тем, что это позволяет производить модульный ремонт, меняя только один модуль, а также можно использовать логический модуль с любым другим датчиком, принцип действия которого схож с работой разработанного. Это свойство открывает большой потенциал для модернизации. По своей структуре логический модуль представляет собой унифицированное устройство, имеющее 2 высоко разрядных аналоговых входа и один управляемый ШИМ вывод. При необходимости можно будет незначительно изменить прошивку модуля, для подключения практически любого аналогового датчика. Также возможна последующая разработка иных измерительных датчиков и разработка универсальной прошивки.
Разработка прикладного ПО
Исследование прошивок для микроконтроллера
В публичных репозиториях сосредоточено большое количество свободно распространяемых проектов c предназначенных для микроконтроллеров семейства AVR (Advanced Virtual RISC). Среди них сосредоточены решения для различных типов задач, но программы, решающую конкретно задачу данной дипломной работы, нет. Поэтому лучшим выход создать код с нуля. Но сперва необходимо было определиться с помощью каких инструментов и технологий логичнее всего работать.
Выбор инструментальных средств программирования прошивки микроконтроллера
Так как в данном проекте используется отладочная плата Arduino Uno выбор языка программирования для создания прошивки МК пал на С++ адаптированный специально для Arduino IDE, которая в свою очередь является родной средой разработки для данной платформы. Существует открытый фреймворк Wiring, который содержит в себе набор базовых функций для управления выводами микроконтроллера, математику и другие функции для управления устройством. Большинство инструментов/функций для создания программ под Ардуино состоят в этом фреймворке. Поэтому язык разработки для данного микрокомпьютера также называют Arduino Wiring, потому как он не является C++.
Разберем программное обеспечение для создания прошивки. Сама по себе аббревиатура IDE расшифровывается как Integrated Development Environment и представляет собой редактор для кода и механизм, который в последствии этот код компилирует по средствам препроцессора и компилятора. А также IDE загружает итоговую программу на саму плату. Arduino IDE создана по средствам java и из-за этого не отличается большой скоростью работы. Данный софт довольно долго запускается так как занимает большой объем оперативной памяти компьютера. Также к ее недостаткам можно отнести отсутствие дерева файлов как в иных средах программирования, отсутствие рефакторинга кода, и невозможность авто дополнения вводимых команд. Все это конечно замедляет работу, но среди всех этих недостатком есть неоспоримый плюс Arduino IDE, который превосходит все остальное. Это официальная поддержка и выпуск новых версий программ от производителя. При том, что сама по себе программа распространяется бесплатно.
Если рассматривать конкурентов, то можно найти среди них как программы более высокого уровня, так и обратное:
1) Один из вариантов, это использовать продвинутые блокноты такие как Notepad++/Sublime Text/Visual Studio Code для редактирования кода и запуска уже через Arduino IDE. Удобно тем, что данные блокнот обладают всеми современными функциями, не удобно - работа сразу в двух отдельных программах.
2) Если рассматривать полноценные IDE, то можно обратиться к PlatformIO. Она имеет возможность автоматически прописывать начатую команду, но при этом лишена функции по конфигурации проекта. Более того в данном ПО могут часто встречаться проблемы по интеграции с библиотеками.
3) Programino IDE - отвечает всем требованиям проекта, но распространяется на коммерческой основе, что значительно снижает все ее остальные преимущества.
4) Другая IDE, подходящая для разработки прошивок, это MariaMole. В ней сосредоточенно как большое количество багов, так полезных фишек.
5) B4R дает возможность Basic программистам разрабатывать код не меняя специализацию. Но данный подход не является общепринятым в сообществе и поэтому не подходит.
6) Visual Studio Micro плагин для более известной Microsoft Visual Studio. Данный софт является серьезным конкурентом для официальной среды разработки Arduino.
7) XOD - не стандартный подход к программированию. Код представляется виде блоков (нод). Подразумевает за собой дополнительное время на изучение данной концепции
8) Atmel Studio программа для прямой работы с микроконтроллерами компании AVR. Сочетает в себе отсутствие вспомогательных функций как Arduino IDE, но при том дает более тонко конфигурировать проект.
Проанализировав возможные решения по реализации кода прошивки микроконтроллера была выбрана оригинальная для платформы Arduino программа c одноименным названием Arduino IDE.
Цифровой интерфейс АЦП
После выбора инструментов программирования необходимо углубиться в особенности работы прошивок с аналого-цифровым преобразователем AD7705.
Программируемые функции AD7705 управляются с помощью набора встроенных регистров. Данные записываются в эти регистры через последовательный интерфейс, который также обеспечивает доступ на чтение регистрами. Вся связь с деталями должна начинаться с операции записи в регистр связи. После включения питания или сброса устройства ожидается запись в собственные регистры связи. Данные, записанные в эти регистры, определяют, является ли следующая операция операцией чтения или записи и с каким регистром происходит эта операция. Таким образом доступ на запись в регистр на любой части начинается с операции записи в регистр связи, а затем записи в выбранный регистр. Аналогично, операция чтения из любого регистра, включая регистр выходных данных, начинается с операции записи в регистр связи, за которой следует операция чтения из выбранного регистра.
Последовательные интерфейсы AD7705 состоят из пяти сигналов: CS, SCLK, DIN, DOUT и DRDY. DIN используется для передачи данных в регистры на кристалле, а DOUT для доступа к данным из регистров на кристалле. SCLK это пин входного синхроимпульса для передачи по последовательному интерфейсу. Вся передача данных на DIN или DOUT проходит связанно с импульсами на SCLK. DRDY используется в качестве сигнала состояния для указания того, когда данные готовы к считыванию из регистров данных AD7705. DRDY проходит внизу, когда новое значение данных доступно в выходном регистре. Он сбрасывается наверх, когда операция чтения из регистра данных завершена.
Он также идет вниз до обновления выходного регистра, указывая не читать с устройства, чтобы гарантировать, что чтение данных не предпринимается во время обновления регистра. CS используется для выбора устройства. Его можно использовать для декодирования AD7705 / AD7706 в системах, где ряд деталей подключен к последовательной шине.
Рисунок 5 Диаграмма таймингов цикла чтения
Рисунок 6 Диаграмма таймингов цикла записи
На рис. 5 и рис. 6 показаны временные диаграммы для взаимодействия с AD7705, с CS используется для декодирования частей. На рис. 5 показана операция чтения из AD7705 выходного регистра сдвига, а на рис. 6 показана операция записи на вход регистра сдвига. Возможно прочитать такие же данные дважды от регистра выхода, даже если линия DRDY возвращает максимум после первой прочитанной операции. Однако необходимо позаботиться о том, чтобы операция чтения была завершена до следующего обновления выходных данных.