۰۵۱۳۸۹۴۶۱۱۰
مشهد، چهارراه صیاد شیرازی، بین پیروزی ۶۳ و ۶۵ پلاک ۱۸۷
برق

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

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

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

یک سنسور آنالوگ ۵ ولتی ممکن است یک خروجی ۰/۰۱ ولت یا ۴/۹۹ ولت، یا هر عدد دیگری که در بین این دو عدد وجود دارد، داشته باشد. خوشبختانه تقریبا تمام میکروکنترلرها یک دستگاهی درونشان دارند که به آن‌ها اجازه می‌دهد این مقدارها را به مقدارهای مناسب تبدیل کنند.

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

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

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

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

مبدل‌های آنالوگ به دیجیتال در میکروکنترلرهای متفاوت، بسیار متنوع هستند. مبدلی که برروی آردوینو قرار دارد، یک مبدل ۱۰ بیتی است، یعنی که می‌تواند ۱۰۲۴ (۲ به توان ۱۰) نوع سیگنال آنالوگ را تشخیص دهد. برخی از میکروکنترلرها مبدل‌های ۸ بیتی (۲ به توان ۸ برابر با ۲۵۶ نوع سیگنال)، و برخی نیز مبدل‌های ۱۶ بیتی (۲ به توان ۱۶ برابر با ۶۵۵۳۶ نوع سیگنال) دارند.

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

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

مبدل آنالوگ به دیجیتال یک مقدار نسبی برمی‌گرداند. یعنی که مبدل، ۵ ولت را به عنوان ۱۰۲۳ در نظر می‌گیرد، و هرچیزی که از ۵ ولت کمتر باشد، نسبتی بین ۵ ولت و ۱۰۲۳ است.

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

اگر سیستمتان ۳/۳ ولت است، می‌توانید خیلی ساده عدد ۵ را با ۳/۳ در معادله جابه‌جا کنید. اگر سیستمتان ۳/۳ ولت است و خروجی مبدل عدد ۵۱۲ است، به نظرتان ولتاژ ورودی چه عددی در است؟ پاسخ چیزی حدود ۱.۶۵ ولت است.

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

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

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

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

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

برای این مثال یک مدار پتانسیومتر ساده طراحی می‌کنیم:

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

;(pinMode(A3, INPUT

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

;(int x = analogRead(A3

این کد مقدار آنالوگی که از پین A3 وارد می‌شود را خوانده و خروجی را در x می‌ریزد. مقداری که در x ذخیره شده‌است چیزی بین صفر تا ۱۰۲۳ خواهد بود. برد آردوینو یک مبدل ۱۰ بیتی (۲ به توان ۱۰ برابر با ۱۰۲۴) دارد. مقدار بازگشتی را در یک متغیر از نوع «Integer» ذخیره می‌کنیم، چراکه مقدار خروجی ما دارای ۱۰ بیت است، در حالی که متغیری از نوع «byte» تنها می‌تواند ۸ بیت را در خودش نگه دارد. حالا مقدار را چاپ می‌کنیم تا بتوانیم تغییرات را مشاهده کنیم:

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

همزمان که ما مقدار آنالوگ را تغییر می‌دهیم، مقدار x نیز باید تغییر کند. برای مثال، اگر x مقدار ۳۳۴ را در خودش داشته باشد و برد مصرفی ما نیز آردوینو از نوع ۵ ولت باشد، ولتاژ اصلی چقدر است؟ این مقدار چیزی حدود ۱/۶۳ ولت خواهد بود.

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

;(int x = analogRead(۸

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

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

نوشته شده توسط

آقای مهندس جلال رضایی چاهوکی مدیریت سایت آموزشگاه ادیسون