সুচিপত্র:

Arduino এবং TI ADS1110 16-বিট ADC: 6 ধাপ
Arduino এবং TI ADS1110 16-বিট ADC: 6 ধাপ

ভিডিও: Arduino এবং TI ADS1110 16-বিট ADC: 6 ধাপ

ভিডিও: Arduino এবং TI ADS1110 16-বিট ADC: 6 ধাপ
ভিডিও: How to use up to 10 push button switch with 1 Arduino input pin ANPB-V1 2024, নভেম্বর
Anonim
Arduino এবং TI ADS1110 16-বিট ADC
Arduino এবং TI ADS1110 16-বিট ADC

এই টিউটোরিয়ালে আমরা টেক্সাস ইন্সট্রুমেন্টস ADS1110- এর সাথে কাজ করার জন্য Arduino ব্যবহার করে পরীক্ষা করি-একটি অবিশ্বাস্যভাবে ক্ষুদ্র কিন্তু দরকারী 16-বিট এনালগ-টু-ডিজিটাল কনভার্টার আইসি।

এটি 2.7 এবং 5.5 V এর মধ্যে কাজ করতে পারে তাই এটি Arduino ডিউ এবং অন্যান্য লোয়ার-ভোল্টেজ ডেভেলপমেন্ট বোর্ডের জন্যও ভাল। আরও কিছু চালিয়ে যাওয়ার আগে, দয়া করে ডেটা শীট (পিডিএফ) ডাউনলোড করুন কারণ এটি এই টিউটোরিয়ালের সময় দরকারী এবং উল্লেখ করা হবে। ADS1110 আপনাকে Arduino এর 10-বিট ADC- এর প্রস্তাবের চেয়ে আরও সঠিক ADC এর বিকল্প দেয়-এবং এটি ব্যবহার করা অপেক্ষাকৃত সহজ। তবে এটি শুধুমাত্র SOT23-6 এর একটি খালি অংশ হিসাবে উপলব্ধ।

ধাপ 1:

ছবি
ছবি

ভাল খবর হল যে আপনি একটি খুব সুবিধাজনক ব্রেকআউট বোর্ডে মাউন্ট করা ADS1110 অর্ডার করতে পারেন। ADS1110 যোগাযোগের জন্য I2C বাস ব্যবহার করে। এবং মাত্র ছয়টি পিন থাকায় আপনি বাসের ঠিকানা সেট করতে পারবেন না - পরিবর্তে, আপনি ADS1110 এর ছয়টি রূপ থেকে নির্বাচন করতে পারেন - প্রত্যেকটি তাদের নিজস্ব ঠিকানা দিয়ে (ডেটা শীটের পৃষ্ঠা দুইটি দেখুন)।

আপনি উপরের ছবিতে দেখতে পাচ্ছেন, আমাদের "EDO" চিহ্নিত করা হয়েছে যা বাসের ঠিকানা 1001000 বা 0x48h এর সাথে মেলে। এবং উদাহরণ সার্কিটগুলির সাথে আমরা I2C বাসে 10kΩ পুল-আপ প্রতিরোধক ব্যবহার করেছি।

আপনি ADS1110 কে একক-সমাপ্ত বা ডিফারেনশিয়াল ADC হিসাবে ব্যবহার করতে পারেন-তবে প্রথমে আমাদের কনফিগারেশন রেজিস্টার যা বিভিন্ন গুণাবলী এবং ডেটা রেজিস্টার নিয়ন্ত্রণ করতে ব্যবহৃত হয় তা পরীক্ষা করতে হবে।

ধাপ 2: কনফিগারেশন রেজিস্টার

ডাটা শীটের একাদশ পৃষ্ঠায় ঘুরুন। কনফিগারেশন রেজিস্টারটি আকারে এক বাইট এবং ADS1110 পাওয়ার-সাইকেলে রিসেট হওয়ার সাথে সাথে-আপনার প্রয়োজন ডিফল্টের থেকে আলাদা হলে আপনাকে রেজিস্টারটি পুনরায় সেট করতে হবে। ডেটা শীটটি বেশ সুন্দরভাবে বানান করেছে … বিট 0 এবং 1 পিজিএ (প্রোগ্রামযোগ্য লাভ পরিবর্ধক) এর জন্য লাভ সেটিং নির্ধারণ করে।

আপনি যদি কেবল ভোল্টেজ পরিমাপ করছেন বা পরীক্ষা করছেন, তাহলে 1V/V লাভের জন্য এগুলিকে শূন্য হিসাবে ছেড়ে দিন। পরবর্তীতে, ADS1110 এর ডেটা রেট বিট 2 এবং 3 দ্বারা নিয়ন্ত্রিত হয়। যদি আপনার ক্রমাগত নমুনা চালু থাকে, এটি ADC দ্বারা নেওয়া প্রতি সেকেন্ডে নমুনার সংখ্যা নির্ধারণ করে।

একটি Arduino Uno নিয়ে কিছু পরীক্ষা -নিরীক্ষার পর আমরা দেখতে পেলাম যে ADC থেকে ফেরত আসা মানগুলি দ্রুততম হার ব্যবহার করার সময় কিছুটা বন্ধ ছিল, তাই অন্যথায় প্রয়োজন না হলে এটি 15 SPS হিসাবে ছেড়ে দিন। বিট 4 সেট হয় ক্রমাগত নমুনা (0) অথবা এক-বন্ধ নমুনা (1)। 5 এবং 6 বিট উপেক্ষা করুন, তবে এগুলি সর্বদা 0 হিসাবে সেট করা হয়।

অবশেষে বিট 7-যদি আপনি এক-স্যাম্পলিং মোডে থাকেন, তাহলে এটি 1 টি নমুনা অনুরোধের জন্য সেট করুন-এবং এটি পড়লে আপনাকে জানানো হবে যে ফেরত দেওয়া ডেটা নতুন (0) বা পুরাতন (1)। আপনি যাচাই করতে পারেন যে পরিমাপ করা মানটি একটি নতুন মান - যদি কনফিগারেশন বাইটের প্রথম বিটটি ডেটার পরে আসে 0, এটি নতুন। যদি এটি 1 ফেরত দেয় তবে ADC রূপান্তর শেষ হয়নি।

ধাপ 3: ডেটা নিবন্ধন

যেহেতু ADS1110 একটি 16-বিট ADC, এটি দুটি বাইটের উপর ডেটা ফেরত দেয়-এবং তারপর কনফিগারেশন রেজিস্টারের মান অনুসরণ করে। সুতরাং আপনি যদি তিন বাইটের অনুরোধ করেন তাহলে পুরো লট ফিরে আসে। ডেটা "দুই'র পরিপূরক" আকারে, যা বাইনারি সহ স্বাক্ষরিত সংখ্যা ব্যবহার করার একটি পদ্ধতি।

সেই দুটি বাইটকে রূপান্তর করা কিছু সাধারণ গণিত দ্বারা করা হয়। 15 এসপিএসে নমুনা দেওয়ার সময়, ADS1110 (ভোল্টেজ নয়) দ্বারা ফেরত মান -32768 এবং 32767 এর মধ্যে পড়ে। মানটির উচ্চতর বাইট 256 দ্বারা গুণিত হয়, তারপর নিম্ন বাইটে যোগ করা হয় -যা পরে 2.048 দ্বারা গুণিত হয় এবং পরিশেষে 32768 দ্বারা বিভক্ত। আতঙ্কিত হবেন না, যেহেতু আমরা আসন্ন উদাহরণ স্কেচে এটি করি।

ধাপ 4: একক সমাপ্ত ADC মোড

একক সমাপ্ত ADC মোড
একক সমাপ্ত ADC মোড

এই মোডে আপনি একটি ভোল্টেজ পড়তে পারেন যা শূন্য এবং 2.048 V এর মধ্যে পড়ে (যা ADS1110 এর জন্য অন্তর্নির্মিত রেফারেন্স ভোল্টেজও হয়)। উদাহরণ সার্কিট সহজ (ডেটা শীট থেকে)।

I2C বাসে 10kΩ পুল-আপ প্রতিরোধক ভুলবেন না। নিম্নলিখিত স্কেচটি ADS1110 ডিফল্ট মোডে ব্যবহার করে, এবং কেবল পরিমাপ করা ভোল্টেজ প্রদান করে:

// উদাহরণ 53.1 - ADS1110 একক পার্শ্বযুক্ত ভোল্টমিটার (0 ~ 2.048VDC) #অন্তর্ভুক্ত "Wire.h" #সংজ্ঞায়িত 1111 0x48 ভাসমান ভোল্টেজ, ডেটা; বাইট highbyte, lowbyte, configRegister; অকার্যকর সেটআপ () {Serial.begin (9600); Wire.begin (); } অকার্যকর লুপ () {Wire.requestFrom (ads1110, 3); যখন (Wire.available ()) // নিশ্চিত করুন যে সমস্ত ডেটা {highbyte = Wire.read (); // উচ্চ বাইট * B11111111 lowbyte = Wire.read (); // কম বাইট configRegister = Wire.read (); }

ডেটা = হাইবাইট * 256;

ডেটা = ডেটা + লোবাইট; সিরিয়াল.প্রিন্ট ("ডেটা >>"); Serial.println (ডেটা, DEC); সিরিয়াল.প্রিন্ট ("ভোল্টেজ >>"); ভোল্টেজ = ডেটা * 2.048; ভোল্টেজ = ভোল্টেজ / 32768.0; সিরিয়াল.প্রিন্ট (ভোল্টেজ, ডিইসি); Serial.println ("V"); বিলম্ব (1000); }

ধাপ 5:

ছবি
ছবি

একবার আপলোড হয়ে গেলে, সিরিয়াল মনিটর পরিমাপ করতে এবং খুলতে সংকেতটি সংযুক্ত করুন - আপনাকে এই ধাপে দেখানো সিরিয়াল মনিটর ছবির অনুরূপ কিছু উপস্থাপন করা হবে।

আপনার যদি ADC- এর অভ্যন্তরীণ প্রোগ্রামযোগ্য লাভ পরিবর্ধকের লাভ পরিবর্তন করতে হয় - আপনাকে কনফিগারেশন রেজিস্টারে একটি নতুন বাইট লিখতে হবে:

Wire.beginTransmission (ads1110); Wire.write (কনফিগারেশন বাইট); Wire.endTransmission ();

ADC ডেটা অনুরোধ করার আগে। এটি হবে 0x8D, 0x8E বা 0x8F যথাক্রমে 2, 4 এবং 8 লাভের মান - এবং 0x8C ব্যবহার করে ADS1110 আবার ডিফল্টে রিসেট করুন।

ধাপ 6: ডিফারেনশিয়াল এডিসি মোড

ডিফারেনশিয়াল এডিসি মোড
ডিফারেনশিয়াল এডিসি মোড

এই মোডে আপনি দুটি ভোল্টেজের মধ্যে পার্থক্য পড়তে পারেন যা প্রতিটি শূন্য এবং 5 V এর মধ্যে পড়ে। উদাহরণ সার্কিটটি সহজ (ডেটা শীট থেকে)।

আমাদের অবশ্যই এখানে (এবং ডেটা শীটে) লক্ষ্য করতে হবে যে ADS1110 ইনপুটগুলির মধ্যে নেতিবাচক ভোল্টেজ গ্রহণ করতে পারে না। আপনি একই ফলাফলের জন্য আগের স্কেচ ব্যবহার করতে পারেন- এবং ফলে ভোল্টেজ হবে ভিন-এর মান ভিন+থেকে বিয়োগ করা হবে। উদাহরণস্বরূপ, যদি আপনার ভিন+ তে 2 ভি এবং ভিনে 1 ভি থাকে- ফলস্বরূপ ভোল্টেজ 1 V হবে (লাভ 1 সেট করে)।

আবারও আমরা আশা করি আপনি এই আগ্রহ খুঁজে পেয়েছেন, এবং সম্ভবত দরকারী। এই পোস্টটি আপনার জন্য নিয়ে এসেছে pmdway.com - নির্মাতারা এবং ইলেকট্রনিক্স উত্সাহীদের জন্য সবকিছু, বিশ্বব্যাপী বিনামূল্যে বিতরণ সহ।

প্রস্তাবিত: