रोटरी एनकोडर का उपयोग करके मैं Arduino को कितना सटीक पा सकता हूं?


15

स्टेपर मोटर्स अक्सर एक बड़ी मोटर के लिए महंगा होता है। हालांकि, एक शक्तिशाली, मानक डीसी मोटर और एक रोटरी एनकोडर के साथ, आप एक स्टेपर मोटर को "अनुकरण" कर सकते हैं। सिर्फ एक मूल लूप और बहुत अधिक कोड के साथ Arduino के साथ रोटरी एनकोडर कितने सही हैं? क्या यह "एक नाड़ी याद आती है" और अक्सर पर्याप्त रोटेशन रिकॉर्ड नहीं करता है? मैं इसे और अधिक कोड के साथ कैसे संभाल सकता हूं? क्या ऐसा करने के लिए इससे अच्छा तरीका है? बीच में मदद मिलेगी? क्या किसी प्रकार का सर्किट है जो इस समस्या से निपटने में मदद करेगा?

नोट: यह संभवत: 4 घुमावों के एक सेकंड से अधिक नहीं होगा ... (यह एक बहुत कुछ हो सकता है लेकिन अगर आप एक लीड स्क्रू प्रकार तंत्र कर रहे हैं जो कि रैखिक गति के 10 इंच प्रति इंच होने पर केवल 24 इंच एक मिनट होगा। )


मैंने रोटरी एनकोडर का उपयोग किया है जो तेजी से स्पिन होने पर ठीक से काम करने से इनकार कर दिया। मुझे लगता है कि यह कीमत के साथ बदलता रहता है।
जिप्पी

जवाबों:


10

व्यवधान वे हैं जो आप इस स्थिति में उपयोग करेंगे।

आपके द्वारा उल्लिखित दरें काफी धीमी हैं, जहाँ आप संभवतः इसे एक लूप के अंदर गिन सकेंगे, हालाँकि यह अनुशंसित नहीं है, क्योंकि एक विशिष्ट लूप को पूरा करने के लिए कई घड़ी चक्र लगेंगे, और प्रति लूप instuctiuons की संख्या के आधार पर , आप कुछ मायने रख सकते हैं।

इस उद्देश्य के लिए रुकावटें बनाई जाती हैं, क्योंकि लूप की स्थिति की परवाह किए बिना, उन्हें किसी भी समय ट्रिगर किया जा सकता है।

एक फ़ंक्शन नाम है attachInterrupt()जो तीन तर्क लेगा।

  1. बाधित पिन
  2. बाधित सेवा दिनचर्या
  3. मोड

नीचे एक रुकावट की गिनती के लिए एक उदाहरण है

volatile int myCounter = 0;

void setup(){
    attachInterrupt(0, count, RISING);
}

void count(){
    myCounter++;
}

मोड निम्नानुसार हैं:

कम, चेंज, रिस्सिंग, फालिंग

इंटरप्ट का उपयोग करने के बारे में अधिक जानकारी यहां पाई जा सकती है

आपके द्वारा उपयोग किए जाने वाले एनकोडर के आधार पर, आपको अपनी आवश्यकताओं को निर्धारित करने के लिए कोड को दर्जी करने की आवश्यकता होगी, और कुछ और गणनाएं करनी होंगी, लेकिन यह एक अच्छा प्रारंभिक बिंदु होना चाहिए।

संपादित करें यहाँ एक रोटरी एनकोडर का उपयोग कर के लिए Arduino सैंडबॉक्स से कुछ उदाहरण कोड है।


1
एक ड्युमिलानोव पर एक बाधित चालित किनारे डिटेक्टर आसानी से प्रति सेकंड 100 किनारों (6500rpm एक मोटर पर) को संभालता है।
मार्गदर्शी अजनबी

@WayfaringStranger तो फिर एक Uno पर कोई समस्या नहीं है, फिर। धन्यवाद!
अनाम पेंगुइन

1
@AnnonomusPerson - आप कितना काम करने को तैयार हैं? यदि आप नग्न होते हैं ( ISR_NAKED()), तो आप स्वत: C संदर्भ बचत को छोड़ सकते हैं, और बिना किसी समस्या के 100-500 Khz रुकावट दर को खींच सकते हैं, लेकिन आप मूल रूप से उस बिंदु पर C में असेंबली लिख रहे हैं।
कॉनर वुल्फ

1
यदि आप रुकावट प्रतिक्रिया से पूर्ण बकवास को अनुकूलित करने के बारे में पूरी तरह से केले के दस्तावेज चाहते हैं, तो यहां देखें । अंतःक्रिया तालिका में सीधे कोड रखने से आगे की रुकावट कम हो जाती है!
कॉनर वुल्फ

1
इसके अलावा, ध्यान दें कि यदि आप कम-विलंबता के लिए जा रहे हैं, तो arduino संलग्नक फ़ंक्शन एक अतिरिक्त फ़ंक्शन-कॉल ओवरहेड बनाम ISR()सीधे अवरोध का उपयोग करके इंजेक्ट करता है।
कॉनर वुल्फ

3

पहले से लिखे गए पुस्तकालयों और उदाहरणों के लिए कुछ संदर्भों को जोड़ना, विभिन्न दृष्टिकोणों के बीच तुलना को सक्षम करने के लिए, और लापता चरणों के लिए गति बनाम संवेदनशीलता के साथ अनुभव।

रोटरी एनकोडर पढ़ना: http://playground.arduino.cc/Main/RotaryEncoders

Arduino (समाधान के साथ) के लिए क्वाडरेचर एनकोडर भी फास्ट: http://www.hessmer.org/blog/2011/01/30/quadrature-encoder-too-fast-for-arduino/

टेनेसी एनकोडर लाइब्रेरी: https://www.pjrc.com/teensy/td_libs_Encoder.html

Arduino पर रोटरी एनकोडर पढ़ना: http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.