آردوینو آموزش آردوینو

آموزش آردوینو بخش یازدهم – مدولاسیون پهنای پالس یا PWM

arduino-basic-tutorial-part-eleven-pwm-signal-digispark
نوشته شده توسط پریسا پوربلورچیان

مدولاسیون پهنای باند Pulse Width Modulation، یک تکنیک برای دریافت خروجی آنالوگ از دیجیتال است. کنترل دیجیتال برای ساخت یک موج مربعی استفاده می‌شود. سیگنالی که بین صفر و یک سوییج شده و فقط دو حالت دارد. الگوی خاموش و روشن میتواند ولتاژ را بین ۵ ولت یا ۳٫۳ ولت تا GND شبیه سازی کند. مدت زمان سپری شده در این بازه را عرض پالس PULSE WIDTH می‌نامند. برای به دست آوردن مقادیر آنالوگ متفاوت، باید عرض پالس PULSE WIDTH را شبیه سازی کرد. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


مدولاسیون پهنای پالس یا PWM چیست


مدولاسیون پهنای باند یا PWM، یکی از تکنیک‌های مهم در  الکترونیک است که برای کنترل قدرت الکتریکی استفاده می‌شود. در این تکنیک، پهنای پالس الکتریکی تغییر داده می‌شود تا به عنوان یک سیگنال کنترلی برای دستگاه‌های الکترونیکی مورد استفاده قرار گیرد. در این تکنیک، سیگنال خروجی با فرکانس ثابت است، اما پهنای پالس‌های آن به نسبت متغیر است. به عبارت دیگر، دوره‌های پالس با نسبت متفاوتی از زمان پالس و زمان خاموشی تولید می‌شوند. برای مثال، اگر زمان پالس برابر با ۸۰٪ و زمان خاموشی برابر با ۲۰٪ باشد، نسبت پهنای باند برابر با ۸۰٪ است. مزیت اصلی استفاده از PWM در کنترل قدرت الکتریکی، این است که این تکنیک می‌تواند به صورت موثر و دقیقی برای تنظیم قدرت الکتریکی و افزایش بازدهی استفاده شود. به علاوه، PWM در کنترل سرعت موتورها و محرک‌های الکتریکی نیز کاربرد دارد.
PWM در برنامه نویسی مخفف Pulse Width Modulation است که یک تکنیک خاص برای کنترل نور چراغ، دور موتور، کنترل سرو موتور و یا هر جایی که نیاز به دریافت خروجی آنالوگ از ابزارهای دییجتال داریم، استفاده می‌شود. خروجی پایه های دیجیتال به صورت موج مربعی و در دو حالت ۱ و ۰ است که منظور از ۱ همان ۵ ولت و صفر همان gnd است. با یک مثال بررسی می‌کنیم، اگر بخواهیم شدت نور یک ال ای دی را کم و زیا کنیم، عملا با استفاده از ۵ ولت و صفر ولت امکان پذیر نیست. زیرا در یک لحظه ال ای دی خاموش و در یک لحظه در بالاترین میزان نور خواهد بود اما میتوانیم مدت زمان سیگنال را کم و زیاد کنیم. اگر بتوانیم مدت زمان فعال و غیرفعال شدن سیگنال را با سرعت بیشتری انجام دهیم، در نتیجه میتوانیم بازه های بین ۰ تا ۵ولت را محاسبه کنیم.

PWM چیست و چه کاربردی دارد


استفاده از PWM یکی از روش‌های مهم و مؤثر در کنترل قدرت الکتریکی در پروژه‌های الکترونیکی است. استفاده از PWM می‌تواند بازدهی و کارایی سیستم را افزایش دهد، زیرا این تکنیک به ارائه کنترل دقیق بر روی قدرت الکتریکی کمک می‌کند. با تنظیم دقیق پهنای باند پالس‌های الکتریکی، می‌توان قدرت الکتریکی را به نحوی تنظیم کرد که بازدهی بیشتری داشته باشد. PWM برای کنترل سرعت موتورها و سایر محرک‌های الکتریکی استفاده می‌شود. با تنظیم پهنای باند پالس‌ها، می‌توان سرعت موتور را تنظیم کرد و همچنین قدرت الکتریکی مورد نیاز را برای حرکت موتور تنظیم کرد. PWM به طور گسترده برای کنترل روشنایی در ال ای دی ها و سایر روشنایی ها استفاده می‌شود. با تغییر پهنای باند پالس‌های الکتریکی، می‌توان روشنایی دستگاه را تنظیم کرد.

 


تفاوت بین چرخه کاری و فرکانس یک سیگنال PWM چیست؟


چرخه کاری به صورت درصد از زمان کل دوره PWM بیان می‌شود و به عنوان دوره کاری نیز شناخته می‌شود. به عنوان مثال، اگر دوره کاری یک سیگنال PWM برابر با ۶۰ درصد باشد، به معنی این است که پالس الکتریکی به مدت ۶۰ درصد از دوره PWM در حال ON بودن است و به مدت ۴۰ درصد دیگر در حال OFF بودن است. بنابراین، می‌توان گفت که فرکانس سیگنال PWM تعداد پالس‌های الکتریکی در هر ثانیه را نشان می‌دهد و چرخه کاری به مدت زمانی اشاره دارد که پالس الکتریکی در حال ON یا OFF بودن است. سه پارامتر اصلی PWM به صورت زیر است.

  •   TON = ON TIME = زمانیکه سیگنال در بالاترین حد HIGH است.
  • TOFF = OFF TIME = زمانیکه سیگنال در پایین ترین حد LOW است.
  • پریود = PERIOD =  حاصل جمع زمان TON و TOFF پریود گفته می‌شود.
  • دیوتی سایکل = DUTY CYCLE = درصد زمان هنگامی که سیگنال در بالاترین حد در مدت زمان مشخص باشد.

 

به عنوان مثال در دیوتی سایکل ۵۰% و فرکانس ۱Hz، ال ای دی به مدت نیم ثانیه در بالاترین حد HIGH و به مدت نیم ثانیه دیگر در پایین تر حد LOW تغییر وضعیت میدهد. اگر فرکانس را تا ۵۰Hz افزایش دهیم، ال ای دی ها با نور بیشتری روشن خواهند شد. به تصویر زیر نگاه کنید. در دیوتی سایکل ۲۰ درصد، مدت زمان یا همان PERIOD کوتاه تر است و رفته رفته با افزایش دیوتی سایکل پریود طولانی تر خواهد شد. هر خط عمودی نشان دهنده ی یک دوره زمانی منظم است.

 

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

 


PWM در آردوینو


یکی از کاربردهای اصلی PWM در آردوینو، کنترل سرعت موتورها است. با استفاده از سیگنال PWM، می‌توان توان موتور را کنترل کرد و برای کنترل سرعت آن، دوره کاری سیگنال PWM را تغییر داد. این کاربرد بسیار مهم است، به‌خصوص در پروژه‌های رباتیک و خودروهای خودران، که نیاز به کنترل دقیق سرعت موتورها دارند.با استفاده از سیگنال PWM، می‌توان توان موتورها را کنترل کرد و سرعت آن‌ها را تنظیم کرد. این قابلیت به کاربر امکان می‌دهد تا سرعت موتورها را به دقت کنترل کند و به دلیل دقت بالا، برای کاربردهای مختلفی مفید است.
با استفاده از PWM، می‌توان مصرف انرژی سیستم را کاهش داد. در سیستم‌هایی که نیاز به کنترل توان موتورها دارند، استفاده از سیگنال PWM باعث کاهش مصرف انرژی و افزایش کارایی سیستم می‌شود. با استفاده از PWM، می‌توان روشنایی LED‌ها را به دقت کنترل کرد. این کاربرد در پروژه‌های الکترونیکی، به‌خصوص در پروژه‌های روباتیک، بسیار مفید است.

 

با استفاده از PWM، می‌توان سرعت سروموتورها را به دقت کنترل کرد و در نتیجه، حرکت دستگاه‌ها را به دقت کنترل کرد. در برخی پروژه‌های الکترونیکی، نیاز به کنترل دقیق ولوم صدا وجود دارد. با استفاده از PWM، می‌توان ولوم صدا را به دقت کنترل کرد و برای پروژه‌های صوتی دقیق و کارآمد، مناسب است. به‌طور کلی، PWM در آردوینو، به کاربر امکان می‌دهد تا توان موتورها، سرعت سروموتورها، روشنایی LED‌ها و دمای سیستم را به دقت کنترل کند. با توجه به دقت بالای PWM، این قابلیت، در بسیاری از پروژه‌های الکترونیکی، بسیار مفید است.

 

 


 Duty Cycle چیست؟


دوره وظیفه (Duty Cycle) یا همچنین با نام دیوتی سایکل، در مخابرات و الکترونیک به مقدار نسبی یا درصدی از زمان کل یک چرخه مربوط می‌شود که در آن یک سیگنال فعال است. دوره وظیفه نشان می‌دهد که در یک دوره زمانی یک سیگنال چه مدتی در حال فعالیت و چه مدتی در حال غیرفعالیت است.به طور معمول، دوره وظیفه به صورت درصدی بیان می‌شود و مقدار آن بین ۰ تا ۱ یا ۰ تا ۱۰۰ درصد قرار می‌گیرد. برای مثال، اگر دوره وظیفه ۵۰٪ باشد، این بدان معنی است که سیگنال فعال در نصف زمان یک دوره و غیرفعال در نصف دیگر آن است.دوره وظیفه مهمترین ویژگی‌های سیگنال‌های پالسی و سیستم‌های سوئیچینگ مانند مبدل‌های DC-DC را مشخص می‌کند. با تغییر دوره وظیفه، می‌توان کنترل کرد که چه مدتی سیگنال در وضعیت فعال یا غیرفعال قرار می‌گیرد. این ویژگی از اهمیت بالایی برای کنترل قدرت و توان در مدارها و سیستم‌های الکترونیکی برخوردار است.

 

 

به عنوان مثال، در مبدل DC-DC، دوره وظیفه میزان زمانی را که خروجی آن در وضعیت فعال یا غیرفعال است را تنظیم می‌کند. با افزایش دوره وظیفه، زمانی که خروجی فعال است بیشتر می‌شود و در نتیجه توان خروجی افزایش می‌یابد. در عوض، با کاهش دوره وظیفه، زمانی که خروجی فعال است کاهش می‌یابد و توان خروجی نیز کاهش می‌یابد.دوره وظیفه مفید برای تعیین سیگنال‌های پالسی، مدارات سوئیچینگ و کنترل توان است و در صنایع مختلف از جمله الکترونیک، مخابرات، رایانه‌ها و انرژی استفاده می‌شود.مدولاسیون پهنای باند یا PWM در برنامه نویسی، یک تکنیک برای دریافت خروجی آنالوگ ANALOG از پایه های دیجیتال DIGITAL است.

 کنترل دیجیتالی یک موج مربعی صفر و یک در خروجی تولید می‌کند که بین ۰ و ۱ تغییر وضعیت دارد. این الگوی خاموش و روشن میتواند ولتاژ را بین VCC ( 5, 3.3 V) و GND را با مدت زمان سپری شده تغییر داده و شبیه سازی کند. مدت زمان روشن بودن ONTIME پهنای پالس نامیده می‌شود. برای دریافت مقادیر آنالوگ مختلف، بایستی پهنای باند را تغییر یا مدوله دهید. اگر همین الگو ON -OFF را با یک ال ای دی برای نمونه اجرا کنید. میتوانید ولتاژ ال ای دی را بین ۰ و ۱ با تغییر شدت نور در هر لحظه مدیریت کنید. 

 

موج مربعی PWM در آردوینو - دیجی اسپارک

 

در این تصویر خطوط سبز، نشان دهنده ی یک دوره زمانی منظم است. این مدت زمان همان فرکانس PWM است. فرکانس PWM آردوینو ۵۰۰ هرتز است که با توجه به این تصویر هر ۲ میلی ثانیه اندازه گیری می‌شود. با فراخوانی AnalogWrite بازه مقیاس بین ۰ تا ۲۵۵ است. به طوریکه اگر مقدار Analogwrite برابر با ۲۵۵ باشد، دیوتی سایکل ۱۰۰ درصد است.

۱۰۰% DutyCycle - AnalogWrite(255)

اگر مقدار AnalogWrite برابر با صفر باشد، دیوتی سایکل ۰ درصد خواهد بود.

۰% Dutycycle - AnalogWrite(255)

به همین ترتیب بازه های بین ۰ تا ۱۰۰ درصد مقادیر متفاوتی از آنالوگ رایت را در اختیار میگیرد. در دیوتی سایکل ۲۵ درصد مقدار Analogwrite برابر با ۶۴ است و در دیوتی سایکل ۵۰ درصد مقدار analogwrite برابر با ۱۲۷ است.

آنالوگ رایت و دیوتی سایکل در PWM آردوینو - دیجی اسپارک

 


آردوینو و PWM


نرم افزار آردوینو دارای دستور داخلی analogWrite است که برای تولید سیگنال PWM استفاده می‌شود. فرکانس PWM برای هر پایه ۴۹۰Hz است و در خروجی مقداری بین ۰ تا ۲۵۵ را نمایش میدهد.

اگر مقدار analogWrite صفر باشد به این معنی است که دیوتی سایکل Dutycycle صفر است.

اگر مقدار analogWrite برابر با ۱۲۷ باشد، به این معنی است که دیوتی سایکل ۵۰ درصد است.

اگر مقدار analogWrite برابر با ۲۵۵ باشد به این معنی است که دیوتی سایکل ۱۰۰ درصد است.

آردوینو و PWM - دیجی اسپارک

 


استفاده از فانکشن analogWrite


فانکشن AnalogWrite یک مقدار آنالوگ PWM WAVE را بر روی یک پایه رایت می‌کند. از این تابع برای کنترل ال ای دی ها، سرو موتورها و موتورها استفاده می‌شود. پس از فراخوانی analogwrite یک موج مربعی با دیوتی سایکل مشخص بر روی پایه اعمال می‌شود. فرکانس سیگنال pwm در هر پایه تقریبا ۴۹۰Hz است.

 

روش فراخوانی 

analogWrite(pin, value)

 

  • منظور از پین پایه ای است که باید رایت شود.
  • منظور از value دیوتی سایکل است که بین عدد ۰ و ۲۵۵ است.

 


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


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

int ledPin = 9;      // ال ای دی به پایه دیجیتال شماره ۹ متصل است
int analogPin = 3;   // پتانسیومتر به پایه شماره ۳ آنالوگ متصل است
int val = 0;         // انتخاب یک متغیر برای ذخیره مقادیر خوانده شده

void setup() {
  pinMode(ledPin, OUTPUT);  // انتخاب پین به عنوان خروجی 
}

void loop() {
  val = analogRead(analogPin);  // خواندن پین ورودی
  analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
  // مقادیر ANALOGREAD از ۰ تا ۱۰۲۳ متغیر است و سپس با دستور ANALOGWRITE در بازه ی ۰ تا ۲۵۵ رایت میشود



}

 

 


اتصال پروژه PWM با آردوینو


 

اتصال پروژه PWM با آردوینو - دیجی اسپارک

 


 تست نمونه کد آردوینو با SERVO MOTOR PWM


 

#include <Servo.h>

Servo myservo;  // ساخت یک آبجکت برای سرو موتور 

int pos = 0;    // انتخاب یک متغیر برای ذخیره زاویه

void setup() {
  myservo.attach(9);  // مشخص کردن یک پایه برای سرو موتور 
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // چرخش سرو از  تا ۰ تا ۱۸۰ درجه
   
    myservo.write(pos);              // سرو در زاویه ای که در متغیر POS ذخیره شده است قرار میگیرد
    delay(15);                  // توقف به مدت ۱۵ میلی ثانیه
  for (pos = 180; pos >= 0; pos -= 1) { // چرخش از ۱۸۰ درجه به ۰ درجه
    myservo.write(pos);             // سرو در زاویه ای که در متغیر POS ذخیره شده است قرار میگیرد
    delay(15);                       // توقف به مدت ۱۵ میلی ثانیه
  }
}

 

کد نویسی برای PWM آردوینو - دیجی اسپارک

 

راه اندازی سرو موتور با PWM آردوینو - دیجی اسپارک

 


جدول پایه های PWM در بردهای آردوینو


 

جدول پایه های PWM در بردهای آردوینو - دیجی اسپارک

 

 


مثال هایی برای PWM


PWM چندین استفاده دارد.

  •  کنترل ال ای دی DIMMING LED
  • تامین خروجی آنالوگ; اگر خروجی دیجیتال فیلتر شده باشد، ولتاژ آنالوگ بین ۰ تا ۱۰۰ درصد تامین می‌کند.
  • تولید سیگنال صدا
  • تامین کنترل دور موتور
  • تولید سیگنال مدوله شده

 


جمع بندی لیدی پای


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

 

 

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

پریسا پوربلورچیان

تولید کننده محتوا / کارشناس IOT

زندگی یعنی پژوهش و فهمیدن چیزی جدید

تلاشم بر این است تجربیاتم در زمینه IOT‌ را به بهترین شکل با شما در میان بگذارم.

تبادل نظر و رفع عیب با ثبت دیدگاه

۴۲ دیدگاه