Sisukord:

Tehke FPGA -st mis tahes andur: 4 sammu
Tehke FPGA -st mis tahes andur: 4 sammu

Video: Tehke FPGA -st mis tahes andur: 4 sammu

Video: Tehke FPGA -st mis tahes andur: 4 sammu
Video: SCP-1730 Что случилось с сайта-13? 2024, November
Anonim
Image
Image
FPGA
FPGA

Enamik tegijaid proovis vähemalt korra elus termomeetrit ehitada, võib -olla pole see, mis neil kodus on, piisavalt tark või arvavad nad, et saavad järgmise PESTA ehitada. Sellegipoolest oli neil mingil hetkel mikrokontroller koos oma tipptasemel tarkvaraga ühendatud temperatuurianduriga (ja võib-olla ka muude anduritega: rõhk, valgus). Siiani on kõik täiuslik, tarkvara töötab ja andur tunneb. Proovime järele!

Hmmmm … võib -olla peaks ta andurit fööniga soojendama ja jääga jahutama, see töötab mõnda aega. Kuid see ei tundu professionaalne, andur muudab kuumutamisel väärtusi liiga kiiresti, see ei kuumene rohkem kui paar kraadi. Projekt on büst! Kuid algoritm on uus, võtab arvesse paljusid tegureid, kui kahju, et ta selle rumala pisiasja peale kinni jäi.

Minu lahendus on järgmine: pange FPGA toimima andurina, mille väärtused arvutist voogesitatakse (või salvestatakse mällu või luuakse FPGA-s ad hoc). Nii et teie kallihinnalise MCU jaoks näeb FPGA välja nagu andur, kuid mitte ükski andur: mis tahes andur teile meeldib. Võib -olla otsustate, et vajate oodatust suuremat eraldusvõimet või kiiremat reageerimisaega, peate anduri vahetama. Telli see Internetist, see jõuab kohale paari päeva, paari kuu jooksul, kes teab. Sisestage oma PCB või tellige moodul uue anduriga. Või… paar klõpsu ja FPGA on konfigureeritud teie uhiuueks anduriks ning see võib jäljendada täpset sisemist konfiguratsiooni.

Selle kirjutamise hetkel võib FPGA toimida LM75 -ga, mille temperatuuriandmed on salvestatud BRAM -i (FPGA -l).

1. samm: MCU

Minu valitud MCU on LPC4337 LPCXpresso peal. Selle peal on mul kilp (LPC General Purpose Shield) koos ekraaniga ja tõeline LM75 andur. LPC4337 on ARM Cortex M4, mis töötab sagedusel 200 MHz ja väiksem Cortex M0 (siin ei kasutata). Tõeline andur on ühendatud I2C1 välisseadmega ja meie virtuaalne ühendatakse I2C0 -ga. Allikas on saadaval minu GitHubis.

Kuidas seda ehitada? Laadige LPCXpresso IDE koos LPCOpen raamatukoguga alla. Importige see kogu IDE -sse ja avage ka projekt GitHubist. Kõik peaks olema konfigureeritud ja võite klõpsata vasakus alanurgas oleval nupul "Silumine".

Kogu projekt põhineb ühel NXP näitel (näitamaks, et minu projekt simuleerib tõelist andurit ega vaja erilist koodi MCU poolel). Põhifailis (nimega iox_sensor.cpp) asub see kood:

#define SENSORS_ON_SHIELD

#if defineeritud (SENSORS_ON_SHIELD) #defineeri SHIELD_I2C I2C1 #elif defineeritud (SENSORS_ON_FPGA) #defineeri SHIELD_I2C I2C0 #endif

Muutes SENSOR_ON_SHIELD ja SENSOR_OR_FPGA, on kasutajal võimalik kompileerimise ajal lülituda, millisele andurile rääkida, kas tõelisele või virtuaalsele, kuna need on erinevatel I2C tihvtidel.

2. samm: FPGA

Minu valitud FPGA -plaat on Digilent'i valmistatud Artix 7, millel on Xilinx Arty 7. Kasutatakse kahte PMod -pistikut, üks silumiseks ja teine tegelikuks koormuseks, ühendus MCU -plaadiga.

Jällegi on FPGA lähtekood saadaval minu GitHubis (kaust fpgaSide).

Kuidas seda ehitada? Laadige alla, ostke või avage Xilinx Vivado IDE. Importige projektifailid GitHubist. Üks failidest (content.coe) on töötlemata vormingus temperatuuriandmed, mida voogesitatakse võltsandurile. Samuti on olemas samanimeline Exceli fail, mis aitab inimesel loetavaid temperatuuri andmeid teisendada LM75 algandmeteks. Kavatsen muuta selle automatiseeritud protsessiks Java -ga kirjutatud tarkvaraga, kuid seni see lahendus töötab. Süntees ja rakendamine peaksid võtma aega, võtke seda arvesse.

3. samm: kuidas see toimib?

Kuidas see töötab?
Kuidas see töötab?
Kuidas see töötab?
Kuidas see töötab?

Nagu ma ütlesin, näeb MCU puhul FPGA välja nagu andur, täpsemalt I2C andur. I2C välisseadme väljund on ühendatud FPGA sisendiga. FPGA sees on 3 põhikomponenti:- I2C kontroller- I2C seadme andmed- I2C kontroller võtab vastu I2C andmed FPGA tihvtidelt ja saadab need ülejäänud FPGA-le ning teeb sama vastupidises järjekorras. See haldab I2C protokolli sisemist olekumasinat (muide, siin on selle dokumentatsioon). Mida see komponent saadab I2C -seadmele? Hetkel vastuvõetud bait, selle baidi asukoht praeguses suhtluses ja kas MCU kirjutab FPGA -le või loeb seda. I2C -seade võtab vastu saadetud baidid ja uuendab anduri simuleeritud sisemist struktuuri. See võib lihtsalt värskendada registri kursorit või nõuda andmeallikast uusi andmeid. Andmekomponent voogesitab uusi andmepunkte. Praegu on see lihtsalt ROM -mälu, mille aadressi suurendatakse (ligikaudu) kaks korda sekundis.

Mis on minu lõppeesmärk? See on näha teisel pildil. See tähendab: võimaldada rohkem I2C -seadmeid (andureid ja muid) simuleerida samal ajal FPGA -s. Anduri tagaküljel olevad andmed tuleb vahemällu salvestada FPGA -s ja voogesitada arvutist USB või Etherneti kaudu. Toetage täiustatud andureid ja muid I2C -seadmeid (mälu, LED -draiverid jne).

4. samm: pange see kõik kokku

Kõike kokku panema
Kõike kokku panema
Kõike kokku panema
Kõike kokku panema

Nüüd on aeg ühendada kõik omavahel. Teoreetiliselt on see lihtne: mcu -plaadil on PMod -pistik (I2C0 & SSP0 (võib töötada nagu SPI)). Artix -plaadil on 4 PMod -pistikut, mida saab kasutada nii, nagu soovite. Valin MCU -ga rääkimiseks pistiku D ja loogikaanalüsaatoriga ühendamiseks pistiku B.

Hoiatus

Te ei saa kahte tahvlit lihtsalt niimoodi ühendada. Miks? PMod ehitati selleks, et hõlbustada Master/Host plaadi (mis annab energiat) ühendamist Slave/Sensor plaadiga (mis saab energiat). Kuid selles projektis annavad mõlemad plaadid energiat ja kui ühendate 3,3 V väljundi ühelt tahvlilt teise plaadi 3,3 V väljundiga, võib juhtuda halbu asju. Kuid nad ei pruugi seda teha ja võite lihtsalt muuta FPGA toiteliinide parameetreid (need on väga hoolikalt kavandatud). Nii et ärge võtke seda riski ja liigutage pistikut üks tihvt vasakule (ja keerake ka FPGA -plaat ümber), nagu ülaltoodud piltidel näha. Siin on PModi spetsifikatsioon, uurige seda, mida ma tegin lühidalt, et mitte ühendada kahe plaadi VCC -sid.

Soovitan: