Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-23 15:02
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:
FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: 5 trinn
FPGA Cyclone IV DueProLogic Controls Raspberry Pi -kamera: Til tross for at FPGA DueProLogic er offisielt designet for Arduino, skal vi gjøre FPGA og Raspberry Pi 4B kommuniserbare. Tre oppgaver implementeres i denne opplæringen: (A) Trykk samtidig på de to trykknappene på FPGA for å snu vinkelen på
FPGA Cyclone IV DueProLogic - Trykknapp og LED: 5 trinn
FPGA Cyclone IV DueProLogic - Trykknapp og LED: I denne opplæringen skal vi bruke FPGA til å kontrollere ekstern LED -krets. Vi skal implementere følgende oppgaver (A) Bruk trykknappene på FPGA Cyclone IV DuePrologic for å kontrollere LED. (B) Flash LED på & av periodisk Video demo Lab
FPGA Cyclone IV DueProLogic Controls Servomotor: 4 trinn
FPGA Cyclone IV DueProLogic Controls Servomotor: I denne opplæringen skal vi skrive Verilog -kode for å kontrollere servomotor. Servoen SG-90 er produsert av Waveshare. Når du kjøper servomotoren, kan du motta et datablad som viser driftsspenningen, maksimalt dreiemoment og den foreslåtte Pu
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