میکروکنترلر

شناخت ، برنامه نویسی و بهره برداری از میکروکنترلرها

میکروکنترلر

شناخت ، برنامه نویسی و بهره برداری از میکروکنترلرها

نحوه تولید PWM در Mega AVR (بخش 1)

در این مطلب به نحوه راه اندازی میکرو های 8 بیتی Mega AVR برای تولید موج PWM میپردازیم. میکروکنترلری که در مورد آن بحث خواهیم کرد ATmega16 میباشد که استفاده از آن بسیار متداول است.

این میکروکنترلر دارای سه تایمر به نامهای TIMER0 ، TIMER1 و TIMER2 میباشد. که در این میان فقط TIMER1 ازنوع 16 بیتی بوده و دو تایمر دیگر 8 بیتی هستند. در مجموع این میکروکنترلر قادر به تولید 4 خروجی PWM میباشد. سیگنالهای PWM که از طریق تایمر 1 ایجا میشوند دو عدد بوده و میتواند تا 16 بیت وضوح ( رزولیشن ) داشته باشد. و دو خروجی باقیمانده که توسط تایمر 0 و 2 ایجاد میشوند میتواند تا 8 بیت وضوح داشته باشد.

تولید PWM با TIMER0 :

برای تولید خروجی PWM مورد نظر با این تایمر محدودیت های بیشتر نسبت به دو تایمر دیگر وجود دارد. به علت اینکه حد اکثر مقداری که تایمر بتواند تا آن بشمار قابل انتخاب نیست. کلاک تایمر0 از دو منبع سیستم کلاک داخلی( CPU ) و کلاک خارجی تامین میگردد که در بحث تولید PWM کلاک خارجی کاربردی ندارد. همچنین این تایمر دارای یک پیش تقسیم کننده 10 بیتی برای کلاک داخلی است که تحریک تایمر از خروجی این پیش تقسیم کننده (Prescaler ) تغذیه میگردد. نکته مهمی که در این میان وجود دارد اشتراک این پیش تقسیم کننده با تایمر 16 بیتی 1 میباشد. برای درک بیشتر به شکل زیر توجه نمائید:

همان طور که مشاهده میکنید منبع کلاک دو تایمر 0 و 1 به وسیله دو مالتی پلکسر قابل انتخاب است. برای تایمر 0 میزان تقسیم کلاک با انتخاب بیت های CS00 الی CS02 که در رجیستر کنترلی TCCR0  قرار دارند مشخص میگردد.

چنانچه این سه بیت برابر 0 قرار داده شون تایمر متوقف میشود. نحوه انتخاب و تاثیر این بیت ها بر روی کلاک اعمالی به تحریک تایمر در جدول زیر قابل مشاهده است:

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

این میکروکنترلر میتواند سه نوع موج PWM  که شرکت Atmel  آنها را Fast PWM Mode ، Phase Correct PWM Mode و Phase and Frequency Correct PWM Mode نامگذاری کرده تولید کند.

البته دو تایمر 8 بیتی 0و2 فقط قادر به تولید دو نوع Fast PWM و Phase Correct PWM میباشند. Fast PWM  در واقع همان PWM ساده میباشد که خروجی در ابتدای هر سیکل 1 شده و به اندازه Duty Cycle مورد نظر در سطح 1 باقی مانده و سپس 0 میگردد. همچنین در حالت  Phase Correct PWM که بیشتر مراجع معتبر در این زمینه آن را Center aligned mode مینامند ابتدا تایمر از 0 شروع به شمارش رو به بالا نموده و پس از رسیدن به حداکثر مقدار دوباره رو به پائین میشمارد.

مد های کاری تایمر0 توسط بیتهای WGM00 و WGM01 که در رجیستر کنترلی TCCR0 قرار دارند انتخاب میکردد:

طبق جدول برای اینکه تایمر در مد Fast PWM کار کند باید هردو بیت WGM00 و WGM01 برابر 1 قرار داده شوند. همانطور که قبلاً گفته شد تولید موج PWM در این تایمر با محدودیت هایی روبرو است. همانطور که ملاحضه میکنید در مد Fast PWM مقدار TOP که تایمر تا آن میشمارد و سپس در سیکل بعدی ریست میگردد قابل انتخاب نبوده و برابر مقدار ثابت 0xFF ( معادل 255 ) میباشد.

بنابراین فرکانسهای خروجی فقط از طریق انتخاب مقدار پیش تقسیم کننده و همچنین فرکانس کاری سیستم قابل انتخاب خواهد بود. فرمول مربوط به فرکانس Fast PWM در تایمر0 به صورت زیر میباشد:

در این رابطه N مقدار پیش تقسیم کننده است. نحوه تشکیل سیگنال PWM بدین گونه است که بعد از انتخاب مقدار کلاک توسط واحد پیش تقسیم کننده تایمر شروع به شمارش رو به بالا مینماید. در این میان یک مقایسه کننده دائماً مقدار رجیستر محتوای تایمر0 یعنی TCNT0 را با رجیستر OCR0 که مقدار Duty Cycle را در آن قرار داده ایم مقایسه میکند. به محض تشخیص برابری مقدار تایمر با این رجیستر پین OC0 مطابق مقادیر انتخاب شده برای دو بیت COM00 و COM01 در جدول زیر تغییر وضعیت خواهد داد:

برای مشاهده سیگنال PWM در خروجی باید بیت متناظر آن در رجیستر کنترل جهت داده PORT مربوطه ست گردد تا پین به عنوان خروجی پیکره بندی کردد.این پین در ATmega16 که OC0 نام دارد توسط بیت DDRB.3 پیکره بندی میشود.

مثال:

با فرض فرکانس اسیلاتور 8 مگاهرتز ، مقدار پیش تقسیم کننده کلاک تایمر 0 را برابر 8 قرار داده و فرکانس خروجی را نیز بدست آورید، Duty Cycle را برابر 50 درصد قرار دهید.(کدها به زبان C کامپایلر Codevision )

DDRB.3=1;

TCNT0=0×00;

OCR0=0x7F;

TCCR0=0x6A;

while(1);

فرکانس خروجی: 3906.25 = ( 8Mhz/( 8*256

 

منبع: microcontroller.ir

















نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد