رفتن به محتوا

اسیلوسکوپ جیبی و چندکاره با آردوینو

ابزار و گجت
۰ نظر
۱۵ نفر
کد ۴۷۰۷

اسیلوسکوپ یکی از مهم‌ترین ابزارهای روی میز هر الکترونیک‌کاری به حساب میاد، اما خرید یه دستگاه حرفه‌ای و گرون‌قیمت همیشه راحت نیست. داشتن یه اسیلوسکوپ کوچیک و جمع‌وجور که بشه راحت همه‌جا بردش و کارای روزمره رو باهاش راه انداخت، خیلی کاربردیه و می‌تونه تو عیب‌یابی مدارها حسابی کمکت کنه.

تو این آموزش از آیسی‌مدار، قراره با استفاده از یه برد آردوینو نانو و چندتا قطعه ساده، یه اسیلوسکوپ جیبی بسازیم که تو یه قوطی کبریت جا می‌شه! این دستگاه با اینکه کوچیکه، اما می‌تونه شکل موج‌ها رو با سرعت خیلی خوبی پردازش کنه و حتی امکاناتی مثل فرکانس‌متر، ولت‌متر و لاجیک آنالایزر رو هم بهت می‌ده.

اگه آماده‌ای که یه ابزار تست و اندازه‌گیری خفن، دست‌ساز و البته مقرون‌به‌صرفه برای میز کارت خلق کنی، قطعات رو آماده کن تا قدم‌به‌قدم بریم سراغ ساخت این مدار هیجان‌انگیز.

  • سرعت نمونه‌برداری حداکثر 1 میلیون و حداقل 1000 نمونه بر ثانیه
  • دقت 8 بیت برای هر نمونه
  • ورودی دی‌سی 0 تا 5 ولت؛ ورودی ای‌سی در محدوده‌های 550، 117 و 25 میلی‌ولت
  • نمایشگر داخلی یا اتصال به کامپیوتر از طریق USB
  • قابلیت راه‌اندازی با باتری
  • نمایشگر لاجیک (اختیاری)
  • فرکانس‌متر (اختیاری)
  • ولت‌متر (اختیاری)
  • سیگنال ژنراتور (اختیاری)
مرحله ۱

چطور به سرعت ۱ میلیون نمونه بر ثانیه برسیم؟

بیا اسم این اسیلوسکوپ رو بذاریم "ArdOsc" (مخفف آردوینو اسیلوسکوپ). طراحی‌های قبلی که با آردوینو انجام شده بودن، معمولا سرعت پایینی داشتن و موقع کار هنگ می‌کردن.

مشکل اصلی اون طراحی‌ها استفاده از وقفه‌ها (Interrupts) بود. وقفه‌ها به خاطر کدهایی که برای ذخیره و بازیابی رجیسترها اجرا می‌کنن، سرعت رو به شدت پایین میارن و ممکنه باعث خطاهای عجیب بشن. تو برنامه‌نویسی امبدد (Embedded)، همیشه بهتره تا جای ممکن از وقفه‌ها دوری کنی و به جاش از روش سرکشی یا Polling استفاده کنی.

بنابراین تو برنامه ArdOsc ما تمام وقفه‌ها رو غیرفعال می‌کنیم و وارد یه حلقه بی‌نهایت و سریع می‌شیم تا دیتای مبدل آنالوگ به دیجیتال (ADC) رو بخونیم.

حتی اگه ADC کارش تموم نشده باشه، ما همون مقداری که تا اون لحظه به دست آورده رو می‌خونیم. دستگاه 1000 نمونه (هر کدوم یک بایت) رو می‌گیره، بعد وقفه‌ها رو دوباره فعال می‌کنه و دیتا رو با سرعت 115200 باود به کامپیوتر می‌فرسته، یا اینکه 128 نمونه رو مستقیما روی نمایشگر خودش نشون می‌ده.

مبدل ADC تو آردوینو با روش تقریب متوالی کار می‌کنه؛ یعنی اول باارزش‌ترین بیت رو می‌سنجه و بعد به ترتیب میره سراغ بیت‌های بعدی تا 10 بیت کامل بشه. این 10 بیت تو دو تا رجیستر ADCH (هشت بیت بالا) و ADCL (دو بیت پایین) ذخیره می‌شن. چون ما فقط به دقت 8 بیت نیاز داریم، رجیستر ADCL رو کلا نادیده می‌گیریم.

مبدل ADC بعد از پایان تبدیل پرچم (Flag) خودش رو فعال می‌کنه، اما ما منتظر پرچم نمی‌مونیم و درجا مقدار ADCH رو می‌خونیم. البته این کار باعث می‌شه تو حالت سرعت بالا (1 میلیون نمونه بر ثانیه)، هر 4 نمونه پشت سر هم دقیقا مقدار یکسانی داشته باشن. نرم‌افزار این نقاط رو نرم (Smooth) می‌کنه تا شکل موج قشنگ بشه، اما در واقع سرعت واقعی حدود 250 هزار نمونه بر ثانیه است.

سرعت تبدیل ADC به کلاک میکروکنترلر (16 مگاهرتز) و ضریب تقسیم یا Prescaler بستگی داره. ضریب‌های موجود 2، 4، 8، 16، 32، 64 یا 128 هستن. اگه ضریب رو خیلی پایین (مثلا 2) بذاری، زمان تبدیل اونقدر کوتاه می‌شه که ADC نمی‌تونه ولتاژ رو درست بسنجه و کیفیت افتضاح می‌شه.

ضریب 8 یه تعادل خوب بین کیفیت 8 بیتی و سرعت تبدیل به ما می‌ده. هرچی زمان بیشتری به ADC بدی، دقت میره بالا اما سرعت نمونه‌برداری افت می‌کنه.

علاوه بر این، زمان شارژ شدن خازن داخلی ADC (نمونه‌بردار و نگه‌دارنده) هم مهمه. این اسیلوسکوپ تا فرکانس 20 کیلوهرتز عملکرد عالی داره، اما بعد از اون دامنه سیگنال شروع به افت می‌کنه. مثلا یه موج سینوسی 50 کیلوهرتز رو می‌تونی ببینی، اما دامنه‌اش یک‌چهارم اندازه واقعی نشون داده می‌شه. حلقه نمونه‌برداری تو کد ما دقیقا طوری تنظیم شده که 16 کلاک‌سایکل طول بکشه تا به سرعت هدفمون برسیم.

مرحله ۲

مدار پایه؛ ساده‌ترین حالت اسیلوسکوپ

ساده‌ترین حالت این اسیلوسکوپ فقط از یه آردوینو نانو، 4 تا مقاومت و 3 تا خازن تشکیل شده. تغذیه برد از کابل USB تأمین می‌شه و دیتا هم از همون طریق به کامپیوتر ارسال می‌شه.

سیگنال ورودی به پین آنالوگ A0 وصل می‌شه. یه مقاومت 10 کیلواهم هم برای محافظت از میکروکنترلر تو مسیر قرار می‌گیره تا در برابر ولتاژهای بالا مقاوم باشه. دیودهای داخلی آردوینو اجازه نمی‌دن ولتاژ از 5 ولت بیشتر یا از صفر کمتر بشه. با این مقاومت، ورودی مدار می‌تونه نوسانات بین منفی 10 تا مثبت 15 ولت رو با خیال راحت تحمل کنه.

پین A0 ولتاژ رو نسبت به Vcc (همون 5 ولت) می‌سنجه. از اونجایی که ولتاژ USB همیشه دقیقا 5 ولت نیست، برنامه به صورت خودکار ولتاژ دقیق Vcc رو اندازه می‌گیره و شبکه توری (Graticule) نمایشگر رو بر اساس اون تنظیم می‌کنه.

برای اندازه‌گیری ولتاژ ای‌سی (AC)، سیگنال ورودی از یه خازن 100 نانوفاراد رد می‌شه و به پین A1 می‌ره. این پین با یه مقاومت 1 مگااهم به ولتاژ 0.55 ولت بایاس شده، یعنی موج AC حول این ولتاژ نوسان می‌کنه. پین A1 از رفرنس داخلی 1.1 ولت آردوینو استفاده می‌کنه، بنابراین می‌تونه سیگنال‌های بین منفی 0.55 ولت تا مثبت 0.55 ولت رو بسنجه.

ولتاژ 0.55 ولت از تقسیم مقاومتی روی پین 3V3 آردوینو به دست میاد که نویز خیلی کمتری نسبت به 5 ولت USB داره. ممکنه نیاز باشه این مقاومت‌ها رو یه مقدار دستکاری کنی تا ولتاژ دقیقا تنظیم بشه.

برای کالیبره کردنش، پراب ورودی رو به زمین (GND) وصل کن و ببین تو حالت AC موج کجاست. مقاومت R1 رو اونقدر تغییر بده تا خط دقیقا وسط بیفته (برای من مقاومت 33 کیلواهم عالی جواب داد).

من نقشه لحیم‌کاری روی برد سوراخ‌دار (Stripboard) رو برات گذاشتم. این برد هم‌اندازه خود آردوینو نانو هست و می‌تونی مثل یه ساندویچ اون‌ها رو روی هم سوار کنی. توی دیاگرام، خطوط مسی با رنگ آبی فیروزه‌ای و سیم‌های جامپر با رنگ قرمز مشخص شدن تا راحت بتونی مسیرها رو پیاده‌سازی کنی.

مرحله ۳

تقویت سیگنال برای ولتاژهای ضعیف

مدار پایه اسیلوسکوپ فقط دو تا محدوده داشت:

  • 0 تا 5 ولت
  • منفی 0.55 ولت تا مثبت 0.55 ولت

اما ما تو مدارات معمولا با سیگنال‌های خیلی ضعیف‌تری سروکار داریم. برای همین از دو طبقه تقویت‌کننده با یه آیسی آپ‌امپ LM358 استفاده می‌کنیم.

هر دو بخش آپ‌امپ به صورت AC کوپل شدن و ولتاژ پایه اون‌ها روی 0.55 ولت تنظیم شده. گین (بهره) هر کدوم از این طبقات نزدیک 5 برابره و خروجی‌هاشون به پین‌های A2 و A3 وصل می‌شه تا میکروکنترلر بتونه سیگنال دلخواه رو بخونه. با این کار، حالا اسیلوسکوپ چهار تا رنج اندازه‌گیری داره:

  • 0 تا 5 ولت
  • منفی 0.55 تا مثبت 0.55 ولت
  • منفی 117 تا مثبت 117 میلی‌ولت
  • منفی 25 تا مثبت 25 میلی‌ولت

دلیل اینکه سیگنال‌ها رو حول 0.55 ولت بایاس کردیم اینه که خروجی LM358 نمی‌تونه به ولتاژ Vcc نزدیک بشه (حداکثر تا 3.5 ولت بالا می‌ره) و اگه ولتاژ بایاس بالاتر بود، شکل موج زودتر خراب (Distort) می‌شد.

نقشه برد سوراخ‌دار این بخش رو هم برات آماده کردم. حالا دو تا برد مجزا داری، یکی برای نانو و یکی برای آپ‌امپ که روی هم قرار می‌گیرن. می‌تونی این دو تا برد رو با سیم‌های نازک به هم وصل کنی و با اسپیسر یا چسب دوطرفه محکم‌شون کنی. دوباره باید مقاومت R9 رو طوری تنظیم کنی که خط موج تو رنج‌های جدید، دقیقا بیفته وسط صفحه.

فقط یه نکته مهم درباره LM358: اگه دامنه سیگنال ورودی زیاد باشه، خروجی این آیسی به‌هم‌ریخته می‌شه. پس یادت باشه از تنظیمات با گین بالا فقط برای سیگنال‌های خیلی کوچیک استفاده کنی. اگه آپ‌امپ باکیفیت‌تری تو کشوی قطعاتت داری، حتما جایگزینش کن چون LM358 یه آیسی کاملا معمولیه.

مرحله ۴

اضافه کردن قابلیت لاجیک آنالایزر

خیلی وقتا به جای شکل موج آنالوگ، درگیر سطوح منطقی دیجیتال می‌شیم. آیا این اسیلوسکوپ می‌تونه چند کانال دیجیتال رو هم نشون بده؟ قطعا! تازه خیلی هم راحت‌تر از کار با ADC هست. با این ویژگی، محدوده ورودی پنجم هم به دستگاه اضافه می‌شه:

  • حالت Logic

تو حالت لاجیک، 4 کانال دیجیتال به پین‌های D8 تا D11 آردوینو وصل می‌شن و به صورت 4 خط مجزا روی صفحه به نمایش در میان. پین‌های D8 تا D11 در واقع متناظر با بیت‌های 0 تا 3 از پورت B میکروکنترلر ATmega328p هستن. به جای خوندن دونه دونه پین‌ها، ما کل پورت B رو یکجا می‌خونیم و تو بافر ذخیره می‌کنیم.

تو حالت 1 مگاسمپل، از نظر تئوری می‌تونی فرکانس 500 کیلوهرتز رو ببینی، اما تو عمل چیزی که راحت و واضح دیده می‌شه حدود 250 کیلوهرتزه.

اگه نیازی به این قابلیت نداری، می‌تونی پین‌ها رو وصل نکنی و تو فایل آردوینو متغیر bHasLogic رو روی false تنظیم کنی تا کلا غیرفعال بشه.

مرحله ۵

مکانیزم تریگر برای ثبات شکل موج

وقتی داری یه موج تناوبی (مثل سینوسی) رو نگاه می‌کنی، خیلی مهمه که تو هر بار جاروب شدن صفحه (Sweep)، موج از یه نقطه ثابت شروع بشه. به این کار تریگر کردن می‌گن.

اول سعی کردم مثل بقیه پروژه‌ها از مقایسه‌کننده (Comparator) داخلی میکرو برای این کار استفاده کنم، اما متوجه شدم که این روش نقاط ضعف زیادی داره.

مشکل اینجاست که برای استفاده از مقایسه‌کننده روی پین‌های آنالوگ، باید ADC رو موقتا خاموش کنی و بعد از دریافت تریگر دوباره روشنش کنی. این روشن شدن مجدد، زمان باارزشی رو هدر می‌داد.

بنابراین راه ساده‌تری رو انتخاب کردم: ADC رو روشن نگه می‌دارم و دیتای خروجی‌اش رو لحظه‌به‌لحظه مانیتور می‌کنم. هر وقت دیتا از نقطه میانی (0.55 ولت) عبور کرد، فرآیند نمونه‌برداری و جاروب رو استارت می‌زنم. تو حالت لاجیک هم، پین D8 به عنوان تریگر عمل می‌کنه.

اگه هیچ سیگنالی تو ورودی نباشه، اسیلوسکوپ باید بعد از یه مدت کوتاه خودش رو رفرش کنه تا صفحه ثابت نمونه. من این تأخیر (Timeout) رو 250 میلی‌ثانیه در نظر گرفتم. برای این کار از تایمر یک (Timer1) آردوینو استفاده کردم تا زمان رو بشمره و در صورت نیاز تریگر خودکار رو فعال کنه.

مرحله ۶

تولید سیگنال تست مربعی

بعضی وقتا برای تست کردن مدارت به یه سیگنال پالس نیاز داری. این اسیلوسکوپ می‌تونه روی پین D3 موج مربعی با فرکانس‌های زیر رو برات تولید کنه:

  • 31250 هرتز
  • 3906 هرتز
  • 977 هرتز
  • 488 هرتز
  • 244 هرتز
  • 122 هرتز
  • 31 هرتز

این فرکانس‌ها از تقسیم فرکانس پایه به دست میان. اگه به سیگنال تست احتیاج نداری، نیازی نیست کانکتورش رو لحیم کنی و می‌تونی متغیر bHasTestSignal رو تو کد برنامه‌نویسی روی false تنظیم کنی.

مرحله ۷

پروتکل ارتباط سریال با کامپیوتر

این اسیلوسکوپ می‌تونه دیتاها رو از طریق کابل USB با سرعت 115200 باود به کامپیوتر بفرسته. کامپیوتر هم برای تنظیم کردن دستگاه از کاراکترهای خاصی استفاده می‌کنه. حروف کوچک برای تنظیمات رایج هستن:

  • حرف 'a' تا 'g': تنظیم تایم‌بیس (از 1 میلی‌ثانیه تا 100 میلی‌ثانیه)
  • حرف 'j' تا 'm': تنظیم محور ولتاژ (5 ولت، 0.5 ولت، 0.1 ولت و 200 میلی‌ولت)
  • حرف 'n': رفتن به حالت لاجیک
  • حرف 'p' و 'q': تنظیم لبه تریگر (پایین‌رونده یا بالارونده)
  • حرف 'r' تا 'y': تنظیم فرکانس سیگنال تست
  • حرف 'z': شروع جاروب و ارسال اطلاعات

بعد از هر بار نمونه‌برداری، فریم دیتا به این شکل ارسال می‌شه:

  • بایت 0xAA
  • بایت 0xBB
  • بایت 0xCC
  • 1000 بایت دیتای نمونه‌برداری شده

دستگاه در جواب هر دستوری که بگیره، کاراکتر '@' رو به عنوان تایید (Ack) برمی‌گردونه. از اونجایی که دریافت سریال با وقفه (Interrupt) کار می‌کنه و ما تو زمان نمونه‌برداری وقفه‌ها رو می‌بندیم، اگه وسط 샘پل‌گیری دستوری ارسال بشه، فقط بایت اول تو بافر می‌مونه و بقیه دیتا از بین می‌ره.

دستوراتی که با حروف بزرگ ارسال می‌شن شامل چند بایت هستن، پس بهتره زمانی فرستاده بشن که دستگاه در حال نمونه‌برداری نیست. این دستورات ویژه معمولا برای تست و دیباگ کاربرد دارن و تنظیمات پایه‌ای مثل تغییر کانال ADC یا تغییر رفرنس ولتاژ رو کنترل می‌کنن.

  • با 'A' و n، کانال ADC رو تنظیم کن
  • با 'B' ولتاژ "باتری" = Vcc رو گزارش بده
  • با 'D' وضعیت رو گزارش بده
  • با 'F' و n، فرکانس PWM رو تنظیم کن
  • با 'R' و n، Vref مربوط به ADC رو تنظیم کن
  • با 'T' و n، trigger صعودی یا نزولی بده
  • با 'U' و n، prescaler رو تنظیم کن و داده sweep بفرست
  • با 'V' و n، دوره نمونه‌برداری ADC رو تنظیم کن
  • با 'A' و n، کانال ADC رو تنظیم کن
  • با 'B' ولتاژ "باتری" = Vcc رو گزارش بده
  • با 'D' وضعیت رو گزارش بده
  • با 'F' و n، فرکانس PWM رو تنظیم کن
  • با 'R' و n، Vref مربوط به ADC رو تنظیم کن
  • با 'T' و n، trigger صعودی یا نزولی بده
  • با 'U' و n، prescaler رو تنظیم کن و داده sweep بفرست
  • با 'V' و n، دوره نمونه‌برداری ADC رو تنظیم کن
مرحله ۸

اضافه کردن نمایشگر OLED به مدار

برای اینکه نیازی به کامپیوتر نداشته باشیم، می‌تونیم یه نمایشگر 1.3 اینچی OLED با درایور SH1106 به مدار اضافه کنیم. شاید 1.3 اینچ کوچیک به نظر برسه اما وضوح این نمایشگرها فوق‌العاده‌ست و همه‌چیز خواناست. نمایشگر رو از طریق پروتکل I2C به آردوینو وصل می‌کنیم تا پین‌های SPI برای کارهای دیگه آزاد بمونن.

کتابخونه‌های استانداردی مثل U8glib برای این پروژه خیلی سنگین و کند هستن. برای همین من یه کتابخونه سبک و فوق‌سریع به اسم SimpleSH1106 نوشتم که رم خیلی کمی اشغال می‌کنه.

تو این کتابخونه ما هیچ بافری روی رم آردوینو نداریم و تمام دستورات مستقیما با نوشتن بایت‌ها تو صفحات (Pages) آیسی SH1106 انجام می‌شه. این کار باعث می‌شه حدود 1 کیلوبایت رم برای دیتای نمونه‌برداری آزاد بمونه.

برای اینکه سرعت ارتباط I2C بالا بره، مقاومت‌های Pull-up داخلی آردوینو کافی نیستن. پس حتما دو تا مقاومت 1 کیلواهم به پین‌های SDA و SCL بزن و اون سرشون رو به 3V3 وصل کن. تو کدهای برنامه هم، فرکانس I2C رو با تغییر رجیستر TWBR افزایش دادیم تا فریم‌های صفحه با سرعت 40 میلی‌ثانیه رفرش بشن.

تو نقشه‌های این مرحله نشون دادم که چطور برد نمایشگر رو به عنوان لایه سوم به ساندویچ بردهای قبلی اضافه کنی. دقت کن که بعضی از این ماژول‌های OLED ترتیب پایه‌هاشون فرق می‌کنه (مثلا VCC و GND جابه‌جان)، پس قبل از لحیم‌کاری حتما پایه‌ها رو چک کن.

همچنین ممکنه تصویر تو نمایشگر شما یه کم جابه‌جا باشه که با تغییر متغیر colOffset تو کد کتابخونه می‌تونی مرکزیت تصویر رو تنظیم کنی. So after calling Wire.begin(), I set the Atmel328p TWBR register to a smaller value. The resulting library is fast - the sweep display of the oscilloscope is drawn in 40mS.

  • تابع void clearSH1106() صفحه رو با 0 بایت (مشکی) پر می‌کنه.
  • تابع void DrawByteSH1106 یک بایت (یک ستون 8 پیکسلی) رسم می‌کنه.
  • تابع int DrawImageSH1106 یک تصویر رسم می‌کنه.
  • تابع int DrawCharSH1106 یک کاراکتر رسم می‌کنه.
  • تابع int DrawStringSH1106 یک رشته رسم می‌کنه.
  • تابع int DrawIntSH1106 یک عدد صحیح رسم می‌کنه.
مرحله ۹

رابط کاربری و دکمه‌های تنظیمات

روی نمایشگر، شکل موج‌ها همراه با یه شبکه توری (Graticule) نشون داده می‌شن. محور افقی زمان رو بر حسب میلی‌ثانیه و محور عمودی ولتاژ رو نشون می‌ده. خطوط چین‌دار برای محدوده‌های مختلف ولتاژ کشیده شدن. تو حالت لاجیک، 4 تا کانال جداگانه از بالا تا پایین صفحه رسم می‌شن تا وضعیت پین‌های D8 تا D11 رو ببینی.

برای کنترل دستگاه از دو تا کلید فشاری استفاده کردیم: یکی برای تنظیم محور افقی (زمان) و یکی برای محور عمودی (ولتاژ). اگه هر کدوم از این کلیدها رو یک ثانیه نگه داری، وارد منوی تنظیمات می‌شی.

تو منو، با یه کلید بین گزینه‌ها حرکت می‌کنی و با کلید دیگه مقدار اون گزینه رو تغییر می‌دی. اگه 2 ثانیه هیچ کلیدی رو نزنی، دستگاه دوباره به صفحه اصلی و نمایش موج برمی‌گرده.

مرحله ۱۰

اضافه کردن فرکانس‌متر

اسیلوسکوپ ما می‌تونه به کمک تایمرهای یک و دو آردوینو، نقش فرکانس‌متر رو هم بازی کنه. اندازه‌گیری فرکانس با شمردن تعداد لبه‌های بالارونده تو یک ثانیه انجام می‌شه.

برای اندازه‌گیری فرکانس سیگنال‌های دیجیتال، پین D5 (که کلاک تایمر یک هست) رو به صورت سخت‌افزاری به پین D8 وصل می‌کنیم. تایمر صفر هم هر یک میلی‌ثانیه یه وقفه ایجاد می‌کنه و بعد از 1000 بار، تعداد شمارش‌های تایمر یک به عنوان فرکانس نمایش داده می‌شه.

برای سیگنال‌های آنالوگ ای‌سی، از مقایسه‌کننده داخلی میکروکنترلر استفاده می‌کنیم. هر بار که ولتاژ بالا می‌ره، یه وقفه رخ می‌ده و زمان بین این لبه‌ها برای محاسبه فرکانس استفاده می‌شه.

نکته‌ای که باید بدونی اینه که مقایسه‌کننده داخلی پسماند (Hysteresis) نداره، برای همین ممکنه نویزها باعث بشن فرکانس‌های خیلی پایین (مثلا 10 هرتز) اشتباه محاسبه بشن. اگه به فرکانس‌متر نیازی نداری، اتصال D5 به D8 رو وصل نکن و تو برنامه bHasFreq رو روی false بذار.

مرحله ۱۱

قابلیت ولت‌متر با رفرنس دقیق

امکانات این گجت کوچیک تمومی نداره! با اتصال یه شبکه مقاومتی به پین A6 می‌تونی یه ولت‌متر داشته باشی که ولتاژهای بین منفی 20 تا مثبت 20 ولت رو اندازه می‌گیره.

برای دقت بیشتر، ولتاژ رفرنس رو با استفاده از ولتاژ باندگپ (Bandgap) داخلی 1.1 ولت کالیبره می‌کنیم تا تغییرات ولتاژ USB روی دقت ولت‌متر تأثیر نذاره.

مقاومت‌های شبکه تقسیم ولتاژ شامل سه مقدار 120، 150 و 470 کیلواهم هستن. مقاومت 470 کیلواهم همون امپدانس ورودی ولت‌متره که با اینکه به پای مولتی‌مترهای دیجیتال نمی‌رسه، اما برای کارهای روزمره عالیه.

اگه ولتاژ از مثبت 20 ولت بیشتر بشه چی می‌شه؟ نگران نباش! مقاومت‌های مدار جریان رو اونقدر محدود می‌کنن که دیودهای محافظ داخلی آردوینو می‌تونن ولتاژ اضافی رو دفع کنن و آسیبی به برد نرسه.

  • Ra=120 کیلواهم
  • Rb=150 کیلواهم
  • Rc=470 کیلواهم

اگر هم به ولت‌متر نیاز نداری متغیر bHasVoltmeter رو غیرفعال کن. The lowest voltage that the voltmeter can measure is -5*Rc/Ra = -19.6 ولت The highest it can measure is 5*Rc/Rb+5 = 20.7 ولت You can choose different resistors if you want. What if you exceed those voltages?

مرحله ۱۲

پراب‌ها و سیم‌های اتصال

اسیلوسکوپ‌های تجاری پراب‌های سوسماری و حرفه‌ای دارن، اما چون ما معمولا روی بردبورد کار می‌کنیم، استفاده از همون سیم‌های جامپر معمولی خیلی هم راحت‌تر و بی‌دردسرتره. کافیه سیم‌ها رو به مدارت وصل کنی و نتیجه رو ببینی.

مرحله ۱۳

اضافه کردن سیگنال ژنراتور حرفه‌ای

یه سیگنال ژنراتور روی میز کار نعمت بزرگیه. می‌تونی با اضافه کردن ماژول معروف AD9833، انواع موج‌های سینوسی، مربعی و مثلثی رو تو فرکانس‌های 1 هرتز تا 100 کیلوهرتز بسازی و به مدارت تزریق کنی.

این ماژول حتی قابلیت Sweep هم داره تا بتونی فرکانس رو از یه حد پایین تا بالا به مرور تغییر بدی که برای تست فیلترها و آمپلی‌فایرها فوق‌العاده‌ست.

برای اتصال این ماژول به آردوینو، Vcc رو به 5 ولت و GND رو به زمین مشترک وصل کن. پین‌های دیتا هم شامل D2 برای FSync، پین D13 برای Clock و D12 برای Data هستن.

کد مربوط به این ماژول تو نرم‌افزار قرار داده شده، فقط کافیه bHasSigGen رو روی true تنظیم کنی تا منوی مربوط به سیگنال ژنراتور رو روی نمایشگر ببینی و تنظیماتش رو انجام بدی.

  • توضیح: 5 ولت = Vcc of AD9833
  • توضیح: D2 = FSync
  • D13 = Clk
  • D12 = Data
مرحله ۱۴

حرف آخر و ارتقای پروژه

آیا می‌تونی این دستگاه رو پرتابل کنی؟ بله! با یه باتری کتابی 9 ولت به پین RAW آردوینو می‌تونی راه‌اندازیش کنی. استفاده از باتری لیتیومی یکم چالش داره چون ممکنه ولتاژ رفرنس 0.55 ولت رو بی‌ثبات کنه، مگر اینکه از یه رگولاتور دقیق استفاده کنی. همچنین می‌تونی با اضافه کردن یه ماژول بلوتوث مثل HC-05، اطلاعات رو به گوشی یا لپ‌تاپ بفرستی و اونجا موج‌ها رو ببینی.

البته اگه بخوای خیلی امکاناتش رو حرفه‌ای‌تر کنی، احتمالا خرید یه مینی‌اسیلوسکوپ بازاری منطقی‌تر باشه؛ اما لذت ساختن و یادگیری از یه مدار دست‌ساز با هیچ‌چیز قابل مقایسه نیست.

اینم از یه پروژه خفن و کاربردی دیگه تو آیسی‌مدار! حتما این دستگاه رو بساز، آپ‌امپ‌های بهتری روش تست کن و تجربه‌ات رو با ما به اشتراک بذار. موفق باشی!

فایل‌های پیوست

PDF ArdOsc3 (PCB).pdf
PDF ArdOsc3 (Schematic).pdf
INO ArdOsc1.ino

تو میتونی اولین سازنده باشی!

اگه پروژه رو ساختی به اشتراک بزار و اعتبار هدیه بگیر

این آموزش با استانداردهای اختصاصی آیسی‌مدار بازنویسی و بهینه‌سازی شده و تمامی حقوق انتشار آن متعلق به این مجموعه است و در صورت کپی یا بازنشر پیگرد قانونی خواهد داشت.

آموزش‌های مشابه

گفتگو‌های کاربران

هنوز نظری ثبت نشده؛ تو شروع کن!