Obsah:

Vytvorte z FPGA akýkoľvek senzor: 4 kroky
Vytvorte z FPGA akýkoľvek senzor: 4 kroky

Video: Vytvorte z FPGA akýkoľvek senzor: 4 kroky

Video: Vytvorte z FPGA akýkoľvek senzor: 4 kroky
Video: čip 2024, November
Anonim
Image
Image
FPGA
FPGA

Väčšina výrobcov sa pokúsila postaviť aspoň raz v živote teplomer, možno ten, ktorý majú doma, nie je dosť múdry, alebo si myslia, že môžu postaviť ďalšie hniezdo. Napriek tomu v určitom okamihu mali mikrokontrolér so svojim najmodernejším softvérom napojený na snímač teploty (a možno aj ďalšie senzory: tlak, svetlo). Až doteraz bolo všetko perfektné, softvér beží a snímač sníma. Poďme to otestovať!

Hmmmm … možno by mal snímač zahriať pomocou sušiča vlasov a ochladiť ľadom, chvíľu to funguje. Ale nezdá sa to profesionálne, snímač mení hodnoty príliš rýchlo, ak ho zahrievate, neohrieva viac ako pár stupňov. Projekt je krach! Algoritmus je však nový a zohľadňuje veľa faktorov. Škoda, že sa zasekol pri tejto hlúposti.

Moje riešenie je toto: Nechajte FPGA pôsobiť ako senzor s hodnotami streamovanými z počítača (alebo uloženými v pamäti alebo vytvorenými ad-hoc vnútri FPGA). Takže pre váš drahocenný MCU vyzerá FPGA ako senzor, ale nie žiadny senzor: ktorýkoľvek senzor sa vám páči. Možno sa rozhodnete, že potrebujete viac rozlíšenia alebo rýchlejší čas odozvy, ako sa očakávalo, budete musieť vymeniť snímač. Objednajte si to online, príde to za pár dní, pár mesiacov, ktovie. Zapojte dosku plošných spojov alebo si objednajte modul s novým senzorom. Alebo … pár kliknutí a FPGA je nakonfigurovaný ako váš úplne nový senzor a môže emulovať presnú vnútornú konfiguráciu.

V čase písania tohto článku by FPGA mohol fungovať ako LM75 s teplotnými údajmi uloženými v BRAM (na FPGA).

Krok 1: MCU

Môj vybraný MCU je LPC4337 na LPCXpresso. Na vrchole mám štít (LPC General Purpose Shield) s displejom a skutočným snímačom LM75. LPC4337 je ARM Cortex M4 s frekvenciou 200 MHz a menší Cortex M0 (tu sa nepoužíva). Skutočný snímač je pripojený k periférii I2C1 a náš virtuálny bude pripojený k I2C0. Zdroj je k dispozícii na mojom GitHub.

Ako ho postaviť? Stiahnite si LPCXpresso IDE spolu s knižnicou LPCOpen. Importujte túto knižnicu do IDE a tiež otvorte projekt z GitHub. Všetko by malo byť nakonfigurované a v ľavom dolnom rohu kliknite na „Ladiť“.

Celý projekt je založený na jednom z príkladov NXP (ako ukazuje, že môj projekt simuluje skutočný senzor a na strane MCU nepotrebuje špeciálny kód). V hlavnom súbore (nazývanom iox_sensor.cpp) je tento kód:

#define SENSORS_ON_SHIELD

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

Zmenou SENSOR_ON_SHIELD a SENSOR_OR_FPGA je užívateľ schopný v čase kompilácie prepnúť, na ktorý senzor bude hovoriť, skutočný alebo virtuálny, pretože sú na rôznych I2C pinoch.

Krok 2: FPGA

Moja zvolená doska FPGA je Artix 7 od spoločnosti Digilent s Xilinx Arty 7. Používajú sa dva konektory PMod, jeden na ladenie a jeden na skutočné užitočné zaťaženie, spojenie s doskou MCU.

Zdrojový kód pre FPGA je opäť k dispozícii na mojom GitHub (priečinok fpgaSide).

Ako ho postaviť? Stiahnite si, kúpte alebo otvorte Xilinx Vivado IDE. Importujte súbory projektu z GitHub. Jeden zo súborov (content.coe) sú údaje o teplote v surovom formáte, ktoré sa budú streamovať do falošného senzora. Existuje tiež súbor programu Excel s rovnakým názvom, ktorý pomáha s prevodom údajov o teplote čitateľných ľuďmi na nespracované údaje LM75. Plánujem to zmeniť na automatizovaný proces pomocou softvéru napísaného v Jave, ale dovtedy toto riešenie funguje. Syntéza a implementácia by mali chvíľu trvať, vezmite to do úvahy.

Krok 3: Ako to funguje?

Ako to funguje?
Ako to funguje?
Ako to funguje?
Ako to funguje?

Ako som povedal, pre MCU vyzerá FPGA ako snímač, presnejšie snímač I2C. Výstup periférie I2C je pripojený k vstupu FPGA. Vnútri FPGA sú 3 hlavné komponenty:- I2C kontrolér- I2C zariadenie- Údaje Riadiaci modul I2C prijíma údaje I2C z pinov FPGA a odosiela ich do zvyšku FPGA a robí to isté v opačnom poradí. Udržiava stroj s vnútorným stavom pre protokol I2C (mimochodom, tu je jeho dokumentácia). Čo tento komponent odosiela do zariadenia I2C? Aktuálne prijatý bajt, poloha tohto bajtu v aktuálnej komunikácii a to, či MCU zapisuje do alebo číta z FPGA. Zariadenie I2C prijíma odoslané bajty a aktualizuje simulovanú vnútornú štruktúru senzora. Môže to len aktualizovať ukazovateľ registra alebo vyžiadať nové údaje zo zdroja údajov. Komponent Data streamuje nové dátové body. V súčasnosti je to len pamäť ROM, ktorej adresa sa zvyšuje (približne) dvakrát za sekundu.

Aký je môj konečný cieľ? Je to znázornené na druhom obrázku. To znamená: umožnite, aby bolo vo FPGA simulovateľných viac zariadení I2C (senzorov a ďalších) súčasne. Údaje na zadnej strane senzora sa majú uložiť do pamäte FPGA a streamovať z počítača cez USB alebo Ethernet. Podpora pokročilejších senzorov a ďalších zariadení I2C (pamäť, ovládače LED atď.).

Krok 4: Dajte to všetko dohromady

Dávať to všetko dokopy
Dávať to všetko dokopy
Dávať to všetko dokopy
Dávať to všetko dokopy

Teraz je načase všetko prepojiť. Teoreticky je to jednoduché: doska mcu má konektor PMod (I2C0 a SSP0 (môže fungovať ako SPI)). Doska Artix má 4 konektory PMod, ktoré je možné použiť, ako len chcete. Vybral som konektor D na rozhovor s MCU a konektor B na pripojenie k môjmu logickému analyzátoru.

Pozor

Obe dosky nemôžete spojiť len tak. Prečo? PMod bol zostrojený tak, aby uľahčoval pripojenie dosky Master/Host (ktorá dodáva energiu) k doske Slave/Sensor (ktorá napája). Ale v tomto projekte obe dosky dodávajú energiu a ak pripojíte výstup 3,3 V z jednej dosky k výstupu 3,3 V druhej dosky, môžu sa stať zlé veci. Ale nemusia a môžete len zmeniť parametre výkonových koľajníc FPGA (sú veľmi starostlivo navrhnuté). Neriskujte a posuňte konektor o jeden kolík doľava (a tiež preklopte dosku FPGA), ako je vidieť na vyššie uvedených obrázkoch. Tu je špecifikácia PMod, môžete si ju preštudovať, čo som urobil v krátkych slovách je nepripájať VCC dvoch dosiek.

Odporúča: