Tartalomjegyzék:

Készítsen bármilyen érzékelőt az FPGA -ból: 4 lépés
Készítsen bármilyen érzékelőt az FPGA -ból: 4 lépés

Videó: Készítsen bármilyen érzékelőt az FPGA -ból: 4 lépés

Videó: Készítsen bármilyen érzékelőt az FPGA -ból: 4 lépés
Videó: Как использовать гироскоп, акселерометр, магнитометр MPU-9250 для Arduino 2024, Július
Anonim
Image
Image
Az FPGA
Az FPGA

A legtöbb gyártó legalább egyszer életében megpróbált hőmérőt építeni, talán az, aki otthon van, nem elég okos, vagy talán úgy gondolja, hogy megépítheti a következő FÉRFT -et. Ennek ellenére valamikor volt egy mikrokontrollerük a legmodernebb szoftverrel, amely egy hőmérséklet-érzékelőhöz volt csatlakoztatva (és talán más érzékelők: nyomás, fény). Eddig minden tökéletes, a szoftver fut és az érzékelő érzékel. Teszteljük!

Hmmmm … talán fel kellene melegítenie az érzékelőt hajszárítóval, és le kell hűteni jéggel, egy ideig működik. De nem tűnik professzionálisnak, az érzékelő túl gyorsan megváltoztatja az értékeket, ha felmelegíti, nem melegszik fel pár foknál. A projekt egy mellszobor! De az algoritmus új, sok tényezőt figyelembe vesz, milyen kár, hogy elakadt ezen az ostoba apróságon.

A megoldásom a következő: állítson be egy FPGA-t érzékelőként, amelynek értékei a számítógépről (vagy a memóriában tárolva, vagy az FPGA-n belül ad-hoc módon létrehozva) vannak. Tehát az értékes MCU számára az FPGA úgy néz ki, mint egy érzékelő, de nem bármelyik érzékelő: bármelyik érzékelő tetszik. Talán úgy dönt, hogy a vártnál nagyobb felbontásra vagy gyorsabb válaszidőre van szüksége, cserélnie kell az érzékelőt. Rendeld meg online, pár napon belül, pár hónap múlva megérkezik, ki tudja. Nyomja meg a PCB -t, vagy rendeljen egy modult az új érzékelővel. Vagy… néhány kattintás, és az FPGA vadonatúj érzékelőként van konfigurálva, és emulálni tudja a pontos belső konfigurációt.

Ennek írásakor az FPGA LM75 -ként működhet, a BRAM -ban tárolt hőmérsékleti adatokkal (az FPGA -n).

1. lépés: Az MCU

Az én választott MCU -m az LPC4337 LPCXpresso -n. A tetején van egy pajzsom (LPC General Purpose Shield) kijelzővel és egy valódi LM75 érzékelővel. Az LPC4337 egy ARM Cortex M4, amely 200 MHz -en fut, és egy kisebb Cortex M0 (itt nem használatos). Az igazi érzékelő az I2C1 perifériához van csatlakoztatva, a virtuális pedig az I2C0 -hoz. A forrás elérhető a GitHub -on.

Hogyan kell felépíteni? Töltse le az LPCXpresso IDE -t az LPCOpen könyvtárral együtt. Importálja ezt a könyvtárat az IDE -be, és nyissa meg a projektet a GitHub -ból. Mindent be kell állítani, és kattintson a "Hibakeresés" gombra a bal alsó sarokban.

Az egész projekt az NXP egyik példáján alapul (hogy megmutassa, hogy a projektem valódi érzékelőt szimulál, és nincs szüksége speciális kódra az MCU oldalon). A fő fájlban (az úgynevezett iox_sensor.cpp) ez a kód található:

#define SENSORS_ON_SHIELD

#if meghatározott (SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif define (SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif

A SENSOR_ON_SHIELD és SENSOR_OR_FPGA beállítások megváltoztatásával a felhasználó a fordítás idején átválthat arra, hogy melyik érzékelőnek kell beszélnie, az igazihoz vagy a virtuálishoz, mivel különböző I2C érintkezőkön vannak.

2. lépés: Az FPGA

A választott FPGA kártyám a Digilent által gyártott Artix 7, Xilinx Arty 7. A PMod csatlakozók közül kettőt használnak, egyet a hibakereséshez, egyet pedig a valódi hasznos terheléshez, az MCU kártyához való csatlakozást.

Ismét az FPGA forráskódja elérhető a GitHub -on (fpgaSide mappa).

Hogyan kell felépíteni? Töltse le, vásárolja meg vagy nyissa meg a Xilinx Vivado IDE -t. Importálja a projektfájlokat a GitHub -ból. Az egyik fájl (content.coe) a nyers formátumú hőmérsékleti adatok, amelyeket a hamis érzékelőre továbbítanak. Van egy ugyanilyen nevű Excel fájl is, amely segít az ember által olvasható hőmérsékleti adatok nyers LM75 adatokká alakításában. Azt tervezem, hogy ezt egy automatizált folyamatra változtatom, Java -ban írt szoftverrel, de addig ez a megoldás működik. A szintézisnek és a megvalósításnak el kell telnie egy ideig, ezt vegye figyelembe.

3. lépés: Hogyan működik?

Hogyan működik?
Hogyan működik?
Hogyan működik?
Hogyan működik?

Mint mondtam, az MCU esetében az FPGA érzékelőnek tűnik, pontosabban I2C érzékelőnek. Az I2C periféria kimenete az FPGA bemenetéhez van csatlakoztatva. Az FPGA belsejében 3 fő összetevő található:- I2C vezérlő- I2C eszköz- adatok Az I2C vezérlő fogadja az I2C adatokat az FPGA csapjaitól, és elküldi azokat az FPGA többi részére, és ugyanezt fordított sorrendben teszi. Belső állapotgépet tart fenn az I2C protokoll számára (mellesleg itt található a dokumentáció). Mit küld ez az összetevő az I2C eszköznek? A jelenleg fogadott bájt, annak helye az aktuális kommunikációban, és hogy az MCU ír -e vagy olvas az FPGA -ból. Az I2C eszköz fogadja az elküldött bájtokat, és frissíti az érzékelő szimulált belső szerkezetét. Lehet, hogy csak frissíti a regisztermutatót, vagy új adatokat kér az adatforrástól. Az Adatösszetevő új adatpontokat továbbít. Jelenleg ez csak egy ROM memória, amelynek címe másodpercenként (körülbelül) kétszer növekszik.

Mi a végcélom? A második képen látható. Azaz: lehetővé kell tenni, hogy több I2C eszköz (érzékelő és egyéb) szimulálható legyen egyszerre az FPGA -n belül. Az érzékelő hátoldalán lévő adatokat az FPGA -ban tárolja gyorsítótárba, és USB -ről vagy Ethernetről továbbítja a számítógépről. Támogatja a fejlettebb érzékelőket és más I2C eszközöket (memória, LED -illesztőprogramok stb.).

4. lépés: Összerakni

Összerakni
Összerakni
Összerakni
Összerakni

Itt az ideje, hogy mindent összekapcsoljon. Elméletileg egyszerű: az mcu kártyán van egy PMod csatlakozó (I2C0 és SSP0 (úgy is működhet, mint az SPI)). Az Artix tábla 4 PMod csatlakozóval rendelkezik, amelyek tetszés szerint használhatók. A D csatlakozót választom az MCU -val való beszélgetéshez, és a B csatlakozót a Logic Analyzer készülékhez való csatlakozáshoz.

Figyelem

A két táblát nem lehet csak úgy összekapcsolni. Miért? A PMod -ot úgy építették fel, hogy megkönnyítse a Master/Host kártya (amely áramot ad) csatlakoztatását a Slave/Sensor kártyához (amely áramot kap). De ebben a projektben mindkét tábla áramot ad, és ha az egyik tábla 3.3V -os kimenetét a másik kártya 3.3V -os kimenetéhez csatlakoztatja, rossz dolgok történhetnek. De lehet, hogy nem, és lehet, hogy csak megváltoztatja az FPGA tápegységeinek paramétereit (nagyon gondosan vannak megtervezve). Tehát ne vállalja ezt a kockázatot, és mozgassa a csatlakozót egy tűvel balra (és fordítsa meg az FPGA kártyát is), ahogy a fenti képeken látható. Itt a PMod specifikáció, tanulmányozd át, amit tettem rövid szavakkal, hogy ne csatlakoztassam a két tábla VCC -jét.

Ajánlott: