جلسه هفتم:
استفاده از PWM در MicroPython
مبحث این جلسه از آموزش رایگان میکروپایتون، در مورد مدولاسیون پهنای پالس یا همان PWM است. برای شروع به آموزش این جلسه حتما ابتدا جلسات قبلی آموزش را که لینک آنها در پایین این صفحه آوردهشدهاست، مطالعه کنید.
مقدمه
PWM مخفف Pulse Width Modulation است یا همان مدولاسیون پهنای پالس. به طور کلی و خلاصه برای محدود کردن توان منتقل شده به بار از PWM استفاده میشود. به این صورت که با کم کردن duty cycle توان منتقل شده به بار را کاهش میدهیم. برای آشنایی بیشتر با PWM از این لینک استفاده کنید.
وسایل لازم برای آموزش PWM در MicroPython
1-برد ESP8266 NodeMCU یا ESP32 NodeMCU
- 2-اسیلوسکوپ (یا موتور dc برای تست)
استفاده از PWM در ESP8266
برای استفاده از PWM در ESP8266 به کلاسهای Pin و PWM که هر دو در ماژول machine هستند نیاز داریم.
تنظیمات لازم برای آن عبارتند از:
- شماره PIN مربوط
- تنظیم فرکانس
- مشخص کردن Duty Cycle
ایجاد شی PWM در ESP8266
برای ایجاد یک شی از کلاس PWM از دستور زیر استفاده میکنیم:
from machine import Pin, PWM
pwm1 = PWM(Pin(16)) # create PWM object from a pin
pwm2 = PWM(Pin(0)) # create PWM object from a pin
تنظیم فرکانس PWM در ESP8266
برای تنظیم فرکانس pwm در ESP8266 از دستور زیر استفاده میکنیم
pwm1.freq(1000)
مقدار فرکانس بر حسب هرتز است و برای ESP8266 میتواند عددی بین 1 تا 1000 هرتز باشد. برای نمایش مقدار فعلی میتوانید از دستور زیر استفادهکنید:
print(pwm1.freq())
تنظیم Duty Cycle در ESP8266
برای تنظیم duty cycle میتوانید از دستور زیر استفادهکنید:
pwm1.duty(200) # set duty cycle
pwm2.duty(500) # set duty cycle
مقدار duty cycle میتواند به عددی بین 0 تا 1023 تنظیم شود. مثلا برای تنظیم duty cycle روی 50 درصد از عدد 511 استفاده میکنیم.
برنامه نمونه PWM در ESP8266
کد زیر یک برنامه نمونه برای استفاده از pwm در میکروپایتون برای ESP8266 است . در این برنامه از دو کانال pwm که روی فرکانس هر دو روی 1KHz و duty cycle پایه 0 روی 200 و پایه 16 روی 500 تنظیم شده است که این کانالها 10 ثانیه فعال هستند و بعد غیر فعال میشوند:
from machine import Pin, PWM
from time import sleep
pwm1 = PWM(Pin(1)) # create PWM object from a pin
pwm2 = PWM(Pin(16)) # create PWM object from a pin
pwm1.freq(1000) # set frequency
pwm2.freq(1000) # set frequency
pwm1.duty(200) # set duty cycle
pwm2.duty(500) # set duty cycle
sleep(10) #wait for 10sec
pwm1.deinit()#turn off pwm1
pwm2.deinit()#turn off pwm2
طبق روال گذشته این کد را در یک فایل به نام pwm.py ذخیره میکنیم و آن را در حافظه فلش ماژول ذخیره میکنیم و در main.py کد import pwm را استفادهمیکنیم. بعد از فشردن دکمه ریست کد اجرا میشود. تصویر نمایشگر اسیلوسکوپ به صورت زیر است:
تفاوتهای PWM در ESP32
در Esp32 استفاده از PWM متفاوت است و تفاوتها به صورت زیر است:
- 1- فرکانس از 1 تا 40MHz قابل تغییر است.
- 2- حداکثر فرکانس بستگی به فرکانس سیستم دارد.
- 3-برای تنظیم دیوتی سایکل روش های مختلفی وجود دارد
- 4- 8 پایه میتوانند دیوتی سایکل متفاوت داشته باشند و 8 پایه دیوتی سایکل مشترک
برنامه نمونه در ESP32
برای استفاده از PWM در ESP32 از کد نمونه زیر استفاده کنید:
from machine import Pin, PWM
pwm0 = PWM(Pin(0)) # create PWM object from a pin
pwm0.freq(1000) # set PWM frequency from 1Hz to 40MHz
pwm0.duty(256) # set duty cycle from 0 to 1023 as a ratio duty/1023, (25%)
pwm0.duty_u16(2**16*3//4) # set duty cycle from 0 to 65535 as a ratio duty_u16/65535, (75%)
pwm0.duty_ns(250_000) # set pulse width in nanoseconds from 0 to 1_000_000_000/freq, (25%)
pwm0.duty_ns() # get current pulse width in ns
pwm0.deinit() # turn off PWM on the pin
جمع بندی جلسه ششم آموزش Micropython
این جلسه هم به پایان رسید امیدوارم محتوای این جلسه برای شما مفید باشد. برای جلسه بعد مبحث I2C را برای شما آماده میکنیم.