FPGA chips

Изучаем САПР Altera Quartus II / Intel Quartus Prime, язык описания аппаратуры Verilog HDL и кое-что про VHDL. Программируем FPGA Altera / Intel Cyclone III, Cyclone IV, MAX II, MAX10. Экспериментируем с платами разработчика  FPGA серии Марсоход, Марсоход2, Марсоход3. А еще разбираемся с FPGA Gowin.


m3gw2 step motor control udp

В предыдущей статье я писал, что у нас появилась новая плата расширения Ethernet 1Gbit и к ней был сделан относительно простой тестовый проект для платы Марсоход3GW2. В этой работе FPGA плата могла принимать UDP пакеты и отправлять UDP пакеты. Этим проектом мы проверили работоспособность нашего шилда Ethernet. Однако, существенный недостаток был в том, что передать пакет в плату можно было только отправляя broadcast широковещательные пакеты. Это пакеты "всем", что создает излишний трафик во всей локальной сети. Дело в том, что компьютер с которого отправляются пакеты не знает физического адреса платы, MAC адреса. Даже если я знаю IP адрес своего устройства этого недостаточно, чтобы осуществлять прямую передачу от клиента к серверу.

Чтобы сделать передачу UDP пакета с компьютера на нашу FPGA плату по всем правилам нужно реализовать ARP протокол, Address Resolution Protocol. Любое устройство в локальной сети имеет в своих драйверах таблицу ARP. В этой таблице хранится соответствие IP адреса его MAC адресу. Когда какая ни будь программа посылает пакет в сеть, стек драйверов ОС прежде всего проверяет в своей таблице известен ли MAC адресата. Если известен, то пакет тут же отправляется на известный MAC адрес. А если MAC неизвестен, то сперва отправляется широковещательный запрос ARP всем устройствам в сети "У кого есть вот такой IP?" и устройство с этим IP адресом должно откликнуться и прислать ARP ответ "Это мой IP, а вот мой MAC адрес". После этого, компьютер, получив ответ уже знает MAC и может действительно послать пакет адрасату. Новый известный MAC адрес помещается в таблицу MAC адресов, и при повторной передаче следующих пакетов ARP протокол уже не используется, ведь физический адрес клиента уже известен.

Сейчас я хочу усовершенствовать наш Ethernet проект для FPGA платы Марсоход3GW2 и добавить поддержку ARP протокола.
Наша плата FPGA теперь будет делать следующее: на неё (конкретно на её статический IP платы) теперь можно будет послать UDP пакет и этот пакет

  • зажигает светодиоды платы согласно принятому байту из UDP пакета;
  • управляет вращением шагового двигателя с заданной скоростью согласно принятому значению из UDP пакета.

Стенд для испытаний этого проекта показан на фото в начале статьи. На плате расширения Ethernet есть 4 выхода io16, io17, io18 и io19 они идут на драйвер двигателя L298N к которому уже подключен шаговый моторчик.

Далее расскажу чуть подробнее о проекте.

 gige test

Я беру недорогой гигабитный Ethernet коммутатор и подключаю к нему UTP5 патч кордами мой ноутбук и нашу FPGA плату Марсоход3GW2 (Gowin FPGA). Сделаем простой тестовый FPGA проект с шилдом Ethernet. Попробуем принимать и отправлять пакеты данных. 

gige ethernet shield angle view

Разработали новую плату расширения - это гигабитный Ethernet.

Её можно использовать совместно с нашими платами с FPGA Gowin Марсоход3GW2, с FPGA MAX10 Альтеры Марсоход3 / Марсоход3бис и Марсоход2 (Cyclone III) / Марсоход2бис (Cyclone IV), 

На плате установлена микросхема Realtek 8211E. Это так называемый трансивер, то есть одновременно и передатчик и приёмник (transciever, transmitter + receiver). Микросхема обеспечивает совместимость со стандартами 10Base-T, 100Base-TX, 1000Base-T IEEE 802.3. Чип Realtek обеспечивает физический уровень приема (PHY) и передачи Ethernet пакетов через кабель CAT5 UTP. При этом, микросхема достаточно умна, чтобы обнаруживать и исправлять ошибки приёмопередачи связанные с перекрестными помехами и эхо сигналами в кабеле. Так же эта микросхема автоматически обнаруживает прямой и перекрестный кабель.

Передача данных между PHY Realtek 8211E и FPGA осуществляется через интерфейс RGMII, Reduced Gigabit Media Independent Interface.

Файлы дизайна нашей платы в KiCad 6 выложены на гитхаб. Тут есть и схема и PCB платы и в папке doc есть документация на саму микросхему Realtek.

android bot

Это ещё один проект - ревизия ранее созданного. Я когда-то уже делал управление машинкой из браузера, теперь хочу его повторить. Идея проекта очень простая, но интересная:

  1. на машинку устанавливаем смартфон с ОС Андроид;
  2. на смартфоне запускаем Web Server, который напишем на питоне;
  3. клиент подключается с ноутбука к серверу на смартфоне и получает HTML страницу с двумя окнами: окно видео с камеры смартфона и окно с кнопками управления;
  4. кнопки управления это Старт, Стоп, Назад, Налево, Направо, кликая мышкой в браузере на эти кнопки клиент посылает запрос на Web сервер;
  5.  Web сервер принимает запросы от клиента и воспроизводит короткий аудио файл с синусоидой, все звуки разной частоты;
  6. смартфон подключим к АЦП FPGA платы, и плата сможет оцифровывать сигнал и распознавать частоту звука;
  7. каждой частоте звука сопоставлена команда на шаговые двигатели Марсохода: соответственно ехать вперёд или назад, остановиться или поворачивать налево или неправо.
  8. таким образом, оператор ноутбука в браузере может и видеть картинку с камеры смартфона и управлять куда Марсоходу ехать.

Есть несколько причин, почему я взялся повторить те старые проекты. Во-первых, теперь я буду делать Марсоход на универсальном шасси, напечатанном на 3D принтере. Во-вторых, теперь я сделаю проект на другой плате, на Марсоход3GW2 с микросхемой FPGA Gowin и тут у меня есть АЦП, я смогу надежно распознавать звуковые команды со смартфона. И в-третьих, к сожалению, тот мой давнишний проект сегодня уже невозможно точно воспроизвести. Тогда я использовал на смартфоне приложение SL4A - Scripting Layer For Android. Эта программа позволяла мне запускать питоновский скрипт на смартфоне. А сейчас SL4A нет в Android Google Play. Да и вообще, этот проект SL4A давно заморожен и врядли вы сможете им воспользоваться.. Ну не погибать же хорошей идее! Сегодня придётся запускать питоновскую программу как-то иначе, дальше расскажу как.

keyboards

Идея 1: Механическая

        На настоящий момент хорошо развита технология изготовления печатных плат. Существует множество сапров в которых вы можете изобразить нужную вам плату. Существует много фирм в которых по вашей документации эту плату могут изготовить. Причем в приемлимые сроки и незадорого. Есть даже технологии изготовления плат в домашних условиях. Раз с платами все так хорошо, возникает идея - нельзя ли использовать плату не только для размещения компонентов и проводников, но и как конструктивный элемент. Для одного нашего проекта (линейная видеокамера FLEXOCAM для контроля качества типографской печати на рулонах) понадобилась 6-ти кнопочная выносная клавиатура и мы решили эту идею попробовать.