INHOUDSOPGAWE:

Maak 'n sensor uit 'n FPGA: 4 stappe
Maak 'n sensor uit 'n FPGA: 4 stappe

Video: Maak 'n sensor uit 'n FPGA: 4 stappe

Video: Maak 'n sensor uit 'n FPGA: 4 stappe
Video: VL53L1X Лазерный дистанционный датчик времени полета 400 см 2024, Julie
Anonim
Image
Image
Die FPGA
Die FPGA

Die meeste vervaardigers het ten minste een keer in hul lewe 'n termometer probeer bou, miskien is die een wat hulle tuis het nie slim genoeg nie, of dink hulle dat hulle die volgende NEST kan bou. Tog het hulle op 'n stadium 'n mikrobeheerder gehad met hul nuutste sagteware wat gekoppel is aan 'n temperatuursensor (en miskien ander sensors: druk, lig). Tot nou toe is alles perfek, die sagteware werk en die sensor voel. Kom ons toets dit!

Hmmmm … miskien moet hy die sensor met 'n haardroër verhit en met ys afkoel, dit werk 'n rukkie. Maar dit lyk nie professioneel nie; die sensor verander te vinnig waardes as u dit verhit, dit word nie meer as 'n paar grade warm nie. Die projek is 'n pouse! Maar die algoritme is nuut, neem baie faktore in ag, wat jammer dat hy by hierdie dom klein dingetjie vasgeloop het.

My oplossing is die volgende: laat 'n FPGA optree as 'n sensor met waardes wat vanaf 'n rekenaar gestroom word (of in die geheue gestoor word, of ad-hoc in die FPGA geskep word). So vir u kosbare MCU lyk die FPGA soos 'n sensor, maar nie 'n sensor nie: watter sensor u ook al wil. Miskien besluit u dat u meer resolusie of vinniger reaksietyd benodig as wat u verwag het, u moet die sensor verander. Bestel dit aanlyn, dit kom binne 'n paar dae, 'n paar maande, wie weet. Reageer op u PCB of bestel 'n module met die nuwe sensor. Of … 'n paar kliks en die FPGA is opgestel as u splinternuwe sensor en kan die presiese interne opset naboots.

Op die oomblik dat dit geskryf is, kan die FPGA optree as 'n LM75 met temperatuurdata gestoor in BRAM (op die FPGA).

Stap 1: Die MCU

My MCU van keuse is 'n LPC4337 op 'n LPCXpresso. Boonop het ek 'n skild (LPC General Purpose Shield) met 'n skerm en 'n regte LM75 -sensor. LPC4337 is 'n ARM Cortex M4 wat op 200MHz werk en 'n kleiner Cortex M0 (word nie hier gebruik nie). Die werklike sensor is gekoppel aan die perifere I2C1 en ons virtuele sensor sal aan die I2C0 gekoppel word. Die bron is beskikbaar op my GitHub.

Hoe om dit te bou? Laai LPCXpresso IDE af saam met LPCOpen -biblioteek. Voer die biblioteek in die IDE in en maak die projek ook oop vanaf GitHub. Alles moet gekonfigureer word en u kan op "Ontfouting" in die linker onderste hoek klik.

Die hele projek is gebaseer op een van die voorbeelde van die NXP (om aan te toon dat my projek 'n regte sensor naboots en geen spesiale kode aan die MCU -kant benodig nie). In die hooflêer (genaamd iox_sensor.cpp) lê hierdie kode:

#definieer SENSORS_ON_SHIELD

#as gedefinieer (SENSORS_ON_SHIELD) #defineer SHIELD_I2C I2C1 #elif gedefinieer (SENSORS_ON_FPGA) #definieer SHIELD_I2C I2C0 #endif

Deur SENSOR_ON_SHIELD en SENSOR_OR_FPGA te verander, kan die gebruiker op die tydstip oorskakel na watter sensor om te praat, die werklike of die virtuele, soos op verskillende I2C -penne.

Stap 2: Die FPGA

My FPGA -kaartjie is 'n Artix 7 gemaak deur Digilent, met 'n Xilinx Arty 7. Twee van die PMod -aansluitings word gebruik, een vir ontfouting en een vir die werklike vrag, die verbinding met die MCU -bord.

Die bronkode vir die FPGA is weer beskikbaar op my GitHub (fpgaSide -lêergids).

Hoe om dit te bou? Laai, koop of maak Xilinx Vivado IDE oop. Voer die projeklêers van GitHub in. Een van die lêers (content.coe) is die temperatuurdata in rou formaat wat na die valse sensor gestroom sal word. Daar is ook 'n Excel -lêer met dieselfde naam wat help met die omskakeling van menslike leesbare temperatuurdata na rou LM75 -data. Ek is van plan om dit te verander na 'n outomatiese proses met 'n stuk sagteware wat in Java geskryf is, maar tot dan werk hierdie oplossing. Sintese en inplanting behoort 'n rukkie te neem, neem dit in ag.

Stap 3: Hoe werk dit?

Hoe werk dit?
Hoe werk dit?
Hoe werk dit?
Hoe werk dit?

Soos ek gesê het, vir die MCU lyk die FPGA soos 'n sensor, meer presies 'n I2C -sensor. Die uitset van die I2C -randapparaat word gekoppel aan die ingang van die FPGA. Binne die FPGA is daar drie hoofkomponente:- I2C Controller- I2C Device- Data Die I2C Controller ontvang I2C data van die FPGA se penne en stuur dit na die res van die FPGA en doen dieselfde in omgekeerde volgorde. Dit onderhou 'n interne staatsmasjien vir die I2C -protokol (terloops, hier is die dokumentasie daarvoor). Wat stuur hierdie komponent na die I2C -toestel? Die byte wat tans ontvang is, die posisie van die byte in die huidige kommunikasie en of die MCU aan die FPGA skryf of dit lees. Die I2C -toestel ontvang die gestuurde grepe en werk die gesimuleerde interne struktuur van die sensor by. Dit kan net die registerwyser opdateer of nuwe data van die databron aanvra. Die datakomponent stroom nuwe datapunte. Tans is dit slegs 'n ROM -geheue waarvan die adres (ongeveer) twee keer per sekonde toegeneem word.

Wat is my einddoel? Dit word in die tweede prentjie getoon. Dit wil sê: maak dit moontlik dat meer I2C -toestelle (sensors en ander) tegelykertyd binne die FPGA simuleerbaar is. Die data aan die agterkant van die sensor wat in die FPGA gestoor moet word en vanaf 'n rekenaar via USB of Ethernet gestroom kan word. Ondersteun meer gevorderde sensors en ander I2C -toestelle (geheue, LED -bestuurders, ens.).

Stap 4: Alles saamvoeg

Om alles bymekaar te sit
Om alles bymekaar te sit
Om alles bymekaar te sit
Om alles bymekaar te sit

Dit is nou die tyd om alles met mekaar te verbind. Teoreties is dit eenvoudig: die mcu -bord het 'n PMod -aansluiting (I2C0 en SSP0 (kan soos SPI werk)). Die Artix -bord het 4 PMod -verbindings wat gebruik kan word soos u wil. Ek kies aansluiting D om met die MCU te praat en aansluiting B om aan te sluit by my Logic Analyzer.

Waarskuwing

U kan die twee borde nie net so aan mekaar koppel nie. Hoekom? PMod is gebou om die verbinding van 'n Master/Host -bord (wat krag gee) aan 'n Slave/Sensor -bord (wat krag ontvang) te vergemaklik. Maar in hierdie projek gee beide borde krag en as u die 3.3V -uitset van die een bord aan die 3.3V -uitset van die ander bord koppel, kan daar slegte dinge gebeur. Maar dit is moontlik nie so nie, en u kan ook die parameters van die kragrails van die FPGA verander (dit is baie noukeurig ontwerp). Moet dus nie hierdie risiko neem nie en skuif die aansluiting een pen na links (en draai ook die FPGA -bord om) soos in die foto's hierbo gesien. Hier is die PMod -spesifikasie, u moet dit bestudeer; wat ek in kort woorde gedoen het, is om nie die VCC's van die twee borde aan te sluit nie.

Aanbeveel: