مهندس موفق الکترونیک

PWM در آردوینو

مقدمه

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

PWM در آردوینو

یک سیگنال PWM شامل دو مولفه اساسی به نام‌های duty cycle و فرکانس است که رفتارش را مشخص می‌کنند.

Duty cycle سیگنال

یک دوره تناوب یک پالس شامل یک سیکل ON (۵ ولت) و یک سیکل OFF (صفر ولت) می‌باشد. حاصل تقسیم سیکل ON بر روی دوره تناوب، duty cyle نامیده می‌شود.

PWM در آردوینو

مثال: یک پالس با دوره تناوب ۱۰ میلی‌ثانیه که به مدت ۲ ثانیه بالا می‌ماند را در نظر بگیرید. Duty cycle این سیگنال برابر با D = 2ms / 10ms = 20% خواهد بود.

از طریق تکنیک PWM، می‌توان توان تحویل داده شده به یک بار را با استفاده از سیگنال ON-OFF کنترل کرد. سیگنال‌های PWM را برای کنترل سرعت موتورهای DC و تغییر شدت نور LED  به کار می‌گیرند.

چند سیگنال مدوله شده با پهنای پالس با duty cycle‌های مختلف در شکل زیر آورده شده است.

PWM در آردوینو

فرکانس سیگنال

فرکانس یک سیگنال مشخص می‌کند یک PWM با چه سرعتی یک چرخه را طی می‌کند. (مثلاً ۱۰۰۰ هرتز به معنی ۱۰۰۰ چرخه در ثانیه می‌باشد) که به این معنی است که با چه سرعتی بین حالت‌های ON (بالا) و OFF (پایین) سوییچ می‌کند. با تکرار این الگوی ON-OFF در یک نرخ به اندازه کافی سریع، و با یک duty cyle مشخص، خروجی به صورت یک ولتاژ آنالوگ ثابت نمایان می‌شود و توان مورد نیاز دستگاه‌ها را فراهم می‌آورد.

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

مثال: اگر بخواهیم یک سیگنال ۲ ولت آنالوگ برای یک منبع دیجیتال که می‌توان در ۵ ولت ON و در صفر ولت OFF باشد ایجاد کنیم، می‌توان یک PWM با duty cycle چهل درصد استفاده کنیم. این سیگنال برای ۴۰ درصد زمان‌ها خروجی ۵ ولت تولید می‌کند. اگر سیگنال دیجیتال به اندازه کافی سریع باشد، ولتاژ دیده شده در خروجی همانند یک ولتاژ میانگین به نظر می‌رسد. اگر low دیجیتالی صفر ولت باشد (که معمولا هم هست) آنگاه ولتاژ میانگین را می‌توان با ضرب مقدار high دیجیتال در duty cycle محاسبه کرد، یعنی 5V * 0.4 = 2V.

حال اجازه دهید PWM را در آردوینو مشاهده کنیم.

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

آردوینو Uno دارای ۶ کانال ۸ بیتی PWM می‌باشد. پین‌هایی با علامت «~» از PWM پشتیبانی می‌کنند. این پین‌های PWM در شکل زیر نشان داده شده‌اند.

PWM در آردوینو

توابع آردوینو مورد استفاده در PWM

(analogWrite (pin, duty cycle: این تابع برای تولید PWM یا خروجی آنالوگ در یک کانال PWM مشخص به کار می‌رود.

Pin: پینی که می‌خواهیم روی آن PWM یا سیگنال آنالوگ تولید کنیم.

Duty cycle: بین صفر (0%، همیشه OFF) و ۲۵۵ (100%، همیشه ON) نوشته می‌شود.

مثال:

analogWrite (3, 127)  //generates pwm of 50% duty cycle

محو کردن LED با استفاده از PWM آردوینو

اجازه دهید یک برنامه کوچک بنویسیم و led را به صورت پیوسته محو کنیم. این برنامه محوکننده‌ی led به عنوان دکوراسیون در فستیوال‌ها و آیین‌های رسمی ‌به کار می‌رود.

مطلب پیشنهادی:  مفهوم حوزه متغیر در آردوینو-متغیرهای محلی و متغیرهای سراسری

دیاگرام اتصالات

PWM در آردوینو

اسکچ برای محو کردن LED با استفاده از PWM آردوینو

int led = 6;           // the PWM pin the LED is attached to
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;    // how many points to fade the LED by

void setup() {
  pinMode(led, OUTPUT); // declare pwm pin to be an output:
}
 
void loop() {
  analogWrite(led, brightness); // set the brightness of led
 
  // change the brightness for next time through the loop:
  brightness = brightness + fadeAmount;

  // reverse the direction of the fading at the ends of the fade:
  if (brightness <= 0 || brightness >= 255) {
    fadeAmount = -fadeAmount;
  }  
  delay(30);  // wait for 30 milliseconds to see the dimming effect
}

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

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

دیاگرام اتصالات

PWM در آردوینو

اسکچ برای کنترل روشنایی LED

int ledPin = 6;      // LED connected to digital pin 9
int analogPin = A0;   // 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
}

منبع: ترجمه از سایت electronicwings.com

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

امیدوارم آموزش «PWM در آردوینو» براتون مفید واقع شده باشه. توصیه می‌کنم پروژه‌های آردوینو را هم مطالعه کنید.

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

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

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

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

یک دیدگاه

  1. سید محمدرضا غفاری زنوز

    سلام تشکر از مطالب pwm دیمر led