রোটারি এনকোডার ব্যবহার করে আমি আরডুইনোটিকে কতটা সঠিকভাবে পেতে পারি?


15

স্টিপার মোটরগুলি প্রায়শই একটি বড় মোটরের জন্য দামি হয়। তবে, একটি শক্তিশালী, স্ট্যান্ডার্ড ডিসি মোটর এবং একটি ঘূর্ণমান এনকোডার দিয়ে আপনি একটি স্টিপার মোটর "সিমুলেট" করতে পারেন। কেবলমাত্র একটি প্রাথমিক লুপের সাথে আরডুইনোর সাথে রোটারি এনকোডারগুলি কী পরিমাণে সঠিক এবং অন্য কোনও কোড নয়? এটি কি "একটি পালস মিস করে" যাচ্ছে এবং প্রায়শই পর্যাপ্ত ঘূর্ণন রেকর্ড করে না? আমি কীভাবে আরও অনেক কোড দিয়ে এটি পরিচালনা করতে পারি? এই কাজ করতে একটি ভাল উপায় আছে কি? বাধা সাহায্য করবে? এমন কোনও সার্কিট রয়েছে যা এই সমস্যার সাথে সহায়তা করবে?

দ্রষ্টব্য: এটি সম্ভবত এক সেকেন্ডে 4 টি আবর্তন অতিক্রম করবে না ... (এটি অনেক বেশি হতে পারে তবে আপনি যদি একটি লিড স্ক্রু টাইপ প্রক্রিয়া করছেন যা লিনিয়ার গতির প্রতি ইঞ্চিতে 10 আবর্তন থাকে তবে কেবল এক মিনিটে 24 ইঞ্চি হবে। )


আমি রোটারি এনকোডার ব্যবহার করেছি যা দ্রুত স্পিনিং করার সময় সঠিকভাবে কাজ করতে অস্বীকার করেছিল। আমার ধারণা এটি দামের সাথে পরিবর্তিত হয়।
জিপ্পি

উত্তর:


10

বাধা হ'ল যা আপনি এই পরিস্থিতিতে ব্যবহার করবেন।

আপনি যে হারগুলি উল্লেখ করেছেন তা যথেষ্ট ধীর গতির যেখানে আপনি সম্ভবত এটি একটি লুপের অভ্যন্তরে গণনা করতে সক্ষম হবেন, তবে এটি সুপারিশ করা হয় না, কারণ একটি সাধারণ লুপটি অনেকগুলি ঘড়ির চক্রটি সম্পন্ন করতে এবং লুপ প্রতি ইনস্টিউটিউনের সংখ্যার উপর নির্ভর করে as , আপনি কিছু গণনা মিস করতে পারেন।

লুপের অবস্থা নির্বিশেষে এগুলি যে কোনও সময়ে ট্রিগার করা যেতে পারে বলে এই উদ্দেশ্যে বাধা তৈরি করা হয়।

এখানে একটি ফাংশন রয়েছে attachInterrupt()যা তিনটি আর্গুমেন্ট নেবে।

  1. বাধা পিন
  2. বিঘ্নিত পরিষেবার রুটিন
  3. মোড

বাধা গণনার জন্য নীচে একটি উদাহরণ দেওয়া হল

volatile int myCounter = 0;

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

void count(){
    myCounter++;
}

মোডগুলি নিম্নরূপ:

কম, পরিবর্তন, উত্থান, পতন

বাধা ব্যবহার সম্পর্কে আরও তথ্য এখানে পাওয়া যাবে

আপনি যে এনকোডারটি ব্যবহার করেন তার উপর নির্ভর করে আপনার নিজের কোডটি আপনার প্রয়োজন অনুসারে তৈরি করতে হবে এবং আপনার অবস্থান নির্ধারণের জন্য আরও কিছু গণনা করতে হবে তবে এটি একটি ভাল সূচনা পয়েন্ট হওয়া উচিত।

রোটারি এনকোডার ব্যবহারের জন্য আরডুইনো স্যান্ডবক্সের কয়েকটি উদাহরণ কোড এখানে সম্পাদনা করুন


1
ডায়মিলানোভের একটি বিঘ্নিত চালিত প্রান্ত সনাক্তকারী সহজেই প্রতি সেকেন্ডে 100 টি প্রান্ত পরিচালনা করে (মোটরটিতে 6500 আরপিএম)।
ওয়েফারিং অচেনা

@ ওয়েফারিংস্ট্রেঞ্জার সুতরাং তখন কোনও ইউনোতে সমস্যা নেই। ধন্যবাদ!
বেনামে পেঙ্গুইন

1
@ অন্নোনমাস পার্সন - আপনি কতটা কাজ করতে ইচ্ছুক? আপনি যদি নগ্ন হয়ে যান ( ISR_NAKED()), আপনি স্বয়ংক্রিয় সি প্রসঙ্গ সংরক্ষণ সংরক্ষণ এড়িয়ে যেতে পারেন এবং ইস্যু ছাড়াই 100-500 Khz বিঘ্নিত হারগুলি টানতে পারেন, তবে আপনি মূলত সেই সময়ে সিতে অ্যাসেম্বলি লিখছেন।
কনার উলফ

1
যদি আপনি বাধা প্রতিক্রিয়া থেকে নিরঙ্কুশ বোকাটিকে অনুকূলকরণ সম্পর্কে সম্পূর্ণ কলা দলিল চান তবে এখানে দেখুন । বিঘ্নিত লেটেন্সি আরও কমাতে সরাসরি বাধা টেবিলে কোড স্থাপন করা!
কনার উলফ

1
এছাড়াও, মনে রাখবেন যে আপনি যদি স্বল্প-বিলম্বিত বাধা নিয়ে যাচ্ছেন, তবে আরডুইনো সংযুক্তি ইনটারপ্রেট ফাংশন ISR()সরাসরি বাধা ব্যবহার করে সম্পূর্ণ অতিরিক্ত ফাংশন-কল ওভারহেডকে ইনজেক্ট করে ।
কনার ওল্ফ

3

ইতিমধ্যে লিখিত গ্রন্থাগারগুলিতে এবং উদাহরণগুলিতে কিছু উল্লেখ যুক্ত করা, বিভিন্ন পদ্ধতির মধ্যে তুলনা সক্ষম করার জন্য এবং গতি বনাম গতিতে পদক্ষেপগুলির সংবেদনশীলতার তুলনায় অভিজ্ঞতা।

রোটারি এনকোডারগুলি পড়া: http://playground.arduino.cc/Main/RotaryEncoders

আরডুইনো (সমাধান সহ) এর জন্য চতুর্ভুজ এনকোডার খুব দ্রুত: http://www.hessmer.org/blog/2011/01/30/quad ادب-encoder-too-fast-for-arduino /

টেনেসি এনকোডার লাইব্রেরি: https://www.pjrc.com/teensy/td_libs_Encoder.html

আরডুইনোতে রোটারি এনকোডারটি পড়া: http://www.circuitathome.com/mcu/reading-rotary-encoder-on-arduino/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.