Sadržaj:

Napravite bilo koji senzor od FPGA: 4 koraka
Napravite bilo koji senzor od FPGA: 4 koraka

Video: Napravite bilo koji senzor od FPGA: 4 koraka

Video: Napravite bilo koji senzor od FPGA: 4 koraka
Video: Raptoreum AMA for November 26, 2023 (Chapters in Description) 2024, Srpanj
Anonim
Image
Image
FPGA
FPGA

Većina proizvođača pokušala je barem jednom u životu izgraditi termometar, možda onaj koji imaju kod kuće nije dovoljno pametan ili možda misle da mogu izgraditi sljedeći NEST. Ipak, u jednom trenutku imali su mikrokontroler sa svojim najsuvremenijim softverom spojenim na temperaturni senzor (a možda i drugi senzori: tlak, svjetlo). Do sada je sve savršeno, softver je pokrenut i senzor senzorira. Hajde da ga testiramo!

Hmmmm … možda bi trebao zagrijati senzor sušilom za kosu i ohladiti ga pomoću leda, radi neko vrijeme. Ali ne djeluje profesionalno, senzor prebrzo mijenja vrijednosti ako ga zagrijete, ne zagrijava se više od nekoliko stupnjeva. Projekt je propast! No, algoritam je nov, uzima u obzir mnogo čimbenika, šteta što je zapeo zbog ove glupo sporedne stvari.

Moje rješenje je sljedeće: učinite da FPGA djeluje kao senzor s vrijednostima koje struje s računala (ili pohranjene u memoriji ili stvorene ad-hoc unutar FPGA-e). Dakle, za vaš dragocjeni MCU FPGA izgleda kao senzor, ali ne i bilo koji senzor: koji god senzor želite. Možda odlučite da trebate veću razlučivost ili brže vrijeme odziva od očekivanog, morate promijeniti senzor. Naručite ga putem interneta, stići će za par dana, za par mjeseci, tko zna. Ponovno okrenite PCB ili naručite modul s novim senzorom. Ili … nekoliko klikova i FPGA je konfigurirana kao vaš potpuno novi senzor i može oponašati točnu unutarnju konfiguraciju.

U trenutku pisanja ovoga, FPGA bi mogao djelovati kao LM75 s podacima o temperaturi pohranjenim u BRAM -u (na FPGA -i).

Korak 1: MCU

Moj MCU po izboru je LPC4337 na LPCXpressu. Na vrhu imam štit (LPC štit opće namjene) s zaslonom i pravim LM75 senzorom. LPC4337 je ARM Cortex M4 koji radi na 200MHz i manji Cortex M0 (ovdje se ne koristi). Pravi senzor spojen je na periferiju I2C1, a naš virtualni senzor bit će spojen na I2C0. Izvor je dostupan na mom GitHubu.

Kako ga izgraditi? Preuzmite LPCXpresso IDE zajedno s knjižnicom LPCOpen. Uvezite tu knjižnicu u IDE i otvorite projekt s GitHub -a. Sve bi trebalo biti konfigurirano i možete kliknuti na "Otklanjanje pogrešaka" u donjem lijevom kutu.

Cijeli projekt temelji se na jednom od primjera NXP -a (kako bi pokazao da moj projekt simulira pravi senzor i da mu nije potreban poseban kod sa MCU -a). U glavnoj datoteci (koja se naziva iox_sensor.cpp) nalazi se ovaj kod:

#definirajte SENSORS_ON_SHIELD

#if definirano (SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif defined (SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif

Promjenom SENSOR_ON_SHIELD i SENSOR_OR_FPGA korisnik može u vrijeme kompajliranja prebaciti na koji senzor za razgovor, pravi ili virtualni, jer se nalaze na različitim I2C pinovima.

Korak 2: FPGA

Moja FPGA ploča po izboru je Artix 7 proizvođača Digilent sa Xilinx Arty 7. Koriste se dva PMod konektora, jedan za otklanjanje pogrešaka, a drugi za stvarnu nosivost, vezu s MCU pločom.

Ponovno, izvorni kod za FPGA dostupan je na mom GitHubu (mapa fpgaSide).

Kako ga izgraditi? Preuzmite, kupite ili otvorite Xilinx Vivado IDE. Uvezite datoteke projekta s GitHub -a. Jedna od datoteka (content.coe) su podaci o temperaturi u neobrađenom formatu koji će se streamati na lažni senzor. Postoji i Excel datoteka s istim imenom koja pomaže pri pretvaranju podataka o temperaturi čitljivih za ljude u sirove podatke LM75. Planiram ovo promijeniti u automatizirani proces s nekim softverom napisanim na Javi, ali do tada ovo rješenje funkcionira. Sinteza i implementacija trebaju potrajati, uzmite to u obzir.

Korak 3: Kako to funkcionira?

Kako radi?
Kako radi?
Kako radi?
Kako radi?

Kao što sam rekao, za MCU, FPGA izgleda kao senzor, točnije I2C senzor. Izlaz periferije I2C spojen je na ulaz FPGA. Unutar FPGA-e postoje 3 glavne komponente:- I2C kontroler- I2C uređaj- podaciI2C Kontroler prima I2C podatke s pinova FPGA-e i šalje ih ostatku FPGA-e i čini isto obrnutim redoslijedom. Održava unutarnji stroj stanja za I2C protokol (usput, evo dokumentacije za to). Što ova komponenta šalje na I2C uređaj? Trenutno primljeni bajt, položaj tog bajta u trenutnoj komunikaciji i piše li MCU na FPGA ili čita s njega. I2C uređaj prima poslane bajtove i ažurira simuliranu unutarnju strukturu senzora. Može samo ažurirati pokazivač registra ili zatražiti nove podatke od izvora podataka. Komponenta Data struji nove podatkovne točke. Trenutno je to samo ROM memorija čija se adresa povećava (približno) dva puta u sekundi.

Koji je moj krajnji cilj? To je prikazano na drugoj slici. Odnosno: omogućiti više simulacija I2C uređaja (senzora i drugih) u isto vrijeme unutar FPGA -e. Podaci na pozadini senzora će se predmemorirati u FPGA i prenositi s računala putem USB -a ili Etherneta. Podržavajte naprednije senzore i druge I2C uređaje (memorija, LED upravljački programi itd.).

Korak 4: Sve spojite

Spajajući sve zajedno
Spajajući sve zajedno
Spajajući sve zajedno
Spajajući sve zajedno

Sada je vrijeme da sve povežete u isto vrijeme. Teoretski je jednostavno: mcu ploča ima PMod priključak (I2C0 i SSP0 (može raditi kao SPI)). Artix ploča ima 4 PMod konektora koji se mogu koristiti kako god želite. Odabirem konektor D za razgovor s MCU -om i konektor B za spajanje na svoj Logic Analyzer.

Upozorenje

Ne možete spojiti dvije ploče samo tako. Zašto? PMod je napravljen za olakšavanje povezivanja glavne/host ploče (koja daje snagu) na slave/senzorsku ploču (koja prima napajanje). No u ovom projektu obje ploče daju snagu i ako spojite 3.3V izlaz s jedne ploče na 3.3V izlaz druge ploče, mogle bi se dogoditi loše stvari. Ali oni možda neće, a vi samo promijenite parametre tračnica za napajanje FPGA -e (vrlo su pažljivo projektirane). Zato nemojte riskirati i pomaknite konektor jednim pinom ulijevo (i okrenite FPGA ploču) kao što se vidi na gornjim slikama. Ovdje je specifikacija PModa, proučite je, ono što sam učinio u kratkim riječima je da ne povežem VCC -ove dviju ploča.

Preporučeni: