کنترل پایه ها بر اساس PWM

  • مدرس: علی بیگدلی
  • تاریخ انتشار: Aug 25, 2020

PWM چیست؟

PWM مخفف Pulse Width Modulation می باشد و این تکنیک برای کنترل میزان روشنایی LED، کنترل سرعت موتور DC، کنترل موتور سروو یا جایی است که شما باید از طریق آن به خروجی های آنالوگ بپردازید. پین های دیجیتال Arduino به ما 5V (هنگامی که HIGH تبدیل می شود) یا 0V (هنگامی که LOW تبدیل می شود) به ما می دهد و خروجی سیگنال موج مربعی است. بنابراین اگر می خواهیم LED را کم کنیم، ما نمی توانیم ولتاژ بین 0 و 5V را از پین دیجیتال بدست آوریم، اما می توانیم زمان ON و OFF سیگنال را تغییر دهیم. اگر مدت زمان ON و OFF را به اندازه کافی تغییر دهیم، روشنایی رهبری تغییر خواهد کرد. قبل از رفتن به ادامه، در مورد برخی از شرایط مرتبط با PWM صحبت کنید. TON (در زمان روشن): زمانی که سیگنال بالا است. TOFF (زمان خاموش): زمانی که سیگنال کم است. دوره: این مقدار در زمان و زمان خاموش است. چرخه وظیفه: این درصد زمانی است که سیگنال در طول مدت دوره بالا بود. بنابراین در چرخه کاری 50٪ و فرکانس 1Hz، چراغ به مدت نیم ثانیه بالا خواهد رفت و برای نیم ثانیه دیگر پایین خواهد بود. اگر ما فرکانس را به 50Hz افزایش دهیم (50 بار ON و OFF در هر ثانیه)، سپس منجر به درخشش نوری توسط چشم انسان می شود. آردوینو و PWM IDE آردوینو دارای یک عملکرد ساخته شده است "analogWrite ()" که می تواند برای تولید یک سیگنال PWM استفاده شود. فرکانس این سیگنال تولید شده برای اکثر پین ها حدود 490Hz خواهد بود و ما می توانیم از 0 تا 255 با استفاده از این تابع مقدار دهیم. analogWrite (0) به معنای سیگنال 0٪ چرخه کار است. analogWrite (127) به معنای سیگنال چرخه کار 50٪ است. analogWrite (255) به معنای سیگنال 100٪ چرخه کاری است. در Arduino Uno، پین PWM 3، 5، 6، 9، 10 و 11 است. فرکانس سیگنال PWM در پین 5 و 6 خواهد بود در حدود 980Hz و در دیگر پین 490Hz خواهد بود. پین های PWM با علامت ~ برچسب گذاری می شوند.

به مثال زیر برای ایجاد تغییرات شدت نور در LED توجه کنید:

مثال:

int led_pin = 10;
void setup() {
  //Declaring LED pin as output
  pinMode(led_pin, OUTPUT);
}
void loop() {
  //Fading the LED
  for (int i = 0; i < 255; i++) {
    analogWrite(led_pin, i); delay(5);
  }
  for (int i = 255; i > 0; i--) {
    analogWrite(led_pin, i);
    delay(5);
  }
}

 

ثبت دیدگاه
نام *
ایمیل*
دیدگاه *
0دیدگاه