100ns के रिज़ॉल्यूशन की टाइमिंग के लिए 10MHz पर टाइमर की आवश्यकता होती है। कई माइक्रोकंट्रोलर एक टाइमर को चलाने में सक्षम होना चाहिए जो तेजी से हो।
समस्या तब आती है जब आप 6 संकेतों के आने का समय निकालने की कोशिश कर रहे होते हैं। क्या ये संकेत सभी एक ही तार पर हैं, या प्रत्येक अलग तार पर हैं?
यदि वे सभी एक ही तार पर हैं, तो किसी भी MCU पर एक 10MHz टाइमर के साथ ऐसा करना संभव हो सकता है। Naively, ऐसा करने के लिए कोड कुछ इस तरह दिखेगा:
wait for trigger signal
reset timer
wait for first signal
save timer value
reset timer
....
wait for sixth signal
save timer value
reset timer
समस्या यह है कि टाइमर को रीसेट करने के लिए एक सीमित समय लगता है। यह दो समस्याओं का कारण बनता है:
आपके क्रियान्वयन के आधार पर, मापा गया समय कुछ 100ns द्वारा गलत होगा। हालांकि, उन्हें लगातार गलत होना चाहिए। IE हर बार एक ही राशि से गलत। इसका मतलब है कि आप प्रत्येक माप में एक छोटी राशि जोड़कर आसानी से इसकी भरपाई कर सकते हैं।
एक न्यूनतम समय होगा जिसे आप माप सकते हैं। यदि कोई पल्स पिछले एक के बाद 100ns पर आ गया, तो आप शायद इसे याद करेंगे। मुझे नहीं पता कि सॉफ्टवेयर में उस बारे में आप कुछ कर सकते हैं या नहीं। आपको एक माइक्रोकंट्रोलर ढूंढना होगा जो हार्डवेयर में कई दालों को संभाल सकता है।
कौन सा माइक्रोकंट्रोलर हार्डवेयर में कई दालों को संभाल सकता है? Cypress PSoC ! यह एक माइक्रोकंट्रोलर है जिसमें विन्यास योग्य डिजिटल ब्लॉक भी शामिल हैं, जिसका अर्थ है कि आप आसानी से 6 अलग-अलग टाइमर चला सकते हैं, प्रत्येक 60 मेगाहर्ट्ज पर, जो आपको 20 से अधिक रिज़ॉल्यूशन से बेहतर प्रदान करेगा।
यहाँ एक उदाहरण है कि मैंने आपको जल्दी से दस्तक दी कि आप किस तरह की चीजों को दिखा सकते हैं। मुझे 6 अलग-अलग टाइमर मिले हैं, सभी बस घड़ी से दूर चल रहे हैं, जो 67MHz तक जा सकते हैं। एक ट्रिगर पिन है जो सभी टाइमर चलाने की शुरुआत करता है, और 6 अन्य पिन, जिनमें से प्रत्येक टाइमर में कैप्चर इवेंट का कारण बनता है। एक स्थिति रजिस्टर आपके कोड को यह निगरानी करने की अनुमति देता है कि किस टाइमर ने एक नाड़ी को पकड़ लिया है। कोड टाइमर से बाहर मूल्यों को पढ़ सकता है।