Mündəricat:

Hər hansı bir sensoru FPGA -dan hazırlayın: 4 addım
Hər hansı bir sensoru FPGA -dan hazırlayın: 4 addım

Video: Hər hansı bir sensoru FPGA -dan hazırlayın: 4 addım

Video: Hər hansı bir sensoru FPGA -dan hazırlayın: 4 addım
Video: Zigbee двусторонний энергомонитор постоянного тока MSH - интеграция DC UPS в Home Assistant 2024, Iyul
Anonim
Image
Image
FPGA
FPGA

İstehsalçıların çoxu həyatında ən azı bir dəfə termometr qurmağa çalışdılar, bəlkə də evlərində olan cihaz yetərincə ağıllı deyil və ya bəlkə növbəti NEST qura biləcəklərini düşünürlər. Buna baxmayaraq, bir nöqtədə bir temperatur sensoru (və bəlkə də digər sensorlar: təzyiq, işıq) ilə əlaqəli ən son proqramları olan bir mikro nəzarətçi var idi. İndiyə qədər hər şey mükəmməl, proqram işləyir və sensor hiss edir. Gəlin sınayaq!

Hmmmm … bəlkə də saç qurutma maşını istifadə edərək sensoru qızdırmalı və buz istifadə edərək soyudmalıdır, bir müddət işləyir. Ancaq peşəkar görünmür, istiləşdirsəniz sensor dəyərləri çox tez dəyişir, bir neçə dərəcədən çox istiləşmir. Layihə bir büstdür! Ancaq alqoritm bir çox amilləri nəzərə alır, bu axmaqcasına kiçik bir şeyə ilişib qalması nə qədər utanc vericidir.

Mənim həllim budur: bir FPGA-nı bir PC-dən axan (və ya yaddaşda saxlanılan və ya FPGA-da ad-hoc olaraq yaradılmış) dəyərləri olan bir sensor kimi hərəkət etdirin. Beləliklə, qiymətli MCU üçün FPGA bir sensora bənzəyir, amma heç bir sensora bənzəmir: hansı sensoru bəyənirsənsə. Bəlkə daha çox qətnamə və ya gözləniləndən daha sürətli cavab müddətinə ehtiyacınız olduğuna qərar verərsən, sensoru dəyişdirməlisən. Onlayn sifariş edin, bir neçə günə, bir neçə aya gələcək, kim bilir. PCB -yə cavab verin və ya yeni sensorla bir modul sifariş edin. Yoxsa … bir neçə klik və FPGA yeni sensorunuz kimi konfiqurasiya edilir və dəqiq daxili konfiqurasiyanı təqlid edə bilər.

Bunu yazarkən FPGA, BRAM -da (FPGA -da) saxlanılan temperatur məlumatları ilə LM75 kimi çıxış edə bilər.

Addım 1: MCU

Seçdiyim MCU bir LPCXpresso üzərindəki LPC4337 -dir. Üstündə ekranı və əsl LM75 sensoru olan bir qalxan (LPC Ümumi Məqsəd Qalxanı) var. LPC4337, 200MHz -də çalışan bir ARM Cortex M4 və daha kiçik Cortex M0 -dir (burada istifadə olunmur). Əsl sensor I2C1 periferiyasına, virtualımız isə I2C0 -a qoşulacaq. Mənbə GitHub -da mövcuddur.

Necə qurmaq olar? LPCXpresso IDE -ni LPCOpen kitabxanası ilə birlikdə yükləyin. Bu kitabxananı IDE -yə idxal edin və layihəni GitHub -dan açın. Hər şey konfiqurasiya edilməlidir və sol alt küncdəki "Debug" düyməsini vura bilərsiniz.

Bütün layihə NXP nümunələrindən birinə əsaslanır (layihəmin əsl sensoru simulyasiya etdiyini və MCU tərəfində xüsusi bir koda ehtiyac olmadığını göstərmək üçün). Əsas faylda (iox_sensor.cpp adlanır) bu kod var:

#SENSORS_ON_SHIELD təyin edin

#if müəyyən edildikdə (SENSORS_ON_SHIELD) #SHIELD_I2C I2C1 -i təyin et #elif müəyyən edilmiş (SENSORS_ON_FPGA) #SHIELD_I2C I2C0 -ni təyin et #endif

İstifadəçi, SENSOR_ON_SHIELD və SENSOR_OR_FPGA -nı dəyişdirməklə, fərqli I2C pinlərində olduğu üçün, tərtib edildiyi anda həqiqi və ya virtual sensora danışa bilər.

Addım 2: FPGA

Seçdiyim FPGA lövhəsi, Xilinx Arty 7 -yə sahib olan Digilent tərəfindən hazırlanan Artix 7 -dir. Biri ayıklama üçün, biri də real yükləmə üçün MCU lövhəsi ilə əlaqəli PMod konnektorlarından ikisi istifadə olunur.

Yenə də FPGA üçün mənbə kodu GitHub -da (fpgaSide qovluğu) mövcuddur.

Necə qurmaq olar? Xilinx Vivado IDE -ni yükləyin, satın alın və ya açın. Layihə fayllarını GitHub -dan idxal edin. Fayllardan biri (content.coe) saxta sensora axın ediləcək xam formatdakı temperatur məlumatlarıdır. İnsanın oxuya biləcəyi temperatur məlumatlarını xam LM75 məlumatlarına çevirməyə kömək edən eyni adlı bir Excel faylı da var. Bunu Java -da yazılmış bir proqram parçası ilə avtomatlaşdırılmış bir prosesə dəyişməyi planlaşdırıram, amma o vaxta qədər bu həll işləyir. Sintez və Tətbiq bir müddət çəkməlidir, bunu nəzərə alın.

Addım 3: Necə işləyir?

Bu necə işləyir?
Bu necə işləyir?
Bu necə işləyir?
Bu necə işləyir?

Dediyim kimi, MCU üçün FPGA bir sensora bənzəyir, daha doğrusu I2C sensoru. I2C ətraf cihazının çıxışı FPGA girişinə bağlıdır. FPGA-nın içərisində 3 əsas komponent var:- I2C Controller- I2C Cihazı- Data I2C Controller, FPGA pinlərindən I2C məlumatlarını alır və FPGA-nın qalan hissəsinə göndərir və eyni şeyi tərs qaydada edir. I2C Protokolu üçün daxili dövlət maşını saxlayır (yeri gəlmişkən, bunun sənədləri burada). Bu komponent I2C Cihazına nə göndərir? Hal -hazırda alınan bayt, bu baytın mövcud ünsiyyətdəki mövqeyi və MCU -nun FPGA -ya yazdığı və ya oxuduğu. I2C Cihazı göndərilən baytı alır və sensorun simulyasiya edilmiş daxili quruluşunu yeniləyir. Sadəcə qeydiyyat göstəricisini yeniləyə və ya məlumat mənbəyindən yeni məlumatlar istəyə bilər. Məlumat komponenti yeni məlumat nöqtələrini axın edir. Hal -hazırda, ünvanı saniyədə iki dəfə artırılan (təxminən) bir ROM yaddaşıdır.

Son məqsədim nədir? İkinci şəkildə göstərilib. Yəni: daha çox I2C cihazının (sensorlar və digərləri) eyni anda FPGA -da simulyasiya edilməsinə imkan verin. Sensorun arxa tərəfindəki məlumatlar FPGA -da önbelleğe alınacaq və USB və ya Ethernet vasitəsilə PC -dən axın ediləcək. Daha inkişaf etmiş sensorlar və digər I2C Cihazlarını (yaddaş, LED sürücüləri və s.) Dəstəkləyin.

Addım 4: Hamısını bir yerə yığın

Hamısını bir araya gətirmək
Hamısını bir araya gətirmək
Hamısını bir araya gətirmək
Hamısını bir araya gətirmək

İndi hər şeyi bir yerə bağlamağın vaxtıdır. Teorik olaraq, sadədir: mcu lövhəsində bir PMod konnektoru var (I2C0 & SSP0 (SPI kimi işləyə bilər)). Artix lövhəsində istədiyiniz kimi istifadə edilə bilən 4 PMod konnektoru var. Mən MCU ilə danışmaq üçün D konnektorunu və Məntiq Analizatoruma qoşulmaq üçün B konnektorunu seçirəm.

Xəbərdarlıq

İki lövhəni belə birləşdirə bilməzsiniz. Niyə? PMod, Master/Host lövhəsinin (güc verən) Slave/Sensor lövhəsinə (güc alan) qoşulmasını asanlaşdırmaq üçün hazırlanmışdır. Ancaq bu layihədə hər iki lövhə güc verir və bir lövhədən 3.3V çıxışı digər lövhənin 3.3V çıxışına bağlasanız pis şeylər ola bilər. FPGA -nın elektrik raylarının parametrlərini dəyişə bilməzlər və siz də dəyişdirə bilərsiniz (çox diqqətlə hazırlanmışdır). Buna görə də bu riski götürməyin və yuxarıdakı şəkillərdə göründüyü kimi bağlayıcıyı bir pin sola (və həmçinin FPGA lövhəsini çevirin) çevirməyin. İşdə PMod spesifikasiyası, bunu öyrənə bilərsiniz, qısa sözlə etdiyim şey, iki lövhənin VCC -lərini bağlamamaqdır.

Tövsiyə: