Përmbajtje:

Bëni çdo sensor nga një FPGA: 4 hapa
Bëni çdo sensor nga një FPGA: 4 hapa

Video: Bëni çdo sensor nga një FPGA: 4 hapa

Video: Bëni çdo sensor nga një FPGA: 4 hapa
Video: Собаку бросили в лесу с коробкой макарон. История собаки по имени Ринго. 2024, Nëntor
Anonim
Image
Image
FPGA
FPGA

Shumica e krijuesve u përpoqën të ndërtonin të paktën një herë në jetën e tyre një termometër, ndoshta ai që kanë në shtëpi nuk është mjaft i zgjuar, ose ndoshta ata mendojnë se mund të ndërtojnë Folenë e ardhshme. Sidoqoftë, në një moment ata kishin një mikrokontrollues me softuerin e tyre më të avancuar të lidhur me një sensor të temperaturës (dhe ndoshta sensorë të tjerë: presion, dritë). Deri tani gjithçka është perfekte, softueri po funksionon dhe sensori po ndien. Le ta testojmë!

Hmmmm… ndoshta ai duhet ta ngrohë sensorin duke përdorur tharëse flokësh dhe ta ftohë duke përdorur akull, funksionon për një kohë. Por nuk duket profesionale, sensori ndryshon vlerat shumë shpejt nëse e ngroh, nuk nxehet më shumë se disa gradë. Projekti është një bust! Por algoritmi është i ri, merr parasysh shumë faktorë, çfarë turpi që ai ngeci në këtë gjë budallallëk të vogël.

Zgjidhja ime është kjo: bëni një FPGA të veprojë si një sensor me vlera të transmetuara nga një kompjuter (ose i ruajtur në kujtesë, ose i krijuar ad-hoc brenda FPGA). Pra, për MCU -në tuaj të çmuar, FPGA duket si një sensor, por jo çdo sensor: cilindo sensor që ju pëlqen. Ndoshta ju vendosni që keni nevojë për më shumë rezolucion ose kohë përgjigjeje më të shpejtë nga sa pritej, duhet të ndryshoni sensorin. Porositeni online, do të arrijë brenda disa ditësh, nja dy muajsh, kush e di. Përgjigjeni PCB -në tuaj ose porositni një modul me sensorin e ri. Ose… disa klikime dhe FPGA është konfiguruar si sensori juaj i ri dhe mund të imitojë konfigurimin e saktë të brendshëm.

Në momentin e shkrimit të kësaj, FPGA mund të veprojë si një LM75 me të dhënat e temperaturës të ruajtura në BRAM (në FPGA).

Hapi 1: MCU

MCU -ja ime e zgjedhur është një LPC4337 në një LPCXpresso. Në krye të saj kam një mburojë (LPC General Purpose Shield) me një ekran dhe një sensor të vërtetë LM75. LPC4337 është një ARM Cortex M4 që funksionon në 200MHz dhe një Cortex M0 më i vogël (nuk përdoret këtu). Sensori i vërtetë lidhet me I2C1 periferik dhe ai ynë virtual do të lidhet me I2C0. Burimi është në dispozicion në GitHub tim.

Si ta ndërtojmë atë? Shkarkoni LPCXpresso IDE së bashku me bibliotekën LPCOpen. Importoni atë bibliotekë në IDE dhe gjithashtu hapni projektin nga GitHub. Gjithçka duhet të konfigurohet dhe mund të klikoni në "Debug" në këndin e poshtëm të majtë.

I gjithë projekti bazohet në një nga shembujt e NXP (për të treguar se projekti im simulon një sensor të vërtetë dhe nuk ka nevojë për kod të veçantë në anën e MCU). Në skedarin kryesor (i quajtur iox_sensor.cpp) qëndron ky kod:

#përcakto SENSORS_ON_SHIELD

#nëse përcaktohet (SENSORS_ON_SHIELD) #përcakto SHIELD_I2C I2C1 #elif përcaktohet (SENSORS_ON_FPGA) #përcakto SHIELD_I2C I2C0 #endif

Duke ndryshuar SENSOR_ON_SHIELD dhe SENSOR_OR_FPGA, përdoruesi është në gjendje të kalojë në kohën e përpilimit në cilin sensor të flasë, atë të vërtetë apo atë virtual, pasi ato janë në kunja të ndryshme I2C.

Hapi 2: FPGA

Bordi im i zgjedhur i FPGA është një Artix 7 i bërë nga Digilent, që ka një Xilinx Arty 7. Dy nga lidhësit PMod përdoren, një për korrigjim dhe një për ngarkesën e vërtetë, lidhje me bordin MCU.

Përsëri, kodi burim për FPGA është në dispozicion në GitHub tim (dosja fpgaSide).

Si ta ndërtojmë atë? Shkarkoni, blini ose hapni Xilinx Vivado IDE. Importoni skedarët e projektit nga GitHub. Një nga skedarët (content.coe) janë të dhënat e temperaturës në format të papërpunuar që do të transmetohen në sensorin e rremë. Ekziston gjithashtu një skedar Excel me të njëjtin emër që ndihmon në konvertimin e të dhënave të temperaturës së lexueshme nga njerëzit në të dhëna të papërpunuara LM75. Unë jam duke planifikuar ta ndryshoj këtë në një proces të automatizuar me një pjesë të softuerit të shkruar në Java, por deri atëherë kjo zgjidhje funksionon. Sinteza dhe Zbatimi duhet të marrin pak kohë, merreni parasysh këtë.

Hapi 3: Si funksionon?

Si punon?
Si punon?
Si punon?
Si punon?

Siç thashë, për MCU, FPGA duket si një sensor, më saktësisht një sensor I2C. Dalja e periferikes I2C lidhet me hyrjen e FPGA -s. Brenda FPGA-s ka 3 komponentë kryesorë:- Kontrolluesi I2C- Pajisja I2C- Të dhënatKontrolluesi I2C merr të dhëna I2C nga kunjat e FPGA-së dhe i dërgon ato në pjesën tjetër të FPGA-së dhe bën të njëjtën gjë në mënyrë të kundërt. Ajo mban një makinë të brendshme të gjendjes për Protokollin I2C (nga rruga, këtu është dokumentacioni për të). Çfarë i dërgon ky komponent Pajisjes I2C? Bajti i marrë aktualisht, pozicioni i atij bajti në komunikimin aktual dhe nëse MCU po i shkruan ose po lexon nga FPGA. Pajisja I2C merr bajtët e dërguar dhe përditëson strukturën e brendshme të simuluar të sensorit. Mund të përditësojë vetëm treguesin e regjistrit ose të kërkojë të dhëna të reja nga burimi i të dhënave. Komponenti i të dhënave transmeton pika të reja të të dhënave. Aktualisht është vetëm një memorie ROM adresa e së cilës rritet (afërsisht) dy herë në sekondë.

Cili është qëllimi im përfundimtar? Shtë treguar në foton e dytë. Kjo do të thotë: bëni të mundur që më shumë pajisje I2C (sensorë dhe të tjerë) të jenë të simulueshëm në të njëjtën kohë brenda FPGA. Të dhënat në pjesën e pasme të sensorit të ruhen në FPGA dhe të transmetohen nga PC përmes USB ose Ethernet. Mbështetni sensorë më të avancuar dhe pajisje të tjera I2C (memorie, drejtues LED etj).

Hapi 4: Vendosja e të gjitha së bashku

Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku
Vendosja e të gjitha së bashku

Tani është koha për të lidhur gjithçka së bashku. Teorikisht, është e thjeshtë: bordi mcu ka një lidhës PMod (I2C0 & SSP0 (mund të funksionojë si SPI)). Bordi Artix ka 4 lidhje PMod që mund të përdoren ashtu siç dëshironi. Unë zgjedh lidhësin D për të folur me MCU dhe lidhësin B për t'u lidhur me Analizuesin tim Logjik.

Paralajmërim

Ju nuk mund t'i lidhni të dy bordet së bashku ashtu. Pse? PMod u ndërtua për të lehtësuar lidhjen e një bordi Master/Host (që jep fuqi) me një bord Slave/Sensor (që merr energji). Por në këtë projekt të dy bordet japin fuqi dhe nëse lidhni daljen 3.3V nga një tabelë me daljen 3.3V të bordit tjetër, mund të ndodhin gjëra të këqija. Por ato mund të mos jenë dhe ju thjesht mund të ndryshoni parametrat e binarëve të fuqisë së FPGA (ato janë projektuar me shumë kujdes). Pra, mos e merrni këtë rrezik dhe lëvizni lidhësin një kunj në të majtë (dhe gjithashtu përmbysni tabelën FPGA) siç shihet në fotot e mësipërme. Këtu është specifikimi PMod, ju mund ta studioni, ajo që bëra me fjalë të shkurtra është të mos lidh VCC -të e dy bordeve.

Recommended: