Talaan ng mga Nilalaman:

Gumawa ng Anumang Sensor Sa Isang FPGA: 4 na Hakbang
Gumawa ng Anumang Sensor Sa Isang FPGA: 4 na Hakbang

Video: Gumawa ng Anumang Sensor Sa Isang FPGA: 4 na Hakbang

Video: Gumawa ng Anumang Sensor Sa Isang FPGA: 4 na Hakbang
Video: DE0-Nano — Краткое руководство по началу работы с Altera Cyclone IV FPGA | Шаг за шагом 2024, Hulyo
Anonim
Image
Image
Ang FPGA
Ang FPGA

Karamihan sa mga gumagawa ay sinubukan ang pagbuo ng hindi bababa sa isang beses sa kanilang buhay ng isang thermometer, marahil ang mayroon sila sa bahay ay hindi sapat na matalino, o marahil ay iniisip nila na maitatayo nila ang susunod na NEST. Gayunpaman, sa ilang mga punto mayroon silang isang microcontroller kasama ang kanilang state-of-the-art software na naka-hook hanggang sa isang sensor ng temperatura (at marahil iba pang mga sensor: presyon, ilaw). Hanggang ngayon perpekto ang lahat, tumatakbo ang software at nakaka-sensing ang sensor. Subukan natin ito!

Hmmmm … marahil dapat niyang painitin ang sensor gamit ang isang hair dryer at palamig ito gamit ang yelo, gumagana ito para sa isang oras. Ngunit tila hindi ito propesyonal, ang sensor ay nagbabago ng mga halaga nang masyadong mabilis kung pinainit mo ito, hindi ito uminit ng higit sa isang pares ng degree. Ang proyekto ay isang bust! Ngunit ang algorithm ay bago, isinasaalang-alang ang maraming mga kadahilanan, isang kahihiyan na siya ay natigil sa hangal na menor de edad na bagay na ito.

Ang aking solusyon ay ito: gumawa ng isang FPGA kumilos bilang isang sensor na may mga halagang na-stream mula sa isang PC (o nakaimbak sa memorya, o nilikha ad-hoc sa loob ng FPGA). Kaya para sa iyong mahalagang MCU ang FPGA ay mukhang isang sensor, ngunit hindi anumang sensor: alinman sa sensor na gusto mo. Marahil ay nagpasya ka na kailangan mo ng mas maraming resolusyon o mas mabilis na oras ng pagtugon kaysa sa inaasahan, kailangan mong baguhin ang sensor. Mag-order ito sa online, makakarating ito sa loob ng ilang araw, ng ilang buwan, sino ang nakakaalam. I-reset ang iyong PCB o mag-order ng isang module gamit ang bagong sensor. O … isang pares ng mga pag-click at ang FPGA ay na-configure bilang iyong bagong sensor at maaari nitong tularan ang eksaktong panloob na pagsasaayos.

Sa sandaling isinulat ito, ang FPGA ay maaaring kumilos bilang isang LM75 na may data ng temperatura na nakaimbak sa BRAM (sa FPGA).

Hakbang 1: Ang MCU

Ang aking napiling MCU ay isang LPC4337 sa isang LPCXpresso. Sa tuktok nito mayroon akong isang kalasag (LPC General Purpose Shield) na may isang display at isang tunay na LM75 sensor. Ang LPC4337 ay isang ARM Cortex M4 na tumatakbo sa 200MHz at isang maliit na Cortex M0 (hindi ginagamit dito). Ang totoong sensor ay konektado sa I2C1 paligid at ang aming virtual ay makakonekta sa I2C0. Magagamit ang mapagkukunan sa aking GitHub.

Paano ito itatayo? Mag-download ng LPCXpresso IDE kasama ang LPCOpen library. I-import ang library na iyon sa IDE at buksan din ang proyekto mula sa GitHub. Ang lahat ay dapat na mai-configure at maaari kang mag-click sa "Debug" sa kaliwang sulok sa ibaba.

Ang buong proyekto ay batay sa isa sa mga halimbawa ng NXP (bilang upang ipakita na ang aking proyekto ay tumutulad sa isang tunay na sensor at hindi nangangailangan ng espesyal na code sa panig ng MCU). Sa pangunahing file (tinatawag na iox_sensor.cpp) nakalagay ang code na ito:

# tukuyin ang SENSORS_ON_SHIELD

# Kung tinukoy (SENSORS_ON_SHIELD) # tukuyin ang SHIELD_I2C I2C1 #elif na tinukoy (SENSORS_ON_FPGA) # tukuyin ang SHIELD_I2C I2C0 #endif

Sa pamamagitan ng pagbabago ng SENSOR_ON_SHIELD at SENSOR_OR_FPGA ang gumagamit ay maaaring lumipat sa oras ng pag-compile kung aling sensor ang magsasalita, ang totoong isa o ang virtual, dahil nasa iba't ibang mga I2C na pin.

Hakbang 2: Ang FPGA

Ang aking board of choice na FPGA ay isang Artix 7 na ginawa ng Digilent, pagkakaroon ng Xilinx Arty 7. Dalawa sa mga konektor ng PMod ang ginagamit, isa para sa pag-debug at isa para sa totoong kargamento, ang koneksyon sa MCU board.

Muli, ang source code para sa FPGA ay magagamit sa aking GitHub (fpgaSide folder).

Paano ito itatayo? Mag-download, bumili o magbukas ng Xilinx Vivado IDE. I-import ang mga file ng proyekto mula sa GitHub. Ang isa sa mga file (content.coe) ay ang data ng temperatura sa hilaw na format na mai-stream sa pekeng sensor. Mayroon ding isang Excel file na may parehong pangalan na makakatulong sa pag-convert ng nababasa na data ng temperatura ng tao sa raw na data ng LM75. Plano ko itong palitan sa isang awtomatikong proseso na may isang piraso ng software na nakasulat sa Java ngunit hanggang sa iyon ay gumagana ang solusyon na ito. Ang synthesis at Implemantation ay dapat magtagal, isaalang-alang ito.

Hakbang 3: Paano Ito Gumagana?

Paano Ito Gumagana?
Paano Ito Gumagana?
Paano Ito Gumagana?
Paano Ito Gumagana?

Tulad ng sinabi ko, para sa MCU, ang FPGA ay mukhang isang sensor, mas eksaktong isang I2C sensor. Ang output ng I2C peripheral ay konektado sa input ng FPGA. Sa loob ng FPGA mayroong 3 pangunahing mga bahagi: - I2C Controller- I2C Device- Data Ang I2C Controller ay tumatanggap ng data ng I2C mula sa mga pin ng FPGA at ipinapadala ang mga ito sa natitirang FPGA at ginagawa ang pareho sa reverse order. Pinapanatili nito ang isang panloob na makina ng estado para sa I2C Protocol (by the way, narito ang dokumentasyon para dito). Ano ang ipinapadala ng sangkap na ito sa I2C Device? Ang kasalukuyang natanggap na byte, posisyon ng byte na iyon sa kasalukuyang komunikasyon at kung ang MCU ay sumusulat o nagbabasa mula sa FPGA. Tumatanggap ang I2C Device ng mga ipinadala na byte at ina-update ang simulate na panloob na istraktura ng sensor. Maaari lamang i-update ang rehistro pointer o humiling ng bagong data mula sa pinagmulan ng data. Ang sangkap ng Data ay dumadaloy ng mga bagong puntos ng data. Sa kasalukuyan ito ay isang memorya lamang ng ROM na ang address ay nadagdagan (tinatayang) dalawang beses bawat segundo.

Ano ang aking layunin sa pagtatapos? Ipinapakita ito sa pangalawang larawan. Iyon ay: gawing posible para sa higit pang mga aparato ng I2C (sensor at iba pa) na maging simulateble sa parehong oras sa loob ng FPGA. Ang data sa likuran ng sensor upang ma-cache sa FPGA at mai-stream mula sa PC sa pamamagitan ng USB o Ethernet. Suportahan ang mas advanced na mga sensor at iba pang Mga I2C Device (memorya, LED driver atbp).

Hakbang 4: Pagsasama-sama sa Lahat ng Ito

Pagsasama-sama sa Lahat ng Ito
Pagsasama-sama sa Lahat ng Ito
Pagsasama-sama sa Lahat ng Ito
Pagsasama-sama sa Lahat ng Ito

Ngayon na ang oras upang ikonekta ang lahat ng togheter. Sa teoretikal, simple ito: ang mcu board ay may isang konektor sa PMod (I2C0 & SSP0 (maaaring gumana tulad ng SPI)). Ang Artix board ay may 4 PMod konektor na maaaring magamit gayunpaman gusto mo. Pinili ko ang konektor D upang makipag-usap sa MCU at konektor B upang kumonekta sa aking Logic Analyzer.

Babala

Hindi mo maikakabit ang dalawang board nang ganoon. Bakit? Ang PMod ay itinayo upang magaan ang koneksyon ng isang Master / Host board (na nagbibigay lakas) sa isang Slave / Sensor board (na tumatanggap ng lakas). Ngunit sa proyektong ito ang parehong mga board ay nagbibigay ng lakas at kung ikinonekta mo ang output ng 3.3V mula sa isang board hanggang sa output ng 3.3V ng iba pang board na maaaring mangyari. Ngunit maaaring hindi nila at maaari mo lamang baguhin ang mga parameter ng mga riles ng kuryente ng FPGA (sila ay maingat na dinisenyo). Kaya huwag kunin ang peligro na ito at ilipat ang konektor ng isang pin sa kaliwa (at i-flip din ang FPGA board) tulad ng nakikita sa mga larawan sa itaas. Narito ang pagtutukoy ng PMod, pag-aralan mong kand ito, kung ano ang ginawa ko sa maikling salita ay upang hindi ikonekta ang mga VCC ng dalawang board.

Inirerekumendang: