সুচিপত্র:

Arduino ওয়েভফর্ম জেনারেটর: 5 টি ধাপ (ছবি সহ)
Arduino ওয়েভফর্ম জেনারেটর: 5 টি ধাপ (ছবি সহ)

ভিডিও: Arduino ওয়েভফর্ম জেনারেটর: 5 টি ধাপ (ছবি সহ)

ভিডিও: Arduino ওয়েভফর্ম জেনারেটর: 5 টি ধাপ (ছবি সহ)
ভিডিও: How To Convert DC to AC | Direct current Inverting | 3D Animation 2024, জুলাই
Anonim
আরডুইনো ওয়েভফর্ম জেনারেটর
আরডুইনো ওয়েভফর্ম জেনারেটর

ফেব্রুয়ারী 2021 আপডেট: রাস্পবেরি পাই পিকোর উপর ভিত্তি করে 300x স্যাম্পলিং রেটের সাথে নতুন সংস্করণটি দেখুন।

ল্যাবে, একজনের প্রায়ই একটি নির্দিষ্ট ফ্রিকোয়েন্সি, আকৃতি এবং প্রশস্ততার পুনরাবৃত্তিমূলক সংকেতের প্রয়োজন হয়। এটি একটি পরিবর্ধক পরীক্ষা করা, একটি সার্কিট, একটি উপাদান বা একটি actuator চেক করতে হতে পারে। শক্তিশালী তরঙ্গাকৃতি জেনারেটর বাণিজ্যিকভাবে পাওয়া যায়, কিন্তু একটি Arduino Uno বা Arduino Nano দিয়ে নিজেকে একটি দরকারী করে তুলতে তুলনামূলকভাবে সহজেই, উদাহরণস্বরূপ দেখুন:

www.instructables.com/id/Arduino-Waveform-…

www.instructables.com/id/10-Resister-Ardui…

এখানে নিম্নলিখিত বৈশিষ্ট্যগুলির সাথে আরেকটির বর্ণনা দেওয়া হল:

* সঠিক তরঙ্গাকৃতি: R2R DAC ব্যবহার করে 8-বিট আউটপুট, 256-নমুনা আকৃতি

* দ্রুত: 381 kHz নমুনা হার

* যথার্থ: 1mHz পদক্ষেপের ফ্রিকোয়েন্সি পরিসীমা। Arduino স্ফটিক হিসাবে সঠিক।

* সহজ অপারেশন: একক ঘূর্ণমান এনকোডারের সাথে তরঙ্গাকৃতি এবং ফ্রিকোয়েন্সি সেটটেবল

* প্রশস্ত পরিসর: মিলিভোল্ট থেকে 20V

* 20 পূর্বনির্ধারিত তরঙ্গাকৃতি। আরো যোগ করার জন্য সোজা।

* তৈরি করা সহজ: আরডুইনো ইউনো বা ন্যানো প্লাস স্ট্যান্ডার্ড উপাদান

ধাপ 1: প্রযুক্তিগত বিবেচনা

একটি এনালগ সংকেত তৈরি করা

আরডুইনো ইউনো এবং ন্যানোর একটি ত্রুটি হল এটিতে একটি ডিজিটাল-টু-এনালগ (DAC) রূপান্তরকারী নেই, তাই এটি সরাসরি পিনগুলিতে একটি এনালগ ভোল্টেজ আউটপুট করা সম্ভব নয়। একটি সমাধান হল R2R মই: 8 ডিজিটাল পিন একটি রোধকারী নেটওয়ার্কের সাথে সংযুক্ত থাকে যাতে 256 স্তরের আউটপুট পৌঁছানো যায়। সরাসরি পোর্ট অ্যাক্সেসের মাধ্যমে, Arduino একক কমান্ড দিয়ে একযোগে 8 টি পিন সেট করতে পারে। রোধকারী নেটওয়ার্কের জন্য, মান R সহ 9 টি প্রতিরোধক এবং মান 2R সহ 8 টি প্রতিরোধকের প্রয়োজন। আমি R এর মান হিসাবে 10kOhm ব্যবহার করেছি, যা পিন থেকে 0.5mA বা তার কম কারেন্ট রাখে। আমি অনুমান করি R = 1kOhm পাশাপাশি কাজ করতে পারে, যেহেতু Arduino সহজেই প্রতি পিনে 5mA প্রদান করতে পারে, প্রতি পোর্টে 40mA। এটা গুরুত্বপূর্ণ যে R এবং 2R প্রতিরোধকের মধ্যে অনুপাত সত্যিই 2। এটি খুব সহজেই মোট 25 টি প্রতিরোধকের জন্য সিরিজের মান R এর 2 টি প্রতিরোধক স্থাপন করে অর্জন করা যায়।

পর্যায় সঞ্চয়কারী

একটি তরঙ্গাকৃতি তৈরি করা তারপর Arduino পিনগুলিতে 8-বিট সংখ্যার একটি ক্রম বারবার পাঠানোর জন্য নিচে আসে। তরঙ্গাকৃতি 256 বাইটের একটি অ্যারেতে সংরক্ষণ করা হয় এবং এই অ্যারেটি নমুনা করে পিনগুলিতে পাঠানো হয়। আউটপুট সিগন্যালের ফ্রিকোয়েন্সি নির্ধারিত হয় কতটা দ্রুত অ্যারের মাধ্যমে অগ্রসর হয়। এটি করার একটি শক্তিশালী, সুনির্দিষ্ট এবং মার্জিত উপায় হল একটি ফেজ একুমুলেটর: একটি 32-বিট সংখ্যা নিয়মিত বিরতিতে বৃদ্ধি পায় এবং আমরা 8 টি উল্লেখযোগ্য বিটকে অ্যারের সূচক হিসাবে ব্যবহার করি।

দ্রুত নমুনা

বাধাগুলি সুনির্দিষ্ট সময়ে নমুনা দেওয়ার অনুমতি দেয়, কিন্তু বাধাগুলির ওভারহেড স্যাম্পলিং ফ্রিকোয়েন্সি ~ 100kHz পর্যন্ত সীমাবদ্ধ করে। পর্যায়টি আপডেট করার জন্য একটি অসীম লুপ, তরঙ্গাকৃতির নমুনা এবং পিনগুলি সেট করতে 42 ঘড়ি চক্র লাগে, এইভাবে 16MHz/42 = 381kHz এর নমুনা হার অর্জন করে। ঘূর্ণমান এনকোডারটি ঘোরানো বা ধাক্কা দেওয়ার ফলে একটি পিন পরিবর্তন এবং একটি বাধা ঘটে যা সেটিংটি পরিবর্তন করতে লুপ থেকে বেরিয়ে আসে (তরঙ্গাকৃতি বা ফ্রিকোয়েন্সি)। এই পর্যায়ে অ্যারেতে 256 সংখ্যা পুনalগণনা করা হয় যাতে তরঙ্গাকৃতির কোন প্রকৃত গণনা মূল লুপে সঞ্চালনের প্রয়োজন হয় না। পরম সর্বোচ্চ ফ্রিকোয়েন্সি যা উৎপন্ন হতে পারে 190kHz (স্যাম্পলিং হারের অর্ধেক) কিন্তু তারপর প্রতি পিরিয়ডে মাত্র দুটি নমুনা থাকে, তাই আকৃতির বেশি নিয়ন্ত্রণ নেই। ইন্টারফেস এইভাবে 100kHz এর উপরে ফ্রিকোয়েন্সি সেট করার অনুমতি দেয় না। 50kHz এ, প্রতি পিরিয়ডে 7-8 টি নমুনা থাকে এবং 1.5 kHz এ এবং অ্যারেতে সংরক্ষিত সমস্ত 256 নম্বরগুলির নীচে প্রতিটি পিরিয়ড নমুনা পাওয়া যায়। ওয়েভফর্মের জন্য যেখানে সিগন্যাল মসৃণভাবে পরিবর্তিত হয়, উদাহরণস্বরূপ সাইন ওয়েভ, নমুনা বাদ দেওয়া কোন সমস্যা নয়। কিন্তু সংকীর্ণ স্পাইকগুলির সাথে তরঙ্গাকৃতির জন্য, উদাহরণস্বরূপ একটি ছোট ডিউটি চক্রের সাথে একটি বর্গাকার তরঙ্গ, এমন বিপদ রয়েছে যে 1.5 কিলোহার্টজের উপরে একটি একক নমুনা অনুপস্থিত ফ্রিকোয়েন্সিগুলির ফলে তরঙ্গটি প্রত্যাশিত আচরণ করতে পারে না

ফ্রিকোয়েন্সি নির্ভুলতা

প্রতিটি নমুনায় যে সংখ্যা দ্বারা ফেজ বৃদ্ধি করা হয় তা ফ্রিকোয়েন্সি সমানুপাতিক। ফ্রিকোয়েন্সি এভাবে 381kHz/2^32 = 0.089mHz এর নির্ভুলতায় সেট করা যায়। অনুশীলনে এমন নির্ভুলতার খুব কমই প্রয়োজন হয়, তাই ইন্টারফেস 1mHz এর ধাপে ফ্রিকোয়েন্সি সেট করার সীমা দেয়। ফ্রিকোয়েন্সি এর পরম নির্ভুলতা Arduino ঘড়ি ফ্রিকোয়েন্সি স্পষ্টতা দ্বারা নির্ধারিত হয়। এটি Arduino প্রকারের উপর নির্ভর করে কিন্তু বেশিরভাগ 16.000MHz এর ফ্রিকোয়েন্সি নির্দিষ্ট করে, তাই ~ 10^-4 এর নির্ভুলতা। কোড 16MHz অনুমানের ছোট বিচ্যুতিগুলির জন্য ফ্রিকোয়েন্সি এবং ফেজ ইনক্রিমেন্টের অনুপাত সংশোধন করার অনুমতি দেয়।

বাফারিং এবং পরিবর্ধন

রোধকারী নেটওয়ার্কের একটি উচ্চ আউটপুট প্রতিবন্ধকতা রয়েছে, তাই লোড সংযুক্ত থাকলে তার আউটপুট ভোল্টেজ দ্রুত হ্রাস পায়। এটি বাফারিং বা আউটপুট বাড়িয়ে সমাধান করা যেতে পারে। এখানে, বাফারিং এবং পরিবর্ধন একটি opamp দিয়ে সম্পন্ন করা হয়। আমি LM358 ব্যবহার করেছি কারণ আমার কিছু ছিল। এটি একটি ধীর অপ্যাম্প (প্রতি মাইক্রোসেকেন্ডে 0.5V রেট) তাই উচ্চ ফ্রিকোয়েন্সি এবং উচ্চ প্রশস্ততায় সংকেত বিকৃত হয়ে যায়। একটি ভাল জিনিস হল যে এটি 0V এর খুব কাছাকাছি ভোল্টেজগুলি পরিচালনা করতে পারে। আউটপুট ভোল্টেজটি রেলের নীচে ~ 2V এর মধ্যে সীমাবদ্ধ, তাই +5V পাওয়ার ব্যবহার করে আউটপুট ভোল্টেজ 3V তে সীমাবদ্ধ। স্টেপ-আপ মডিউলগুলি কমপ্যাক্ট এবং সস্তা। Opamp থেকে +20V খাওয়ানো, এটি 18V পর্যন্ত ভোল্টেজ সহ সংকেত তৈরি করতে পারে। NB আমি R2R DAC এর আউটপুটে একটি ভেরিয়েবল এটেনুয়েশন প্রয়োগ করা বেছে নিই তারপর অপ্প্যাম্পগুলির একটি ব্যবহার করে সিগন্যালকে বাড়াতে এবং অন্যটি 5.7 দ্বারা বাড়ানোর জন্য, যাতে সিগন্যালটি প্রায় 20V এর সর্বোচ্চ আউটপুটে পৌঁছতে পারে। আউটপুট কারেন্ট বরং সীমিত, ~ 10mA, তাই একটি শক্তিশালী স্প্লিমার প্রয়োজন হতে পারে যদি সিগন্যালটি একটি বড় স্পিকার বা ইলেক্ট্রোম্যাগনেট চালাতে হয়।

পদক্ষেপ 2: প্রয়োজনীয় উপাদান

কোর ওয়েভফর্ম জেনারেটরের জন্য

আরডুইনো উনো বা ন্যানো

16x2 LCD ডিসপ্লে + 20kOhm ট্রিমার এবং ব্যাকলাইটের জন্য 100Ohm সিরিজের রোধ

5-পিন রোটারি এনকোডার (ইন্টিগ্রেটেড পুশবাটন সহ)

10kOhm এর 25 প্রতিরোধক

বাফার/পরিবর্ধক জন্য

LM358 বা অন্যান্য দ্বৈত opamp

MT3608 এর উপর ভিত্তি করে স্টেপ-আপ মডিউল

50kOhm পরিবর্তনশীল প্রতিরোধক

10kOhm প্রতিরোধক

47kOhm প্রতিরোধক

1muF ক্যাপাসিটর

ধাপ 3: নির্মাণ

নির্মাণ
নির্মাণ
নির্মাণ
নির্মাণ

আমি 7x9cm প্রোটোটাইপ বোর্ডে সবকিছু বিক্রি করেছি, যেমন ছবিতে দেখানো হয়েছে। যেহেতু এটি সমস্ত তারের সাথে কিছুটা অগোছালো হয়ে গেছে তাই আমি ইতিবাচক ভোল্টেজ লাল এবং যেগুলি স্থল কালো বহন করে সেগুলি রঙ করার চেষ্টা করেছি।

আমি যে এনকোডারটি ব্যবহার করেছি তার 5 টি পিন, একদিকে 3, অন্য দিকে 2 টি। 3 পিনের পাশটি প্রকৃত এনকোডার, 2 পিনের পাশটি ইন্টিগ্রেটেড পুশবাটন। 3-পিনের পাশে, কেন্দ্রীয় পিনটি মাটির সাথে সংযুক্ত হওয়া উচিত, অন্য দুটি পিন D10 এবং D11 এর সাথে। 2-পিন পাশে, একটি পিন মাটির সাথে এবং অন্যটি D12 এর সাথে সংযুক্ত হওয়া উচিত।

এটা আমি কখনও তৈরি ugliest জিনিস কিন্তু এটি কাজ করে। এটি একটি ঘের মধ্যে রাখা ভাল হবে, কিন্তু এখন জন্য অতিরিক্ত কাজ এবং খরচ সত্যিই এটা ন্যায্যতা না। ন্যানো এবং ডিসপ্লে পিন হেডারের সাথে সংযুক্ত। আমি যদি নতুনটি তৈরি করতাম তবে আমি তা আর করব না। আমি সিগন্যাল তুলতে বোর্ডে কানেক্টর রাখিনি। পরিবর্তে, আমি তামার তারের টুকরো টুকরো থেকে কুমিরের সীসা দিয়ে তাদের তুলে নিই, যা নিম্নরূপ লেবেলযুক্ত:

R - R2R DAC থেকে কাঁচা সংকেত

বি - বাফার্ড সিগন্যাল

A - বর্ধিত সংকেত

টি - পিন 9 থেকে টাইমার সংকেত

জি - স্থল

+ - ধাপ -আপ মডিউল থেকে ইতিবাচক 'উচ্চ' ভোল্টেজ

ধাপ 4: কোড

কোড, একটি Arduino স্কেচ, সংযুক্ত করা হয় এবং Arduino এ আপলোড করা উচিত।

20 তরঙ্গরূপগুলি পূর্ব-সংজ্ঞায়িত করা হয়েছে। অন্য কোন তরঙ্গ যোগ করা সহজবোধ্য হওয়া উচিত। লক্ষ্য করুন যে এলোমেলো তরঙ্গ এলোমেলো মানের সাথে 256-মান অ্যারে পূরণ করে, কিন্তু একই প্যাটার্ন প্রতি পিরিয়ড পুনরাবৃত্তি হয়। সত্যিকারের এলোমেলো সংকেত শব্দগুলির মতো শোনায়, কিন্তু এই তরঙ্গাকৃতিটি হুইসেলের মতো অনেক বেশি শোনায়।

কোডটি TIMER1 দিয়ে P9 D9 এ 1kHz সিগন্যাল সেট করে। এনালগ সিগন্যালের সময় পরীক্ষা করার জন্য এটি দরকারী। এভাবেই আমি বুঝতে পারলাম যে ঘড়ির চক্রের সংখ্যা 42: যদি আমি 41 বা 43 অনুমান করি এবং 1kHz সংকেত উৎপন্ন করি, এটি স্পষ্টভাবে পিন D9 এর সংকেত থেকে একটি ভিন্ন ফ্রিকোয়েন্সি আছে। 42 মান সঙ্গে তারা পুরোপুরি মেলে।

সাধারণত, মিলিস () ফাংশনের সাথে সময়ের হিসাব রাখতে Arduino প্রতি মিলিসেকেন্ডে বাধা দেয়। এটি সঠিক সংকেত প্রজন্মকে বিঘ্নিত করবে, তাই বিশেষ বাধা নিষ্ক্রিয় করা হয়।

কম্পাইলার বলেছেন: "স্কেচ 7254 বাইট (23%) প্রোগ্রাম স্টোরেজ স্পেস ব্যবহার করে। সর্বাধিক 30720 বাইট। সুতরাং আরো অত্যাধুনিক কোডের জন্য যথেষ্ট জায়গা আছে। সাবধান যে ন্যানোতে সফলভাবে আপলোড করার জন্য আপনাকে "ATmega328P (পুরাতন বুটলোডার)" বেছে নিতে হতে পারে।

ধাপ 5: ব্যবহার

সিগন্যাল জেনারেটরটি আরডুইনো ন্যানোর মিনি-ইউএসবি কেবল দ্বারা চালিত হতে পারে। এটি একটি পাওয়ার ব্যাঙ্কের সাথে সর্বোত্তমভাবে সম্পন্ন করা হয়, যাতে যন্ত্রের সাথে কোন দুর্ঘটনাজনিত গ্রাউন্ড লুপ থাকে না যার সাথে এটি সংযুক্ত হতে পারে।

এটি চালু করলে এটি 100Hz সাইন ওয়েভ তৈরি করবে। গাঁটটি ঘোরানোর মাধ্যমে, অন্য 20 টি তরঙ্গের মধ্যে একটি বেছে নেওয়া যেতে পারে। ধাক্কা দেওয়ার সময় ঘোরানোর মাধ্যমে, কার্সারটি ফ্রিকোয়েন্সি এর যেকোনো অঙ্কে সেট করা যায়, যা পরে পছন্দসই মান পরিবর্তন করা যায়।

প্রশস্ততাকে পটেন্টিওমিটারের মাধ্যমে নিয়ন্ত্রিত করা যেতে পারে এবং বাফার বা বর্ধিত সংকেত ব্যবহার করা যেতে পারে।

সিগন্যাল প্রশস্ততা পরীক্ষা করার জন্য অসিলোস্কোপ ব্যবহার করা সত্যিই সহায়ক, বিশেষ করে যখন সিগন্যাল অন্য ডিভাইসে কারেন্ট সরবরাহ করে। যদি খুব বেশি কারেন্ট টানা হয়, সিগন্যাল ক্লিপ করবে এবং সিগন্যালটি ব্যাপকভাবে বিকৃত হবে

খুব কম ফ্রিকোয়েন্সিগুলির জন্য, 10kOhm প্রতিরোধক সহ সিরিজের একটি LED দিয়ে আউটপুটটি দৃশ্যমান করা যেতে পারে। স্পিকারের সাহায্যে অডিও ফ্রিকোয়েন্সি শোনা যায়। সিগন্যাল খুব ছোট ~ 0.5V সেট করতে ভুলবেন না, অন্যথায় কারেন্ট খুব বেশি হয়ে যায় এবং সিগন্যাল ক্লিপিং শুরু করে।

প্রস্তাবিত: