Съдържание:
Видео: Направете всеки сензор от FPGA: 4 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Повечето производители се опитват да построят поне веднъж в живота си термометър, може би този, който имат у дома, не е достатъчно умен или може би смятат, че могат да построят следващия NEST. Независимо от това, в един момент те имаха микроконтролер с техния най-съвременен софтуер, свързан към температурен сензор (а може би и други сензори: налягане, светлина). Досега всичко беше перфектно, софтуерът работи и сензорът разпознава. Нека го тестваме!
Хммм … може би трябва да загрее сензора с помощта на сешоар и да го охлади с лед, той работи за известно време. Но това не изглежда професионално, сензорът променя стойностите твърде бързо, ако го загреете, той не загрява повече от няколко градуса. Проектът е провал! Но алгоритъмът е нов, взема предвид много фактори, какъв срам, че се е забил в това глупаво незначително нещо.
Моето решение е следното: накарайте FPGA да действа като сензор със стойности, излъчвани от компютър (или съхранявани в паметта, или създадени ad-hoc вътре в FPGA). Така че за вашето скъпоценно MCU FPGA изглежда като сензор, но не и какъвто и да е сензор: който и да е сензор, който харесвате. Може би решавате, че имате нужда от повече резолюция или по -бързо време за реакция от очакваното, трябва да смените сензора. Поръчайте го онлайн, той ще пристигне след няколко дни, след няколко месеца, кой знае. Респинирайте вашата печатна платка или поръчайте модул с новия сензор. Или… няколко щраквания и FPGA е конфигуриран като чисто нов сензор и може да подражава на точната вътрешна конфигурация.
В момента на писане на това, FPGA може да действа като LM75 с данни за температурата, съхранявани в BRAM (на FPGA).
Стъпка 1: MCU
Моят MCU по избор е LPC4337 на LPCXpresso. Върху него имам щит (LPC General Purpose Shield) с дисплей и истински LM75 сензор. LPC4337 е ARM Cortex M4, работещ на 200MHz и по -малък Cortex M0 (не се използва тук). Истинският сензор е свързан към периферния I2C1, а нашият виртуален ще бъде свързан към I2C0. Източникът е достъпен на моя GitHub.
Как да го изградим? Изтеглете LPCXpresso IDE заедно с библиотеката LPCOpen. Импортирайте тази библиотека в IDE и също отворете проекта от GitHub. Всичко трябва да бъде конфигурирано и можете да кликнете върху „Отстраняване на грешки“в долния ляв ъгъл.
Целият проект се основава на един от примерите на NXP (за да покаже, че моят проект симулира истински сензор и не се нуждае от специален код от страна на MCU). В основния файл (наречен iox_sensor.cpp) се намира този код:
#дефинирайте SENSORS_ON_SHIELD
#ако е дефиниран (SENSORS_ON_SHIELD) #дефинирайте SHIELD_I2C I2C1 #дефиниран елиф (SENSORS_ON_FPGA) #дефинирайте SHIELD_I2C I2C0 #endif
Чрез промяна на SENSOR_ON_SHIELD и SENSOR_OR_FPGA потребителят може да превключи по време на компилиране към кой сензор да говори, реалния или виртуалния, тъй като те са на различни I2C пинове.
Стъпка 2: FPGA
Моята 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 получава изпратените байтове и актуализира симулираната вътрешна структура на сензора. Може просто да актуализира указателя на регистъра или да поиска нови данни от източника на данни. Компонентът данни предава нови точки от данни. В момента това е просто ROM памет, чийто адрес се увеличава (приблизително) два пъти в секунда.
Каква е крайната ми цел? Показано е на втората снимка. Тоест: направете възможно повече I2C устройства (сензори и други) да бъдат симулирани едновременно в FPGA. Данните в задната част на сензора трябва да се кешират във FPGA и да се предават поточно от компютър чрез USB или Ethernet. Поддържайте по -модерни сензори и други I2C устройства (памет, LED драйвери и т.н.).
Стъпка 4: Съберете всичко заедно
Сега е моментът да свържете всичко заедно. Теоретично е просто: mcu платката има PMod конектор (I2C0 & SSP0 (може да работи като SPI)). Платката Artix има 4 PMod конектора, които могат да се използват както искате. Избирам конектор D за разговор с MCU и конектор B за свързване с моя логически анализатор.
Внимание
Не можете да свържете двете платки заедно просто така. Защо? PMod е създаден, за да улесни свързването на главна/хост платка (която дава захранване) към подчинена/сензорна платка (която получава захранване). Но в този проект и двете платки дават мощност и ако свържете 3.3V изхода от една платка към 3.3V изхода на другата платка, може да се случат лоши неща. Но те може и да не го направят, а вие просто да промените параметрите на захранващите релси на FPGA (те са много внимателно проектирани). Така че не поемайте този риск и преместете конектора с един щифт наляво (и също обърнете FPGA платката), както се вижда на горните снимки. Ето спецификацията на PMod, вие я изучавате, това, което направих с кратки думи, е да не свързвам VCC на двете платки.
Препоръчано:
Направете свой собствен сензор за влажност на почвата с Arduino !!!: 10 стъпки
Направете свой собствен сензор за влажност на почвата с Arduino !!!: ЗА !!! В тази инструкция ще свържем сензор за влажност на почвата FC-28 с Arduino. Този сензор измерва обемното съдържание на водата в почвата и ни дава нивото на влага като изход. Сензорът е оборудван с двата аналогови
Направете сензор за близост с Magicbit [Magicblocks]: 6 стъпки
Направете сензор за близост с Magicbit [Magicblocks]: Този урок ще ви научи да използвате сензор за близост с Magicbit с помощта на Magicblocks. Ние използваме magicbit като борда за разработка в този проект, който е базиран на ESP32. Следователно всяка платка за разработка на ESP32 може да се използва в този проект
Направете добър Dupont Pin-Crimp всеки път!: 15 стъпки (със снимки)
Направете добър Dupont Pin-Crimp ВСЕКИ ВРЕМЕ!: Всеки, който работи с Arduino, Raspberry PI, Beagle Bone или друг проект с много платки, се запозна с.025 X.025 in, квадратни щифтове и техните свързващи конектори . Мъжките щифтове обикновено се монтират към платката с b
Направете зарядно устройство за USB телефон за почти всеки мобилен телефон!: 4 стъпки
Направете зарядно устройство за USB телефон за почти всеки мобилен телефон !: Зарядното ми устройство изгоря, затова си помислих: „Защо не създадете свой собствен?“
Преобразувайте (само за) всеки медиен файл в (почти за) всеки друг медиен файл безплатно!: 4 стъпки
Преобразувайте (само за) всеки медиен файл в (почти за) всеки друг медиен файл безплатно !: Първите ми инструкции, наздраве! Както и да е, бях в Google и търсех безплатна програма, която да преобразува файловете ми Youtube.flv във формат, който е по -универсален, като.wmv или.mov. Търсих в безброй форуми и уебсайтове и след това намерих програма, наречена