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


مدیر وبلاگ : نویسنده
نویسندگان
جستجو

آمار وبلاگ
کل بازدید :
بازدید امروز :
بازدید دیروز :
بازدید این ماه :
بازدید ماه قبل :
تعداد نویسندگان :
تعداد کل پست ها :
آخرین بازدید :
آخرین بروز رسانی :
مطالب اینترنتی


مبدل آنالوگ به دیجیتال اساسا در هر جایی که ما با سنسوری سر و کار داریم که خروجی آن به صورت آنالوگ معرفی شده است مورد نیاز است (برای مثال سنسور دمای 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/



نوع مطلب :
برچسب ها :
لینک های مرتبط :
سه شنبه 15 اسفند 1396 10:34 ب.ظ
سلام! آیا از توییتر استفاده می کنید؟ من می خواهم از شما پیروی کنم
این درست است. من قطعا از وبلاگ شما لذت بردم و منتظر پست های جدید هستم.
دوشنبه 14 اسفند 1396 09:22 ب.ظ
سلام، من فکر می کنم که متوجه شدم شما از وبلاگ من بازدید کردید، بنابراین برای رسیدن به این میل، به اینجا آمده ام. من سعی می کنم چیزهایی را برای بهبود سایت خودم پیدا کنم.
ایده های تو!!
شنبه 5 اسفند 1396 04:25 ق.ظ
وای! من واقعا الگو / موضوع این وبلاگ را حفر می کنم. ساده است،
هنوز موثر است بارها خیلی سخت است
برای به دست آوردن این "تعادل کامل" بین قابلیت استفاده عالی و ظاهر.
باید بگویم که شما با این کار بسیار خوبی انجام داده اید. همچنین وبلاگ فوق العاده است
سریع برای من در اپرا وبلاگ فوق العاده!
جمعه 4 اسفند 1396 09:44 ق.ظ
ما یک گروه از داوطلبان هستیم و یک طرح جدید در جامعهمان ایجاد میکنیم.
سایت شما به ما اطلاعات ارزشمندی داده است تا کار کند. شما یک کار قابل توجه انجام داده اید
و کل جامعه ما برای شما سپاسگزار خواهد بود.
پنجشنبه 3 اسفند 1396 06:50 ب.ظ
من عاشق خواندن یک پست می کنم که می تواند مردم را به فکر کردن برساند. همچنین، بسیاری از تشکر از اجازه دادن
من به اظهار نظر
جمعه 27 بهمن 1396 06:08 ب.ظ
در صورتی که درک نداشته باشید، سؤالهای شما واقعا خوب است
چیزی به طور کامل، اما این پاراگراف ارائه حتی فیزیکی.
دوشنبه 23 بهمن 1396 08:51 ب.ظ
سلام، من فکر می کنم این یک وبلاگ عالی است. من آن را می کشم؛) من ممکن است بار دیگر مجددا از آنجا که من کتاب آن را مشخص کرده ام.
پول و آزادی بهترین راه برای تغییر است، ممکن است ثروتمند باشید و به دیگران کمک کنید.
دوشنبه 2 بهمن 1396 09:08 ب.ظ
سلام، من وبلاگ خود را با استفاده از گوگل پیدا کردم در حالی که جستجو برای یک موضوع مشابه، وب سایت شما آمد، آن را
به نظر خوب میاد. من آن را در بوک مارک های گوگل من نشان دادم.

سلام، فقط به وبلاگ خود از طریق Google هشدار داده شد
و متوجه شدم که این واقعا آموزنده است. من مراقب هستم
برای brussels من از کسانی که در آینده این کار را می کنند سپاسگزارم.
بسیاری از افراد دیگر احتمالا از نوشتن شما سود خواهند برد.
به سلامتی!
جمعه 17 آذر 1396 09:58 ب.ظ
It's going to be end of mine day, except before
end I am reading this great article to improve my knowledge.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر