Orodha ya maudhui:

Tengeneza Sensorer yoyote kutoka kwa FPGA: Hatua 4
Tengeneza Sensorer yoyote kutoka kwa FPGA: Hatua 4

Video: Tengeneza Sensorer yoyote kutoka kwa FPGA: Hatua 4

Video: Tengeneza Sensorer yoyote kutoka kwa FPGA: Hatua 4
Video: How to mine bitcoin - Which Mining Risers work best? SATA MOLEX PCIE. Eth Mining BTC mine crypto 2024, Novemba
Anonim
Image
Image
FPGA
FPGA

Watengenezaji wengi walijaribu kujenga angalau mara moja maishani mwao kipima joto, labda ile waliyonayo nyumbani haina akili ya kutosha, au labda wanafikiria kuwa wanaweza kujenga kiota kinachofuata. Walakini, wakati fulani walikuwa na mdhibiti mdogo na programu yao ya hali ya juu iliyounganishwa na sensorer ya joto (na labda sensorer zingine: shinikizo, taa). Mpaka sasa kila kitu ni kamili, programu inaendesha na sensorer inahisi. Wacha tuijaribu!

Hmmmm… labda anapaswa kuwasha moto kitambuzi kwa kutumia kavu ya nywele na kuipoa kwa kutumia barafu, inafanya kazi kwa muda. Lakini haionekani kuwa ya kitaalam, sensorer hubadilisha maadili haraka sana ukiwasha moto, haina joto zaidi ya digrii kadhaa. Mradi huo ni kraschlandning! Lakini algorithm ni mpya, inazingatia mambo mengi, ni aibu gani kwamba alikwama kwenye jambo hili dogo la kijinga.

Suluhisho langu ni hili: fanya FPGA iwe kama sensa na maadili yaliyotiririka kutoka kwa PC (au kuhifadhiwa kwenye kumbukumbu, au kuunda matangazo ndani ya FPGA). Kwa hivyo kwa MCU yako ya thamani FPGA inaonekana kama sensa, lakini sio sensorer yoyote: ni sensor ipi unayopenda. Labda unaamua kuwa unahitaji azimio zaidi au wakati wa majibu haraka kuliko inavyotarajiwa, lazima ubadilishe sensa. Agiza mkondoni, itafika katika siku kadhaa, ya miezi michache, ni nani anayejua. Jibu PCB yako au agiza moduli na sensa mpya. Au … mibofyo michache na FPGA imesanidiwa kama sensorer yako mpya na inaweza kuiga usanidi halisi wa ndani.

Wakati wa kuandika hii, FPGA inaweza kufanya kama LM75 na data ya joto iliyohifadhiwa katika BRAM (kwenye FPGA).

Hatua ya 1: MCU

Chaguo langu la MCU ni LPC4337 kwenye LPCXpresso. Juu yake nina ngao (LPC General Purpose Shield) iliyo na onyesho na sensa halisi ya LM75. LPC4337 ni ARM Cortex M4 inayoendesha 200MHz na Cortex M0 ndogo (haitumiki hapa). Sensor halisi imeunganishwa na pembeni ya I2C1 na ile yetu halisi itaunganishwa na I2C0. Chanzo kinapatikana kwenye GitHub yangu.

Jinsi ya kuijenga? Pakua LPCXpresso IDE pamoja na maktaba ya LPCOpen. Ingiza maktaba hiyo kwenye IDE na pia ufungue mradi kutoka GitHub. Kila kitu kinapaswa kusanidiwa na unaweza kubofya "Suluhisha" kwenye kona ya chini kushoto.

Mradi mzima unategemea mfano mmoja wa NXP (kuonyesha kuwa mradi wangu unaiga sensa halisi na hauitaji nambari maalum kwa upande wa MCU). Katika faili kuu (iitwayo iox_sensor.cpp) iko nambari hii:

#fafanua SENSORS_ON_SHIELD

# ikiwa imefafanuliwa (SENSORS_ON_SHIELD) #fasili SHIELD_I2C I2C1 #elif defined (SENSORS_ON_FPGA) #fasili SHIELD_I2C I2C0 #endif

Kwa kubadilisha SENSOR_ON_SHIELD na SENSOR_OR_FPGA mtumiaji anaweza kubadili wakati wa kukusanya saa ipi ya kuzungumza, ya kweli au ya kweli, kama ilivyo kwenye pini tofauti za I2C.

Hatua ya 2: FPGA

Bodi yangu ya kuchagua ya FPGA ni Artix 7 iliyotengenezwa na Digilent, ikiwa na Xilinx Arty 7. Viunganishi viwili vya PMod hutumiwa, moja kwa utatuzi na moja kwa malipo halisi, unganisho na bodi ya MCU.

Tena, nambari ya chanzo ya FPGA inapatikana kwenye folda yangu ya GitHub (fpgaSide).

Jinsi ya kuijenga? Pakua, nunua au ufungue Xilinx Vivado IDE. Ingiza faili za mradi kutoka GitHub. Moja ya faili (content.coe) ni data ya joto katika fomati mbichi ambayo itatiririka kwa sensorer bandia. Pia kuna faili ya Excel iliyo na jina lilelile ambayo husaidia kwa kubadilisha data ya joto inayosomeka ya binadamu kuwa data ya LM75 mbichi. Ninapanga kubadilisha hii kuwa mchakato wa kiotomatiki na kipande cha programu iliyoandikwa katika Java lakini hadi wakati huu suluhisho hili linafanya kazi. Usanisi na Utekelezaji lazima uchukue muda, zingatia hii.

Hatua ya 3: Inafanyaje Kazi?

Inafanyaje kazi?
Inafanyaje kazi?
Inafanyaje kazi?
Inafanyaje kazi?

Kama nilivyosema, kwa MCU, FPGA inaonekana kama sensa, haswa sensor ya I2C. Pato la pembeni ya I2C imeunganishwa na pembejeo ya FPGA. Ndani ya FPGA kuna vitu kuu 3: - Mdhibiti wa I2C- Kifaa cha I2C- Takwimu Mdhibiti wa I2C anapokea data ya I2C kutoka kwa pini za FPGA na kuzipeleka kwa FPGA iliyobaki na hufanya vivyo hivyo kwa mpangilio wa nyuma. Inadumisha mashine ya hali ya ndani ya Itifaki ya I2C (kwa njia, hapa kuna nyaraka zake). Je! Sehemu hii inatuma nini kwa Kifaa cha I2C? Baiti iliyopokewa sasa, nafasi ya baiti hiyo katika mawasiliano ya sasa na ikiwa MCU inamwandikia au inasoma kutoka FPGA. Kifaa cha I2C kinapokea kaa zilizotumwa na husasisha muundo wa ndani wa sensa. Inaweza tu kusasisha pointer ya kujiandikisha au kuomba data mpya kutoka kwa chanzo cha data. Sehemu ya Takwimu inaangazia nukta mpya za data. Hivi sasa ni kumbukumbu ya ROM tu ambayo anwani imeongezwa (takriban) mara mbili kwa sekunde.

Je! Lengo langu la mwisho ni nini? Inaonyeshwa kwenye picha ya pili. Hiyo ni: fanya iwezekane kwa vifaa zaidi vya I2C (sensorer na zingine) kuiga wakati huo huo ndani ya FPGA. Takwimu zilizo nyuma ya sensorer ambazo zinaweza kuhifadhiwa kwenye FPGA na kutiririka kutoka kwa PC kupitia USB au Ethernet. Kusaidia sensorer za hali ya juu zaidi na vifaa vingine vya I2C (kumbukumbu, madereva ya LED nk).

Hatua ya 4: Kuiweka Pamoja

Kuiweka Pamoja
Kuiweka Pamoja
Kuiweka Pamoja
Kuiweka Pamoja

Sasa ni wakati wa kuunganisha kila kitu. Kinadharia, ni rahisi: bodi ya mcu ina kiunganishi cha PMod (I2C0 & SSP0 (inaweza kufanya kazi kama SPI)). Bodi ya Artix ina viungio 4 vya PMod ambavyo vinaweza kutumika hata hivyo unataka. Ninachagua kiunganishi D kuzungumza na MCU na kontakt B kuungana na Logic Analyzer yangu.

Onyo

Huwezi kuunganisha bodi mbili pamoja kama hiyo. Kwa nini? PMod ilijengwa ili kupunguza uunganisho wa bodi ya Mwalimu / mwenyeji (ambayo inatoa nguvu) kwa bodi ya Mtumwa / Sensor (ambayo inapokea nguvu). Lakini katika mradi huu bodi zote mbili zinatoa nguvu na ikiwa utaunganisha pato la 3.3V kutoka bodi moja hadi pato la 3.3V la bodi nyingine mambo mabaya yanaweza kutokea. Lakini hawawezi na unaweza kubadilisha tu vigezo vya reli za umeme za FPGA (zimeundwa kwa uangalifu sana). Kwa hivyo usichukue hatari hii na kusogeza kontakt pini moja kushoto (na pia tembeza bodi ya FPGA) kama inavyoonekana kwenye picha zilizo hapo juu. Hapa kuna maelezo ya PMod, wewe huisoma, nilichofanya kwa maneno mafupi ni kutounganisha VCC za bodi mbili.

Ilipendekeza: