مدولاسیون پهنای پالس (PWM) با AVR
مدولاسیون پهنای پالس (PWM) با AVR
مدولاسیون پهنای پالس (PWM=Pulse Width Modulation) نسبتاً یک روش کلید زنی برای ارائه مقدار توان الکتریکی بین سطوح کاملاً روشن و کاملاً خاموش است. معمولاً، پالس دیجیتال دارای دوره زمانی روشن و خاموش یکسان است، اما در برخی از شرایط نیاز به پالس دیجیتال برای زمان روش/خاموش بیشتر/کمتر داریم. در روش PWM، ما پالسهای دیجیتال را با مقدار نابرابر از حالات روشن و خاموش برای رسیدن به مقادیر آنی ولتاژ مورد نیاز استفاده میکنیم.
چرخه کاری چیست(duty cycle)؟
چرخه کاری به صورت درصد مدت زمان ولتاژ بالا در پالس دیجیتال کامل تعریف میشود. چرخه کاری به صورت زیر محاسبه میشود:
اگر چرخه کاری برابر با 50% باشد، در این صورت برای مدت زمان نصف دوره زمانی کل پالس دیجیتال روشن باقی میماند.
توجه کنید که چرخه کاری، عامل کاری و نرخ تکرار پالس پارامترهای موجهای مستطیلی هستند و در مدارهای دیجیتال بسیار اهمیت دارند. چرخه کاری نسبت پهنای پالس به دوره سیگنال است که به صورت درصد بیان میشود. عامل کاری همان چرخه کاری است با این تفاوت که به صورت دهدهی بیان میشود، نه به صورت درصد. اگر چرخه کاری 50% باشد، عامل کاری 0.5 است. نرخ تکرار میگوید که قطار پالسها چند وقت یکبار در ثانیه رخ میدهد و اغلب برای شرح برخی از شکل موجها استفاده میشود.
برای درک اصول کاری PWM، به مثال بالا نگاه کنید. اینجا یک موج مربعی با نسبت روشن و خاموش(صفر ویک) برابر به عنوان خروجی در دسترس است(شکل اول). اگر این شکل موج به ترمینال بیس ترانزیستور در پیکربندی امیتر مشترک داده شود، ترانزیستور برای دورههای برابر در حالت اشباع یا قطع هست، بنابراین، ولتاژ متوسط در کلکتور نصف ولتاژ تغذیه است. اگر نسبت قسمت روشن(یک) به قسمت خاموش (صفر)افزایش یابد آنگاه ولتاژ متوسط افزایش مییابد. و زمانی که نسبت قسمت روشن(یک) به قسمت خاموش(صفر) کاهش یابد، ولتاژ خروجی کاهش خواهد یافت.
خلاصه، مدولاتور پهنای پالس اساساً اسیلاتور (نوسانساز) موج مربعی است که خروجی نسبت روشن/خاموش میتواند با ولتاژ خروجی تغییر یابد.
PWM و AVR
برای ایجاد مدولاسیون پهنای پالس، AVR شامل سختافزار جدا است! با استفاده از این، CPU به سختافزار دستور میدهد تا PWM با چرخه کاری معین تولید کند.
ATmega8 دارای 3 خروجی PWM، دو تا در کانتر/تایمر1 (16 بیتی) و یکی در کانتر/تایمر2 (8 بیتی) واقع شده است.کانتر/تایمر2 توانایی اجرای دو حالت را دارد، حالت مدولاسیون پهنای پالس سریع و حالت مدولاسیون پهنای پالس فاز اصلاح شده. هر یک از این حالتها میتواند معکوس شود.همچنین توجه داشته باشید که سه روش وجود دارد که به وسیله آن میتوان مدولاسیون پهنای پالس را از AVR TIMER 1 ایجاد کرد.
- PWM سریع
- PWM فاز و فرکانس اصلاح شده
- PWM فاز اصلاح شده
در ادامه کد ATmega8 ساده برای راهاندازی TIMER 1 برای 4 کیلوهرتز، 10 بیت، مدولاسیون پهنای پالس فاز اصلاح شده در کلاک 16 مگاهرتز وجود دارد.
#include int main(void) { DDRB |= (1 << DDB1); // PB1 as output OCR1A = 0x01FF; // set PWM for 50% duty cycle at 10bit TCCR1A |= (1 << COM1A1); // set non-inverting mode TCCR1A |= (1 << WGM11) | (1 << WGM10); // set 10bit phase corrected PWM Mode TCCR1B |= (1 << CS11); // set prescaler to 8 and starts PWM while (1) { } }
بله، دیدیم که مدولاسیون پهنای پالس میتواند از کانتر/تایمر شماره یک 16 بیتی یا کانتر/تایمر شماره دو 8 بیتی ایجاد شود. اینجا مثالی از کد حالت PWM سریع تایمر شماره دو هشت بیتی (8 کیلوهرتز) در کلاک 16 مگاهرتز آورده شده است:
#include int main(void) { DDRB |= (1 << DDB3); // PB3 as output OCR2 = 128; // set PWM for 50% duty cycle TCCR2 |= (1 << COM21); // set non-inverting mode TCCR2 |= (1 << WGM21) | (1 << WGM20); // set fast PWM Mode TCCR2 |= (1 << CS21); // set prescaler to 8 and starts PWM while (1) { } }
metformin 40mg