Isi kandungan:

Buat Sensor Daripada FPGA: 4 Langkah
Buat Sensor Daripada FPGA: 4 Langkah

Video: Buat Sensor Daripada FPGA: 4 Langkah

Video: Buat Sensor Daripada FPGA: 4 Langkah
Video: Arduino Missile Defense Radar System in ACTION 2024, November
Anonim
Image
Image
FPGA
FPGA

Sebilangan besar pembuat cuba membina termometer sekurang-kurangnya sekali dalam hidup mereka, mungkin yang mereka ada di rumah tidak cukup pintar, atau mungkin mereka berfikir bahawa mereka dapat membina NEST seterusnya. Walaupun begitu, pada suatu ketika mereka mempunyai mikrokontroler dengan perisian canggih mereka yang terhubung dengan sensor suhu (dan mungkin sensor lain: tekanan, cahaya). Sehingga kini semuanya sempurna, perisian sedang berjalan dan sensornya terasa. Mari mengujinya!

Hmmmm … mungkin dia harus memanaskan sensor menggunakan pengering rambut dan menyejukkannya menggunakan ais, ia berfungsi untuk sementara waktu. Tetapi ia tidak kelihatan profesional, sensor mengubah nilai terlalu cepat jika anda memanaskannya, ia tidak akan memanas lebih dari beberapa darjah. Projek ini adalah bust! Tetapi algoritma itu baru, mengambil kira banyak faktor, sungguh memalukan bahawa dia terjebak dengan perkara kecil yang bodoh ini.

Penyelesaian saya adalah ini: jadikan FPGA bertindak sebagai sensor dengan nilai yang dialirkan dari PC (atau disimpan dalam memori, atau dibuat ad-hoc di dalam FPGA). Jadi untuk MCU berharga anda, FPGA kelihatan seperti sensor, tetapi bukan sensor apa pun: sensor mana yang anda suka. Mungkin anda memutuskan bahawa anda memerlukan lebih banyak resolusi atau masa tindak balas yang lebih pantas daripada yang dijangkakan, anda harus menukar sensor. Pesan secara dalam talian, ia akan tiba dalam beberapa hari, beberapa bulan, siapa tahu. Balas PCB anda atau pesan modul dengan sensor baru. Atau … beberapa klik dan FPGA dikonfigurasikan sebagai sensor baru anda dan ia dapat meniru konfigurasi dalaman yang tepat.

Pada saat menulis ini, FPGA dapat bertindak sebagai LM75 dengan data suhu disimpan di BRAM (pada FPGA).

Langkah 1: MCU

Pilihan MCU saya adalah LPC4337 pada LPCXpresso. Di atasnya saya mempunyai perisai (LPC General Purpose Shield) dengan paparan dan sensor LM75 sebenar. LPC4337 adalah ARM Cortex M4 yang berjalan pada 200MHz dan Cortex M0 yang lebih kecil (tidak digunakan di sini). Sensor sebenar disambungkan ke periferal I2C1 dan maya kami akan disambungkan ke I2C0. Sumbernya terdapat di GitHub saya.

Bagaimana membinanya? Muat turun LPCXpresso IDE bersama perpustakaan LPCOpen. Import perpustakaan itu ke dalam IDE dan juga buka projek dari GitHub. Semuanya harus dikonfigurasi dan anda boleh mengklik "Debug" di sudut kiri bawah.

Keseluruhan projek ini berdasarkan salah satu contoh NXP (untuk menunjukkan bahawa projek saya mensimulasikan sensor sebenar dan tidak memerlukan kod khas di sisi MCU). Dalam fail utama (dipanggil iox_sensor.cpp) terdapat kod ini:

#tentukan SENSORS_ON_SHIELD

#jika ditentukan (SENSORS_ON_SHIELD) #tentukan SHIELD_I2C I2C1 #elif ditentukan (SENSORS_ON_FPGA) #tentukan SHIELD_I2C I2C0 #endif

Dengan menukar SENSOR_ON_SHIELD dan SENSOR_OR_FPGA pengguna dapat beralih pada masa kompilasi ke sensor mana yang boleh dibincangkan, yang sebenar atau yang maya, kerana mereka berada pada pin I2C yang berbeza.

Langkah 2: FPGA

Papan pilihan saya FPGA adalah Artix 7 yang dibuat oleh Digilent, mempunyai Xilinx Arty 7. Dua dari penyambung PMod digunakan, satu untuk debug dan satu untuk muatan sebenar, hubungan dengan papan MCU.

Sekali lagi, kod sumber untuk FPGA boleh didapati di GitHub saya (folder fpgaSide).

Bagaimana membinanya? Muat turun, beli atau buka Xilinx Vivado IDE. Import fail projek dari GitHub. Salah satu fail (content.coe) adalah data suhu dalam format mentah yang akan dialirkan ke sensor palsu. Terdapat juga fail Excel dengan nama yang sama yang membantu menukar data suhu yang boleh dibaca manusia menjadi data LM75 mentah. Saya merancang untuk mengubahnya menjadi proses automatik dengan perisian yang ditulis di Java tetapi sehingga penyelesaian ini berjaya. Sintesis dan Implemantasi perlu sedikit masa, pertimbangkan perkara ini.

Langkah 3: Bagaimana Ia Berfungsi?

Bagaimanakah ia berfungsi?
Bagaimanakah ia berfungsi?
Bagaimanakah ia berfungsi?
Bagaimanakah ia berfungsi?

Seperti yang saya katakan, untuk MCU, FPGA kelihatan seperti sensor, lebih tepatnya sensor I2C. Keluaran periferal I2C disambungkan ke input FPGA. Di dalam FPGA terdapat 3 komponen utama: - Pengawal I2C- Peranti I2C- DataPengawal I2C menerima data I2C dari pin FPGA dan mengirimkannya ke FPGA yang lain dan melakukan perkara yang sama dalam urutan terbalik. Ia mengekalkan mesin keadaan dalaman untuk Protokol I2C (by the way, inilah dokumentasinya). Apa yang dihantar oleh komponen ini ke Peranti I2C? Byte yang sedang diterima, kedudukan bait itu dalam komunikasi semasa dan sama ada MCU sedang menulis atau membaca dari FPGA. Peranti I2C menerima bait yang dihantar dan mengemas kini struktur dalaman simulasi sensor. Mungkin hanya mengemas kini penunjuk daftar atau meminta data baru dari sumber data. Komponen Data mengalirkan titik data baru. Pada masa ini ia hanya memori ROM yang alamatnya meningkat (kira-kira) dua kali sesaat.

Apakah tujuan akhir saya? Ia ditunjukkan dalam gambar kedua. Iaitu: memungkinkan lebih banyak peranti I2C (sensor dan lain-lain) dapat disimulasikan pada masa yang sama di dalam FPGA. Data di bahagian belakang sensor akan di-cache dalam FPGA dan dialirkan dari PC melalui USB atau Ethernet. Sokong sensor yang lebih maju dan Peranti I2C lain (memori, pemacu LED dll).

Langkah 4: Menggabungkan Semuanya

Menggabungkan Semuanya
Menggabungkan Semuanya
Menggabungkan Semuanya
Menggabungkan Semuanya

Sekarang adalah masa untuk menghubungkan semuanya lebih tinggi. Secara teorinya, mudah: papan mcu mempunyai penyambung PMod (I2C0 & SSP0 (boleh berfungsi seperti SPI)). Papan Artix mempunyai 4 PMod penyambung yang boleh digunakan mengikut kehendak anda. Saya memilih penyambung D untuk bercakap dengan MCU dan penyambung B untuk disambungkan ke Penganalisis Logik saya.

Amaran

Anda tidak boleh menghubungkan kedua-dua papan itu begitu sahaja. Kenapa? PMod dibina untuk memudahkan penyambungan papan Master / Host (yang memberi kuasa) ke papan Slave / Sensor (yang menerima kuasa). Tetapi dalam projek ini kedua-dua papan memberi kuasa dan jika anda menyambungkan output 3.3V dari satu papan ke output 3.3V dari papan yang lain, perkara buruk boleh berlaku. Tetapi mereka mungkin tidak dan anda mungkin hanya mengubah parameter rel kuasa FPGA (mereka dirancang dengan teliti). Oleh itu, jangan ambil risiko ini dan gerakkan penyambung satu pin ke kiri (dan juga balikkan papan FPGA) seperti yang dilihat pada gambar di atas. Inilah spesifikasi PMod, anda boleh mempelajarinya, apa yang saya buat dengan kata pendek adalah tidak menghubungkan VCC kedua-dua papan.

Disyorkan: