इस साल की शुरुआत में,
अरिमन के एक योग्य नागरिक ने एक माइक्रोकंट्रोलर को कैपेसिटिव टच सेंसर को कैसे स्क्रू किया जाए, इस पर
एक लेख लिखा था। यह विचार मुझे काफी आशाजनक लग रहा था, कुछ उपकरणों के लिए चाबियां छूना यांत्रिक लोगों की तुलना में बहुत बेहतर होगा। इस लेख में मैं STM32 डिस्कवरी डिबग बोर्ड पर आधारित इस उपयोगी तकनीक के मेरे कार्यान्वयन के बारे में बात करूंगा।
इसलिए, बस STM32 सीखना शुरू कर, मैंने डिवाइस को स्पर्श का पता लगाने की क्षमता में जोड़ने के लिए एक अभ्यास के रूप में फैसला किया। उपर्युक्त लेख में सिद्धांत और व्यवहार को समझना शुरू करने के बाद, मैंने
कॉमिम अरिमन की योजना को दोहराया। इसने पूरी तरह से काम किया, लेकिन मैं, अतिसूक्ष्मवाद का एक प्रशंसक, इसे सरल बनाना चाहता था, अनावश्यक तत्वों से छुटकारा पा रहा था। मेरी राय में, बाहरी अवरोधक और शक्ति पथ बहुआयामी थे। यह सब पहले से ही अधिकांश माइक्रोकंट्रोलर्स में है, जिसमें एवीआर और एसटीएम 32 शामिल हैं। मेरा मतलब है कि इनपुट / आउटपुट पोर्ट के पुल-अप प्रतिरोध। उनके माध्यम से प्लेट और हमारी उंगलियों को चार्ज क्यों नहीं किया जाता है? एक चाल की प्रत्याशा में, मैंने एक मॉक-अप पर एक साथ एक सर्किट लगाया, जिसने मेरे आश्चर्य को पहली बार काम किया। वास्तव में, इस सर्किट को कॉल करना और भी मज़ेदार है, क्योंकि हमें बस इतना करना है कि कॉन्टेक्ट प्लेट को डिबग बोर्ड के पैर से जोड़ दें। माइक्रोकंट्रोलर सभी काम का ध्यान रखेगा।
प्रोग्राम कैसा है? सबसे पहले, दो कार्य:
पहला सेंसर पैर पर एक तार्किक "0" प्रदर्शित करता है (रजिस्टर सी का शून्य पिन)
void Sensor_Ground (void) { GPIOC->CRL = 0x1; GPIOC->BRR |= 0x1; }
दूसरा इनपुट के समान आउटपुट को सेट करता है, शक्ति के लिए पुल-अप के साथ।
void Sensor_InPullUp (void) { GPIOC->CRL = 0x8; GPIOC->BSRR |= 0x1; }
अब, मतदान चक्र की शुरुआत में, हम Sensor_Ground () को कॉल करते हैं, और सेंसर पर सभी अवशिष्ट आवेशों को जमीन पर लाने के लिए थोड़ी देर प्रतीक्षा करते हैं। फिर हम गणना चर को रीसेट करते हैं, जिसे हम सेंसर के चार्जिंग समय के रूप में मानेंगे और Sensor_InPullUp () को कॉल करेंगे।
Sensor_Ground(); Delay(0xFF);
अब सेंसर दसियों KOhms (30..50KOhm STM32 के लिए) के आदेश के अंकित मूल्य के साथ एक आंतरिक पुल-अप रोकनेवाला के माध्यम से चार्ज करना शुरू कर देता है। इस तरह के सर्किट का समय कुछ घड़ी चक्रों के बराबर होगा, इसलिए मैंने डिबग बोर्ड पर क्वार्ट्ज गुंजयमान यंत्र को एक तेजी से एक, 20 मेगाहर्ट्ज में बदल दिया (वैसे, मुझे तुरंत ध्यान नहीं आया कि एसटीएम 32 एक्सवायर क्वार्ट्ज सोल्डरिंग के बिना क्या होता है)। इसलिए, हम प्रोसेसर घड़ियों को तब तक गिनते हैं जब तक कि इनपुट पर कोई तार्किक इकाई दिखाई न दे:
while(!(GPIOC->IDR & 0x1)) { count++; }
इस चक्र से बाहर निकलने के बाद, चर संख्या सेंसर प्लेट की क्षमता के लिए आनुपातिक रूप से संग्रहीत होगी। मेरे मामले में, 20 मेगाहर्ट्ज चिप के साथ, गणना मूल्य 1 है जब दबाया नहीं जाता है, 7-10 सबसे हल्के स्पर्श के साथ, 15-20 एक सामान्य स्पर्श के साथ। जो कुछ बचता है, उसकी तुलना थ्रेशोल्ड वैल्यू से करना है और Sensor_Ground () को फिर से कॉल करना याद रखना है ताकि सेंसर अगले पोलिंग चक्र से पहले ही डिस्चार्ज हो जाए।
परिणामी संवेदनशीलता नंगे धातु क्षेत्रों को आत्मविश्वास से स्पर्श करने के लिए पर्याप्त है। सेंसर को कागज या प्लास्टिक की शीट से ढंकते समय, संवेदनशीलता तीन से चार बार गिरती है, केवल सुनिश्चित करें कि प्रेस अच्छी तरह से परिभाषित हैं। संवेदनशीलता को बढ़ाने के लिए जब सेंसर को सुरक्षात्मक सामग्री के साथ कवर करने की आवश्यकता होती है, तो माइक्रोकंट्रोलर की घड़ी की आवृत्ति बढ़ाई जा सकती है।
STM32F103 श्रृंखला चिप के साथ, 72 मेगाहर्ट्ज तक की आवृत्तियों पर संचालन करने में सक्षम, उंगली और सेंसर के बीच मिलीमीटर बाधाएं बाधा नहीं बनेंगी।अरिमन के कार्यान्वयन
की तुलना में, मेरा दृष्टिकोण बहुत तेजी से काम करता है (एक सेंसर को मतदान करने के लिए लगभग एक दर्जन घड़ी चक्र), इसलिए मैंने टाइमर इंटरप्ट को सेट करके कार्यक्रम को जटिल नहीं किया।
अंत में, सेंसर के संचालन को प्रदर्शित करने वाला एक वीडियो।
Main.c परीक्षण कार्यक्रम।
माइक्रोकंट्रोलर पर
संदर्भ मैनुअलबहुत उपयोगी लेख
एआरएम STM32F माइक्रोकंट्रोलर के लिए
ALPINE63rus का धन्यवाद । विचार और स्पष्ट सैद्धांतिक विवरण के लिए
एसटीएम 32-डिस्कवरी ,
अरिमन उपयोगकर्ता के
साथ त्वरित शुरुआत ।
युपीडी। Ew1abz की टिप्पणियों के बाद, मैंने क्लॉकिंग से निपटने का फैसला किया और पाया कि STM32 डिस्कवरी डिफ़ॉल्ट रूप से क्लॉक फ़्रीक्वेंसी पर सेट है
(HSE / 2) * 6 = 24 MHz, जहां HSE बाहरी क्वार्ट्ज की आवृत्ति है। तदनुसार, 8 से 20 मेगाहर्ट्ज से क्वार्ट्ज को बदलते हुए, मैंने 60 मेगाहर्ट्ज पर खराब एसटीएम'कु काम किया। तो सबसे पहले, कुछ निष्कर्ष स्पष्ट रूप से पूरी तरह से सही नहीं हैं, और दूसरी बात, मैं जो कर रहा था वह चिप विफलताओं को जन्म दे सकता है। ऐसी विफलताओं के मामले में, माइक्रोकंट्रोलर में हार्डफॉल्ट बाधा है, इसका उपयोग करते हुए, मैंने उच्च आवृत्तियों की जांच की। तो, चिप केवल 70 मेगाहर्ट्ज पर विफल होने लगती है। लेकिन यद्यपि नियंत्रक 60 मेगाहर्ट्ज पर इस विशिष्ट कार्यक्रम को पचाता है, जब बाह्य उपकरणों का उपयोग करते हुए या फ्लैश मेमोरी के साथ काम करते हुए, यह अप्रत्याशित रूप से व्यवहार कर सकता है। निष्कर्ष: इस विषय को एक प्रयोग के रूप में समझें, केवल अपने जोखिम और जोखिम पर दोहराएं।