Indholdsfortegnelse:
Video: Gør enhver sensor ud af en FPGA: 4 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
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?
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
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:
Gør enhver R/C -bil til en Bluetooth -app -kontrol R/C -bil: 9 trin
Drejning af enhver R/C -bil til en Bluetooth -app -kontrol R/C -bil: Dette projekt viser trinene til at ændre en almindelig fjernbetjeningsbil til en Bluetooth (BLE) -styringsbil med Wombatics SAM01 robotkort, Blynk App og MIT App Inventor. er mange billige RC -biler med masser af funktioner som LED -forlygter og
Gør enhver højttaler til en Bluetooth -højttaler: 4 trin
Gør enhver højttaler til en Bluetooth -højttaler: For flere år siden var det almindeligt, at bærbare højttalere havde et 3,5 mm stik og blev drevet af AA -batterier. Efter dagens standarder er det lidt forældet, især batteriet, da hver gadget i dag har et genopladeligt batteri. Lydstikket er st
Gør enhver hovedtelefon til et modulært headset (ikke påtrængende) uden at beskadige hovedtelefonen: 9 trin
Gør enhver hovedtelefon til et modulært headset (ikke påtrængende) uden at beskadige hovedtelefonen.: Dette er en idé, jeg havde ud af det blå, efter at en ven gav mig nogle ødelagte superbillede headsets. Det er en modulær mikrofon, der kan magnetisk fastgøres til næsten enhver hovedtelefon (jeg kan godt lide dette, fordi jeg kan spille med high res -hovedtelefoner og også
Konverter (bare om) enhver mediefil til (bare om) enhver anden mediefil gratis !: 4 trin
Konverter (bare om) enhver mediefil til (bare om) enhver anden mediefil gratis !: Min første instruerbare, jubel! Alligevel var jeg på Google på udkig efter et gratis program, der ville konvertere mine Youtube.flv -filer til et format, der er mere universel, som. wmv eller.mov. Jeg søgte utallige fora og websteder og fandt derefter et program kaldet
Gør enhver optagelse til Youtube Widescreen i Sony Vegas .: 4 trin
Gør enhver optagelse til Youtube Widescreen i Sony Vegas .: Det tog mig også et par dage at finde ud af, og nu har jeg svaret. Jeg har aldrig tænkt på bare at søge efter det eller bruge Youtube (WTF!) … Bemærk, at jeg bruger Sony Vegas 8.0 Movie Studio (billigste / enkleste tilgængelig på det tidspunkt). Før og