İçindekiler:
Video: Bir FPGA'dan Herhangi Bir Sensör Yapın: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Çoğu üretici hayatlarında en az bir kez bir termometre yapmayı denedi, belki evde sahip oldukları yeterince akıllı değil ya da belki bir sonraki NEST'i inşa edebileceklerini düşünüyorlar. Bununla birlikte, bir noktada, bir sıcaklık sensörüne (ve belki başka sensörler: basınç, ışık) bağlı son teknoloji yazılımlarına sahip bir mikro denetleyicileri vardı. Şimdiye kadar her şey mükemmel, yazılım çalışıyor ve sensör algılıyor. Hadi test edelim!
Hmmmm… belki de sensörü saç kurutma makinesiyle ısıtmalı ve buzla soğutmalı, bir süre işe yarıyor. Ama profesyonel görünmüyor, ısıtırsanız sensör değerleri çok hızlı değiştiriyor, birkaç dereceden fazla ısınmıyor. Proje bir fiyasko! Ancak algoritma yeni, birçok faktörü hesaba katıyor, bu aptalca küçük şeye takılıp kalması ne kadar yazık.
Benim çözümüm şudur: bir FPGA'nın bir PC'den akan (veya bellekte depolanan veya FPGA içinde geçici oluşturulan) değerlere sahip bir sensör görevi görmesini sağlayın. Bu nedenle, değerli MCU'nuz için FPGA bir sensör gibi görünür, ancak herhangi bir sensör değil: hangi sensörü beğenirseniz seçin. Belki de beklenenden daha fazla çözünürlüğe veya daha hızlı tepki süresine ihtiyacınız olduğuna karar verdiniz, sensörü değiştirmeniz gerekiyor. İnternetten sipariş edin, birkaç gün içinde, birkaç ay içinde kim bilir gelir. PCB'nizi yeniden döndürün veya yeni sensörlü bir modül sipariş edin. Veya … birkaç tıklama ve FPGA, yepyeni sensörünüz olarak yapılandırılır ve tam dahili yapılandırmayı taklit edebilir.
Bunu yazarken, FPGA, BRAM'de (FPGA'da) depolanan sıcaklık verileriyle bir LM75 gibi davranabilir.
Adım 1: MCU
MCU seçimim, bir LPCXpresso'da bir LPC4337'dir. Üstüne bir ekran ve gerçek bir LM75 sensörlü bir kalkanım (LPC Genel Amaçlı Kalkan) var. LPC4337, 200MHz'de çalışan bir ARM Cortex M4 ve daha küçük bir Cortex M0'dır (burada kullanılmamaktadır). Gerçek sensör I2C1 çevre birimine bağlı ve sanal olanımız I2C0'a bağlanacak. Kaynak GitHub'ımda mevcut.
Nasıl inşa edilir? LPCXpresso IDE'yi LPCOpen kitaplığıyla birlikte indirin. Bu kitaplığı IDE'ye aktarın ve projeyi GitHub'dan da açın. Her şey yapılandırılmalıdır ve sol alt köşedeki "Hata Ayıkla" seçeneğine tıklayabilirsiniz.
Tüm proje NXP'nin örneklerinden birine dayanmaktadır (projemin gerçek bir sensörü simüle ettiğini ve MCU tarafında özel koda ihtiyaç duymadığını göstermek için). Ana dosyada (iox_sensor.cpp olarak adlandırılır) şu kod bulunur:
#define SENSÖRLER_ON_SHIELD
#if tanımlı(SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif tanımlı(SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif
SENSOR_ON_SHIELD ve SENSOR_OR_FPGA'yı değiştirerek, kullanıcı, farklı I2C pinlerinde olduğu gibi, gerçek veya sanal olan, hangi sensörün konuşacağını derleme zamanında değiştirebilir.
Adım 2: FPGA
Seçtiğim FPGA kartım, Digilent tarafından yapılmış, Xilinx Arty 7'ye sahip bir Artix 7'dir. Biri hata ayıklama için diğeri gerçek yük için, MCU kartıyla bağlantı olmak üzere iki adet PMod konektörü kullanılır.
Yine, FPGA'nın kaynak kodu GitHub'ımda (fpgaSide klasörü) mevcuttur.
Nasıl inşa edilir? Xilinx Vivado IDE'yi indirin, satın alın veya açın. Proje dosyalarını GitHub'dan içe aktarın. Dosyalardan biri (content.coe), sahte sensöre aktarılacak olan ham formattaki sıcaklık verileridir. Aynı ada sahip, insan tarafından okunabilen sıcaklık verilerini ham LM75 verilerine dönüştürmeye yardımcı olan bir Excel dosyası da vardır. Bunu Java ile yazılmış bir yazılım parçasıyla otomatik bir sürece değiştirmeyi planlıyorum ama o zamana kadar bu çözüm işe yarıyor. Sentez ve Uygulama biraz zaman almalı, bunu dikkate alın.
Adım 3: Nasıl Çalışır?
Dediğim gibi, MCU için FPGA bir sensöre, daha doğrusu bir I2C sensörüne benziyor. I2C çevre biriminin çıkışı, FPGA'nın girişine bağlanır. FPGA'nın içinde 3 ana bileşen vardır: - I2C Denetleyici - I2C Aygıtı - Veri I2C Denetleyici, FPGA'nın pinlerinden I2C verilerini alır ve bunları FPGA'nın geri kalanına gönderir ve aynısını ters sırada yapar. I2C Protokolü için dahili bir durum makinesi bulundurur (bu arada, işte bunun belgeleri). Bu bileşen I2C Cihazına ne gönderir? Halihazırda alınan bayt, o baytın mevcut iletişimdeki konumu ve MCU'nun FPGA'ya yazıp yazmadığı veya FPGA'dan okuyup okumadığı. I2C Cihazı gönderilen baytları alır ve sensörün simüle edilmiş dahili yapısını günceller. Yalnızca kayıt işaretçisini güncelleyebilir veya veri kaynağından yeni veriler isteyebilir. Veri bileşeni, yeni veri noktalarının akışını sağlar. Şu anda, adresi saniyede iki kez artırılan (yaklaşık olarak) bir ROM belleğidir.
Nihai hedefim nedir? İkinci resimde gösterilmiştir. Yani: FPGA içinde aynı anda daha fazla I2C cihazının (sensörler ve diğerleri) simüle edilmesini mümkün kılmak. Sensörün arka ucundaki veriler FPGA'da önbelleğe alınacak ve USB veya Ethernet üzerinden PC'den aktarılacak. Daha gelişmiş sensörleri ve diğer I2C Cihazlarını (bellek, LED sürücüleri vb.) destekleyin.
Adım 4: Hepsini Bir Araya Getirmek
Şimdi her şeyi birbirine bağlama zamanı. Teorik olarak basittir: mcu kartının bir PMod konektörü vardır (I2C0 & SSP0 (SPI gibi çalışabilir)). Artix kartı, istediğiniz gibi kullanılabilecek 4 PMod konektörüne sahiptir. MCU ile konuşmak için D konektörünü ve Mantık Analizörüme bağlanmak için B konektörünü seçiyorum.
Uyarı
İki kartı bu şekilde birbirine bağlayamazsınız. Niye ya? PMod, bir Master/Host kartının (güç veren) bir Slave/Sensör kartına (güç alan) bağlantısını kolaylaştırmak için yapılmıştır. Ama bu projede her iki kart da güç veriyor ve bir kartın 3.3V çıkışını diğer kartın 3.3V çıkışına bağlarsanız kötü şeyler olabilir. Ama olmayabilirler ve siz sadece FPGA'nın güç raylarının parametrelerini değiştirebilirsiniz (çok dikkatli bir şekilde tasarlanmışlardır). O yüzden bu riski almayın ve yukarıdaki resimlerde görüldüğü gibi konnektörü bir pin sola hareket ettirin (ve ayrıca FPGA kartını çevirin). İşte PMod spesifikasyonu, onu inceleyebilirsiniz, kısaca yaptığım şey iki panonun VCC'lerini birbirine bağlamamak.
Önerilen:
Herhangi Bir Kulaklığı Bluetooth'a Yapın - Etkin Kulaklıklar: 4 Adım
Bluetooth'a Herhangi Bir Kulaklığı Yapın - Etkin Kulaklıklar: Son zamanlarda cep telefonumun ses jakı çalışmayı durdurdu ve bu nedenle benim gibi bir genç için oldukça büyük bir şey olan müzik dinleyemedim veya youtube izleyemedim. Bu proje, üzerinde çalışılacak eğlenceli bir projeden ziyade zorunluluktan doğdu. Öyle değil
PVC Boruları Kullanarak (Herhangi Bir Kamera için Monopod/Tripod) 6 $'dan Daha Düşük Bir Maliyetle DSLR Montaj Standı Yapın: 6 Adım
DSLR Montaj Standını 6 $'dan Az Bir Maliyetle PVC Borular Kullanarak Yapın (Herhangi Bir Kamera için Monopod/Tripod): Evet…. Sadece biraz PVC boru ve T'ler ile kendinizinkini yapabilirsiniz. Hafiftir… Mükemmel dengelidir… sağlam güçlü… Kişiselleştirme dostu… Ben Sooraj Bagal ve benim için oluşturduğum bu kamera montajıyla ilgili deneyimlerimi paylaşacağım
Herhangi Bir Medya Dosyasını (Hemen Hemen) Herhangi Bir Diğer Medya Dosyasını Ücretsiz Olarak Dönüştürün!: 4 Adım
(Hemen) Herhangi Bir Medya Dosyasını Diğer Herhangi Bir Medya Dosyasına (Hemen Hemen) Ücretsiz Olarak Dönüştürün!: İlk talimatım, şerefe! Her neyse, Google'da Youtube.flv dosyalarımı bir biçime dönüştürecek ücretsiz bir program arıyordum. daha evrenseldir, örneğin.wmv veya.mov.Sayısız forum ve web sitesi aradım ve ardından … adlı bir program buldum
HERHANGİ BİR MP3 Çalar veya Bilgisayarla Herhangi Bir 5.1 Hoparlör Sistemini Ucuza Kullanın!: 4 Adım
HERHANGİ BİR MP3 Çalar veya Bilgisayarla Herhangi Bir 5.1 Hoparlör Sistemini Ucuza Kullanın!: (Bu benim ilk ders kitabım ve İngilizce benim ana dilim değil) Eskiden, ucuza bir Creative Inspire 5100 hoparlör seti satın aldım. 5.1 ses kartı (PCI) olan masaüstümde kullandım. Sonra bir dizüstü bilgisayarımla birlikte kullandım
Çok Küçük Bir Robot Yapın: Kıskaçlı Dünyanın En Küçük Tekerlekli Robotunu Yapın.: 9 Adım (Resimlerle)
Çok Küçük Bir Robot Yapın: Kıskaçlı Dünyanın En Küçük Tekerlekli Robotunu Yapın.: Küçük nesneleri alıp hareket ettirebilen bir kavrayıcıya sahip 1/20 inç küp bir robot yapın. Bir Picaxe mikro denetleyici tarafından kontrol edilir. Zamanın bu noktasında, bunun dünyanın kıskaçlı en küçük tekerlekli robotu olabileceğine inanıyorum. Bu hiç şüphesiz ch