راه اندازی PWM رزبری پای پیکو – Raspberry Pi Pico PWM

PWM رزبری پای پیکو یک واحد پرکاربرد از این برد است. سیگنال PWM کاربرد گستردهای در الکترونیک دارد و از مدولاسیونهای مخابراتی گرفته تا درایو موتورها استفاده میشود. در این مقاله ابتدا به توضیحات کلی در مورد سیگنال PWM پرداختهایم و در ادامه واحد PWM رزبری پای پیکو را با زبان میکروپایتون راهاندازی نمودهایم.
PWM چیست
سیگنال PWM (یا Pulse Width Modulation) یک سیگنال دیجیتال (دو سطحی) است که معمولا فرکانس آن ثابت است اما عرض پالس آن (Pulse Width) بر اساس دیتایی که حمل میکند تغییر میکند. نسبت مدت زمان high بودن سیگنال PWM به کل مدت زمان یک پریود از آن را اصطلاحا DT (یا Duty Cycle) میگویند. اگر دوست دارید اطلاعات بیشتری در مورد PWM داشته باشید میتوانید به مقاله PWM چیست مراجعه کنید.
واحد PWM رزبری پای پیکو
واحد PWM رزبری پای پیکو توسط یک سخت افزار مجزا درون چیپ RP2040 تحقق داده شده است. این واحد دارای 8 کانال مجزا است که هر کانال دو خروجی دارد (مجموعا 16PWM). کانالها از نظر فرکانس و Duty Cycle کاملا مجزا هستند اما دو خروجی یک کانال فرکانس یکسان دارند (و Duty Cycle مستقل). این کانالها روی تمام پایههای رزبری پای پیکو به صورت زیر پخش شدهاند.

توضیحات بیشتر در مورد واحد PWM را میتوانید در دیتاشیت چیپ RP2040 بیابید.
راه اندازی PWM رزبری پای پیکو
در این بخش میخواهیم یک پالس PWM با عرض پالس 25% روی پین GP0 برد Raspberry Pi Pico ایجاد کنیم و نتیجه را روی اسیلوسکوپ ببینیم.

ابتدا کلاسهای Pin و PWM را از ماژول machine میکروپایتون import میکنیم. اگر در مورد کلاس Pin و یا import کردن ماژولها در میکروپایتون به اطلاعات بیشتری نیاز دارید میتوانید به مقاله راه اندازی پایههای رزبری پای پیکو مراجعه کنید.
from machine import Pin, PWM
سپس یک نمونه (instance) از کلاس PWM با نام pwm0 میسازیم و پین GP0 را به آن نسبت میدهیم (این نام دلخواه است).
pwm0 = PWM(Pin(0))
در ادامه فرکانس پالس PWM را روی 1kHz کانفیگ میکنیم. متد freq عددی که به عنوان ورودی دریافت کند را به عنوان فرکانس PWM قرار میدهد.
pwm0.freq(1000)
و در انتها باید مقدار Duty Cycle را تنظیم کنیم. متد duty_u16 یک عدد 16 بیتی را به عنوان ورودی دریافت کرده و با توجه به آن Duty Cycle را تنظیم میکند. عدد 0 به معنی Duty Cycle با مقدار 0% و عدد 65535 به معنی Duty Cycle با مقدار 100% است. باقی اعداد بین این دو به صورت خطی رابطه مستقیم با Duty Cycle دارند. به عبارت دیگر درصد عرض پالس از رابطه زیر مشخص میشود که x عدد ارسالی به تابع duty_u16 است.
D = (x/65535) * 100
حال برای آنکه مقدار D به 25% برسد باید عدد 65535/4 را به عنوان ورودی به متد duty_u16 ارسال کنیم. البته ابتدا باید آن را به صورت عدد صحیح درآوریم.
pwm0.duty_u16(int(65535/4))
از آنجا که خود پایتون عملگر تقسیم صحیح دارد (عملگر // ) میتوان کد را به صورت زیر بازنویسی کرد.
pwm0.duty_u16(65535//4)
برنامه نهایی به صورت زیر خواهد بود.
from machine import Pin, PWM pwm0 = PWM(Pin(0)) pwm0.freq(1000) pwm0.duty_u16(65535//4)
اگر با اسیلوسکوپ پایه GP0 برد رزبری پای پیکو را مانیتور کنیم شکل زیر را میبینیم

در انتها
در انتها از شما دعوت میکنیم نظرات خود راجع به این مقاله و همچنین تجربیات ارزشمندتان از کار با PWM رزبری پای پیکو را در بخش نظرات این نوشته با ما و دیگر دوستانتان به اشتراک بگذارید.
دیدگاهتان را بنویسید