8-बिट PIC का उपयोग करके IR सिग्नल की पल्स चौड़ाई कैसे मापें?


14

मैं और मेरा दोस्त सीखने के उद्देश्यों के लिए इस तरह के एक सार्वभौमिक सीखने के रिमोट कंट्रोलर को डिजाइन करना चाहते हैं। हम मूल रूप से क्या करना चाहते हैं स्टोर और अवरक्त दालों को फिर से खेलना है।

हम 36kHz, 38kHz और 40kHz सिग्नल का पता लगाना चाहते हैं। 40kHz सिग्नल में 25 s की अवधि होगी ।μ

हम एक 8-बिट PIC माइक्रोकंट्रोलर का उपयोग करना चाहते हैं, अभी के लिए हमने PIC16F616 का चयन किया है, जो 20MHz उच्च गति वाले क्रिस्टल ऑसिलेटर पर चलेगा। हमारे पास दो विकल्प उपलब्ध हैं:

  1. Interrupt On Changeमॉड्यूल का उपयोग करें ।
  2. CCP मॉड्यूल के कैप्चर मोड का उपयोग करें।

पहला विकल्प इस प्रकार होगा:

मान लें एक रजिस्टर के रूप में सेट किया गया है: unsigned char _10_us = 0;। यह रजिस्टर समय आयोजित करेगा। अवधि रजिस्टर के साथ TMR2 मॉड्यूल प्रत्येक 10 सेकंड में एक बाधा बनाने के लिए सेट किया गया है । जब कोई अवरोध उत्पन्न होता है, तो यह रजिस्टर और निकास में वृद्धि करेगा । यह अधिकतम 2.55msec का समय देगा। यदि अधिक समय माप की आवश्यकता होती है, तो अतिरिक्त रजिस्टरों जैसे कि परिभाषित किया जा सकता है और आवश्यकतानुसार बढ़ाया जा सकता है।μ_10_us_1_ms

अब, हर बार किसी भी प्रकार के परिवर्तन (उच्च-से-निम्न या निम्न-से-उच्च) से एक बाधा उत्पन्न होती है, कार्यक्रम वर्तमान समय को नोट करेगा, यह _10_usरजिस्टर का मूल्य है । थोड़ी देर बाद, जब अगली बाधा उत्पन्न होती है, तो प्रोग्राम _10_usरजिस्टर से सहेजे गए मूल्य को घटा देगा , और इस प्रकार अब वह समय होगा जो 10 सेकंड की इकाई के साथ होता है ।μ

यह विकल्प मुझे अपना सिर खरोंच कर देता है; TMR2 व्यवधान प्रत्येक 50 निर्देशों के बारे में होगा। इंटरप्ट हैंडलिंग में लगभग 20 निर्देश होंगे। अवधि की गणना करने और सहेजने के लिए मुझे 30 निर्देशों के साथ छोड़ दिया गया है। क्या यह तरीका काम करेगा?

दूसरा विकल्प इस प्रकार होगा:

CCP मॉड्यूल के कैप्चर मोड को सेट करें ताकि C1.1 पिन पर एक घटना (उच्च-से-कम) होने पर यह एक अवरोध उत्पन्न करे। रुकावट की दिनचर्या में, यह एक झंडा स्थापित करेगा ताकि कार्यक्रम में एक कार्य गणना (यदि आवश्यक हो) और CCPR1H के मान को बचा सके (शायद इसकी आवश्यकता नहीं होगी) और CCPR1L। फिर हम कैप्चर मोड के कॉन्फ़िगरेशन को बदल देंगे ताकि कम-से-उच्च किनारे होने पर यह बाधित हो जाए। और फिर यह अगली घटना की प्रतीक्षा करेगा। मैं इस पद्धति के प्रदर्शन का अनुमान नहीं लगा सकता क्योंकि मैंने इसका उपयोग कभी नहीं किया।

एक अन्य विकल्प?

हम TSOP17xx श्रृंखला जैसे एक इन्फ्रारेड डेमोडुलेटर आईसी का उपयोग कर सकते हैं । जिससे हमारी समस्या पूरी तरह से हल हो जाएगी। हालांकि कुछ सवाल दिमाग में आते हैं।

हमारे पढ़ने की दूरी की आवश्यकता ज्यादा नहीं है; 1 मीटर (~ 3 फीट)। यदि हम एक TSOP1738 का चयन करते हैं जो 38kHz में काम करने के लिए है, तो यह 36kHz और 40kHz सिग्नल के साथ कितनी अच्छी तरह काम करेगा?

TSOP17xx श्रृंखला की डेटशीट के पेज 4 में "फ्रीक्वेंसी डिपेंडेंस ऑफ रिस्पॉन्सिबिलिटी" ग्राफ दिखाया गया है। जहां तक ​​हमने समझा;

  • 40kHz, जो कि 38kHz का ~ 1.053 है, ~ 0.6 की सापेक्ष संवेदनशीलता देगा।
  • 36kHz, जो कि 38kHz का ~ 0.95 है, ~ 0.65 की एक सापेक्ष संवेदनशीलता देगा।

इन मूल्यों का क्या मतलब है? क्या हम TSOP1738 का उपयोग कर सकते हैं और ठीक हो सकते हैं?


सिर्फ एक सॉफ्टवेयर लूप क्यों नहीं लिखा जाता है जो बताता है कि दालों के बीच कितने लूप हैं?
Rocketmagnet

@Rocketmagnet मुझे नहीं मिला। यदि आपके पास समय हो तो क्या आप उत्तर लिख सकते हैं? इसके अलावा, ध्यान रखें कि हम उल्लेखित समस्या के अलावा RS232 और SPI जैसे कई अन्य सामान करेंगे।
अब्दुल्लाह कहरामन

जवाबों:


11

हां, TSOP1738 इस छोटी दूरी पर करेगा। 0.65 सापेक्ष उत्तरदायित्व का अर्थ है कि 36 kHz पर आपके IR LED का होना आवश्यक है0.65

PIC के प्रदर्शन के बारे में चिंता मत करो। TSOP1738 38 kHz सिग्नल को आउटपुट नहीं करेगा। वह वाहक आवृत्ति है, जिसे बेसबैंड सिग्नल को वापस लेने के लिए TSOP1738 द्वारा हटा दिया जाता है, जिसमें 1 एमएस के क्रम में पल्स अवधि के साथ बहुत कम आवृत्ति होती है, इसलिए किनारों के बीच समय को सही ढंग से मापने के लिए बहुत समय है।

निम्नांकित स्कोप चित्र यह दर्शाते हैं:

यहाँ छवि विवरण दर्ज करें

यह एक RC5 कोड है। शीर्ष सिग्नल 36 kHz मॉड्यूलेटेड सिग्नल है, नीचे वास्तविक कोड के साथ बेसबैंड सिग्नल है।

यहाँ छवि विवरण दर्ज करें

यह बेसबैंड सिग्नल के एक पल्स पर ज़ूम इन होता है। आप 36 kHz वाहक की व्यक्तिगत दालों को देख सकते हैं।

वाहक आवृत्ति के बारे में एक और शब्द। आप एक रिमोट कंट्रोल का उपयोग कर रहे होंगे जिसे आप इस आवृत्ति के बारे में नहीं जानते। TSOP1738 इसे अपने आउटपुट पर नहीं देता है, इसलिए यदि आप इसे पढ़ना चाहते हैं, तो आपको IR फोटोकोड या ट्रांजिस्टर को PIC के किसी एक इनपुट से जोड़ना होगा और दो समान किनारों के बीच का समय पढ़ना होगा । यह संभव है। विभिन्न वाहक आवृत्तियों के लिए अवधि:

40 kHz: 25 µs
38 kHz: 26.3 Hzs
36 kHz: 27.8 µs

एक 20 मेगाहर्ट्ज PIC16F616 में 200 ns का एक निर्देश चक्र है (यह घड़ी को 4 से विभाजित करता है!)। इसलिए तीन आवृत्तियों के लिए रीडिंग लगभग 125, 131 और 139 होनी चाहिए। उन्हें अलग बताने के लिए पर्याप्त होना चाहिए। लेकिन अगर आप चाहते हैं कि आप कई किनारों को पास कर सकते हैं और केवल 10 वें बाधा के बाद टाइमर को पढ़ सकते हैं, उदाहरण के लिए: 1250, 1316, 1389। बहुत अधिक समय नहीं है क्योंकि आपको बेसबैंड सिग्नल की एक पल्स से कम समय रखना होगा ।

सफलता!


अब आराम है, धन्यवाद। मैंने बहुत समय पहले TSOP1738 पर आधारित एक "IR शिक्षार्थी" बनाया है, लेकिन यह एक गड़बड़ था।
अब्दुल्लाह कहरामन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.