مدولاسیون عرض پالس یا PWM در آردوینو

مدولاسیون عرض پالس یا PWM در آردوینو، مدولاسیون عرض پالس یا PWM یکی از تکنیک های متداول به منظور تغییر عرض پالس ها می باشد. PWM کاربردهای زیادی دارد، کنترل سروو موتورها و کنترل کننده های سرعت، تغییر توان موثر موتور و تغییر نور LED ها از جمله این کاربردها هستند.

اصول اولیه PWM

در تکنیک مدولاسیون عرض پالس مدت زمان یک و صفر بودن یک شکل موج مربعی را تغییر می دهیم. یک نمونه سیگنال PWM در شکل زیر نشان داده شده است.

مدولاسیون عرض پالس یا PWM

اصطلاحاتی که در مورد تکنیک PWM به کار می روند عبارت اند از :

  • زمان روشن بودن (On-Time) : مدت زمان یک (High) بودن سیگنال
  • زمان روشن بودن (Off-Time) : مدت زمان صفر (Low) بودن سیگنال
  • دوره تناوب (Period) : عبارت است از مجموع مدت زمان یک بودن و صفر بودن سیگنال
  • زمان وظیفه (Duty Cycle) : عبارت است از مدت زمان یک بودن سیگنال نسبت به کل دوره تناوب سیگنال برحسب درصد

دوره تناوب :

همان طور که در شکل نشان داده شده است، Ton نشان دهنده مدت زمان یک بودن و Toff نشان دهنده مدت زمان صفر بودن سیگنال است. دوره تناوب سیگنال برابر است با مجموع مدت زمان یک بودن با مدت زمان صفر بودن سیگنال که طبق رابطه زیر محاسبه می شود :

مطلب پیشنهادی:  آموزش کار با میکروکنترلرهای STM32 با استفاده از Arduino IDE: پروژه LED چشمک زن

Ttotal=Ton+Toff

دوره وظیفه :

دوره وظیفه یا دیوتی سایکل برمبنای مدت زمان یک بودن سیگنال محاسبه می شود. با محاسبه دوره تناوب با فرمول بالا، دوره وظیفه طبق رابطه زیر محاسبه می شود :

D=TonTon+Toff=TonTtotal

تابع analogWrite

تابع analogWrite یک مقدار آنالوگ (شکل PWM) را بر روی یک پایه ایجاد می کند. از این تابع می توان برای تغییر روشنایی LED یا تغییر سرعت یک موتور استفاده نمود.

پس از فراخوانی تابع analogWrite  ، یک شکل موج مربعی ثابت با نرخ وظیفه مشخص بر روی پایه مورد نظر ایجاد می کند و تا زمانی که مجددا تابع analogWrite  یا توابع digitalRead  یا digitalWrite  بر روی همان پایه فراخوانی نشود این شکل موج بر روی پایه باقی خواهد ماند.

فرکانس شکل موج PWM تولید شده بر روی اکثر پایه ها برابر 490Hz است. در برد Uno و بردهای مشابه، فرکانس شکل موج تولید شده بر روی پایه های 5 و 6 حدود 490Hz است. همچنین بر روی پایه های 3 و 11 برد Leonardo این فرکانس برابر 980Hz است.

بر روی اکثر بردهای آردوینو (معمولا مبتنی بر میکروکنترلرهای ATmega168 و ATmega328)، این تابع بر روی پایه های 3 ، 5 ، 6 ، 9 و 10 کار می کند. در بردهای آردوینو Mega ، این تابع بر روی پایه های 2 الی 13 و 44 الی 46 کار می کند. بردهای آردوینو قدیمی تر با میکروکنترلرهای ATmega8 فقط بر روی پایه های 9 ، 10 و 11 از تابع analogWrite  پشتیبانی می کنند.

مطلب پیشنهادی:  شروع به کار با بورد آردوینو

مدولاسیون عرض پالس یا PWM در آردوینو

بردهای آردوینو Due از این تابع بر روی پایه های 2 تا 13 و پایه های DAC0 و DAC1 پشتیبانی می کند. برخلاف پایه های PWM ، پایه های DAC0 و DAC1 پایه های مبدل دیجیتال به آنالوگ هستند  و به عنوان پایه های خروجی کاملا آنالوگ استفاده می شوند.

لازم به ذکر است پیش از استفاده از تابع analogWrite  نیازی به فراخوانی تابع pinMode  برای تنظیم پایه بر روی حالت خروجی وجود ندارد.

دستور نگارش تابع analogWrite :

analogWrite ( pin , value ) ;

مقدار (Value) – دوره وظیفه : بین صفر (همیشه خاموش یا صفر) تا 255 (همیشه روشن یا یک)

مثال :

int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value

void setup() {
 pinMode(ledPin, OUTPUT); // sets the pin as output
}

void loop() {
 val = analogRead(analogPin); // read the input pin
 analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023, 
 // analogWrite values from 0 to 255
}

جلسه PWM در آردوینو از آموزش آردوینو هم در اینجا به پایان رسید برای مطالعه جلسات قبلی و بعدی اینجا کلیک کنید. همچنین با ارسال نظرات خود در قسمت نظرات ما را در بهتر کردن روند آموزش ها یاری کنید.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطلب پیشنهادی:  I2C آردوینو

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *