Obsah:

Vytvořte jakýkoli senzor z FPGA: 4 kroky
Vytvořte jakýkoli senzor z FPGA: 4 kroky

Video: Vytvořte jakýkoli senzor z FPGA: 4 kroky

Video: Vytvořte jakýkoli senzor z FPGA: 4 kroky
Video: Jak vytvořit obvod senzoru přiblížení nové generace – indikátor úrovně přístupu #zaferyildiz 2024, Červenec
Anonim
Image
Image
FPGA
FPGA

Většina tvůrců se pokusila alespoň jednou v životě postavit teploměr, možná ten, který mají doma, není dost chytrý, nebo si možná myslí, že si mohou postavit další HNĚDĚ. Přesto v určitém okamžiku měli mikrokontrolér se svým nejmodernějším softwarem připojený k teplotnímu senzoru (a možná i dalším senzorům: tlak, světlo). Až dosud bylo vše perfektní, software běží a senzor snímá. Pojďme to vyzkoušet!

Hmmmm … možná by měl zahřát senzor pomocí vysoušeče vlasů a ochladit ho ledem, funguje to nějakou dobu. Ale nezdá se to profesionální, senzor mění hodnoty příliš rychle, pokud jej zahřejete, nezahřeje se o více než pár stupňů. Projekt je krach! Algoritmus je ale nový, bere v úvahu mnoho faktorů, škoda, že se zasekl u této hloupě malé věci.

Moje řešení je toto: nechat FPGA fungovat jako senzor s hodnotami streamovanými z PC (nebo uloženými v paměti nebo vytvořenými ad-hoc uvnitř FPGA). Takže pro váš drahocenný MCU vypadá FPGA jako senzor, ale ne jakýkoli senzor: jakýkoli senzor se vám líbí. Možná se rozhodnete, že potřebujete větší rozlišení nebo rychlejší dobu odezvy, než se očekávalo, budete muset vyměnit snímač. Objednejte si to online, dorazí to za pár dní, za pár měsíců, kdo ví. Pružte desku plošných spojů nebo si objednejte modul s novým senzorem. Nebo… pár kliknutí a FPGA je nakonfigurováno jako váš zcela nový senzor a může emulovat přesnou interní konfiguraci.

V okamžiku psaní tohoto článku by FPGA mohl fungovat jako LM75 s teplotními údaji uloženými v BRAM (na FPGA).

Krok 1: MCU

Můj vybraný MCU je LPC4337 na LPCXpresso. Na vrcholu mám štít (LPC General Purpose Shield) s displejem a skutečným snímačem LM75. LPC4337 je ARM Cortex M4 běžící na 200 MHz a menší Cortex M0 (zde není použit). Skutečný senzor je připojen k periferii I2C1 a náš virtuální bude připojen k I2C0. Zdroj je k dispozici na mém GitHubu.

Jak to postavit? Stáhněte si LPCXpresso IDE společně s knihovnou LPCOpen. Importujte tuto knihovnu do IDE a také otevřete projekt z GitHub. Vše by mělo být nakonfigurováno a v levém dolním rohu můžete kliknout na „Ladit“.

Celý projekt je založen na jednom z příkladů NXP (aby ukázal, že můj projekt simuluje skutečný senzor a na straně MCU nepotřebuje speciální kód). V hlavním souboru (nazývaném iox_sensor.cpp) leží tento kód:

#define SENSORS_ON_SHIELD

#if definováno (SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif definováno (SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif

Změnou SENSOR_ON_SHIELD a SENSOR_OR_FPGA je uživatel schopen v době kompilace přepnout na to, ke kterému senzoru má mluvit, skutečnému nebo virtuálnímu, protože jsou na různých pinech I2C.

Krok 2: FPGA

Moje vybraná deska FPGA je Artix 7 od společnosti Digilent s Xilinx Arty 7. Používají se dva konektory PMod, jeden pro ladění a jeden pro skutečné užitečné zatížení, spojení s deskou MCU.

Zdrojový kód pro FPGA je opět k dispozici na mém GitHubu (složka fpgaSide).

Jak to postavit? Stáhněte si, kupte nebo otevřete Xilinx Vivado IDE. Importujte soubory projektu z GitHub. Jedním ze souborů (content.coe) jsou teplotní data v nezpracovaném formátu, která budou streamována do falešného senzoru. K dispozici je také soubor aplikace Excel se stejným názvem, který pomáhá s převodem údajů o teplotě čitelných lidmi na nezpracovaná data LM75. Plánuji to změnit na automatizovaný proces pomocí softwaru napsaného v Javě, ale do té doby toto řešení funguje. Syntéza a implementace by měly chvíli trvat, vezměte to v úvahu.

Krok 3: Jak to funguje?

Jak to funguje?
Jak to funguje?
Jak to funguje?
Jak to funguje?

Jak jsem řekl, pro MCU vypadá FPGA jako senzor, přesněji I2C senzor. Výstup periferního zařízení I2C je připojen ke vstupu FPGA. Uvnitř FPGA jsou 3 hlavní komponenty:- I2C ovladač- I2C zařízení- Data Řadič I2C přijímá data I2C z pinů FPGA a odesílá je do zbytku FPGA a dělá totéž v opačném pořadí. Udržuje vnitřní stav stroje pro protokol I2C (mimochodem, zde je dokumentace k němu). Co tato součást odesílá do zařízení I2C? Aktuálně přijatý bajt, pozice tohoto bajtu v aktuální komunikaci a to, zda MCU zapisuje nebo čte z FPGA. Zařízení I2C přijímá odeslané bajty a aktualizuje simulovanou vnitřní strukturu senzoru. Může to jen aktualizovat ukazatel registru nebo požadovat nová data ze zdroje dat. Datová komponenta streamuje nové datové body. V současné době je to jen paměť ROM, jejíž adresa se zvyšuje (přibližně) dvakrát za sekundu.

Jaký je můj konečný cíl? Je to ukázáno na druhém obrázku. To znamená: umožnit simulaci více zařízení I2C (senzorů a dalších) současně v FPGA. Data na zadní straně senzoru se ukládají do mezipaměti v FPGA a streamují se z počítače přes USB nebo ethernet. Podpora pokročilejších senzorů a dalších zařízení I2C (paměť, ovladače LED atd.).

Krok 4: Dát to všechno dohromady

Dát to všechno dohromady
Dát to všechno dohromady
Dát to všechno dohromady
Dát to všechno dohromady

Nyní je čas vše propojit. Teoreticky je to jednoduché: deska mcu má konektor PMod (I2C0 a SSP0 (může fungovat jako SPI)). Deska Artix má 4 konektory PMod, které lze použít, jak chcete. Volím konektor D pro komunikaci s MCU a konektor B pro připojení k mému logickému analyzátoru.

Varování

Obě desky nemůžete spojit dohromady jen tak. Proč? PMod byl postaven tak, aby usnadnil připojení desky Master/Host (která dodává energii) k desce Slave/Sensor (která přijímá energii). V tomto projektu však obě desky dodávají energii a pokud připojíte výstup 3,3 V z jedné desky k výstupu 3,3 V na druhé desce, mohou se stát špatné věci. Ale nemusí a můžete jen změnit parametry napájecích kolejnic FPGA (jsou velmi pečlivě navrženy). Neriskujte a přesuňte konektor o jeden kolík doleva (a také překlopte desku FPGA), jak je vidět na výše uvedených obrázcích. Zde je specifikace PMod, můžete si ji prostudovat, co jsem udělal v krátkých slovech, je nepropojit VCC obou desek.

Doporučuje: