Turinys:

Padarykite bet kurį jutiklį iš FPGA: 4 žingsniai
Padarykite bet kurį jutiklį iš FPGA: 4 žingsniai

Video: Padarykite bet kurį jutiklį iš FPGA: 4 žingsniai

Video: Padarykite bet kurį jutiklį iš FPGA: 4 žingsniai
Video: Как использовать гироскоп, акселерометр, магнитометр MPU-9250 для Arduino 2024, Liepa
Anonim
Image
Image
FPGA
FPGA

Dauguma gamintojų bent kartą gyvenime bandė pastatyti termometrą, galbūt tas, kurį jie turi namuose, nėra pakankamai protingas, o gal galvoja, kad gali pastatyti kitą NEST. Nepaisant to, tam tikru momentu jie turėjo mikrovaldiklį su naujausia programine įranga, prijungtu prie temperatūros jutiklio (o gal ir kitų jutiklių: slėgio, šviesos). Iki šiol viskas tobula, programinė įranga veikia ir jutiklis jaučia. Išbandykime!

Hmmmm … galbūt jis turėtų pašildyti jutiklį plaukų džiovintuvu ir atvėsinti ledu, jis kurį laiką veikia. Tačiau tai neatrodo profesionalu, jutiklis per greitai keičia vertes, jei jį įkaitinate, jis nešildo daugiau nei poros laipsnių. Projektas yra biustas! Tačiau algoritmas yra naujas, atsižvelgiama į daugelį veiksnių, kokia gėda, kad jis įstrigo dėl šio kvailai menko dalyko.

Mano sprendimas yra toks: priversti FPGA veikti kaip jutiklį, kurio vertės perduodamos iš kompiuterio (arba saugomos atmintyje arba sukurtos ad-hoc FPGA viduje). Taigi jūsų brangiam MCU FPGA atrodo kaip jutiklis, bet ne bet koks jutiklis: koks jutiklis jums patinka. Galbūt nuspręsite, kad jums reikia didesnės skiriamosios gebos ar greitesnio reagavimo laiko, nei tikėtasi, turite pakeisti jutiklį. Užsisakykite internetu, jis ateis per porą dienų, porą mėnesių, kas žino. Įjunkite savo PCB arba užsisakykite modulį su nauju jutikliu. Arba … pora paspaudimų ir FPGA yra sukonfigūruotas kaip visiškai naujas jutiklis ir gali imituoti tikslią vidinę konfigūraciją.

Šio rašymo metu FPGA galėtų veikti kaip LM75 su temperatūros duomenimis, saugomais BRAM (FPGA).

1 žingsnis: MCU

Mano pasirinktas MCU yra LPC4337 „LPCXpresso“. Ant jo turiu skydą (LPC General Purpose Shield) su ekranu ir tikrą LM75 jutiklį. LPC4337 yra ARM Cortex M4, veikiantis 200 MHz dažniu, ir mažesnis Cortex M0 (čia nenaudojamas). Tikrasis jutiklis yra prijungtas prie I2C1 periferinio įrenginio, o mūsų virtualus - prie I2C0. Šaltinį rasite mano „GitHub“.

Kaip jį sukurti? Atsisiųskite „LPCXpresso IDE“kartu su „LPCOpen“biblioteka. Importuokite tą biblioteką į IDE ir taip pat atidarykite projektą iš „GitHub“. Viskas turėtų būti sukonfigūruota ir apatiniame kairiajame kampe galite spustelėti „Derinti“.

Visas projektas yra paremtas vienu iš NXP pavyzdžių (kad parodytų, jog mano projektas imituoja tikrą jutiklį ir jam nereikia specialaus kodo MCU pusėje). Pagrindiniame faile (vadinamas iox_sensor.cpp) yra šis kodas:

#define SENSORS_ON_SHIELD

#if apibrėžta (SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif define (SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif

Pakeisdamas SENSOR_ON_SHIELD ir SENSOR_OR_FPGA, vartotojas kompiliavimo metu gali perjungti, į kurį jutiklį kalbėti, tikrąjį ar virtualųjį, nes jie yra skirtinguose I2C kaiščiuose.

2 žingsnis: FPGA

Mano pasirinkta FPGA plokštė yra „Digilent“pagamintas „Artix 7“, turintis „Xilinx Arty 7.“Dvi iš „PMod“jungčių naudojamos, viena derinimui, o kita - tikrajai apkrovai, jungtis su MCU plokšte.

Vėlgi, FPGA šaltinio kodas yra mano „GitHub“(fpgaSide aplankas).

Kaip jį sukurti? Atsisiųskite, nusipirkite arba atidarykite „Xilinx Vivado IDE“. Importuokite projekto failus iš „GitHub“. Vienas iš failų (content.coe) yra neapdoroto formato temperatūros duomenys, kurie bus perduodami į suklastotą jutiklį. Taip pat yra „Excel“failas tuo pačiu pavadinimu, kuris padeda konvertuoti žmogaus skaitomus temperatūros duomenis į neapdorotus LM75 duomenis. Aš planuoju tai pakeisti į automatizuotą procesą su programine įranga, parašyta „Java“, tačiau iki tol šis sprendimas veikia. Sintezė ir įgyvendinimas turėtų užtrukti, į tai atsižvelkite.

3 žingsnis: kaip tai veikia?

Kaip tai veikia?
Kaip tai veikia?
Kaip tai veikia?
Kaip tai veikia?

Kaip jau sakiau, MCU FPGA atrodo kaip jutiklis, tiksliau I2C jutiklis. I2C periferinio įrenginio išvestis yra prijungta prie FPGA įvesties. FPGA viduje yra 3 pagrindiniai komponentai:- I2C valdiklis- I2C įrenginys- duomenys I2C valdiklis gauna I2C duomenis iš FPGA kaiščių ir siunčia juos į likusią FPGA dalį ir daro tą patį atvirkštine tvarka. Jis palaiko vidinę I2C protokolo būsenos mašiną (beje, čia yra jo dokumentacija). Ką šis komponentas siunčia į „I2C“įrenginį? Šiuo metu gautas baitas, to baito padėtis dabartiniame ryšyje ir tai, ar MCU rašo FPGA, ar skaito iš jos. „I2C“įrenginys gauna išsiųstus baitus ir atnaujina imituojamą vidinę jutiklio struktūrą. Tai gali tiesiog atnaujinti registro žymeklį arba paprašyti naujų duomenų iš duomenų šaltinio. Duomenų komponentas perduoda naujus duomenų taškus. Šiuo metu tai tik ROM atmintis, kurios adresas padidinamas (maždaug) du kartus per sekundę.

Koks mano galutinis tikslas? Tai parodyta antrame paveikslėlyje. Tai yra: sudaryti sąlygas daugiau I2C įrenginių (jutiklių ir kitų) vienu metu imituoti FPGA. Duomenys, esantys jutiklio gale, turi būti saugomi FPGA ir perduodami iš kompiuterio per USB arba Ethernet. Palaikykite pažangesnius jutiklius ir kitus I2C įrenginius (atmintį, LED tvarkykles ir kt.).

4 žingsnis: sudėkite viską kartu

Viską sujungti
Viską sujungti
Viską sujungti
Viską sujungti

Dabar atėjo laikas viską sujungti. Teoriškai tai paprasta: „mcu“plokštėje yra „PMod“jungtis (I2C0 ir SSP0 (gali veikti kaip SPI)). „Artix“plokštėje yra 4 „PMod“jungtys, kurias galima naudoti, kaip norite. Aš pasirenku jungtį D, kad galėčiau kalbėtis su MCU, ir jungtį B, kad prisijungčiau prie savo logikos analizatoriaus.

Įspėjimas

Negalite taip sujungti dviejų plokščių. Kodėl? „PMod“buvo sukurtas taip, kad būtų lengviau prijungti pagrindinę/pagrindinę plokštę (kuri suteikia galią) prie pavaldžios/jutiklio plokštės (kuri gauna maitinimą). Tačiau šiame projekte abi plokštės suteikia galią, o jei vienos plokštės 3.3V išvestį prijungsite prie kitos plokštės 3.3V išvesties, gali atsitikti blogų dalykų. Bet jie gali ne, ir jūs galite tiesiog pakeisti FPGA maitinimo bėgių parametrus (jie yra labai kruopščiai suprojektuoti). Taigi nerizikuokite ir perkelkite jungtį vienu kaiščiu į kairę (taip pat apverskite FPGA plokštę), kaip parodyta aukščiau esančiose nuotraukose. Čia yra „PMod“specifikacija, jūs ją išstudijuokite, ką aš padariau trumpais žodžiais, kad nesujungčiau dviejų plokščių VCC.

Rekomenduojamas: