Cuprins:
Video: Realizați orice senzor dintr-un FPGA: 4 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:43
Majoritatea factorilor de decizie au încercat să construiască cel puțin o dată în viață un termometru, poate cel pe care îl au acasă nu este suficient de inteligent sau poate cred că pot construi următorul NEST. Cu toate acestea, la un moment dat au avut un microcontroler cu software-ul lor de ultimă generație conectat la un senzor de temperatură (și poate la alți senzori: presiune, lumină). Până acum totul este perfect, software-ul funcționează și senzorul detectează. Să-l testăm!
Hmmmm … poate ar trebui să încălzească senzorul folosind un uscător de păr și să-l răcească cu gheață, funcționează o perioadă. Dar nu pare profesional, senzorul schimbă valorile prea repede dacă îl încălzești, nu se încălzește mai mult de câteva grade. Proiectul este un bust! Dar algoritmul este nou, ia în considerare o mulțime de factori, ce păcat că a rămas blocat la acest lucru prostesc minor.
Soluția mea este următoarea: faceți ca un FPGA să acționeze ca un senzor cu valori transmise de pe un PC (sau stocate în memorie sau create ad-hoc în interiorul FPGA). Deci, pentru prețioasa dvs. MCU, FPGA arată ca un senzor, dar nu orice senzor: oricare dintre senzori doriți. Poate decideți că aveți nevoie de mai multă rezoluție sau timp de răspuns mai rapid decât era de așteptat, trebuie să schimbați senzorul. Comandați-l online, va ajunge în câteva zile, de câteva luni, cine știe. Montați din nou PCB-ul sau comandați un modul cu noul senzor. Sau … câteva clicuri și FPGA este configurat ca senzorul dvs. nou-nouț și poate emula configurația internă exactă.
În momentul scrierii acestui lucru, FPGA ar putea acționa ca un LM75 cu date de temperatură stocate în BRAM (pe FPGA).
Pasul 1: MCU
MCU-ul meu ales este un LPC4337 pe un LPCXpresso. Deasupra lui am un scut (LPC General Purpose Shield) cu afișaj și un senzor LM75 real. LPC4337 este un ARM Cortex M4 care rulează la 200MHz și un Cortex M0 mai mic (neutilizat aici). Senzorul real este conectat la perifericul I2C1, iar cel virtual al nostru va fi conectat la I2C0. Sursa este disponibilă pe GitHub.
Cum să-l construiești? Descărcați LPCXpresso IDE împreună cu biblioteca LPCOpen. Importați acea bibliotecă în IDE și, de asemenea, deschideți proiectul din GitHub. Totul ar trebui să fie configurat și puteți face clic pe „Depanare” în colțul din stânga jos.
Întregul proiect se bazează pe unul dintre exemplele NXP (pentru a arăta că proiectul meu simulează un senzor real și nu are nevoie de cod special pe partea MCU). În fișierul principal (numit iox_sensor.cpp) se află acest cod:
#define SENSORS_ON_SHIELD
#definit (SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif definit (SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif
Prin schimbarea SENSOR_ON_SHIELD și SENSOR_OR_FPGA, utilizatorul poate comuta la momentul compilării la ce senzor să vorbească, cel real sau virtual, deoarece sunt pe pini I2C diferiți.
Pasul 2: FPGA
Placa mea FPGA la alegere este un Artix 7 realizat de Digilent, având un Xilinx Arty 7. Se folosesc doi dintre conectorii PMod, unul pentru depanare și unul pentru sarcina utilă reală, conexiunea cu placa MCU.
Din nou, codul sursă pentru FPGA este disponibil pe GitHub (folderul fpgaSide).
Cum să-l construiești? Descărcați, cumpărați sau deschideți Xilinx Vivado IDE. Importați fișierele proiectului din GitHub. Unul dintre fișiere (content.coe) este datele de temperatură în format brut care vor fi transmise în flux către senzorul fals. Există, de asemenea, un fișier Excel cu același nume care ajută la convertirea datelor de temperatură lizibile de om în date brute LM75. Am de gând să schimb acest lucru într-un proces automat cu o bucată de software scrisă în Java, dar până atunci această soluție funcționează. Sinteza și Implemantarea ar trebui să dureze ceva timp, ținând cont de acest lucru.
Pasul 3: Cum funcționează?
După cum am spus, pentru MCU, FPGA arată ca un senzor, mai exact un senzor I2C. Ieșirea perifericului I2C este conectată la intrarea FPGA. În interiorul FPGA există 3 componente principale: - Controler I2C - Dispozitiv I2C - Date Controlerul I2C primește date I2C de la pinii FPGA și le trimite către restul FPGA și face același lucru în ordine inversă. Acesta menține o mașină de stare internă pentru protocolul I2C (apropo, iată documentația pentru acesta). Ce trimite această componentă dispozitivului I2C? Octetul primit în prezent, poziția acelui octet în comunicarea curentă și dacă MCU scrie sau citește de pe FPGA. Dispozitivul I2C primește octeții trimiși și actualizează structura internă simulată a senzorului. S-ar putea doar să actualizeze indicatorul de înregistrare sau să solicite date noi de la sursa de date. Componenta Data transmite noi puncte de date. În prezent este doar o memorie ROM a cărei adresă este incrementată (aproximativ) de două ori pe secundă.
Care este scopul meu final? Este afișat în a doua imagine. Adică: face posibil ca mai multe dispozitive I2C (senzori și altele) să poată fi simulate în același timp în interiorul FPGA. Datele de pe backend-ul senzorului vor fi stocate în cache în FPGA și transmise în flux de la PC prin USB sau Ethernet. Acceptă senzori mai avansați și alte dispozitive I2C (memorie, drivere LED etc.).
Pasul 4: Puneți totul împreună
Acum este momentul să conectăm totul împreună. Teoretic, este simplu: placa mcu are un conector PMod (I2C0 și SSP0 (poate funcționa ca SPI)). Placa Artix are 4 conectori PMod care pot fi folosiți după cum doriți. Aleg conectorul D pentru a vorbi cu MCU și conectorul B pentru a mă conecta la analizorul meu logic.
Avertizare
Nu puteți conecta cele două plăci împreună la fel. De ce? PMod a fost construit pentru a ușura conectarea unei plăci Master / Host (care dă putere) la o placă Slave / Sensor (care primește energie). Dar în acest proiect ambele plăci oferă putere și dacă conectați ieșirea de 3,3V de la o placă la ieșirea de 3,3V a celeilalte plăci s-ar putea întâmpla lucruri rele. Dar s-ar putea să nu facă acest lucru și s-ar putea să schimbați doar parametrii șinelor de alimentare ale FPGA (sunt foarte atent proiectați). Așadar, nu vă asumați acest risc și mutați conectorul un pin spre stânga (și, de asemenea, întoarceți placa FPGA) așa cum se vede în imaginile de mai sus. Iată specificația PMod, o puteți studia, ceea ce am făcut în cuvinte scurte este să nu conectați VCC-urile celor două plăci.
Recomandat:
Realizați un EPUB simplu dintr-o serie de imagini: 13 pași
Creați un EPUB simplu dintr-o serie de imagini: Acesta nu este un proiect tehnic. Nu am de gând să spun despre ce este un EPUB și ce nu este un EPUB. Nu vă voi spune cum diferă de alte formate de fișiere. Un EPUB este un format super cool care poate fi folosit pentru mult, mult mai mult decât public
Realizați o unitate adecvată de expunere la PCB dintr-o lampă ieftină de întărire a unghiilor UV: 12 pași (cu imagini)
Realizați o unitate adecvată de expunere la PCB dintr-o lampă ieftină de întărire a unghiilor UV: Ce au în comun producția de PCB și unghiile false? Amândoi folosesc surse de lumină UV de intensitate ridicată și, după noroc, acele surse de lumină au exact aceeași lungime de undă. Doar cele pentru producția de PCB sunt de obicei destul de costisitoare
Realizați un motor puternic de 48V DC dintr-un motor Blender / burghiu mort: 3 pași
Realizați un motor puternic de 48V DC dintr-un motor Blender / burghiu mort: Bună! În acest instructiv, veți învăța cum să transformați un motor mort Blender / mașină de găurit (motor universal) într-un motor continuu DC puternic cu magnet permanent cu până la 10.000 RPM și o valoare bună a cuplului. Notă: Această metodă se aplică numai dacă
Realizați un iPod Nano Dock dintr-un Mini Dock IPod: 5 pași
Realizați un iPod Nano Dock dintr-un iPod Dock Mini: explică cum puteți converti cu ușurință un doc vechi destinat unui ipod mini pentru a fi utilizat cu un iPod nano (atât prima, cât și a doua generație o dată). mini și am primit docul pentru el rămas și acum am cumpărat un iPod nano și destul de subțire
Realizați un ceas dintr-un disc de frână pentru bicicletă: 7 pași
Creați un ceas dintr-un disc de frână pentru bicicletă: Iată ce puteți face cu toate acele discuri de frână vechi / de rezervă pe care le aveți în jur! Veți avea nevoie de: - disc de frână pentru bicicletă - ceas de perete cu cuțit ieftin- superglue- riglă- 2 lungimi șuruburi și 2 piulițe pentru a le potrivi (opțional) - brasso- burete de bucătărie + prosop