طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
یک ماشین حساب لمسی ساده با قابلیت نوشتن تعداد 12 نوع عملیات متفاوت و پشت سر هم با محاسبه فوری جواب، قابلیت پاک کردن کارکتری جمله نوشته شده، نوشتن عدد اعشاری و منفییک کنترل کننده موتور با جریان خروجی 2 آمپر شامل کنترل جهت چرخش و سرعت می باشد. این مدار دارای نمایشگر LCD متنی بوده که سرعت و جهت چرخش موتور را نمایش می دهد.این پروژه یک ماشین حساب ساده با چهار عمل اصلی بروی نمایشگر گرافیگی می باشد.ماشین حساب مهندسی ساده با قابلیت دریافت اعداد اعشاری و محاسبه توابع مثلثاتی به همراه سایر توابع توسط یک صفحه کلید 4*4این پروژه یک فرستنده گیرنده رادیویی با برد 100 تا 200 می باشد، که قابلیت کنترل 20 کانال مجزا به همراه کنترل سرعت موتور DC را دارد. از ماژول HMT و HMR و 20 عدد دیپ سوئیچ و درایور L298N برای موتور استفاده شده است.
پروژه ماشین حساب لمسی ساده با avr

MCP-15

پروژه ماشین حساب لمسی ساده با avr
کنترل سرعت و جهت موتور DC

MCP-9

کنترل سرعت و جهت موتور DC
پروژه ماشین حساب ساده با السیدی گرافیکی و avr

MCP-34

پروژه ماشین حساب ساده با السیدی گرافیکی و avr
ماشین حساب مهندسی ساده

MCP-28

ماشین حساب مهندسی ساده
پروژه کنترل 20 کاناله-به همراه کنترل سرعت موتور با avr

MCP-10

پروژه کنترل 20 کاناله-به همراه کنترل سرعت موتور با avr

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

به نام خدا

در این مطلب می خواهیم کار با مبدل آنالوگ به دیجیتال میکروکنترلر AVR را به زبان C و با کمک کامپایلر Code Vision توضیح دهیم. هدف ما از این مطلب این است که به چه صورتی از کانال ها مقدار آنالوگ را بخوانیم و بعد از تبدیل به دیجیتال، با این مقدار دیجیتال کار انجام دهیم.

از پرداختن مسائل ریز مربوط به  ADC صرف نظر می کنیم تا باعث گمراهی افراد تازه کار نشود. در اینجا ما به بحث در مورد رجیستر ها و نحوی انتخاب ولتاژ مرجع و شرایط و چگونگی انتخاب فرکانس نمونه برداری و 8 یا 10 بیتی ADC و یک مثال کامل خواهیم پرداخت.

از بخش سفارش طراحی هم اکنون درخواست خود را ثبت کنید
حل و تشریح کلیه تمرینات درس میکروکنترلر AVR
طراحی و ساخت مدارات دلخواه شما با میکروکنترلر AVR


رجیستر کنترلی ADMUX

0 1 2 3 4 5 6 7
MUX0 MUX1 MUX2 MUX3 MUX4 ADLAR REFS0 REFS1

REFS0,1 از این دو بیت برای انتخاب ولتاژ مرجع ADC استفاده می کنیم که دارای چهار حالت می باشد:

  1. REFS0=0 و REFS1=0 در این حالت ولتاژی که روی پایه AREF است به عنوان ولتاژ مرجع انتخاب می شود.
  2. REFS0=1 و REFS1=0 در این حالت ولتاژ پایه AVCC به عنوان ولتاژ مرجع انتخاب می شود.
  3. REFS0=0 و REFS1=1 بدون استفاده
  4. REFS0=1 و REFS1=1 در این حالت ولتاژ مرجع داخلی 2.56 ولت انتخاب می شود.

نکته: دقیق بودن ولتاژ مرجع در تبدیل کردن آنالوگ به دیجیتال نقش بسیار مهمی دارد. دقیق ترین ولتاژ مرجع همان 2.56 داخلی می باشد البته می توان با استفاده از تثبیت کننده های ولتاژ آن ولتاژ مرجع مورد نظر را ساخت و به پایه AREF داد.

 ADLAR از این بیت برای 8 یا 16 بیتی بودن مقدار خروجی ADC استفاده می شود. ADCH,ADCL

MUX0-4 از بیت ها برای انتخاب کانال ورودی و نیز انتخاب بهره تفاضلی استفاده شده است.

 رجیستر ADCSRA

0 1 2 3 4 5 6 7
ADPS0 ADPS1 ADPS2 ADIE ADIF ADATE ADSC ADEN

ADEN با یک کردن این بیت ADC فعال می شود.

ADSC در مد عملکرد Single با نوشتن یک در این بیت، تبدیل شروع شده و پس از پایان تبدیل به صورت خودکار صفر می شود. در مد Free، یک کردن این بیت برای شروع تبدیل الزامی است.

ADATE با یک کردن این بیت ADC می تواند به صورت اتوماتیک با لبه بالا رونده منبع تحریک کننده شروع به تبدیل کند. منیع تحریک توسط بیت های ADTS از رجیستر SFIOR انتخاب می شود.

ADIF بعد از اتمام تبدیل یا تغییر در رجستر داده ADC یک می شود. (از یک شدن این بیت ما متوجه می شویم که عمل تبدیل تمام شده و حالا می توانیم مقدار دیجیتال تبدیل شده را بخوانیم)

ADIE با یک کردن این بیت هرگاه عمل تبدیل به اتمام رسید یه وقفه ای صادر می شود که توسط آن زیر روال وقفه می توان مقدار داده ADC را خواند.

ADPS0-3 از بیت ها برای تعیین پالس ساعت ADC مطابق جدول زیر استفاده می کنیم:

تقسیم بر ADPS0 ADPS1 ADPS2
 2  0  0  0
 2  1  0  0
 4  0  1  0
 8  1  1  0
 16  0  0  1
 32  1  0  1
 64  0  1  1
 128  1  1  1

رجیستر داده (ADCH,ADCL) ADC

در این دو رجیستر اطلاعات خروجی ADC قرار دارند که در ADCL مقدرا سبک و در ADCH مقدار سنگین قرار دارد همچنین با استفاده از ADCW می توانیم محتوای هر دو متغییر را به صورت 16 بیتی بخوانیم.

رجیستر SFIOR

0 1 2 3 4 5 6 7
PSR1 PSR2 PUD ACME - ADTS0 ADTS1 ADTS2

از طریق بیت های ADTS0-2 می توان منبع تحریک برای شروع تبدیل را مطابق جدول زیر انتخاب کرد:

منبع تحریک ADC ADTS0 ADTS1 ADTS2
مد عملکرد آزاد  0  0  0
تحریک از طریق مقایسه کننده آنالوگ  1  0  0
تحریک از طریق وقفه خارجی صفر  0  1  0
تحریک از طریق تایمر (شمارنده) صفر (در صورتی که نتیجه مقایسه برابر شود)  1  1  0
 تحریک از طریق تایمر (شمارنده) صفر (در صورت سریز شدن)  0  0  1
تحریک از طریق تایمر (شمارنده) یک (در صورتی که نتیجه مقایسه B برابر شود)  1  0  1
 تحریک از طریق تایمر (شمارنده) یک (در صورت سریز شدن)  0  1  1
 تحریک از طریق حالت تسخیر تایمر (شمارنده) یک  1  1  1

 نکته: برای داشتن حداکثر تفکیک پذیری (10 بیتی) باید فرکانس پالس ساعت ADC بین 50KHZ تا 200KHZ باشد. که اگر این فرکانس از این محدود خارج شود دقت ADC پایین خواهد آمد.

 پس باید توجه داشت که با توجه به فرکانس نوسان ساز میکرو ضریب تقسیمی از جدول ADPS0-2 انتخاب کنیم که فرکانس واحد ADC در محدوده گفته شده قرار گیرد.

در این مثال ما می خواهیم با استفاده از دو عدد سنسور LM35 دمای دو نقطه را اندازه گیری کنیم و روی LCD نمایش دهیم. در فایلی که به این مطلب پیوست شده برنامه و سایر فایل های شبیه ساز موجود می باشد

1 ADC Enabled
Volt Ref: Int
Clock: 125KHz
Auto trigger: None

 با استفاده از Code Wizard به صورت بالا ADC را تنظیم می کنیم.

#define ADC_VREF_TYPE 0xC0 //H1 

SFIOR=0x00; //H2 
ADMUX=ADC_VREF_TYPE & 0xff; //H3 
ADCSRA=0x86; //H4

H1: با نسبت دادن ADC_VREF_TYPE 0xC0 ولتاژ مرجع داخلی انتخاب می شود که بعدا در زیر برنامه read_adc با AND و OR کردن آن با کانال انتخاب شده مقدار رجیستر ADMU ایجاد می گردد.

 H2: مد عملکر آزاد انتخاب شده

H3: با AND کردن آن با FF به صورت پیش فرض کانال صفر انتخاب شده و همچنین ADLAR هم صفر می باشد بنابراین خروجی به صورت ADCW شانزده بیتی خواهد بود.

H4: در اینجا ADC فعال شده و همجنین ضریب تقسیم 64 انتخاب می شود بنابراین فرکانس پالس ساعت ADC برابر 125KHZ می شود که در محدود مجاز می باشد.

 در زیرروال read_adc دستوراتی نوشته شده که بجزء یک خط آن بقیه را خود Code Wizard ایجاد می کند.

float t;//H1
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);//H2
delay_us(10);//H3
ADCSRA|=0x40;//H4
while ((ADCSRA & 0x10)==0);//H5
ADCSRA|=0x10;//H6 
t=((ADCW*2.56)/1023)*100;//H7
return t;//H8

H1: ایجاد یک متغییر از نوع اعشاری و بزرگ

H2: اگر C0 را با FF ما ADN کنیم نتیجه همان C0 خواهد شده حالا فرض کنید در هنگام فراخوانی این تابع ما 1 را به عنوان ورودی تابع داده ایم اگر C0 را با 1 OR کنیم آنگاه ADMUX= C1 خواهد شده و درنتیجه کانال 1 به همراه ولتاژ مرجع داخلی انتخاب می شود.

H3: مقدار 10 میلی ثانیه تاخیر برای پایدار شده ولتاژ ورودی ADC

H4: معادل باینری ADCSRA=0x86 برابر با 10000110 می باشد و همچنین معادل باینری 0X40 برابر با 01000000 می باشد. با OR کردن 86OR40 مقدار 11000110 را خواهیم داشت می بینیم که بیت شماره 6 به 1 تغییر یافت و این بیت همان ADSC می باشد که توضیح دادیم.

H5: با استفاده از یک حلقه بی نهایت شرطی بیت 4 یعنی ADIF یا همان پرچم اتمام تبدیل را تحت نظر می گیرم تا موقعی که تبدیل تمام و این بیت 1 شود و شرط حلقه باطل می شود که منجر به خروج از این حلقه بی نهایت می شود.

H6: خوب حالا باید بیت ADIF که یک شده را دوباره صفر کنیم که این کار را با OR‌ کردن بیتی با عدد 10 انجام می دهیم.

H7: خوب الان عمل تبدیل تمام شده و مقدار دیجیتال آن در ADCW قرار دارد چون ولتاژ مرجع را 2.56 انتخاب کردیم اینجا مقدار ADCW را در 2.56 ضرب می کنیم و بعد حاصل را بر 1023 تقسیم کرده و در نهایت در 100 ضرب می کنم تا دما برحسب درجه سانتیگراد بدست اید. عدد 1023 از فرمول زیر حساب می شود که n=10  بوده یعنی تفکیک پذیری 10بیتی

2^n  - 1 ==> 2^10  -1 = 1023

H8: مقدار دما که در متغییر t قرار دارد برگشت داده می شود.

این مثال همراه با توضیحات آن تنها در وب سایت www.picpars.com به صورت متن باز ارئه شده و کپی برداری از آن تنها با ذکر منبع امکان پذیر می باشد.

با تشکر فراوان سید محسن قاسمیان

ورژن نرم افزار ها: CodeVisionAVR V2.04.4a  و Proteus 7.7 sp2 Professional

  منبع: www.picpars.com

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




فایل های ضمیمه ( ورود - عضويت )

فایل شماره 110 | حجم 45 کیلوبایت | دانلود 6244 بار

منبع www.picpars.com  نویسنده: سید محسن قاسمیان

منبع www.picpars.com  دانلود مثال کار با مبدل آنالوگ به دیجیتال ADC میکروکنترلر AVR به زبان سی C

منبع www.picpars.com  پسورد: www.picpars.com

به این مطلب امتیاز دهید

برچسب ها:
تاریخ ارسال چهارشنبه، 13 بهمن ماه، 1389    نویسندهنویسنده: مدیریت    نظرات 50 نظر    بازدید بازدید [ 66480 ]   پرینتنسخه چاپی
فایل پی دی اف فایل پی دی اف   ارسال به دوستان ارسال به دوستان