PWM  مخفف Pulse Width Modulation است که به فارسی به معنای مدولاسیون پهنای پالس است. این یک تکنیک الکترونیک است که برای کنترل توان الکتریکی یک بار با تغییر زمان روشن بودن و خاموش بودن منبع تغذیه در هر سیکل استفاده می شود.

سیگنال PWM

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

pwm

PWM  با استفاده از یک مدار سوئیچینگ انجام می شود. این مدار با استفاده از یک سیگنال کنترلی، منبع تغذیه را به بار وصل یا قطع می کند. سیگنال کنترلی معمولاً یک سیگنال دیجیتال است که می تواند دو مقدار مختلف داشته باشد:
0 یا 1

PWM  برای طیف گسترده ای از کاربردها استفاده می شود، از جمله:

  • کنترل سرعت موتورها: با تغییر پهنای پالس سیگنال PWM، توان متوسط ​​توسط موتور کنترل می شود که به نوبه خود سرعت آن را کنترل می کند.
  • کم نور کردن چراغ ها: PWM  می تواند برای کم نور کردن چراغ ها با کاهش پهنای پالس سیگنال PWM  اعمال شده به لامپ استفاده شود.
  • تولید سیگنال های صوتی: PWM  می تواند برای تولید سیگنال های صوتی با تغییر فرکانس و پهنای پالس سیگنال PWM استفاده شود.
  • کنترل سروو موتورها: PWM می تواند برای کنترل موتورهای سروو با تغییر پهنای پالس سیگنال PWM  اعمال شده به موتور سروو استفاده شود.

PWM  یک تکنیک انعطاف پذیر و پراستفاده است که در بسیاری از دستگاه های الکترونیکی یافت می شود.

فرکانس PWM

سیگنال PWM دارای چند ویژگی است. اولین مورد فرکانس F است که اساساً معیاری است برای اینکه سیگنال PWM با چه سرعتی بین HIGH و LOW در حال تغییر است. فرکانس بر حسب هرتز Hz اندازه گیری می شود و معکوس بازه زمانی کامل دوره تناوب T است.

ما فرکانس PWM آردوینو را با استفاده از کتابخانه های اختصاصی PWM کنترل می کنیم. و این می تواند در بسیاری از برنامه ها مهم باشد زیرا فرکانس سوئیچینگ PWM می تواند تأثیر زیادی بر دستگاه سوئیچینگ و/یا خود بار داشته باشد.

  •  یک قطعه سوئیچینگ مانند ترانزیستور ماسفت به دلیل تلفات برق بیشتر (تلفات سوئیچینگ) در فرکانس های PWM بالاتر بیشتر داغ می شود.
  •    برخی از بارها مانند موتورهای DC می توانند در فرکانس های PWM بالا نیز به طرز عجیبی عمل کنند.
  •      اگر فرکانس سیگنال سوئیچینگ PWM در محدوده قابل شنیدن 20 هرتز تا 20 کیلوهرتز باشد، وسایل الکترونیکی تمایل به تولید نویز شنیداری دارند. بنابراین ما معمولا فرکانس PWM را بالاتر از آن محدوده قرار می دهیم.

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

DutyCycle

دیوتی سایکل PWM در آردوینو

دیوتی سایکل PWM مهمترین ویژگی آن است که ما همیشه به آن علاقه مندیم. این پارامتر نشان دهنده مدت زمانی است که سیگنال PWM نسبت به دوره تناوب سیگنال PWM روشن یا High می ماند.

دیوتی سایکل معمولاً به صورت مقدار درصد (%) بیان می شود زیرا نسبت بین مقادیر دو زمان است. دیوتی سایکل مستقیماً بر ولتاژ متوسط PWM که اکثر دستگاه ها به آن پاسخ می دهند تأثیر می گذارد. به همین دلیل است که ما معمولاً دیوتی سایکل را برای کنترل مواردی مانند روشنایی LED، سرعت موتور DC و غیره تغییر می دهیم.

PWM آردوینو به طور پیش فرض دارای رزولوشن 8 بیت است، به این معنی که دیوتی سایکل می تواند هر مقداری بین 0 تا 255 داشته باشد. ما برای اینکه دیوتی سایکل 0٪ باشد عدد 0 را به برنامه می دهسم  و 255 را برای دریافت دیوتی سایکل 100٪ وارد می کنیم. اعداد بین 0 تا 255 به نسبت به درصد متناظر نگاشت می شوند.

رزولوشن PWM

رزولوشن PWM در (بیت) بیان می شود. این تعداد بیت هایی است که برای نشان دادن مقدار دیوتی سایکل استفاده می شود. این می تواند 8 بیتی، 10، 12 یا حتی 16 بیتی باشد. رزولوشن  PWM می تواند به عنوان تعداد سطوح دیوتی سایکل گسسته بین 0٪ و 100٪ باشد. هرچه وضوح PWM بالاتر باشد، تعداد سطوح گسسته در کل محدوده دیوتی سایکل  PWM بیشتر است.

اگر رزولوشن  PWM تنها 2 بیت باشد به این معنی است که تنها 4 سطح مجزا برای دیوتی سایکل در کل محدوده (از 0٪ تا 100٪) وجود دارد. یعنی 25% و 50% و 75% و 100% .  بنابراین یک PWM با رزولوشن 8 بیت دارای 256 سطح گسسته برای دیوتی سایکل در کل محدوده (از 0٪ تا 100٪) خواهد بود.

به ظاهر رزولوشن  PWM بالاتر همیشه یک چیز مطلوب است. اما باید به خاطر داشت که رزولوشن همیشه با فرکانس PWM نسبت معکوس دارد. هر چه فرکانس PWM را بالاتر انتخاب کنید ، رزولوشن PWM کمتر می شود.

تنظیمات پیش فرض آردوینو به شما یک سیگنال PWM با وضوح 8 بیت می دهد. این بدان معنی است که مقدار دیوتی سایکل بین (0 تا 255) خواهد بود که برای اکثر برنامه های کنترلی کافی است.

پایه های PWM در آردوینو

پین هایی که با علامت ~ روی برد آردوینو نشان داده شده اند، پایه های خروجی PWM هستند. 6 پین خروجی PWM روی برد آردوینو UNO پین های 3، 5، 6، 9، 10 و 11 هستند.

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

راه اندازی PWM آردوینو

برای راه اندازی PWM یک پایه در آردوینو کافی است شماره پین و دیوتی سایکل را به دستور زیر بدهیم:

analogWrite(pin, value);

: شماره پایه آردوینو از نوع int.

value: دیوتی سایکل بین 0  و 255  از نوع int.

برای شروع یک برنامه آردوینو می نویسیم که از PWM برای محدود کردن روشنایی یک LED متصل به پین 3 استفاده می کند. ابتدا مدار را به شکل زیر می بندیم:

arduino pwm

در برنامه آردوینوی زیر از PWM برای محدود کردن روشنایی LED متصل به پین 3 استفاده شده است:

int ledPin = 3; 

void setup() {
  pinMode(ledPin, OUTPUT); 
}

void loop() {
  analogWrite(ledPin, 64); 
}

برنامه با اعلام متغیری به نام ledPin و اختصاص مقدار 3 به آن شروع می شود. چون LED به پین دیجیتال 3 در برد آردوینو متصل است.

تابع setup تنها یک بار اجرا می شود، زمانی که آردوینو روشن یا تنظیم مجدد شود. این تابع مسوول تنظیم اولیه اجزای سخت افزاری لازم است.

سپس ledPin را روی حالت OUTPUT قرار می دهیم. این بدان معناست که آردوینو می‌تواند جریان الکتریکی را که از پین عبور می‌کند، کنترل کند و به آن امکان می‌دهد که LED را روشن یا خاموش کند.

حلقه loop تا زمانی که آردوینو خاموش شود به طور مکرر اجرا می شود. این حلقه شامل بدنه اصلی برنامه است که در این مورد کنترل روشنایی LED با استفاده از PWM  است.

 تابع analogWrite برای تنظیم دیوتی سایکلPWM  استفاده می شود. دیوتی سایکل نسبت زمانی که LED در هر سیکل روشن می شود را تعیین می کند. در این خط، دیوتی سایکل روی 50٪ تنظیم شده است، به این معنی که LED برای نیمی از زمان روشن و برای نیمی دیگر خاموش می شود. به این ترتیب روشنایی LED کاهش می دهد.

Fade in fade out

قصد داریم کمی پیش برویم و کاری کنیم که روشنایی LED به مرور زیاد شود و سپس به مرور کم شود و این روند تکرار شود.

برنامه به این صورت است:

int ledPin = 3;    
int brightness = 0; 
int fadeAmount = 5; 

void setup() {
  pinMode(ledPin, OUTPUT); 
}

void loop() {
  analogWrite(ledPin, brightness); 
  brightness += fadeAmount;         

  if (brightness <= 0 || brightness >= 255) { 
    fadeAmount = -fadeAmount;
  }

  delay(30); 
}

برنامه با اعلام سه متغیر شروع می شود:

ledPin: مقدار 3 را تعیین می کند که نشان می دهد LED به پین دیجیتال 3 متصل است.

brightness: نشان دهنده سطح روشنایی اولیه LED است و مقدار اولیه آن 0 است.

fadeAmount: روی 5 تنظیم شده و تغییر شدت روشنایی LED را در هر تکرار حلقه مشخص می کند.

تابع setup مسوول پیکربندی اجزای سخت افزاری لازم است:

pinMode(ledPin, OUTPUT)

پایه 3 را روی حالت خروجی تنظیم می کند و به آردوینو اجازه می دهد جریان عبوری از آن را کنترل کند و LED را روشن یا خاموش نماید.

در حلقه loop بدنه اصلی برنامه که شامل محو کردن روشنایی LED است شامل موارد زیر است:

analogWrite(ledPin, brightness)

برای تنظیم روشنایی LED استفاده می شود. دیوتی سایکل سیگنال PWM اعمال شده به پین مقدار روشنایی LED را تعیین می کند.

brightness += fadeAmount

متغیر brightness را با مقدار fadeAmount افزایش می دهد و به طور موثر روشنایی LED را به تدریج تنظیم می کند.

if (brightness <= 0 || brightness >= 255)

در این شرط  با استفاده از یای منطقی || بررسی می شود که آیا مقدار brightness به حداقل (0) یا حداکثر (255) حد رسیده است یا نه.

fadeAmount = -fadeAmount

اگر brightness  به هر کدام از دو حد برسد، fadeAmount قرینه می شود. بنابراین سطح روشنایی LED به آرامی بین کمترین و بالاترین میزان خود تغییر می کند.

delay(30)

یک تاخیر 30 میلی ثانیه ای بین هر تکرار ایجاد می کند. این تاخیر به چشم انسان اجازه می دهد تا تغییر تدریجی در روشنایی LED را متوجه شود.