تبلیغات
مطالب اینترنتی - چگونه از ADC (مبدل آنالوگ به دیجیتال) در AVR و میکرو Atmega32 استفاده کنیم

چگونه از ADC (مبدل آنالوگ به دیجیتال) در AVR و میکرو Atmega32 استفاده کنیم

یکشنبه 5 آذر 1396 04:05 ق.ظنویسنده : نویسنده

 


مبدل آنالوگ به دیجیتال اساسا در هر جایی که ما با سنسوری سر و کار داریم که خروجی آن به صورت آنالوگ معرفی شده است مورد نیاز است (برای مثال سنسور دمای LM35) و این مورد تعداد بسیار زیادی از سنسورها را در بر می گیرد. در هنگام استفاده از چنین سنسورهایی ما مجبور هستیم تا سیگنال آنالوگی که از سنسور خارج می شود را به کلمات دیجیتالی صفر و یک تبدیل کنیم تا میکروکنترلر ما بتواند آنها را پردازش کرده و بر اساس این اطلاعات تصمیمی گیری کند. به همین منظور ما نیاز به یک دستگاه مبدل آنالوگ به دیجیتال یا ADC داریم که مخفف واژه Analog to Digital است و خوبختانه بیشتر میکروکنترلر ها اکنون این ساختار را در درون خود دارند. پروژه های AVR ساختنی را می توانید اینجا ببینید.

در این مقاله، باید برای یادگیری استفاده از این مبدل با بخش ADC در میکروکنترلر Atmega32 آشنا شویم. به عنوان مثالی برای سیگنال آنالوگ ما باید از سیگنال خروجی سنسور دمای LM35 استفاده کنیم. در پایان این مقاله ما قادر خواهیم بود تا یک هشدار دهنده آتش ساده را بسازیم که در هنگام بالاتر رفتن دما از یک محدوده مشخص ( برای مثال ۶۰ درجه سلسیوس) می تواند یک بلندگو را به صدا در آورد.

ولتاژ مرجع ADC

ولتاژ مرجع بیشترین ولتاژی است که انتظار می رود در کانال ورودی ADC میکروکنترلر از سنسور دریافت شود. در میکروکنترلر Atmega32 شما می توانید از هر کدام از ۳ منبع برای ولتاژ مرجع استفاده کنید:

  • استفاده از یک ولتاژ داخلی از درون میکروکنترلر Atmega32 که این ولتاژ در میزان ۲٫۵۶ ولت تنظیم شده و قابل تغییر نیست.
  • استفاده از پین ورودی AVCC که می تواند به عنوان ولتاژ مرجع استفاده شود اما این پین باید به VCC ( تغذیه میکروکنترلر) متصل شود و در این مورد ولتاژ مرجع شما همان VCC خواهد بود.
  • در نهایت می توانید از طریق اتصال یک منبع ولتاژ با مقدار دلخواه به پین AREF (pin32) ولتاژ مرجع مورد نیاز خود را بوجود بیاورید.

استفاده از هر کدام از این منابع به عنوان ولتاژ مرجع در صورت تنظیم رجیستر ADMUX میسر خواهد بود که نحوه تنظیم آن را در این مقاله آموزش خواهیم داد.

سخت افزار مورد نیاز:

قبل از استفاده از ADC مربوط به میکروکنترلر Atmega32 در این مدار، برای رسیدن به نتیجه بهتر لازم است تا تعدادی اتصالات سخت افزاری صورت گیرد:

  • شما باید مطمئن شوید که پین های VCC و AVCC که به ترتیب پین های شماره ۱۰ و ۳۰ هستند، به درستی متصل شده باشند.اتصال AVCC به این مورد نیاز است زیرا واحد ADC برق مورد نیاز خود را از این پین دریافت می کند.
  • اگر دقت تبدیل در هر لحظه مهم باشد، بهتر است تا در بین دو پین AVCC و GND یک خازن و سلف قرار دهید. این دو اتصال باعث ایجاد ولتاژ پایدارتری می شود و به راحتی توسط نویز نوسان نمی یابد.
  • همچنین بهتر است یک خازن در بین دو پین AREF و GND قرار داده شود تا ولتاژ مرجع ADC پایدارتر شده و به سادگی با نویز نوسان پیدا نکند. ( این کار حتی در صورت استفاده از ولتاژ مرجع داخلی یا AVCC نیز بهتر است صورت گیرد.)
  • اگر شما می خواهید از ولتاژ مرجع داخلی استفاده کنید، باید آن را به پین AREF متصل کنید. در این مقاله از ولتاژ داخلی به عنوان ولتاژ مرجع استفاده شده، بنابرین لازم است تا این مرحله انجام شود.

کانال های ورودی ADC در میکروکنترلر ATMega32

برای استفاده از واحد ADC در میکروکنترلر Atmega32 می توان از ۸ کانال استفاده کرد. به این معنی که می توانید تا ۸ سیگنال آنالوگ را به واحد ADC این میکروکنترلر متصل کنید، اما در هر تبدیل، تنها یک کانال مورد پردازش قرار می گیرد. بنابرین در هر تبدیل شما باید ابتدا کانال ورودی مورد نظر خود را قبل از شروع تبدیل انتخاب کنید. علاوه بر این، این کار را می توان در رجیستر ADMUX انجام داد. این کانال های ورودی در میکروکنترلر Atmega32 به صورت پین های چند منظوره و با چند کاربرد در پورت A ( از پین ۳۳ تا ۴۰) قرار دارند.

LM35DZ

LM35DZ یک سنسور اندازه گیری دما از خانواده سنسورهای دمایی LM35 است که دارای ۳ پین اختصاصی به صورتی که در تصویر نشان داده شده می باشد که در آن پین Vs به تغذیه (VCC)، GND به پایه GND و Vout به کانال ورودی ADC در میکروکنترلر Atmega32 متصل می شود.

پین های نشان داده شده در شکل بالا که مربوط به دیتاشیت سنسور است، از نمای زیر سنسور نمایش داده شده، بنابرین در هنگام اتصال به جهت سنسور دقت کنید تا پایه های آن را اشتباه وصل نکنید.

ولتاژ خروجی LM35 دریافت شده به صورت خطی با میزان دما متناسب است و تقریبا هر یک درجه سلسیوس با ۱۰ میلی ولت نشان داده می شود، به این صورت اگر دما برابر با ۲۰ درجه سلسیوس باشد، ولتاژ خروجی برابر با ۲۰۰ میلی ولت (۲۰*۱۰mv = 200mv) می باشد.

هنگامی که سنسور LM35 به صورت نشان داده شده در تصویر بالا متصل شود، این سنسور می تواند دماهای بین ۲ تا ۱۵۰ درجه سلسیوس را اندازه بگیرد، بنابرین بیشترین میزان ولتاژ خروجی این سنسور ۱٫۵ ولت (۱۵۰*۱۰mv = 1500mv = 1.5v) می باشد. به این معنی که ما باید برای رسیدن به بهترین دقت از یک ولتاژ مرجع ۱٫۵ ولت یا بیشتر از آن استفاده کنیم. اگرچه برای سادگی می توانیم از ولتاژ داخلی ( ۲٫۵۶ ولت) استفاده کنیم که این همان کاری است که در این مقاله انجام شده است.

محاسبات دما

واحد ADC در میکروکنترلر atmega32 رزلوشن ۱۰ بیتی دارد، یعنی خروجی مربوط به واحد ADC دارای ۱۰ بیت ارقام باینری است. بنابرین این خروجی در بیشترین مقدار خود دارای رقم باینری ۱۱۱۱٫۱۱۱۱٫۱۱ است که در واحد دسیمال مقدار ۱۰۲۳ را دارد. به این ترتیب بیشترین رقم خروجی واحد ADC مقدار ۱۰۲۳ بوده و بیشترین ولتاژ خروجی آن ۲٫۵۶ ولت خواهد بود ( که همان ولتاژ مرجع است) پس می توان خروجی ADC متناظر را برای یک ورودی به میزان ۱۰ میلی ولت را با استفاده از معادله زیر محاسبه کرد :

طبق محاسبات، هر ۱۰ میلی ولت باعث تغییر در ADC به میزان ۴ واحد می شود و همچنین هر ۱۰ میلی ولت متناظر با تغییر به میزان یک درجه سلسیوس است پس می توان نتیجه گرفت هر یک درجه سلسیوس تغییر دما باعث ایجاد ۴ واحد تغییر در مقدار رقم ADC خواهد شد. به عنوان مثال در دمای ۲۰ درجه سلسیوس، خروجی واحد ADC به میزان ۸۰ (۲۰*۴ = ۸۰) بوده که خروجی باینری آن به صورت ۰۰۰۱٫۰۱۰۰٫۰۰ است. این مقادیر در رجیستر های ADCH و ADCL به صورتی که شرح داده خواهد شد قابل خواندن هستند.

بنابرین به عنوان یک نتیجه گیری می توانیم مقدار دما را با استفاده از میزان خروجی واحد ADC و بهره گیری از فرمول زیر محاسبه کنیم:

نیازهای نرم افزاری اتصال ADC به میکرو کنترلر AVR

در ابتدا لازم است تا نحوه پیکربندی واحد ADC در میکروکنترلر ATMEGA32 را یاد بگیریم. برای فعال کردن این واحد در میکروکنترلر لازم است تا مراحل زیر انجام شود:

  • درون رجیستر ADMUX (رجیستر انتخاب مالتی پلکسر در ADC) :
  • هر دو بیت REFS1 و REFS0 را یک قرار دهید. این کار باعث می شود ولتاژ داخلی ۲٫۵۶ ولت به عنوان ولتاژ مرجع تنظیم شود.
  • مقدار بیت ADLAR را صفر قرار دهید. این کار خروجی واحد ADC را تنظیم می کند. ( این قسمت بعدا در بخش ” خواندن خروجی ADC توضیح داده خواهد شد.)
  • با استفاده از تعیین ۵ بیت (MUX0 …. MUX4) کانال ورودی ADC را انتخاب کنید. در این مقاله ما تمامی این بیت ها را صفر قرار داده و اولین کانال ADC را انتخاب کرده ایم. این کانال اولین پین در پورت A میکروکنترلر است که پین شماره ۴۰ در میکرو کنترلر Atmega 32 می باشد. برای انتخاب هر کدام از کانال های دیگر می توانید از جدول زیر برای تنظیم بین های مربوطه استفاده کنید.
کانال ورودی ADC بیت MUX0 … MUX4
ADC0 ۰۰۰۰۰
ADC1 ۰۰۰۰۱
ADC2 ۰۰۰۱۰
ADC3 ۰۰۰۱۱
ADC4 ۰۰۱۰۰
ADC5 ۰۰۱۰۱
ADC6 ۰۰۱۱۰
ADC7 ۰۰۱۱۱

رجیستر MDMUX
MUX0 MUX1 MUX2 MUX3 MUX4 ADLAR REFS0 REFS1
۰ ۰ ۰ ۰ ۰ ۰ ۱ ۱

  • در رجیستر ADCSRA ( رجیستر وضعیت ADC) :
  • بیت ADEN را یک قرار دهید. این کار واحد ADC را در میکروکنترلر فعال می کند.
  • واحد ADC برای کار کردن نیاز به تنظیم کلاک دارد و آن را از واحد کلاک در میکروکنترلر دریافت می کند. با وجود اینکه این کلاک در میکروکنترلر بر اساس یک فاکتور تقسیم کننده کلاک در قبل از استفاده از واحد ADC تنظیم شده است اما این فاکتور تنظیم کننده را با استفاده از سه بیت در رجیستر ADCSRA (ADPS0,ADPS1,|ADPS2) می توان محدود کرد. در این مقاله، ما هر سه بیت را با مقدار یک تنظیم کرده ایم تا فاکتور تقسیم کننده کلاک را در مقدار ۱۲۸ قرار دهیم. اگر شما می خواهید که از فاکتور تقسیم کننده دیگری استفاده کنید می توانید این کار را با استفاده از جدول زیر و تنظیم بیت ها انجام دهید.
Division Factor ADPS0 ADPS1 ADPS2
۲ ۰ ۰ ۰
۲ ۱ ۰ ۰
۴ ۰ ۱ ۰
۸ ۱ ۱ ۰
۱۶ ۰ ۰ ۱
۳۲ ۱ ۰ ۱
۶۴ ۰ ۱ ۱
۱۲۸ ۱ ۱ ۱

رجیستر ADCSRA
ADPS0 ADPS1 ADPS2 ADIE ADIF ADATE ADSC ADEN
۱ ۱ ۱ ۰ ۰ ۰ ۰ ۱

شروع تبدیل و خواندن خروجی ADC

برای آغاز تبدیل یک سیگنال آنالوگ به دیجیتال، ۶ امین بیت از رجیستر ADCSRA (ADSC) را با عدد یک تنظیم می کنیم. واحد ADC به سرعت شروع به خواندن سیگنال آنالوگ از کانال ورودی می کند ( با تنظیم رجیستر ADMUX که در بالا توضیح داده شد) و آن را به عبارت دیجیتال ۱۰ بیتی تبدیل می کند. پس از تمام شدن عملیات تبدیل، بیت ADSC از یک به صفر تغییر مقدار پیدا کرده و واحد ADC مقدار خروجی حاصل از تبدیل را به صورت عبارت ۱۰ بیتی در دو رجیستر به نامهای ADCH و ADCL قرار می دهد. بیت های تنظیم شده در شکل زیر نمایش داده شده است :

به تفاوت میان حالت ADLAR = 0 و ADLAR=1 توجه کنید. در این مقاله ما مقدار ADLAR را برابر با ۰ قرار داده ایم.

در هنگام خواندن خروجی ADC، باید ابتدا ADCL و سپس ADCH خوانده شود. زیرا در هنگام خواندن ADCL، واحد ADC اطلاع می دهد که عملیات خواند در حال انجام است، بنابرین تا زمان خوانده نشدن ADCH هیچ تبدیل جدید و تغییری در محتوی رجیستر ها صورت نمی گیرد. در برنامه ای که ما نوشته ایم، ما سیگنال آنالوگ دریافتی از سنسور LM35 را با استفاده از اولین کانال ADC میکروکنترلر به سیگنال دیجیتال تبدیل می کنیم، در ادامه آن ما یک بلندگو را که به پین ۵ از پورت D میکروکنترلر متصل شده است را در هنگامی که دما از محدوده ۶۰ درجه سلسیوس فراتر رود به کار می اندازیم.

در زیر شماتیک مدار، کد برنامه و تصویر مدار و ویدیو مربوط به این پروژه نشان داده شده است.

شماتیک مدار تمرینی استفاده از ADC برای خواندن دما از سنسور دما

مدار نمونه استفاده از ADC با میکرو کنترلر AVR
مدار نمونه استفاده از ADC با میکرو کنترلر AVR

کد برنامه نویسی

تصویر نهایی

ما این مدار را بر روی بورد خودمان تست کرده ایم که عکس ان را در بالا می بینید. اگر در این موضوع مشکلی داشتید در کامنت ها اعلام کنید. تجربیات خود را با ساختنی در میان بگذارید.

منبع

خلاصه مطلب

آموزش استفاده از مبدل آنالوگ به دیجیتال یا ADC میکرو کنترلر های AVR

عنوان مطلب

آموزش استفاده از مبدل آنالوگ به دیجیتال یا ADC میکرو کنترلر های AVR

توضیح کوتاه

استفاده از قابلیت ADC در میکرو کنترلر های AVR برای خواندن اطلاعات حسگر های دارای خروجی های آنالوگ

نویسنده


سید علی طلاکش

ساختنی

بیشتر بخوانید:



لینک منبع

مطلب چگونه از ADC (مبدل آنالوگ به دیجیتال) در AVR و میکرو Atmega32 استفاده کنیم در سایت مفیدستان.


لینک منبع و پست :چگونه از ADC (مبدل آنالوگ به دیجیتال) در AVR و میکرو Atmega32 استفاده کنیم
http://mofidestan.ir/%da%86%da%af%d9%88%d9%86%d9%87-%d8%a7%d8%b2-adc-%d9%85%d8%a8%d8%af%d9%84-%d8%a2%d9%86%d8%a7%d9%84%d9%88%da%af-%d8%a8%d9%87-%d8%af%db%8c%d8%ac%db%8c%d8%aa%d8%a7%d9%84-%d8%af%d8%b1-avr-%d9%88-%d9%85/
آخرین ویرایش: - -

 
سه شنبه 23 مرداد 1397 05:02 ب.ظ
Hi there, I enjoy reading through your post. I like to write a little
comment to support you.
چهارشنبه 3 مرداد 1397 07:02 ق.ظ
Every weekend i used to pay a visit this web page, for the
reason that i want enjoyment, as this this web page conations really good funny material too.
یکشنبه 31 تیر 1397 09:53 ب.ظ
Attractive section of content. I just stumbled upon your web
site and in accession capital to assert that I get actually enjoyed account
your blog posts. Any way I'll be subscribing to your augment and even I
achievement you access consistently rapidly.
دوشنبه 6 آذر 1396 07:04 ق.ظ
تخفیف ویژه 10 هزار تومنی ریحون!
هم اکنون برای اصفهان و تهران!
غذا رو سفارش بدید و 10 هزار تومن تخفیف بگیرید!
برای هر کسی که از لینک شما کد تخفیف رو بگیره هم 10 هزار تومن به حساب شما افزوده میشه!
برای گرفتن تخفیف 10 هزار تومنی مراحل زیر رو انجام بدید:
اول لینک رو باز کنید و کد تخفیف رو کپی یا یادداشت کنید
بعدش برید به صفحه اصلی سایت ریحون reyhoon.com و نرم افزار رو دریافت کنید (با گوشی برید و باید برنامه بازار رو داشته باشید)
بعد از نصب نرم افزار ثبت نام کنید (20 ثانیه طول میکشه نهایت!)
موقع سفارش غذا کد تخفیف رو بزنید تا 10 هزار تومن از هزینه غذا کم بشه.
مثلا 20 هزار تومن غذا سفارش بدید فقط 10هزار تومن پرداخت میکنید.
راستی در ماه مبارک رمضان برای مسافران و معذورین شرعی قبل و بعد از افطار باز است.
سوالی داشتید ایمیل بزنید
موفق باشی!

یکشنبه 5 آذر 1396 11:45 ق.ظ
سلامممممم نفسممممممممممم
خوبی عزیزممممممممم
وبت خیلی خوب بووووووووود خیلی
میخواستم بیای به وب منم سایت سر بزنی و با هم تبادل لینک داشته باشیم
می بینمت
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر