Innholdsfortegnelse:
Video: Lag en sensor ut av en FPGA: 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
De fleste produsenter prøvde å bygge et termometer minst en gang i livet, kanskje det som de har hjemme ikke er smart nok, eller kanskje tror de at de kan bygge neste NEST. Likevel hadde de på et tidspunkt en mikrokontroller med sin topp moderne programvare koblet til en temperatursensor (og kanskje andre sensorer: trykk, lys). Inntil nå er alt perfekt, programvaren kjører og sensoren registrerer. La oss teste det!
Hmmmm … kanskje han burde varme opp sensoren med en hårføner og kjøle den ned med is, det fungerer en stund. Men det virker ikke profesjonelt, sensoren endrer verdier for fort hvis du varmer den opp, den varmes ikke opp mer enn et par grader. Prosjektet er en byste! Men algoritmen er ny, tar hensyn til mange faktorer, så synd at han ble sittende fast på denne dumt mindre tingen.
Min løsning er denne: få en FPGA til å fungere som en sensor med verdier streamet fra en PC (eller lagret i minnet, eller opprettet ad-hoc inne i FPGA). Så for din dyrebare MCU ser FPGA ut som en sensor, men ikke hvilken som helst sensor: hvilken sensor du liker. Kanskje du bestemmer deg for at du trenger mer oppløsning eller raskere responstid enn forventet, du må bytte sensor. Bestill den online, den kommer om et par dager, om et par måneder, hvem vet. Svar på kretskortet eller bestill en modul med den nye sensoren. Eller … et par klikk og FPGA er konfigurert som din splitter nye sensor, og den kan etterligne den eksakte interne konfigurasjonen.
I skrivende stund kan FPGA fungere som en LM75 med temperaturdata lagret i BRAM (på FPGA).
Trinn 1: MCU
Mitt valgfrie MCU er en LPC4337 på en LPCXpresso. På toppen av det har jeg et skjold (LPC General Purpose Shield) med et display og en ekte LM75 -sensor. LPC4337 er en ARM Cortex M4 som kjører på 200MHz og en mindre Cortex M0 (brukes ikke her). Den virkelige sensoren er koblet til I2C1 perifer, og vår virtuelle vil bli koblet til I2C0. Kilden er tilgjengelig på min GitHub.
Hvordan bygge den? Last ned LPCXpresso IDE sammen med LPCOpen bibliotek. Importer det biblioteket til IDE og åpne også prosjektet fra GitHub. Alt bør konfigureres, og du kan klikke på "Debug" i nedre venstre hjørne.
Hele prosjektet er basert på et av NXPs eksempler (for å vise at prosjektet mitt simulerer en ekte sensor og ikke trenger spesiell kode på MCU -siden). I hovedfilen (kalt iox_sensor.cpp) ligger denne koden:
#define SENSORS_ON_SHIELD
#if definert (SENSORS_ON_SHIELD) #definer SHIELD_I2C I2C1 #elif definert (SENSORS_ON_FPGA) #definer SHIELD_I2C I2C0 #endif
Ved å endre SENSOR_ON_SHIELD og SENSOR_OR_FPGA kan brukeren på kompileringstidspunktet bytte til hvilken sensor som skal snakkes, den virkelige eller den virtuelle, som de er på forskjellige I2C -pinner.
Trinn 2: FPGA
Mitt FPGA -kort er et Artix 7 laget av Digilent, som har et Xilinx Arty 7. To av PMod -kontaktene brukes, en for feilsøking og en for den virkelige nyttelasten, forbindelsen til MCU -kortet.
Igjen er kildekoden for FPGA tilgjengelig på min GitHub (fpgaSide -mappe).
Hvordan bygge den? Last ned, kjøp eller åpne Xilinx Vivado IDE. Importer prosjektfilene fra GitHub. En av filene (content.coe) er temperaturdataene i råformat som skal streames til den falske sensoren. Det er også en Excel -fil med samme navn som hjelper med å konvertere menneskelige lesbare temperaturdata til rå LM75 -data. Jeg planlegger å endre dette til en automatisert prosess med et programvare skrevet i Java, men til da fungerer denne løsningen. Syntese og implantasjon bør ta en stund, ta dette i betraktning.
Trinn 3: Hvordan fungerer det?
Som jeg sa, for MCU, ser FPGA ut som en sensor, nærmere bestemt en I2C -sensor. Utgangen fra I2C -periferienheten er koblet til FPGAs inngang. Inne i FPGA er det 3 hovedkomponenter:- I2C-kontroller- I2C-enhetsdata I2C-kontrolleren mottar I2C-data fra FPGAs pinner og sender dem til resten av FPGA og gjør det samme i motsatt rekkefølge. Den opprettholder en intern tilstandsmaskin for I2C -protokollen (forresten, her er dokumentasjonen for den). Hva sender denne komponenten til I2C -enheten? Den nåværende mottatte byten, posisjonen til den byten i den nåværende kommunikasjonen og om MCU skriver til eller leser fra FPGA. I2C -enheten mottar de sendte byte og oppdaterer den simulerte interne strukturen til sensoren. Det kan bare oppdatere registerpekeren eller be om nye data fra datakilden. Datakomponenten strømmer nye datapunkter. Foreløpig er det bare et ROM -minne hvis adresse økes (omtrent) to ganger i sekundet.
Hva er sluttmålet mitt? Det er vist på det andre bildet. Det vil si: gjør det mulig for flere I2C -enheter (sensorer og andre) å være simulerbare samtidig inne i FPGA. Dataene på baksiden av sensoren som skal bufres i FPGA og streames fra PC via USB eller Ethernet. Støtt mer avanserte sensorer og andre I2C -enheter (minne, LED -drivere osv.).
Trinn 4: Sett alt sammen
Nå er det på tide å koble alt sammen. Teoretisk sett er det enkelt: mcu -kortet har en PMod -kontakt (I2C0 og SSP0 (kan fungere som SPI)). Artix -kortet har 4 PMod -kontakter som kan brukes som du vil. Jeg velger kontakt D for å snakke med MCU og kontakt B for å koble til min Logic Analyzer.
Advarsel
Du kan ikke bare koble de to brettene sammen. Hvorfor? PMod ble bygget for å lette tilkoblingen av et Master/Host -kort (som gir strøm) til et Slave/Sensor -kort (som mottar strøm). Men i dette prosjektet gir begge kortene strøm, og hvis du kobler 3.3V -utgangen fra det ene kortet til 3.3V -utgangen på det andre kortet, kan det skje dårlige ting. Men de gjør det kanskje ikke, og du kan bare endre parametrene for kraftskinnene til FPGA (de er veldig nøye designet). Så ikke ta denne risikoen, og flytt kontakten en pinne til venstre (og snu også FPGA -kortet) som vist på bildene ovenfor. Her er PMod -spesifikasjonen, du kan studere den. Det jeg gjorde i korte ord er å ikke koble VCC -ene til de to kortene.
Anbefalt:
Lag GPS -GRENSER ved å bruke Arduino: 8 trinn
Lag GPS -GRENSER Ved å bruke Arduino: I denne opplæringen lærer vi hvordan du lager en GPS -GRENSE med Arduino, dette er nyttig når du har en robot og du ikke vil at den skal gå utenfor det angitte området. Når roboten er utenfor området , vil displayet vise "Utenfor"
Lag Macintosh Plus ROM: 3 trinn (med bilder)
Lag Macintosh Plus ROM -er: Denne instruksjonsguiden veileder deg gjennom prosessen med å "rippe" EPROM bilder fra fra Macintosh Plus ROM -brikkene dine og (eller) " brenning " bildene til nye sjetonger. Prosessen vil i utgangspunktet bli utført to ganger for å lage begge & quot
Lag en uendelig speilklokke: 15 trinn (med bilder)
Lag en Infinity Mirror Clock: I et tidligere prosjekt bygde jeg et uendelig speil, der mitt endelige mål for det var å gjøre det til en klokke. (Lag et fargerikt uendelig speil) Jeg forfulgte ikke det etter å ha bygd det, for selv om det så kult ut, var det noen ting med
Lag en 2GIG Like Door Sensor for ~ $ 4 Avhengig av kjøpsvolum: 6 trinn
Lag en 2GIG Like Door Sensor for ~ $ 4 Avhengig av kjøpsvolum: Denne guiden vil demonstrere prosessen du kan følge for å lage din egen kompatible sikkerhetsdørsensor som fremdeles ser slank ut og er veldig billig
Lag din egen kjørekommando med enkle trinn: 4 trinn
Lag din egen run -kommando med enkle trinn: Her viser jeg hvordan du kan lage din egen run -kommando i Windows OS. Egentlig er denne funksjonen i Windows flott, noe som er nyttig for å åpne applikasjonsvinduet umiddelbart. Så nå kan du også opprette kommandoen din for å åpne et hvilket som helst program ved å skrive inn