مدولاسیون عرض پالس یا PWM در آردوینو، مدولاسیون عرض پالس یا PWM یکی از تکنیکهای متداول به منظور تغییر عرض پالسها میباشد. PWM کاربردهای زیادی دارد، کنترل سروو موتورها و کنترل کنندههای سرعت، تغییر توان موثر موتور و تغییر نور LED ها از جمله این کاربردها هستند.
اصول اولیه PWM
در تکنیک مدولاسیون عرض پالس مدت زمان یک و صفر بودن یک شکل موج مربعی را تغییر میدهیم. یک نمونه سیگنال PWM در شکل زیر نشان داده شده است:
اصطلاحاتی که در مورد تکنیک PWM به کار میروند عبارتاند از:
- زمان روشن بودن (On-Time) : مدت زمان یک (High) بودن سیگنال
- زمان روشن بودن (Off-Time) : مدت زمان صفر (Low) بودن سیگنال
- دوره تناوب (Period) : عبارت است از مجموع مدت زمان یک بودن و صفر بودن سیگنال
- زمان وظیفه (Duty Cycle) : عبارت است از مدت زمان یک بودن سیگنال نسبت به کل دوره تناوب سیگنال برحسب درصد
دوره تناوب :
همان طور که در شکل نشان داده شده است، Ton نشان دهنده مدت زمان یک بودن و Toff نشان دهنده مدت زمان صفر بودن سیگنال است. دوره تناوب سیگنال برابر است با مجموع مدت زمان یک بودن با مدت زمان صفر بودن سیگنال که طبق رابطه زیر محاسبه میشود:
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 پشتیبانی میکنند.
بردهای آردوینو 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 در آردوینو از آموزش آردوینو هم در اینجا به پایان رسید، امیدوارم این نوشته برایتان مفید باشد.
منبع: میکرودیزاینرالکترونیک