Daftar Isi:

Buat Sensor Apa Pun dari FPGA: 4 Langkah
Buat Sensor Apa Pun dari FPGA: 4 Langkah

Video: Buat Sensor Apa Pun dari FPGA: 4 Langkah

Video: Buat Sensor Apa Pun dari FPGA: 4 Langkah
Video: What's an FPGA? 2024, Juli
Anonim
Image
Image
FPGA
FPGA

Kebanyakan pembuat mencoba membangun setidaknya sekali dalam hidup mereka termometer, mungkin yang mereka miliki di rumah tidak cukup pintar, atau mungkin mereka berpikir bahwa mereka dapat membangun NEST berikutnya. Namun demikian, pada titik tertentu mereka memiliki mikrokontroler dengan perangkat lunak canggih mereka yang terhubung ke sensor suhu (dan mungkin sensor lain: tekanan, cahaya). Sampai sekarang semuanya sempurna, softwarenya berjalan dan sensornya sensing. Mari kita uji!

Hmmmm… mungkin dia harus memanaskan sensor menggunakan pengering rambut dan mendinginkannya menggunakan es, berfungsi untuk sementara waktu. Tapi sepertinya tidak profesional, sensor mengubah nilai terlalu cepat jika Anda memanaskannya, tidak memanas lebih dari beberapa derajat. Proyek ini gagal! Tapi algoritmenya baru, memperhitungkan banyak faktor, sayang sekali dia terjebak pada hal kecil yang bodoh ini.

Solusi saya adalah ini: buat FPGA bertindak sebagai sensor dengan nilai yang dialirkan dari PC (atau disimpan di memori, atau dibuat ad-hoc di dalam FPGA). Jadi untuk MCU berharga Anda, FPGA terlihat seperti sensor, tetapi bukan sensor apa pun: sensor mana pun yang Anda suka. Mungkin Anda memutuskan bahwa Anda membutuhkan lebih banyak resolusi atau waktu respons lebih cepat dari yang diharapkan, Anda harus mengubah sensor. Pesan online, itu akan tiba dalam beberapa hari, beberapa bulan, siapa tahu. Putar ulang PCB Anda atau pesan modul dengan sensor baru. Atau … beberapa klik dan FPGA dikonfigurasi sebagai sensor baru Anda dan dapat meniru konfigurasi internal yang tepat.

Pada saat penulisan ini, FPGA dapat bertindak sebagai LM75 dengan data suhu yang disimpan dalam BRAM (pada FPGA).

Langkah 1: MCU

MCU pilihan saya adalah LPC4337 pada LPCXpresso. Di atasnya saya memiliki perisai (LPC General Purpose Shield) dengan layar dan sensor LM75 asli. LPC4337 adalah ARM Cortex M4 yang berjalan pada 200MHz dan Cortex M0 yang lebih kecil (tidak digunakan di sini). Sensor nyata terhubung ke perangkat I2C1 dan sensor virtual kami akan terhubung ke I2C0. Sumbernya tersedia di GitHub saya.

Bagaimana cara membangunnya? Unduh LPCXpresso IDE bersama dengan perpustakaan LPCOpen. Impor perpustakaan itu ke IDE dan juga buka proyek dari GitHub. Semuanya harus dikonfigurasi dan Anda dapat mengklik "Debug" di sudut kiri bawah.

Seluruh proyek didasarkan pada salah satu contoh NXP (untuk menunjukkan bahwa proyek saya mensimulasikan sensor nyata dan tidak memerlukan kode khusus di sisi MCU). Di file utama (disebut iox_sensor.cpp) terletak kode ini:

#tentukan SENSORS_ON_SHIELD

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

Dengan mengubah SENSOR_ON_SHIELD dan SENSOR_OR_FPGA, pengguna dapat beralih pada waktu kompilasi ke sensor mana yang akan berbicara, yang asli atau yang virtual, karena keduanya berada pada pin I2C yang berbeda.

Langkah 2: FPGA

Papan FPGA pilihan saya adalah Artix 7 yang dibuat oleh Digilent, memiliki Xilinx Arty 7. Dua konektor PMod digunakan, satu untuk debug dan satu untuk muatan nyata, sambungan dengan papan MCU.

Sekali lagi, kode sumber untuk FPGA tersedia di GitHub saya (folder fpgaSide).

Bagaimana cara membangunnya? Unduh, beli, atau buka Xilinx Vivado IDE. Impor file proyek dari GitHub. Salah satu file (content.coe) adalah data suhu dalam format mentah yang akan dialirkan ke sensor palsu. Ada juga file Excel dengan nama yang sama yang membantu mengonversi data suhu yang dapat dibaca manusia menjadi data LM75 mentah. Saya berencana mengubah ini ke proses otomatis dengan perangkat lunak yang ditulis dalam Java tetapi sampai saat itu solusi ini berfungsi. Sintesis dan Implementasi harus memakan waktu cukup lama, pertimbangkan ini.

Langkah 3: Bagaimana Cara Kerjanya?

Bagaimana cara kerjanya?
Bagaimana cara kerjanya?
Bagaimana cara kerjanya?
Bagaimana cara kerjanya?

Seperti yang saya katakan, untuk MCU, FPGA terlihat seperti sensor, lebih tepatnya sensor I2C. Output dari perangkat I2C terhubung ke input FPGA. Di dalam FPGA ada 3 komponen utama: - Pengontrol I2C - Perangkat I2C - Data Pengontrol I2C menerima data I2C dari pin FPGA dan mengirimkannya ke seluruh FPGA dan melakukan hal yang sama dalam urutan terbalik. Itu memelihara mesin status internal untuk Protokol I2C (omong-omong, ini dokumentasinya). Apa yang dikirim komponen ini ke Perangkat I2C? Byte yang diterima saat ini, posisi byte tersebut dalam komunikasi saat ini dan apakah MCU sedang menulis atau membaca dari FPGA. Perangkat I2C menerima byte yang dikirim dan memperbarui struktur internal yang disimulasikan dari sensor. Mungkin hanya memperbarui penunjuk register atau meminta data baru dari sumber data. Komponen Data mengalirkan titik data baru. Saat ini hanya memori ROM yang alamatnya bertambah (kurang lebih) dua kali per detik.

Apa tujuan akhir saya? Itu ditunjukkan pada gambar kedua. Yaitu: memungkinkan lebih banyak perangkat I2C (sensor dan lainnya) untuk disimulasikan pada saat yang sama di dalam FPGA. Data di bagian belakang sensor akan di-cache di FPGA dan dialirkan dari PC melalui USB atau Ethernet. Mendukung sensor yang lebih canggih dan Perangkat I2C lainnya (memori, driver LED, dll).

Langkah 4: Menyatukan Semuanya

Menyatukan Semuanya
Menyatukan Semuanya
Menyatukan Semuanya
Menyatukan Semuanya

Sekarang adalah waktu untuk menghubungkan semuanya bersama-sama. Secara teoritis, sederhana: papan mcu memiliki konektor PMod (I2C0 & SSP0 (dapat bekerja seperti SPI)). Papan Artix memiliki 4 konektor PMod yang dapat digunakan sesuai keinginan Anda. Saya memilih konektor D untuk berbicara dengan MCU dan konektor B untuk terhubung ke Penganalisis Logika saya.

Peringatan

Anda tidak dapat menghubungkan dua papan bersama-sama begitu saja. Mengapa? PMod dibuat untuk memudahkan koneksi papan Master/Host (yang memberi daya) ke papan Slave/Sensor (yang menerima daya). Tetapi dalam proyek ini, kedua papan memberikan daya dan jika Anda menghubungkan output 3.3V dari satu papan ke keluaran 3.3V dari papan lainnya, hal-hal buruk dapat terjadi. Tetapi mereka mungkin tidak dan Anda mungkin hanya mengubah parameter rel daya FPGA (mereka dirancang dengan sangat hati-hati). Jadi jangan ambil risiko ini dan pindahkan konektor satu pin ke kiri (dan juga flip papan FPGA) seperti yang terlihat pada gambar di atas. Berikut adalah spesifikasi PMod, Anda dapat mempelajarinya, yang saya lakukan dengan kata-kata singkat adalah tidak menghubungkan VCC dari kedua papan.

Direkomendasikan: