جلسه ششم ریز پردازنده : تولید سیگنال PWM با ESP32

Developer Developer Developer Developer

آخرین مطالب ارسالی

جلسه نهم ریزپردازنده اتصال صفحه کلید ماتریسی 4*4 به esp32
جلسه هشتم ریزپردازنده : دریافت اطلاعات سنسور دما و رطوبت (dht11)توسط esp3 و نمایش روی صفحه موبایل
جلسه هفتم ریزپردازنده : راه اندازی وب سوکت برای کنترل گرافیکی نور LED از طریق مرورگر با  ESP32
جلسه ششم ریز پردازنده : تولید سیگنال PWM با ESP32
جلسه پنجم ریزپردازنده : کنترل esp32  در یک شبکه wifi  با موبایل توسط اپلیکیشن اندروید virtuino
جلسه چهارم ریز پردازنده : اتصالات wifi  در esp32 و نحوه استفاده همزمان از ایستگاه و حالت نقطه اتصال
جلسه چهارم ریزپردازنده : ارتباط وای فای با esp32
جلسه سوم ریز پردازنده توابع ورودی و خروجی در برنامه نویسی esp32
جلسه چهارم ریز پردازنده اتصال esp32 به شبکه Wi-Fi
جلسه دوم ریز پردازنده
دانلود درایور cp2102 برای پروگرم کردن esp
تعطیلی کلاسهای ۱۴ فروردین ۱۴۰۲
معرفی چند سایت برای خرید اینترنتی قطعات الکترونیکی
آموزش نصب کتابخانه  درنرم افزار آردوینو IDE
نصب برد ESP32 بر روی Arduino IDE
آشنایی با پایه های ESP32
آموزش نصب نرم افزار Arduino
آشنایی با نرم افزار Arduino
معرفی esp32
دانلود نرم افزار ARDUINO 2.0.3

جلسه ششم ریز پردازنده : تولید سیگنال PWM با ESP32

مقدمه و پیش نیاز

موج مربعی یا pwm یا Pulse Width Modulation به معنی مدولاسیون پهنای پالس، روشی برای تنظیم توان الکتریکی، با تغییردادن زمان قطع‌ و‌ وصل شدن منبع در هر سیکل است. در واقع pwm یک سیگنال مربعی می باشد که در یک زمان می تواند ۱ یعنی ۵لت و یا ۰ که یعنی ۰ولت باشد که در این بین ما با تغییر Duty Cycle به نتیجه دلخواه که در نور led، حرکت در سروو و موارد دیگر می شویم. برای مثال اگر Duty Cycle یک موج PWM برابر با ۸۰% باشد یعنی در هر سیکل ۸۰% ولتاژ برابر ۵ولت و ۲۰% ولتاژ برابر۰ است.در شکل زیر PWM نشان داده شده است.

شناخت موج مربعی Pulse Width Modulation - دیجی اسپارک


ال ای دی LED


لازم دونستم توضیح کوتاهی هم درباره LED ها بدم، LED نوعی دیود می باشد که مختصر شده Light Emitting Diode می باشد، که در واقع به معنای دیود های نوری می باشد زیرا دیود ها به دسته های مختلفی تقسیم بندی می شوند برای مثال دیدود های یکسو ساز که نمونه ای از آن که احتمالا به گوش شما خورده ۱N4007 که برای مثالی برای هدایت جریان از آن استفاده می شود. LED مانند همه دیود ها از بخش آند یا مثبت و کاتد یا منفی تشکیل شده اند که در led ها برخورد الکترون های مثبت و منفی باعث ایجاد نور می شود.

وب سرور ESP32: کنترل نور LED

کنترلر LED PWM در ESP32

برد ESP32 دارای یک کنترلر LED PWM مستقل، با 16 کانال مستقل می باشد. این کانال ها می توانند سیگنال های PWM را با ساختارهای مختلفی، تولید کنند. برای اجرای پروژه دیم کردن LED با PWM, مراحل زیر را دنبال کنید:

  1. ابتدا باید یک کانال PWM انتخاب کنید. ( 16 کانال از 0 تا 15 داریم )
  2. در قدم دوم؛ فرکانس سیگنال PWM را ست کنید. ( فرکانس 5000 هرتز برای LED مناسب است )
  3. اکنون رزولوشن دوره کاری/duty cycle سیگنال، تنظیم کنید.
  4. GPIO یا پین هایی که می خواهید سیگنال از آن تولید شود را مشخص کنید. بدین منظور از تابع زیر استفاده می شود:
ledcAttachPin(GPIO, channel)

تابع فوق 2 آرگومان را می پذیرد، پینی که سیگنال را به خروجی می دهد و کانالی که سیگنال را تولید می کند.

5. جهت کنترل شدت نور (میزان روشنایی) LED توسط PWM، از تابع زیر استفاده کنید:

ledcWrite(channel, dutycycle)

تابع فوق, کانالی که سیگنال PWM را تولید می کند و دوره کاری را به عنوان آرگومان می پذیرد.

در مرحله سوم, باید توجه داشته باشید که رزولوشنی که شما دارید از 1 تا 16 بیت می باشد. ما در اینجا رزولوشن 8 بیت را ست کردیم, بدین معنا که روشنایی led توسط مقادیر از 0 تا 255، قابل کنترل می باشد.

بستن مدار

LED را به GPIO 16 برد ESP32, مطابق شکل زیر متصل کنید:

LED-سیگنال PWM-برد ESP32

LED-سیگنال PWM-برد ESP32

← لزوماً نباید به پایه 16 کنید! شما می توانید اتصال را به پایه های دیگر نیز انجام دهید:

کد نویسی

کد زیر را در Arduino IDE کپی کنید:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

// the number of the LED pin

const int ledPin = 16; // 16 corresponds to GPIO16

// setting PWM properties

const int freq = 5000;

const int ledChannel = 0;

const int resolution = 8;

void setup(){

// configure LED PWM functionalitites

ledcSetup(ledChannel, freq, resolution);

// attach the channel to the GPIO to be controlled

ledcAttachPin(ledPin, ledChannel);

}

void loop(){

// increase the LED brightness

for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){

// changing the LED brightness with PWM

ledcWrite(ledChannel, dutyCycle);

delay(15);

}

// decrease the LED brightness

for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){

// changing the LED brightness with PWM

ledcWrite(ledChannel, dutyCycle);

delay(15);

}

}

نحوه عملکرد کد

  • ابتدا پایه ای که LED به آن متصل است, تعریف می شود:

1

const int ledPin = 16; // 16 corresponds to GPIO16

  • در ادامه کد, مشخصات سیگنال PWM را تنظیم می کنیم؛ فرکانس را بر روی 5000هرتز، کانال 0 را برای تولید سیگنال انتخاب کرده و رزولوشن 8 بیت را ست کردیم.

1

2

3

const int freq = 5000;

const int ledChannel = 0;

const int resolution = 8;

  • در ()setup, مشخصاتی که در قسمت بالا تعریف کردید را توسط تابع ()ledcSetup، پیکربندی می شود. این تابع, کانال ال ای دی ledChannel، فرکانس frequency و رزولوشن resolution را به عنوان آرگومان دارد:

1

ledcSetup(ledChannel, freq, resolution);

  • در قدم بعدی باید, پایه ای که سیگنال را دریافت و کانالی که سیگنال را تولید می کند، تعریف شود. در این مثال؛ سیگنال در ledPin ( پایه GPIO 16 ) تولید می شود و کانالی که سیگنال را ایجاد می کند، ledChannel است. ( کانال شماره 0 )

1

ledcAttachPin(ledPin, ledChannel);

  • در loop، دوره کاری (duty cycle) بین مقادیر 0 تا 255 برای افزایش روشنایی LED، تغییر خواهد کرد:

1

2

3

4

5

for(int dutyCycle = 0; dutyCycle <= 255; dutyCycle++){

// changing the LED brightness with PWM

ledcWrite(ledChannel, dutyCycle);

delay(15);

}

  • تغییر بین 255 تا 0 برای کاهش سطح روشنایی led می باشد:

1

2

3

4

5

for(int dutyCycle = 255; dutyCycle >= 0; dutyCycle--){

// changing the LED brightness with PWM

ledcWrite(ledChannel, dutyCycle);

delay(15);

}

  • به منظورتنظیم کردن LED در یک سطحی از روشنایی؛ از تابع ()ledcWrite استفاده می شود. این تابع دو آرگومان: کانالی که سیگنال تولید می کند و دوره کاری را در خود دارد.

1

ledcWrite(ledChannel, dutyCycle);

دانلود کد آردینو

دانلود کد متنی

برچسب‌ها:
مرتضی رضایی ادامه مطلب