Satura rādītājs:

Izveidojiet jebkuru sensoru no FPGA: 4 soļi
Izveidojiet jebkuru sensoru no FPGA: 4 soļi

Video: Izveidojiet jebkuru sensoru no FPGA: 4 soļi

Video: Izveidojiet jebkuru sensoru no FPGA: 4 soļi
Video: УЗНАВ этот СЕКРЕТ, ты НИКОГДА НЕ ВЫБРОСИШЬ пластиковую бутылку! ОТЛИЧНЫЕ идеи своими руками! 2024, Jūlijs
Anonim
Image
Image
FPGA
FPGA

Lielākā daļa ražotāju vismaz reizi mūžā mēģināja uzbūvēt termometru, varbūt mājās esošais nav pietiekami gudrs, vai varbūt domā, ka var uzbūvēt nākamo NEST. Neskatoties uz to, kādā brīdī viņiem bija mikrokontrolleris ar vismodernāko programmatūru, kas savienota ar temperatūras sensoru (un varbūt citiem sensoriem: spiedienu, gaismu). Līdz šim viss ir ideāli, programmatūra darbojas un sensors uztver. Pārbaudīsim!

Hmmmm … varbūt viņam vajadzētu sildīt sensoru, izmantojot matu žāvētāju, un atdzesēt, izmantojot ledu, tas kādu laiku darbojas. Bet tas nešķiet profesionāli, sensors pārāk ātri maina vērtības, ja to uzkarsē, tas nesasilst vairāk par pāris grādiem. Projekts ir krūšturis! Bet algoritms ir jauns, ņem vērā daudzus faktorus, kāds kauns, ka viņš iestrēga pie šīs stulbi mazās lietas.

Mans risinājums ir šāds: liek FPGA darboties kā sensoram ar vērtībām, kas tiek straumētas no datora (vai saglabātas atmiņā vai izveidotas ad hoc FPGA iekšpusē). Tātad jūsu dārgajam MCU FPGA izskatās kā sensors, bet ne jebkurš sensors: kurš sensors jums patīk. Varbūt jūs nolemjat, ka jums ir nepieciešama lielāka izšķirtspēja vai ātrāks reakcijas laiks, nekā paredzēts, jums ir jāmaina sensors. Pasūtiet to tiešsaistē, tas ieradīsies pēc pāris dienām, pāris mēnešiem, kas zina. Ievadiet savu PCB vai pasūtiet moduli ar jauno sensoru. Vai… pāris klikšķu, un FPGA ir konfigurēts kā jūsu jaunais sensors, un tas var atdarināt precīzu iekšējo konfigurāciju.

Rakstīšanas brīdī FPGA varētu darboties kā LM75 ar temperatūras datiem, kas saglabāti BRAM (FPGA).

1. darbība: MCU

Mans izvēlētais MCU ir LPC4337 uz LPCXpresso. Papildus tam man ir vairogs (LPC General Purpose Shield) ar displeju un īstu LM75 sensoru. LPC4337 ir ARM Cortex M4, kas darbojas ar 200 MHz, un mazāks Cortex M0 (šeit netiek izmantots). Īstais sensors ir savienots ar I2C1 perifēriju, un mūsu virtuālais tiks savienots ar I2C0. Avots ir pieejams manā GitHub.

Kā to veidot? Lejupielādējiet LPCXpresso IDE kopā ar LPCOpen bibliotēku. Importējiet šo bibliotēku IDE un arī atveriet projektu no GitHub. Viss ir jākonfigurē, un kreisajā apakšējā stūrī varat noklikšķināt uz "Atkļūdot".

Visa projekta pamatā ir viens no NXP piemēriem (lai parādītu, ka mans projekts simulē īstu sensoru un tam nav nepieciešams īpašs kods MCU pusē). Galvenajā failā (ko sauc par iox_sensor.cpp) atrodas šis kods:

#define SENSORS_ON_SHIELD

#if definēts (SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif define (SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif

Mainot SENSOR_ON_SHIELD un SENSOR_OR_FPGA, lietotājs kompilēšanas laikā var pārslēgties uz kuru sensoru runāt, īsto vai virtuālo, jo tie atrodas dažādās I2C tapās.

2. darbība: FPGA

Mana izvēlētā FPGA plāksne ir Artix 7, ko izgatavojis Digilent un kam ir Xilinx Arty 7. Tiek izmantoti divi no PMod savienotājiem, viens atkļūdošanai un otrs reālai slodzei, savienojums ar MCU plati.

Atkal FPGA avota kods ir pieejams manā GitHub (mapē fpgaSide).

Kā to veidot? Lejupielādējiet, iegādājieties vai atveriet Xilinx Vivado IDE. Importējiet projekta failus no GitHub. Viens no failiem (content.coe) ir temperatūras dati neapstrādātā formātā, kas tiks straumēti uz viltus sensoru. Ir arī Excel fails ar tādu pašu nosaukumu, kas palīdz pārvērst cilvēka lasāmus temperatūras datus par neapstrādātiem LM75 datiem. Es plānoju to mainīt uz automatizētu procesu ar Java programmatūru, taču līdz šim šis risinājums darbojas. Sintēzei un ieviešanai vajadzētu ņemt kādu laiku, ņemiet to vērā.

3. darbība. Kā tas darbojas?

Kā tas darbojas?
Kā tas darbojas?
Kā tas darbojas?
Kā tas darbojas?

Kā jau teicu, MCU FPGA izskatās kā sensors, precīzāk I2C sensors. I2C perifērijas izeja ir pievienota FPGA ieejai. FPGA iekšpusē ir 3 galvenās sastāvdaļas:- I2C kontrolieris- I2C ierīces dati- I2C kontrolieris saņem I2C datus no FPGA tapām un nosūta tos uz pārējo FPGA un dara to pašu apgrieztā secībā. Tajā tiek uzturēta I2C protokola iekšējā stāvokļa mašīna (starp citu, šeit ir tā dokumentācija). Ko šis komponents sūta uz I2C ierīci? Pašlaik saņemtais baits, šī baita atrašanās vieta pašreizējā komunikācijā un tas, vai MCU raksta FPGA vai lasa no tā. I2C ierīce saņem nosūtītos baitus un atjaunina sensora simulēto iekšējo struktūru. Tas var vienkārši atjaunināt reģistra rādītāju vai pieprasīt jaunus datus no datu avota. Datu komponents straumē jaunus datu punktus. Pašlaik tā ir tikai ROM atmiņa, kuras adrese tiek palielināta (aptuveni) divas reizes sekundē.

Kāds ir mans gala mērķis? Tas ir parādīts otrajā attēlā. Tas ir: dod iespēju vairāk I2C ierīču (sensoru un citu) vienlaikus simulēt FPGA. Dati sensora aizmugurē tiks saglabāti kešatmiņā FPGA un straumēti no datora, izmantojot USB vai Ethernet. Atbalstiet uzlabotus sensorus un citas I2C ierīces (atmiņu, LED draiverus utt.).

4. solis: salieciet to visu kopā

Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā
Visu saliekot kopā

Tagad ir pienācis laiks savienot visu kopā. Teorētiski tas ir vienkārši: mcu platij ir PMod savienotājs (I2C0 & SSP0 (var darboties kā SPI)). Artix plāksnei ir 4 PMod savienotāji, kurus var izmantot, kā vēlaties. Es izvēlos savienotāju D, lai sarunātos ar MCU, un savienotāju B, lai izveidotu savienojumu ar savu loģikas analizatoru.

Brīdinājums

Jūs nevarat savienot abus dēļus kopā tāpat. Kāpēc? PMod tika veidots, lai atvieglotu galvenā/saimniekdatora (kas dod jaudu) savienojumu ar vergu/sensoru plati (kas saņem jaudu). Bet šajā projektā abas plates dod jaudu, un, ja jūs savienojat 3.3V izeju no vienas plates ar citas plāksnes 3.3V izeju, var notikt sliktas lietas. Bet tie var nebūt, un jūs varat vienkārši mainīt FPGA barošanas sliežu parametrus (tie ir ļoti rūpīgi izstrādāti). Tāpēc neuzņemieties šo risku un pārvietojiet savienotāju vienu tapu pa kreisi (un arī pagrieziet FPGA plati), kā redzams iepriekš redzamajos attēlos. Šeit ir PMod specifikācija, jūs to izpētīsit, ko es izdarīju īsos vārdos, lai nesaistītu abu dēļu VCC.

Ieteicams: