Innehållsförteckning:

Gör en sensor av en FPGA: 4 steg
Gör en sensor av en FPGA: 4 steg

Video: Gör en sensor av en FPGA: 4 steg

Video: Gör en sensor av en FPGA: 4 steg
Video: VL53L1X Лазерный дистанционный датчик времени полета 400 см 2024, November
Anonim
Image
Image
FPGA
FPGA

De flesta tillverkare försökte bygga en termometer minst en gång i sitt liv, kanske är den som de har hemma inte tillräckligt smart, eller kanske tror de att de kan bygga nästa NEST. Ändå hade de någon gång en mikrokontroller med sin toppmoderna programvara ansluten till en temperatursensor (och kanske andra sensorer: tryck, ljus). Fram till nu är allt perfekt, programvaran körs och sensorn känner av. Låt oss testa det!

Hmmmm … kanske han borde värma upp sensorn med en hårtork och kyla ner den med is, det fungerar en tid. Men det verkar inte professionellt, sensorn ändrar värden för snabbt om du värmer upp det, det värms inte mer än ett par grader. Projektet är en byst! Men algoritmen är ny, tar hänsyn till många faktorer, vilken synd att han fastnade för denna dumma mindre sak.

Min lösning är följande: få en FPGA att fungera som en sensor med värden som strömmas från en dator (eller lagras i minnet eller skapas ad-hoc inuti FPGA). Så för din dyrbara MCU ser FPGA ut som en sensor, men inte någon sensor: vilken sensor du vill. Kanske du bestämmer dig för att du behöver mer upplösning eller snabbare svarstid än förväntat, du måste byta sensor. Beställ det online, det kommer om ett par dagar, om ett par månader, vem vet. Respin din kretskort eller beställ en modul med den nya sensorn. Eller … ett par klick och FPGA är konfigurerad som din helt nya sensor och den kan efterlikna den exakta interna konfigurationen.

I skrivande stund kan FPGA fungera som en LM75 med temperaturdata lagrade i BRAM (på FPGA).

Steg 1: MCU

Mitt val av MCU är en LPC4337 på en LPCXpresso. Ovanpå den har jag en skärm (LPC General Purpose Shield) med en display och en riktig LM75 -sensor. LPC4337 är en ARM Cortex M4 som körs på 200MHz och en mindre Cortex M0 (används inte här). Den riktiga sensorn är ansluten till I2C1 perifer och vår virtuella kommer att anslutas till I2C0. Källan är tillgänglig på min GitHub.

Hur bygger man det? Ladda ner LPCXpresso IDE tillsammans med LPCOpen -biblioteket. Importera det biblioteket till IDE och öppna också projektet från GitHub. Allt ska konfigureras och du kan klicka på "Debug" i nedre vänstra hörnet.

Hela projektet är baserat på ett av NXP: s exempel (för att visa att mitt projekt simulerar en riktig sensor och inte behöver särskild kod på MCU -sidan). I huvudfilen (kallad iox_sensor.cpp) ligger denna kod:

#define SENSORS_ON_SHIELD

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

Genom att ändra SENSOR_ON_SHIELD och SENSOR_OR_FPGA kan användaren vid kompileringstid växla till vilken sensor som ska prata, den verkliga eller den virtuella, som de är på olika I2C -stift.

Steg 2: FPGA

Mitt val av FPGA -kort är en Artix 7 gjord av Digilent, som har en Xilinx Arty 7. Två av PMod -kontakterna används, en för felsökning och en för den verkliga nyttolasten, anslutningen till MCU -kortet.

Återigen är källkoden för FPGA tillgänglig på min GitHub (fpgaSide -mapp).

Hur bygger man det? Ladda ner, köp eller öppna Xilinx Vivado IDE. Importera projektfilerna från GitHub. En av filerna (content.coe) är temperaturdata i råformat som kommer att streamas till den falska sensorn. Det finns också en Excel -fil med samma namn som hjälper till att konvertera människans läsbara temperaturdata till rå LM75 -data. Jag planerar att ändra detta till en automatiserad process med en mjukvara skriven i Java men tills dess fungerar den här lösningen. Syntes och implantation bör ta ett tag, ta hänsyn till detta.

Steg 3: Hur fungerar det?

Hur fungerar det?
Hur fungerar det?
Hur fungerar det?
Hur fungerar det?

Som sagt, för MCU ser FPGA ut som en sensor, mer exakt en I2C -sensor. Utgången från I2C -kringutrustningen är ansluten till FPGA: s ingång. Inuti FPGA finns det tre huvudkomponenter:- I2C Controller- I2C Device- Data I2C Controller tar emot I2C data från FPGA: s stift och skickar dem till resten av FPGA och gör samma sak i omvänd ordning. Den underhåller en intern tillståndsmaskin för I2C -protokollet (förresten, här är dokumentationen för det). Vad skickar denna komponent till I2C -enheten? Den för närvarande mottagna byten, positionen för den byten i den aktuella kommunikationen och om MCU skriver till eller läser från FPGA. I2C -enheten tar emot de skickade bytena och uppdaterar den simulerade interna strukturen hos sensorn. Det kan bara uppdatera registerpekaren eller begära ny data från datakällan. Datakomponenten strömmar nya datapunkter. För närvarande är det bara ett ROM -minne vars adress ökas (ungefär) två gånger per sekund.

Vad är mitt slutmål? Det visas på den andra bilden. Det vill säga: gör det möjligt för fler I2C -enheter (sensorer och andra) att vara simulerbara samtidigt inne i FPGA. Data på baksidan av sensorn som ska cachas i FPGA och streamas från PC via USB eller Ethernet. Stöd mer avancerade sensorer och andra I2C -enheter (minne, LED -drivrutiner etc).

Steg 4: Sätta ihop allt

Få alltid att falla på plats
Få alltid att falla på plats
Få alltid att falla på plats
Få alltid att falla på plats

Nu är det dags att ansluta allt till varandra. Teoretiskt är det enkelt: mcu -kortet har en PMod -kontakt (I2C0 och SSP0 (kan fungera som SPI)). Artix -kortet har 4 PMod -kontakter som kan användas hur du vill. Jag väljer kontakt D för att prata med MCU och kontakt B för att ansluta till min Logic Analyzer.

Varning

Du kan inte koppla ihop de två korten precis så. Varför? PMod byggdes för att underlätta anslutningen av ett Master/Host -kort (som ger ström) till ett Slave/Sensor -kort (som tar emot ström). Men i det här projektet ger båda korten ström och om du ansluter 3.3V -utgången från ett kort till 3.3V -utgången på det andra kortet kan det hända saker. Men de kanske inte gör det och du kan bara ändra parametrarna för FPGA: s kraftskenor (de är mycket noggrant utformade). Så ta inte denna risk och flytta kontakten en stift till vänster (och vänd också FPGA -kortet) som visas på bilderna ovan. Här är PMod -specifikationen, du kan studera det, det jag gjorde i korta ord är att inte ansluta VCC: erna för de två korten.

Rekommenderad: