विषयसूची:

FPGA से कोई भी सेंसर बनाएं: 4 कदम
FPGA से कोई भी सेंसर बनाएं: 4 कदम

वीडियो: FPGA से कोई भी सेंसर बनाएं: 4 कदम

वीडियो: FPGA से कोई भी सेंसर बनाएं: 4 कदम
वीडियो: DE0-नैनो - अल्टेरा साइक्लोन IV FPGA क्विक स्टार्ट ट्यूटोरियल | क्रमशः 2024, नवंबर
Anonim
Image
Image
FPGA
FPGA

अधिकांश निर्माताओं ने अपने जीवन में कम से कम एक बार थर्मामीटर बनाने की कोशिश की, हो सकता है कि उनके पास घर पर जो थर्मामीटर है वह पर्याप्त स्मार्ट नहीं है, या शायद उन्हें लगता है कि वे अगले नेस्ट का निर्माण कर सकते हैं। फिर भी, किसी बिंदु पर उनके पास एक माइक्रोकंट्रोलर था जिसमें उनके अत्याधुनिक सॉफ़्टवेयर एक तापमान सेंसर (और शायद अन्य सेंसर: दबाव, प्रकाश) से जुड़े थे। अब तक सब कुछ सही है, सॉफ्टवेयर चल रहा है और सेंसर सेंस कर रहा है। आइए इसका परीक्षण करें!

हम्म्म्म… हो सकता है कि उसे हेयर ड्रायर का उपयोग करके सेंसर को गर्म करना चाहिए और बर्फ का उपयोग करके इसे ठंडा करना चाहिए, यह कुछ समय के लिए काम करता है। लेकिन यह पेशेवर नहीं लगता है, यदि आप इसे गर्म करते हैं तो सेंसर बहुत तेज़ी से मान बदलता है, यह कुछ डिग्री से अधिक गर्म नहीं होता है। परियोजना एक बस्ट है! लेकिन एल्गोरिथ्म नया है, बहुत सारे कारकों को ध्यान में रखता है, क्या शर्म की बात है कि वह इस मूर्खतापूर्ण छोटी सी बात पर फंस गया।

मेरा समाधान यह है: एक एफपीजीए एक पीसी से स्ट्रीम किए गए मूल्यों के साथ एक सेंसर के रूप में कार्य करें (या मेमोरी में संग्रहीत, या एफपीजीए के अंदर एड-हॉक बनाया गया)। तो आपके कीमती MCU के लिए FPGA एक सेंसर की तरह दिखता है, लेकिन कोई सेंसर नहीं: जो भी सेंसर आपको पसंद हो। हो सकता है कि आप तय करें कि आपको अपेक्षा से अधिक रिज़ॉल्यूशन या तेज़ प्रतिक्रिया समय की आवश्यकता है, आपको सेंसर को बदलना होगा। इसे ऑनलाइन ऑर्डर करें, यह कुछ दिनों में, कुछ महीनों में आ जाएगा, कौन जानता है। अपने पीसीबी को रिस्पिन करें या नए सेंसर के साथ एक मॉड्यूल ऑर्डर करें। या … कुछ क्लिक और FPGA को आपके बिल्कुल नए सेंसर के रूप में कॉन्फ़िगर किया गया है और यह सटीक आंतरिक कॉन्फ़िगरेशन का अनुकरण कर सकता है।

इसे लिखने के समय, FPGA, BRAM (FPGA पर) में संग्रहीत तापमान डेटा के साथ LM75 के रूप में कार्य कर सकता है।

चरण 1: एमसीयू

मेरी पसंद का एमसीयू एलपीसीएक्सप्रेसो पर एलपीसी4337 है। इसके ऊपर मेरे पास एक डिस्प्ले और एक वास्तविक LM75 सेंसर के साथ एक शील्ड (LPC जनरल पर्पस शील्ड) है। LPC4337 एक ARM Cortex M4 है जो 200MHz पर चल रहा है और एक छोटा Cortex M0 (यहाँ उपयोग नहीं किया गया है)। वास्तविक सेंसर I2C1 परिधीय से जुड़ा है और हमारा आभासी I2C0 से जुड़ा होगा। स्रोत मेरे GitHub पर उपलब्ध है।

इसका निर्माण कैसे करें? LPCXpresso IDE को LPCOpen लाइब्रेरी के साथ डाउनलोड करें। उस लाइब्रेरी को IDE में आयात करें और GitHub से प्रोजेक्ट भी खोलें। सब कुछ कॉन्फ़िगर किया जाना चाहिए और आप निचले बाएं कोने में "डीबग" पर क्लिक कर सकते हैं।

पूरी परियोजना एनएक्सपी के उदाहरणों में से एक पर आधारित है (यह दिखाने के लिए कि मेरी परियोजना एक वास्तविक सेंसर का अनुकरण करती है और एमसीयू पक्ष पर विशेष कोड की आवश्यकता नहीं है)। मुख्य फ़ाइल में (iox_sensor.cpp कहा जाता है) यह कोड निहित है:

#SENSORS_ON_SHIELD परिभाषित करें

#if परिभाषित (SENSORS_ON_SHIELD) # SHIELD_I2C I2C1 को परिभाषित करें #elif परिभाषित (SENSORS_ON_FPGA) # SHIELD_I2C I2C0 को परिभाषित करें #endif

SENSOR_ON_SHIELD और SENSOR_OR_FPGA को बदलकर उपयोगकर्ता संकलन समय पर स्विच करने में सक्षम है कि किस सेंसर से बात करनी है, असली या आभासी एक, क्योंकि वे अलग-अलग I2C पिन पर हैं।

चरण 2: FPGA

मेरी पसंद का FPGA बोर्ड Digilent द्वारा बनाया गया एक Artix 7 है, जिसमें Xilinx Arty 7 है। दो PMod कनेक्टर का उपयोग किया जाता है, एक डिबगिंग के लिए और एक वास्तविक पेलोड के लिए, MCU बोर्ड के साथ कनेक्शन।

फिर से, FPGA के लिए स्रोत कोड मेरे GitHub (fpgaSide फ़ोल्डर) पर उपलब्ध है।

इसका निर्माण कैसे करें? Xilinx Vivado IDE डाउनलोड करें, खरीदें या खोलें। GitHub से प्रोजेक्ट फ़ाइलें आयात करें। फाइलों में से एक (content.coe) कच्चे प्रारूप में तापमान डेटा है जिसे नकली सेंसर पर स्ट्रीम किया जा रहा है। इसी नाम की एक एक्सेल फ़ाइल भी है जो मानव पठनीय तापमान डेटा को कच्चे LM75 डेटा में बदलने में मदद करती है। मैं जावा में लिखे गए सॉफ़्टवेयर के एक टुकड़े के साथ इसे स्वचालित प्रक्रिया में बदलने की योजना बना रहा हूं लेकिन तब तक यह समाधान काम करता है। संश्लेषण और कार्यान्वयन में थोड़ा समय लगना चाहिए, इसे ध्यान में रखें।

चरण 3: यह कैसे काम करता है?

यह कैसे काम करता है?
यह कैसे काम करता है?
यह कैसे काम करता है?
यह कैसे काम करता है?

जैसा कि मैंने कहा, MCU के लिए, FPGA एक सेंसर की तरह दिखता है, अधिक सटीक रूप से एक I2C सेंसर। I2C परिधीय का आउटपुट FPGA के इनपुट से जुड़ा है। FPGA के अंदर 3 मुख्य घटक होते हैं: - I2C नियंत्रक- I2C डिवाइस- डेटा I2C नियंत्रक FPGA के पिन से I2C डेटा प्राप्त करता है और उन्हें शेष FPGA को भेजता है और इसे उल्टे क्रम में करता है। यह I2C प्रोटोकॉल के लिए एक आंतरिक स्थिति मशीन रखता है (वैसे, यहां इसके लिए प्रलेखन है)। यह घटक I2C डिवाइस को क्या भेजता है? वर्तमान में प्राप्त बाइट, वर्तमान संचार में उस बाइट की स्थिति और क्या MCU FPGA को लिख रहा है या पढ़ रहा है। I2C डिवाइस भेजे गए बाइट्स को प्राप्त करता है और सेंसर की नकली आंतरिक संरचना को अपडेट करता है। यह सिर्फ रजिस्टर पॉइंटर को अपडेट कर सकता है या डेटा स्रोत से नए डेटा का अनुरोध कर सकता है। डेटा घटक नए डेटा बिंदुओं को स्ट्रीम करता है। वर्तमान में यह केवल एक ROM मेमोरी है जिसका पता प्रति सेकंड दो बार (लगभग) बढ़ाया जाता है।

मेरा अंतिम लक्ष्य क्या है? इसे दूसरी तस्वीर में दिखाया गया है। वह है: FPGA के अंदर एक ही समय में अधिक I2C उपकरणों (सेंसर और अन्य) को अनुकरणीय बनाना संभव बनाता है। सेंसर के बैकएंड पर डेटा को FPGA में कैश किया जाना है और USB या ईथरनेट के माध्यम से पीसी से स्ट्रीम किया जाना है। अधिक उन्नत सेंसर और अन्य I2C उपकरणों (स्मृति, एलईडी ड्राइवर आदि) का समर्थन करें।

चरण 4: यह सब एक साथ रखना

यह सब एक साथ डालें
यह सब एक साथ डालें
यह सब एक साथ डालें
यह सब एक साथ डालें

अब सब कुछ एक साथ जोड़ने का समय है। सैद्धांतिक रूप से, यह सरल है: mcu बोर्ड में एक PMod कनेक्टर (I2C0 और SSP0 (SPI की तरह काम कर सकता है)) है। Artix बोर्ड में 4 PMod कनेक्टर हैं जिनका उपयोग आप अपनी इच्छानुसार कर सकते हैं। मैं एमसीयू से बात करने के लिए कनेक्टर डी और अपने लॉजिक एनालाइजर से कनेक्ट करने के लिए कनेक्टर बी को चुनता हूं।

चेतावनी

आप दोनों बोर्डों को ऐसे ही एक साथ नहीं जोड़ सकते। क्यों? PMod एक मास्टर/होस्ट बोर्ड (जो शक्ति देता है) को एक गुलाम/सेंसर बोर्ड (जो शक्ति प्राप्त करता है) के कनेक्शन को आसान बनाने के लिए बनाया गया था। लेकिन इस परियोजना में दोनों बोर्ड शक्ति देते हैं और यदि आप एक बोर्ड से 3.3V आउटपुट को दूसरे बोर्ड के 3.3V आउटपुट से जोड़ते हैं तो खराब चीजें हो सकती हैं। लेकिन वे नहीं हो सकते हैं और आप केवल FPGA के पावर रेल के मापदंडों को बदल सकते हैं (वे बहुत सावधानी से डिज़ाइन किए गए हैं)। तो यह जोखिम न लें और कनेक्टर को एक पिन बाईं ओर ले जाएं (और FPGA बोर्ड को भी फ्लिप करें) जैसा कि ऊपर की तस्वीरों में देखा गया है। यहां पीएमओडी विनिर्देश है, आप इसका अध्ययन कर सकते हैं, मैंने संक्षेप में जो किया वह दो बोर्डों के वीसीसी को जोड़ने के लिए नहीं है।

सिफारिश की: