В современном цифровом мире потребность в ЦАП/АЦП ( цифро-аналоговые преобразователи/аналогово-цифровые преобразователи ) не вызывает сомнений: они используются для обработки сигналов от различных датчиков, в аудиоаппаратуре, ТВ-тюнерах, картах видеовхода, видеокамерах и т.п.
Однако использование или отладка ЦАП/АЦП может быть затруднено из-за ограничений, налагаемых производителем оборудования, таких как используемое программное обеспечение или способ управления устройством.
Это предполагает разработку собственной модели взаимодействия.
В этой статье мы рассмотрим возможность организации взаимодействия ПК и ЦАП/АЦП с помощью ПЛИС.
Предисловие
Основная цель данной статьи — описать решение конкретной проблемы, а также ознакомиться с интерфейсами взаимодействия интегральных схем (ИС).Здесь не уделяется внимание основному назначению ЦАП/АЦП.
Статья требует некоторых знаний объектно-ориентированного программирования и схемотехники, поэтому, если вы не знакомы с этими понятиями, рекомендуется начать с них.
Надеюсь, что опыт человека, впервые столкнувшегося с проблемой связи электронных устройств, будет кому-то полезен.
Всем удачи и новых свершений!
Небольшой ликбез на тему интерфейсов
Отказ от ответственности
Если вы знакомы с устройством основных интерфейсов, используемых для связи IC, можете смело пропустить этот пункт. образовательная программаОбщая информация
Интерфейс в общем определении — это набор инструментов и правил, обеспечивающих взаимодействие отдельных систем.В более узком контексте физических интерфейсов эту концепцию можно описать как способ взаимодействия физических устройств с помощью электрических (оптических, электромагнитных и т. д.) сигналов.
Интерфейс может содержать аппаратные, программные и конструктивные компоненты.
Говоря простым языком, интерфейс означает некоторые инструкции для связи между устройствами.
Эта инструкция может содержать требования к конструкции разъема, физическому числу линий и напряжению на них, способу подключения устройств, способу передачи данных и т. д. Эта инструкция заранее известна как приемнику, так и передатчику.
.
Это необходимое условие для завершения процесса передачи данных.
Инструкции по общению по определенному интерфейсу встроены в контроллер – микросхему, организующую передачу данных по выделенному порту.
Контроллер берет на себя задачу приема сигнала и преобразования его в форму, понятную принимающему устройству, и наоборот. Контроллер также отвечает за все процессы, происходящие с ассоциированным с ним портом.
Чтобы не вдаваться в подробное перечисление классификаций, ниже рассмотрены наиболее необходимые для дальнейшего понимания аспекты интерфейсов.
По способу подключения
С точки зрения способа подключения устройств (то есть топологии сети) интерфейсы, описанные в этой статье, можно организовать в соединения:- "точка-точка";
- "шина";
- «кольцо» («цепочка»).
Преимущество такого типа подключения – простота и дешевизна, недостаток – невозможность подключения таким способом более двух устройств.
Топология "шина" (или, как его часто называют «обычный автобус» или "шоссе" ) предполагает использование хотя бы одного общего канала, к которому подключаются все приемопередатчики.
Общий канал используется всеми устройствами по очереди.
Все сообщения, отправленные отдельными устройствами, принимаются и прослушиваются всеми другими устройствами, подключенными к сети.
Из этого потока каждый абонент сети выбирает сообщения, адресованные только ему.
В шлейфовых интерфейсах (топология типа "кольцо" ) устройства соединены последовательно.
Недостаток – в процессе обмена данными пакет проходит через все устройства, что замедляет процесс адресации сообщения, а также при выходе из строя какого-либо звена цепочки последующие подключенные устройства остаются без возможности связи с сетью.
.
Преимущество – минимальные затраты на подключение оборудования.
По способу передачи информации
По способу передачи информации различают интерфейсы:- параллельно;
- последовательный;
- параллельно-последовательный.
Обычно используется несколько строк.
Обмен информацией осуществляется за один цикл обмена и предполагает фиксированную разрядность передаваемых данных.
Передача данных происходит быстрее, чем через последовательный интерфейс.
Последовательный Интерфейс данных использует одну или несколько сигнальных линий, по которым последовательно передаются один за другим биты информации.
Последовательная структура интерфейса используется в системах с небольшими информационными потоками, а также в системах, имеющих ограничения на количество используемых линий.
Смешанный (параллельно-последовательный/байтовый) метод широко используется в системах с разной шириной данных для разных устройств.
По способу передачи
По способу передачи информации различают интерфейсы:- с двусторонней одновременной передачей ( дуплекс );
- с двухсторонней переменной передачей ( полудуплекс );
- с односторонней передачей ( симплекс ).
В полудуплекс режиме любой из двух абонентов может начать передачу информации другому, если линия связи интерфейса свободна.
Говоря простым языком: если один абонент транслирует информацию, то другие абоненты сети в этот момент имеют право только «слушать» и ждать освобождения канала на случай, если они захотят передать свое сообщение.
В симплекс режиме только один из двух абонентов может инициировать передачу информации по интерфейсу в любой момент времени.
То есть этот режим обеспечивает одностороннюю связь с заранее определенным приемником и передатчиком.
По принципу обмена информацией
По принципу обмена информацией интерфейсы делятся на:- синхронный;
- асинхронный.
Стартовые биты предупреждают получателя о начале передачи.
Затем передаются информационные биты.
Для определения надежности передачи используется бит четности (бит четности — это один из механизмов проверки полученных данных; просто, если он равен единице, то количество единиц в посылке нечетное, а в противном случае — нулевое).
).
Последний «стоповый бит» сигнализирует об окончании передачи (может не использоваться в зависимости от интерфейса и его конфигурации).
Некоторые системы используют механизм подтверждения сообщения.
С использованием синхронный При этом методе данные также передаются блоками, а для синхронизации работы приемника и передатчика часто выделяется дополнительная физическая линия, по которой передается сигнал тактовой синхронизации.
О каких интерфейсах мы поговорим?
В настоящее время наиболее распространенными интерфейсами взаимодействия между интегральными схемами (ИС) являются синхронные.СПИ И I2C и асинхронный УАРТ .
I2C
I2C – последовательная асимметричная шина для связи между интегральными схемами внутри электронных устройств.Шина I2C используется для подключения низкоскоростных периферийных компонентов к процессорам и микроконтроллерам.
I2C реализует полудуплексную передачу данных в формате Master-Slave, который поддерживает несколько главных устройств.
Концепция стандарта заключается в том, что каждое устройство, подключенное к шине, идентифицируется уникальным адресом, используемым при доступе к этому устройству.
Эта концепция значительно упрощает идентификацию устройства, позволяя интерфейсу иметь только два канала.
Классическая адресация включает 7-битное адресное пространство с 16 зарезервированными адресами.
Это означает, что разработчикам доступно до 112 свободных адресов для подключения периферии к одной шине.
Все операции на шине I2C выполняются с использованием последовательного канала данных (SDA) и тактового канала (SCL).
Схема передачи данных через интерфейс I2C
СПИ
СПИ – стандарт последовательной синхронной передачи данных в дуплексном режиме, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферийных устройств.Шина SPI организована по принципу ведущий-подчиненный.
Мастер шины передает данные по линии MOSI синхронно с генерируемым им сигналом SCLK, а ведомый захватывает передаваемые биты данных по определенным фронтам принятого сигнала синхронизации.
При этом ведомое устройство отправляет свой пакет данных по линии MISO, тем самым организуя дуплексную передачу данных.
Подчиненное устройство также ожидает сигнала разрешения на передачу данных по линии SS.
Схема передачи данных через интерфейс SPI
УАРТ
УАРТ — универсальный асинхронный трансивер — интерфейс связи цифровых устройств, предназначенный для передачи данных в последовательном виде.Основными каналами этого стандарта являются RxD (приемный канал) и TxD (передающий канал).
Данные передаются в UART по одному биту по каналу TxD через равные промежутки времени.
Этот период времени определяется заданной скоростью и указывается в бодах для конкретного соединения.
Поскольку UART является асинхронным интерфейсом, помимо информационных битов UART автоматически вставляет в поток синхронизирующие метки, так называемые стартовые и стоповые биты.
При приеме данных эти биты не учитываются, поскольку используются лишь для обозначения начала и окончания передачи информации.
Обычно стартовый и стоповый биты составляют 8 бит данных (максимальный размер пакета), причем первым передается младший бит данных, но эту конфигурацию можно настроить.
UART изначально предназначался для двухточечной связи между двумя устройствами.
Впоследствии были созданы физические уровни, позволяющие подключать более двух UART по полудуплексному принципу.
Существуют реализации «общая шина» и «кольцо».
Схема передачи данных через интерфейс UART
Что это за ЦАП?
Не похоже на этот Для начала определимся с используемым ЦАП/АЦП: Плата разработки Analog Devices AD9993-EBZ представляет собой устройство, сочетающее в себе четыре 14-битных АЦП и два 14-битных ЦАП.
Управление режимами работы этой ИМС осуществляется путем изменения состояния ее внутренних регистров.
AD9993 использует 66 регистров с 8-битным размером запоминающего (обрабатываемого) слова, адреса которых описываются трехбитными шестнадцатеричными значениями (12 бит данных).
Поддерживаются два типа команд: команда чтения и команда записи.
Другими словами, чтобы исправить работу ИМС, необходимо передать команду на запись определенного допустимого 8-битного значения по определенному адресу регистра.
Доступ к регистрам этой ИМС осуществляется через последовательный периферийный интерфейс (SPI), подключение к которому на отладочной плате реализовано через 40-контактный разъем FIFO_0 или через дополнительно установленную контактную группу.
Вот так (FIFO_0 – верхний серый разъем)
Основные требования к предельным параметрам интерфейса SPI:
- Максимальная частота передачи данных – 25 МГц;
- Длительность верхнего и нижнего уровней на линии формирования тактового сигнала составляет 10 нс;
- Время установки уровня на линиях данных и на линии разрешения составляет 2 нс;
- Время удержания уровня на линиях данных и на линии разрешения – 2 нс;
- Гарантированное время действия одного бита данных на линии передачи ведомого устройства составляет 2нс.
Что говорит производитель?
Рекомендуемая схема управления
Согласно документации AD9993-EBZ, рекомендуемым способом управления микросхемой является использование платы разработки Analog Devices HSC-ADC-EVALC, подключенной к микросхеме через 40-контактный порт и к ПК через интерфейс USB. В качестве управляющего программного обеспечения используется SPIController.Рекомендуемая схема
Analog Devices HSC-ADC-EVALC (на базе FPGA Xilinx Virtex-4) минусы:
- Высокая цена.
Плата разработки HSC-ADC-EVALC предлагается на официальном сайте Analog Devices за 698,28 долларов США.
- Неудобный пользовательский интерфейс.
Программное обеспечение SPIController, помимо основной функции записи и чтения регистров, не предоставляет возможности сохранения или планирования команд.
- Ограниченная совместимость.
Для управления другими микросхемами с возможностью взаимодействия через интерфейс SPI необходимо найти и добавить отдельный файл конфигурации для программного обеспечения SPIController, разработанного специально для этой микросхемы.
Список микросхем, доступных для управления, ограничен продуктами Analog Devices, поддерживающими настройку через интерфейс SPI.
Пользовательский интерфейс SPIController плюсы:
- Официальная поддержка от производителя.
Немного о HSC-ADC-EVALC
Хочу отметить, что использование платы Analog Devices HSC-ADC-EVALC в качестве устройства управления ЦАП/АЦП не является ее основным предназначением.
HSC-ADC-EVALC в основном используется в качестве платы буферной памяти для АЦП, но он также имеет функцию настройки плат разработки через интерфейс SPI, если подключенные платы его поддерживают.
Собственная модель взаимодействия
Причина использования промежуточного устройства
Очевидным фактом является то, что взаимодействие ЦАП/АЦП с ПК не может быть организовано напрямую, поскольку SPI, с помощью которого запрограммирован AD9993-EBZ, не является типовым интерфейсом современного ПК.Для решения этой проблемы пришлось использовать промежуточное устройство, которое бы конвертировало данные из интерфейса USB, передаваемые с компьютера, в формат интерфейса SPI, поддерживаемый ИМС.
При разработке вариантов выбор пал на использование макетной платы Terasic DE10-Nano, работающей на ПЛИС Cyclone V.
Собственная модель взаимодействия
Почему FPGA — это круто?
Основные преимущества использования FPGA:- Легкость разработки.
DE10-Nano позволяет гибко реализовать взаимодействие с подключенными устройствами, поскольку в отличие от обычных цифровых микросхем логика работы ПЛИС не определяется при изготовлении, а задается посредством программирования.
Для программирования используются программатор и IDE, которые позволяют задать нужную структуру цифрового устройства в виде принципиальной схемы или программы на языке описания аппаратуры Verilog.
- Бюджетный.
Цена DE10-Nano выгодно отличается от HSC-ADC-EVALC (110 долларов против 698,28 долларов).
Кроме того, DE10-Nano по-прежнему является универсальным устройством, возможности использования которого ограничены лишь фантазией его владельца.
- Перспективы.
В будущем проект ПЛИС может быть дополнен функционалом буферной памяти для АЦП, тем самым полностью заменив решение, предложенное производителем.
- Сообщество.
В Интернете существует огромное количество блогов и статей, ориентированных на FPGA (FPGA – программируемая вентильная матрица – международное определение полупроводниковых приборов, программируемых на схемном уровне), что является неоспоримым преимуществом для неопытного инженера (которым и является автор статьи).
Форум заслуживает отдельного упоминания.
ракетные доски с кучей готовых проектов и руководств к ним.
Процесс проектирования
Ничего не предвещало беды.
При проектировании модели взаимодействия было решено реализовать SPI-интерфейс на базе GPIO (pins общего назначения), контактная база которого имеется на DE10-Nano. Реализация SPI-контроллера на базе FPGA не должна вызвать особых проблем благодаря большому количеству материалов на подобную тему.
Однако трудности вызвала реализация подключения ПЛИС к компьютеру через интерфейс USB. DE10-Nano имеет следующие порты USB:
- USB mini-B, управляемый микросхемой FT232R, реализующий соединение UART с USB.
- USB mini-B управляется микросхемой SMSC USB3300, которая реализует физический уровень интерфейса USB, а также используется для программирования FPGA.
Основное отличие HPS от FPGA заключается в том, что HPS представляет собой блоки постоянной структуры, оптимизированные под конкретную функцию и без средств ее программирования (вот почему это сложно).
Части HPS и FPGA чипа Cyclone V имеют свои собственные контакты.
Эти контакты не используются совместно HPS и FPGA. Контакты HPS настраиваются с помощью программного обеспечения, работающего в HPS. Выводы FPGA программируются с использованием образа конфигурации FPGA через HPS или любой другой поддерживаемый внешний источник.
Чтобы организовать взаимодействие программируемой логики микросхемы Cyclone V с этими портами, необходимо создать специальный загрузчик Linux, работающий на HPS, а также необходимо разработать программу, способную передавать сигналы с контроллеры имеющихся USB-портов к свободным контактам ПЛИС.
На современном этапе познания этот вопрос оказался непростым, поэтому было решено найти другой путь.
Однако людям, которые столкнулись с подобной проблемой и решили в ней разобраться, возможно, будет полезно прочитать статья о возможном решении.
Выход есть!
После долгих поисков в Интернете было решено использовать внешний UART-контроллер.Внешний UART-контроллер представляет собой небольшую плату на базе микросхемы FT232RL. На плате имеются разъемы miniUSB-B для связи с компьютером и 6-контактный разъем для связи с микроконтроллерами и устройствами.
Контроллер подключается через интерфейс USB к ПК, а через контактную базу GPIO к DE10-Nano.
Сам контроллер от Waveshare (используется в проекте)
Использование интерфейса UART через USB для передачи данных с ПК практически устраняет необходимость понимания сложной и многоуровневой конструкции протокола USB. С этого момента взаимодействие через интерфейс USB больше не является нашей заботой, поскольку эта задача возложена на предустановленные в системе или самостоятельно установленные пользователем драйверы.
Помимо линий питания и заземления, а также линий передачи и приема данных, на плате имеются контакты с маркировкой RTS и CTS. Эти контакты используются для так называемого управления потоком — механизма, предназначенного для сигнализации готовности к приему данных от ведущего или ведомого устройства в зависимости от состояния линий.
Использование этих строк не обязательно, поэтому для отключения механизма необходимо указать в настройках драйвера компьютера, что управление потоками не используется (обычно такая конфигурация стоит по умолчанию).
При подключении к ПК в системе Windows контроллер UART определяется как виртуальный последовательный порт. Следовательно, разработка схемы взаимодействия с ПК сводится к созданию программного обеспечения с функционалом взаимодействия с виртуальным последовательным портом, а также разработке проекта ПЛИС, реализующей прием/передачу данных через интерфейс UART.
Внешний UART-контроллер по сути является абсолютным аналогом контроллера, уже имеющегося на DE10-Nano, но единственным его преимуществом является возможность прямого подключения к свободным контактам FPGA. Стоимость такого устройства колеблется от $5 до $10.
Разработка программного обеспечения
Общая информация
Как уже говорилось, разработка программного обеспечения для ПК сводится к созданию программы, поддерживающей обмен информацией с виртуальным последовательным портом.В ходе анализа доступных программных средств для разработки ПО выбор пал на язык программирования Java 8-й редакции с использованием библиотеки RTXT. Java — это строго типизированный объектно-ориентированный язык программирования, обладающий рядом ключевых особенностей.
В частности, программы, написанные на Java, транслируются в специальный байт-код, что позволяет выполнять их на любой компьютерной архитектуре, для которой существует реализация виртуальной машины Java. Стандартные библиотеки Java не имеют возможности взаимодействовать с виртуальным последовательным портом.
Именно для этого и использовалась библиотека RTXT. RTXT распространяется по лицензии свободного программного обеспечения.
Библиотека использует системную реализацию взаимодействия с интерфейсами и предоставляет классы для операций синтаксического анализа, подключения, чтения и записи с использованием последовательного порта.
Подробнее об этой библиотеке можно узнать здесь .
В качестве инструмента разработки пользовательского интерфейса используется старая, но надежная встроенная библиотека Swing. Благодаря возможности менять темы простой пользовательский интерфейс Swing может выглядеть более или менее современно, но при этом не выглядеть уродливым.
Сама программа по-спартански проста и в основном использует документированные возможности библиотеки RTXT.
Основной функционал программы
Вот как определяются доступные порты:Подключение к выбранному порту:public String[] getPorts() { ports = CommPortIdentifier.getPortIdentifiers(); while (ports.hasMoreElements()) { CommPortIdentifier curPort = (CommPortIdentifier) ports.nextElement(); if (curPort.getPortType() == CommPortIdentifier.PORT_SERIAL) { portMap.put(curPort.getName(), curPort); } } return portMap.keySet().
toArray(new String[0]); }
public void connect() {
String selectedPort = (String)gui.ports.getSelectedItem();
selectedPortIdentifier = portMap.get(selectedPort);
CommPort commPort;
try{
commPort = selectedPortIdentifier.open("UART controller", TIMEOUT);
serialPort = (SerialPort)commPort;
serialPort.setSerialPortParams(BAUD_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
gui.writeLog(selectedPort + " opened successfully.");
}catch (PortInUseException e){
gui.writeLogWithWarning(selectedPort + " is in use. (" + e.toString() + ")");
}catch (Exception e){
gui.writeLogWithWarning("Failed to open " + selectedPort + " (" + e.toString() + ")");
}
}
Процесс передачи данных:
public boolean writeData(byte[] bytes){
boolean successfull = false;
try {
gui.writeLog("WRITING: " + HexBinUtil.stringFromByteArray(bytes));
output.write(bytes);
output.flush();
successfull = true;
}
catch (Exception e) {
gui.writeLogWithWarning("Failed to write data. (" + e.toString() + ")");
}
return successfull;
}
Прием данных:
public void serialEvent(SerialPortEvent serialPortEvent) {
if (serialPortEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
byte singleData = (byte)input.read();
gui.writeLog("READING: " + HexBinUtil.stringFromByteArray(singleData));
}
catch (Exception e) {
gui.writeLogWithWarning("Failed to read data. (" + e.toString() + ")");
}
}
}
Как уже упоминалось, ЦАП/АЦП управляется путем отправки команды записи определенного допустимого 8-битного значения по определенному адресу регистра, описанному в документации.
Для определения текущего состояния регистра необходимо передать команду чтения и указать адрес запрашиваемого регистра.
Полное описание как всегда в документация .
Передача данных через UART
При изучении AD9993-EBZ было обнаружено, что в доступном 12-битном адресном пространстве регистров используется только 8 бит данных.Также передаваемое значение состояния регистра описывается 8 битами.
Для определения типа передачи данных (запись/чтение) необходимо передать 1 бит данных.
Поскольку текущее ограничение на максимальный размер сообщения через интерфейс UART составляет 8 бит данных, было принято решение передавать 3 последовательных сообщения размером 8 бит в процессе записи и 2 сообщения в процессе чтения.
Первая посылка будет содержать тип передачи данных, продублированный на весь размер посылки.
Поэтому возможных значений может быть только два: 00000000 для чтения и 11111111 для записи соответственно.
Использование всей посылки для передачи одного бита данных было сделано для упрощения дальнейшей обработки полученных сигналов.
Далее передаются адрес запрошенного регистра и переданное значение состояния регистра в процессе записи.
Осциллограмма разрабатываемого пакета UART
Пользовательский интерфейс
Основными элементами пользовательского интерфейса программы являются кнопки подключения/отключения от доступных последовательных портов (элементы 3,4), поля для ввода адресов и значений регистров (элементы 7,8), а также окно журнала (элемент 6).
Программное обеспечение предназначено для взаимодействия с ним в двух состояниях: «подключено к порту» и «отключено от порта».
Государства определяют активность некоторых элементов Теги: #java #interfaces #interface #SPI #FPGA #uart #java 8 #interface #cyclone v
-
Как Работает Веб-Паук
19 Oct, 24 -
Сказка Об Испытаниях
19 Oct, 24 -
Прогресс В Беспроводных Технологиях?
19 Oct, 24