Оглавление:
Видео: Сделать любой датчик из ПЛИС: 4 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Большинство производителей хотя бы раз в жизни пробовали построить термометр, возможно, тот, который у них дома, недостаточно умен, или, может быть, они думают, что смогут построить следующее NEST. Тем не менее, в какой-то момент у них был микроконтроллер с их современным программным обеспечением, подключенным к датчику температуры (и, возможно, другим датчикам: давления, света). До сих пор все идеально, софт запущен и сенсор чувствует. Давай проверим!
Хмммм… может, стоит нагреть датчик феном и охладить льдом, какое-то время работает. Но это непрофессионально, датчик слишком быстро меняет значения, если его нагреть, он не нагревается больше, чем на пару градусов. Проект перебор! Но алгоритм новый, учитывает множество факторов, как жаль, что он застрял на этой глупой мелочи.
Мое решение таково: заставить FPGA действовать как датчик со значениями, передаваемыми с ПК (или хранящимися в памяти, или создаваемыми ad-hoc внутри FPGA). Так что для вашего драгоценного микроконтроллера FPGA выглядит как сенсор, но не как сенсор: какой бы сенсор вы ни выбрали. Возможно, вы решите, что вам нужно большее разрешение или более быстрое время отклика, чем ожидалось, вам нужно заменить датчик. Закажите онлайн, он прибудет через пару дней, через пару месяцев, кто знает. Повторно закрепите печатную плату или закажите модуль с новым датчиком. Или… пара щелчков мышью, и FPGA будет настроена как ваш новый датчик и сможет имитировать точную внутреннюю конфигурацию.
На момент написания этого ПЛИС могла действовать как LM75 с данными о температуре, хранящимися в BRAM (на ПЛИС).
Шаг 1: MCU
Мой выбор MCU - LPC4337 на LPCXpresso. Сверху у меня есть щит (LPC General Purpose Shield) с дисплеем и настоящий датчик LM75. LPC4337 - это ARM Cortex M4, работающий на частоте 200 МГц, и меньший Cortex M0 (здесь не используется). Настоящий датчик подключен к периферийному устройству I2C1, а наш виртуальный - к I2C0. Исходный код доступен на моем GitHub.
Как его построить? Загрузите LPCXpresso IDE вместе с библиотекой LPCOpen. Импортируйте эту библиотеку в IDE, а также откройте проект из GitHub. Все должно быть настроено, и вы можете нажать на «Отладка» в нижнем левом углу.
Весь проект основан на одном из примеров NXP (чтобы показать, что мой проект имитирует реальный датчик и не требует специального кода на стороне MCU). В основном файле (называемом iox_sensor.cpp) находится этот код:
#define SENSORS_ON_SHIELD
#if defined (SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif defined (SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif
Изменяя SENSOR_ON_SHIELD и SENSOR_OR_FPGA, пользователь может переключаться во время компиляции, с каким датчиком разговаривать, реальным или виртуальным, поскольку они находятся на разных выводах I2C.
Шаг 2: ПЛИС
Моя любимая плата FPGA - это Artix 7 от Digilent с Xilinx Arty 7. Используются два разъема PMod, один для отладки, а другой для реальной полезной нагрузки, соединения с платой MCU.
Опять же, исходный код FPGA доступен на моем GitHub (папка fpgaSide).
Как его построить? Загрузите, купите или откройте Xilinx Vivado IDE. Импортируйте файлы проекта из GitHub. Один из файлов (content.coe) - это данные о температуре в необработанном формате, которые будут переданы на поддельный датчик. Существует также файл Excel с тем же именем, который помогает преобразовывать удобочитаемые данные о температуре в необработанные данные LM75. Я планирую преобразовать это в автоматизированный процесс с помощью программного обеспечения, написанного на Java, но до тех пор это решение работает. Примите это во внимание, поэтому на синтез и реализацию потребуется время.
Шаг 3: как это работает?
Как я уже сказал, для MCU FPGA выглядит как датчик, точнее, датчик I2C. Выход периферийного устройства I2C подключен к входу FPGA. Внутри FPGA есть 3 основных компонента: - Контроллер I2C - Устройство I2C - Данные Контроллер I2C получает данные I2C от контактов FPGA и отправляет их остальной части FPGA и делает то же самое в обратном порядке. Он поддерживает внутренний конечный автомат для протокола I2C (кстати, вот документация к нему). Что этот компонент отправляет на устройство I2C? Текущий принятый байт, позиция этого байта в текущем сообщении и то, выполняет ли MCU запись или чтение из FPGA. Устройство I2C получает отправленные байты и обновляет смоделированную внутреннюю структуру датчика. Он может просто обновить указатель регистра или запросить новые данные из источника данных. Компонент данных передает новые точки данных. В настоящее время это просто ПЗУ, адрес которого увеличивается (приблизительно) дважды в секунду.
Какова моя конечная цель? Это показано на второй картинке. То есть: сделать возможным одновременное моделирование большего количества устройств I2C (датчиков и прочего) внутри FPGA. Данные на бэкэнде датчика должны быть кэшированы в FPGA и переданы с ПК через USB или Ethernet. Поддержка более совершенных датчиков и других устройств I2C (память, драйверы светодиодов и т. Д.).
Шаг 4: Собираем все вместе
Пришло время соединить все вместе. Теоретически все просто: на плате mcu есть разъем PMod (I2C0 & SSP0 (может работать как SPI)). На плате Artix есть 4 разъема PMod, которые можно использовать как угодно. Я выбираю разъем D для связи с MCU и разъем B для подключения к моему логическому анализатору.
Предупреждение
Вы не можете просто так соединить две доски вместе. Почему? PMod был создан для облегчения подключения платы Master / Host (которая дает питание) к Slave / Sensor (которая получает питание). Но в этом проекте обе платы выдают питание, и если вы подключите выход 3,3 В одной платы к выходу 3,3 В другой платы, могут произойти неприятности. Но они не могут, и вы можете просто изменить параметры шин питания FPGA (они очень тщательно спроектированы). Так что не рискуйте и переместите разъем на один контакт влево (а также переверните плату FPGA), как показано на рисунках выше. Вот спецификация PMod, вы можете ее изучить, вкратце я сделал так, чтобы не соединять VCC двух плат.
Рекомендуемые:
Учебное пособие: как сделать простой датчик температуры с помощью DS18B20 и Arduino UNO: 3 шага
Учебное пособие: Как сделать простой датчик температуры с помощью DS18B20 и Arduino UNO: Описание: В этом руководстве вы найдете несколько простых шагов, как сделать датчик температуры работоспособным. Чтобы воплотить это в реальность в вашем проекте, потребуется всего несколько минут. Удачи ! Цифровой термометр DS18B20 обеспечивает температуру от 9 до 12 бит по Цельсию
Как сделать датчик влажности почвы своими руками [СОВМЕСТИМЫЙ С ARDUINO / ESP]: 3 шага
Как сделать датчик влажности почвы своими руками [ARDUINO / ESP COMPATIBLE]: Здравствуйте, в этом руководстве мы увидим, как построить датчик влажности почвы с нуля! Он очень недорогой и совместим со всеми типами микроконтроллеров, начиная с электрической розетки. Схема представлена в виде простого пенсионного делителя
ДАТЧИК ВЛАЖНОСТИ ПОЧВЫ СДЕЛАТЬ ДЕШЕВО, И ТОЧНО!: 4 шага
ДАТЧИК ВЛАЖНОСТИ ПОЧВЫ СДЕЛАТЬ ДЕШЕВЫЙ, ЕЩЕ ТОЧНЫЙ!: Я любитель растений и технический руководитель. Недавно я решила вырастить растения у себя на балконе. Я решил автоматизировать систему полива, так как могу забыть поливать их, я не хотел рисковать своими прекрасными цветочными растениями. вот решил достать грунт
Как сделать робота с мобильным управлением »вики полезно DTMF на основе - Без микроконтроллера и программирования - Контроль из любой точки мира - RoboGeeks: 15 шагов
Как сделать робота с мобильным управлением »вики полезно DTMF на основе | Без микроконтроллера и программирования | Контроль из любой точки мира | RoboGeeks: Хотите создать робота, которым можно будет управлять из любой точки мира, давайте сделаем это
Конвертируйте (почти) любой медиафайл в (только примерно) любой другой медиафайл бесплатно !: 4 шага
Конвертируйте (почти) любой медиафайл в (только примерно) любой другой медиафайл бесплатно !: Моя первая инструкция, ура! В любом случае, я искал в Google бесплатную программу, которая конвертировала бы мои файлы Youtube.flv в формат, который является более универсальным, например .wmv или.mov. Я поискал бесчисленное количество форумов и веб-сайтов, а затем нашел программу под названием