Indholdsfortegnelse:

Gør enhver sensor ud af en FPGA: 4 trin
Gør enhver sensor ud af en FPGA: 4 trin

Video: Gør enhver sensor ud af en FPGA: 4 trin

Video: Gør enhver sensor ud af en FPGA: 4 trin
Video: VL53L1X Лазерный дистанционный датчик времени полета 400 см 2024, Juli
Anonim
Image
Image
FPGA
FPGA

De fleste producenter forsøgte at bygge et termometer mindst en gang i deres liv, måske er det, de har derhjemme, ikke smart nok, eller måske tror de, at de kan bygge det næste NEST. Ikke desto mindre havde de på et tidspunkt en mikrokontroller med deres state-of-the-art software tilsluttet en temperatursensor (og måske andre sensorer: tryk, lys). Indtil nu er alt perfekt, softwaren kører, og sensoren registrerer. Lad os teste det!

Hmmmm … måske skulle han varme sensoren op ved hjælp af en hårtørrer og afkøle den med is, det virker en tid. Men det virker ikke professionelt, sensoren ændrer værdier for hurtigt, hvis du varmer det op, det opvarmer ikke mere end et par grader. Projektet er en buste! Men algoritmen er ny, tager højde for en masse faktorer, hvor er det ærgerligt, at han sad fast ved denne dumt lille ting.

Min løsning er denne: få en FPGA til at fungere som en sensor med værdier streamet fra en pc (eller gemt i hukommelsen eller oprettet ad-hoc inde i FPGA). Så for din dyrebare MCU ligner FPGA en sensor, men ikke en sensor: hvilken sensor du kan lide. Måske beslutter du, at du har brug for mere opløsning eller hurtigere responstid end forventet, du skal ændre sensoren. Bestil det online, det kommer om et par dage, om et par måneder, hvem ved. Respin dit printkort, eller bestil et modul med den nye sensor. Eller … et par klik, og FPGA er konfigureret som din helt nye sensor, og den kan efterligne den nøjagtige interne konfiguration.

I skrivende stund kan FPGA fungere som en LM75 med temperaturdata gemt i BRAM (på FPGA).

Trin 1: MCU

Min foretrukne MCU er en LPC4337 på en LPCXpresso. Ovenpå har jeg et skjold (LPC General Purpose Shield) med et display og en ægte LM75 -sensor. LPC4337 er en ARM Cortex M4, der kører ved 200MHz og en mindre Cortex M0 (bruges ikke her). Den rigtige sensor er forbundet til I2C1 perifer, og vores virtuelle sensor vil blive forbundet til I2C0. Kilden er tilgængelig på min GitHub.

Hvordan bygger man det? Download LPCXpresso IDE sammen med LPCOpen bibliotek. Importer dette bibliotek til IDE, og åbn også projektet fra GitHub. Alt skal konfigureres, og du kan klikke på "Debug" i nederste venstre hjørne.

Hele projektet er baseret på et af NXP's eksempler (for at vise, at mit projekt simulerer en ægte sensor og ikke har brug for særlig kode på MCU -siden). I hovedfilen (kaldet iox_sensor.cpp) ligger denne kode:

#define SENSORS_ON_SHIELD

#if defineret (SENSORS_ON_SHIELD) #definer SHIELD_I2C I2C1 #elif defineret (SENSORS_ON_FPGA) #definer SHIELD_I2C I2C0 #endif

Ved at ændre SENSOR_ON_SHIELD og SENSOR_OR_FPGA kan brugeren på kompileringstidspunktet skifte til hvilken sensor der skal tales, den rigtige eller den virtuelle, som de er på forskellige I2C -ben.

Trin 2: FPGA

Mit FPGA -kort er et Artix 7 lavet af Digilent, der har et Xilinx Arty 7. To af PMod -stik bruges, et til fejlfinding og et til den reelle nyttelast, forbindelsen til MCU -kortet.

Igen er kildekoden til FPGA tilgængelig på min GitHub (fpgaSide -mappe).

Hvordan bygger man det? Download, køb eller åbn Xilinx Vivado IDE. Importer projektfilerne fra GitHub. En af filerne (content.coe) er temperaturdataene i råformat, der vil blive streamet til den falske sensor. Der er også en Excel -fil med samme navn, der hjælper med at konvertere menneskelige temperaturdata til rå LM75 -data. Jeg planlægger at ændre dette til en automatiseret proces med et stykke software skrevet i Java, men indtil da fungerer denne løsning. Syntese og implantation bør tage et stykke tid, tag dette i betragtning.

Trin 3: Hvordan fungerer det?

Hvordan virker det?
Hvordan virker det?
Hvordan virker det?
Hvordan virker det?

Som jeg sagde, for MCU ligner FPGA en sensor, mere præcist en I2C -sensor. Udgangen fra I2C -periferienheden er forbundet til FPGA's input. Inde i FPGA'en er der 3 hovedkomponenter:- I2C-controller- I2C-enhedsdata I2C-controlleren modtager I2C-data fra FPGA's pins og sender dem til resten af FPGA'en og gør det samme i omvendt rækkefølge. Den opretholder en intern tilstandsmaskine til I2C -protokollen (i øvrigt er her dokumentationen til den). Hvad sender denne komponent til I2C -enheden? Den aktuelt modtagne byte, positionen for denne byte i den aktuelle kommunikation, og om MCU'en skriver til eller læser fra FPGA. I2C -enheden modtager de sendte bytes og opdaterer den simulerede interne struktur af sensoren. Det kan bare opdatere registermarkøren eller anmode om nye data fra datakilden. Datakomponenten streamer nye datapunkter. I øjeblikket er det bare en ROM -hukommelse, hvis adresse øges (cirka) to gange i sekundet.

Hvad er mit slutmål? Det er vist på det andet billede. Det vil sige: gør det muligt for flere I2C -enheder (sensorer og andre) at være simulerbare på samme tid inde i FPGA. Dataene på bagsiden af sensoren, der skal cachelagres i FPGA og streames fra pc via USB eller Ethernet. Understøtt mere avancerede sensorer og andre I2C -enheder (hukommelse, LED -drivere osv.).

Trin 4: Sæt det hele sammen

Samler det hele
Samler det hele
Samler det hele
Samler det hele

Nu er det tid til at forbinde alt sammen. Teoretisk er det enkelt: mcu -kortet har et PMod -stik (I2C0 og SSP0 (kan fungere som SPI)). Artix -kortet har 4 PMod -stik, der kan bruges, som du vil. Jeg vælger stik D for at tale med MCU og stik B for at oprette forbindelse til min Logic Analyzer.

Advarsel

Du kan ikke forbinde de to tavler bare sådan. Hvorfor? PMod blev bygget for at lette forbindelsen mellem et Master/Host -kort (der giver strøm) til et Slave/Sensor -kort (der modtager strøm). Men i dette projekt giver begge tavler strøm, og hvis du slutter 3,3V -udgangen fra det ene bord til 3,3V -udgangen på det andet bord, kan der ske dårlige ting. Men det gør de måske ikke, og du kan bare ændre parametrene for FPGA's strømskinner (de er meget omhyggeligt designet). Så tag ikke denne risiko, og flyt stikket en stift til venstre (og vend også FPGA -kortet) som vist på ovenstående billeder. Her er PMod -specifikationen, du kan studere det, hvad jeg gjorde i korte ord er at ikke forbinde VCC'erne på de to tavler.

Anbefalede: