دنیای ما یک دنیای آنالوگ است. میکروکنترلرها تنها می‌توانند سیگنال‌های دودویی (Binary) را تشخیص دهند. مثلا یک دکمه فشار داده شده‌است یا خیر؟ به این سیگنال‌ها، سیگنال دیجیتال می‌گویند. وقتی یک میکروکنترلر با 5 ولت جریان کار می‌کند، یعنی که فقط صفر ولت را به عنوان عدد صفر دودویی، و پنج ولت را به عنوان عدد یک دودویی می‌شناسد. ولی دنیا به این سادگی نیست و از ترکیب‌های بسیاری استفاده می‌کندY مثلا اگر سیگنال 2/72 ولت بود چه می‌شود؟ این سیگنال صفر است یا یک؟ ما معمولا باید سیگنال‌هایی را حساب کنیم که محدوده‌ی گسترده‌ای دارند. به این سیگنال‌ها، سیگنال آنالوگ می‌گویند.

فیلم آموزشی مبدل آنالوگ به دیجیتال Arduino

دانلود ویدیو

مبدل آنالوگ به دیجیتال

یک سنسور آنالوگ 5 ولتی ممکن است یک خروجی 0/01 ولت یا 4/99 ولت، یا هر عدد دیگری که در بین این دو عدد وجود دارد، داشته باشد. خوشبختانه تقریبا تمام میکروکنترلرها یک دستگاهی درونشان دارند که به آن‌ها اجازه می‌دهد این مقدارها را به مقدارهای مناسب تبدیل کنند.

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

مبدل آنالوگ به دیجیتال چیست؟

یک مبدل آنالوگ به دیجیتال (ADC) یک دستگاه خیلی کاربردی است که می‌تواند ولتاژ آنالوگ سر یک پین را به اعداد دیجیتال تبدیل کند. با تبدیل کردن سیگنال آنالوگ به دیجیتال، می‌توانیم بین دنیای آنالوگ خودمان و دستگاه‌های دیجیتال یک ارتباط برقرار کنیم.

برد آردوینو

تمام پین‌های میکروکنترلرها امکان تبدیل سیگنال آنالوگ به دیجیتال را ندارند. در بردهای آردوینو، پین‌هایی که امکان خواندن سیگنال‌های آنالوگ را دارند، با یک حرف A در کنارشان (A0 تا A5) مشخص شده‌اند.

مبدل‌های آنالوگ به دیجیتال در میکروکنترلرهای متفاوت، بسیار متنوع هستند. مبدلی که برروی آردوینو قرار دارد، یک مبدل 10 بیتی است، یعنی که می‌تواند 1024 (2 به توان 10) نوع سیگنال آنالوگ را تشخیص دهد. برخی از میکروکنترلرها مبدل‌های 8 بیتی (2 به توان 8 برابر با 256 نوع سیگنال)، و برخی نیز مبدل‌های 16 بیتی (2 به توان 16 برابر با 65536 نوع سیگنال) دارند.

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

ارتباط مقدار برگشته توسط ADC با ولتاژ

مبدل آنالوگ به دیجیتال یک مقدار نسبی برمی‌گرداند. یعنی که مبدل، 5 ولت را به عنوان 1023 در نظر می‌گیرد، و هرچیزی که از 5 ولت کمتر باشد، نسبتی بین 5 ولت و 1023 است.

ADC calculation

مبدل‌های آنالوگ به دیجیتال، بر اساس ولتاژ سیستم کار می‌کنند. از آنجایی که ما عمدتا در سیستم‌های 5 ولت، از مبدل‌های 10 بیتی آردوینو استفاده می‌کنیم، می‌توانیم معادله آن را همانند زیر بنویسیم:

ADC calculation

اگر سیستمتان 3/3 ولت است، می‌توانید خیلی ساده عدد 5 را با 3/3 در معادله جابه‌جا کنید. اگر سیستمتان 3/3 ولت است و خروجی مبدل عدد 512 است، به نظرتان ولتاژ ورودی چه عددی در است؟ پاسخ چیزی حدود 1.65 ولت است.

اگر ولتاژ آنالوگ 2/12 ولت باشد، مبدل چه مقداری را برمی‌گرداند؟

ADC calculation

با کمی جابه‌جایی در این مساله به پاسخ زیر می‌رسیم:

ADC calculation

ADC calculation

همانطور که مشاهده می‌کنید، خروجی عدد 434 است.

مثالی برای مبدل آنالوگ به دیجیتال آردوینو

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

برای شروع، باید یک پین را به عنوان ورودی تعریف کنیم. برای اینکه با مدار ما همخوانی داشته باشد، از پین A3 استفاده می‌کنیم:

;(pinMode(A3, INPUT

و سپس تبدیل آنالوگ به دیجیتال را توسط دستور ()analogRead انجام می‌دهیم:

;(int x = analogRead(A3

این کد مقدار آنالوگی که از پین A3 وارد می‌شود را خوانده و خروجی را در x می‌ریزد. مقداری که در x ذخیره شده‌است چیزی بین صفر تا 1023 خواهد بود. برد آردوینو یک مبدل 10 بیتی (2 به توان 10 برابر با 1024) دارد. مقدار بازگشتی را در یک متغیر از نوع «Integer» ذخیره می‌کنیم، چراکه مقدار خروجی ما دارای 10 بیت است، در حالی که متغیری از نوع «byte» تنها می‌تواند 8 بیت را در خودش نگه دارد. حالا مقدار را چاپ می‌کنیم تا بتوانیم تغییرات را مشاهده کنیم:

;(“ :Serial.print(“Analog value
;(Serial.println(x)

همزمان که ما مقدار آنالوگ را تغییر می‌دهیم، مقدار x نیز باید تغییر کند. برای مثال، اگر x مقدار 334 را در خودش داشته باشد و برد مصرفی ما نیز آردوینو از نوع 5 ولت باشد، ولتاژ اصلی چقدر است؟ این مقدار چیزی حدود 1/63 ولت خواهد بود.

اگر یک سنسور آنالوگ را به یک پین دیجیتال وصل کنیم چه اتفاقی می‌افتد؟ هیچ اتفاقی نمی‌افتد. فقط دیگر نمی‌توانید تابع analogRead را با موفقیت استفاده کنید.

;(int x = analogRead(8

این کد را برروی پین دیجیتال شماره 8 امتحان کنید، خواهید دید که کد کار نمی‌کند. توجه داشته باشید که این کد کامپایل خواهد شد، ولی مقدار x یک مقدار نامربوط خواهد بود.

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

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

**

منبع

بر اساس رای ۲۱ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

4 نظر در “تبدیل سیگنال آنالوگ به دیجیتال | مفاهیم و روش‌ها (+ دانلود فیلم آموزش رایگان)

  • سلام
    خسته نباشید.
    در اغلب آردیونوها به جز due بازه قابل اندازه گیری ولتاژ توسط پین‌های ورودی آنالوگ 0 تا 5 ولت است و دقت آن هم 10 بیتی یعنی 0 برای 0 ولت و 1023 هم برای 5 ولت.
    حال شما با پین Vref می‌توانید ولتاژ مرجع 5 ولت را تغییر دهید. اگر این پین را مثلا به 3 ولت وصل کنید. در این صورت 0 باینری معادل 0 ولت و 1023 نیز معادل 3 ولت خواهد بود.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *