تحلیل کتابخانه

تحلیل و بررسی کتابخانه MD_PWM

md-pwm-h-arduino-library-digispark
نوشته شده توسط معین صابری

در مجموعه آموزش های تحلیل و بررسی کتابخانه ها، این قسمت را به یک کتابخانه کلیدی و کاربردی اختصاص می دهیم. کتابخانه MD_PWM، کتابخانه ایست که به کمک آن می توان  بر روی پایه های دلخواه، سیگنال PWM ایجاد نمود. همانطور که اطلاع دارید، برد آردوینو UNO با پردازنده ATMEGA328P و آردوینو نانو، تنها بر روی یکسری از پایه ها می توانند سیگنال PWM ایجاد کنند. اما به کمک این کتابخانه ما قادر به ایجاد سیگنال  PWM بر روی پایه های دلخواه خواهیم بود. سیگنال PWM، موجی به صورت میانگیر شده از مقادیر ۰ و ۱ است. بدین ترتیب به کمک سیگنال دیجیتال، می توانیم یک سیگنال آنالوگ بسازیم. در ادامه، با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک، همراه باشید.

 


موج PWM


پیش از آنکه به ادامه بحث بپردازیم، به طور مختصر به بررسی موج PWM خواهیم پرداخت. همانطور که اطلاع دارید، در یک برد آردوینو، پایه خروجی تنها مقادیر ۰ یا یک را می تواند تولید کند. به عبارت دیگر، این پایه تنها قادر به ایجاد ولتاژهای ۰ یا ۵ ولت بوده و هیچ ولتاژی بین این دو مقدار، قابل ایجاد برای این برد نخواهد بود. این همان تعریف منطق بولین است. در منطق بولین، تنها دو مقدار ۰ یا ۱ مجاز و قابل قبول هستند. این در حالیست که در منطق فازی، مقادیر دیگر بین ۰ یا یک یا همان صفر یا پنج ولت، معتبر شناخته می شوند.

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

 

منطق فازی و منطق بولین را می توان مشابه به اعداد گسسته و پیوسته دانست. طبق اتعریف اعداد گسسته، مقادیر قایل قبول اعداد ۱، ۲، ۳ و… هستند. این در حالیست که در تعریف اعداد پیوسته، مابین اعداد ۱ و ۲، بی نهایت عدد را قابل قبول می داند. به کمک سیگنال PWM ما می توانیم به کمک منطق دیجیتال، منطق فازی پیاده سازی کنیم. به عبارت دیگر به جای اینکه در خروجی تنها ۰ و یا ۵ ولت داشته باشیم، می توانیم یک ولت، ۲ ولت، ۳ ولت، ۴ و مقادیری حتی به صورت اعشاری اختیار کنیم. سیگنال PWM با ایده میانگین گیری ولتاژ ساخته می شود. به عنوان مثال، فرض کنید در یک بازه ۱۰ ثانیه ای، برای ۷ ثانیه ولتاژ ۵ و در سه ثانیه دیگر ولتاژ ۰ باشد. طبعا در این حالت، ۷۰ درصد مواقع ما ولتاژ ۵ داریم. بدین ترتیب با حاصلضرب ۷۰ در ۵ و تقسیم بر ۱۰۰، ولتاژ ۳٫۵ ولتی خواهیم داشت. در رابطه با  PWM پیشتر آموزشی در دیجی اسپارک منتشر شده است. این آموزش را با کلیک بر روی این لینک می توانید مشاهده کنید. پس از آشنایی نسبی با مفهوم PWM، قسمت های بعد را به کتابخانه اختصاص می دهیم. همانطور که اطلاع دارید، برد اردوینو UNO تنها بر روی پایه های خاصی می تواند سیگنال PWM ایجاد کند. این در حالیست که به کمک این کتابخانه می توانیم بر روی پایه های دلخواه، سیگنال PWM اجرا شود.

 


نصب کتابخانه MD_PWM


به منظور استفاده از کتابخانه MD_PWM، ابتدا می بایست آن را نصب کنیم. به همین منظور، ابتدا در نرم افزار آردوینو بر روی گزینه Tools و سپس Manage Libraries را کلیک کنید. پس از کلیک بر روی این گزینه، با تصویر زیر رو به می شوید. این منو کتابخانه های در دسترس را به شما نشان می دهد. شما نیز می توانید با جستجوی نام کتابخانه مورد نظر خود، آن را در مخازن آردوینو یافته و سپس نصب کنید. مطابق تصویر زیر، در کادر جست و جو عبارت MD_PWM را تایپ کرده و کتابخانه ای را که با کادر قرمز رنگ مشخص شده، با کلیک بر روی گزینه Install، نصب کنید.

نصب کتابخانه MD_PWM در آردوینو - دیجی اسپارک

 


 الزامات و نکات فنی کتابخانه MD_PWM


کتابخانه MD_PWM از تایمرهای میکروکنترلر AVR جهت ایجاد سیگنال PWM بهره می برد. از آنجاییکه تایمر شماره صفر پیشتر برای تابع millis رزرو شده، بنابراین این کتابخانه از تایمر های شماره ۱ یا ۲ جهت زمانبندی و ایجاد وقفه برای تولید سیگنال PWM استفاده می کند. توجه داشته باشید که این کتابخانه بر روی بردهای مبتنی بر میکروکنترلر ATMEGA328P اجرا شده است. انتظار می رود که این کتابخانه بر روی سایر بردهای مبتنی بر میکروکنترلر AVR نظیر آردوینو MEGA قابلیت استفاده داشته باشد. اما این کتابخانه بر روی بردهای مبتنی بر سایر تراشه ها، نظیر ESP قابلیت استفاده نخواهد داشت. از این رو دقت نظیر لازم را در نظر داشته باشید. همچنین این کتابخانه به صورت پیشفرض از تایمر شماره ۲ استفاده می کند. شما می توانید در فایل هدر کتابخانه(.h) تغییرات لازم را اعمال کنید. این تغییرات با تنظیم #define زیر، اجرا می شود.

#define USE_TIMER 2

 

توجه۱: از آنجاییکه این کتابخانه از وقفه تایمر برای اجرای کار خود استفاده می کند، به جدول اولویت های وقفه ها دقت داشته باشید.

توجه۲: این کتابخانه نهایتا تا ۴ پایه را می تواند به عنوان PWM تعریف کند.

پس از بررسی الزامات فنی، نوبت به تحلیل و بررسی توابع کلیدی و کاربردی می رسد. قسمت بعد مربوط به این موضوع است.

 


توابع کلیدی و کاربردی کتابخانه MD_PWM


همانطور که پیشتر گفته شد، این قسمت را به تحلیل توابع کلیدی اختصاص می دهیم. جدول زیر لیست توابع اصلی و کاربردی این کتابخانه را نمایش می دهد.

شرح ورودی تابع
این تابع در حقیقت تابع سازنده از کلاس کتابخانه است. ورودی تابع شماره پایه جهت ایجاد موج PWM خواهد بود. ورودی جهت تعیین پایه MD_PWM(uint8_t pin)
به کمک این تابع کتابخانه PWM با فرکانسی که در ورودی قرار گرفته را اندازه می شود. مقدار پیش فرض(در صورت عدم تعیین ورودی) ۳۰۰ هرتز است. ورودی جهت تعیین فرکانس PWM bool begin(uint16_t freq = MAX_FREQUENCY)
به کمک این تابع می توان Duty Cycle را تعیین کرد. این مقدار در ورودی تابع و بین ۰ الی ۲۵۵ تعیین می گردد. ورودی جهت تعیین Duty Cycle void write(uint8_t duty)
غیر فعال سازی PWM برای پین تعیین شده بدون ورودی bool disable(void);
فعال سازی PWM برای پین تعیین شده بدون ورودی bool enable(void);

پس از تحلیل و بررسی توابع کلیدی و کاربردی، نوبت به اجرای یک نمونه برنامه می رسد. قسمت بعد مربوط به این مورد است.

 


اجرای یک نمونه برنامه


در این قسمت به اجرای یک نمونه برنامه می پردازیم. در این برنامه یکی از پایه ها به عنوان خروجی PWM تعریف می گردد. برای راحت تر شدن موضوع، پایه شماره ۱۳ را به عنوان خروجی تعریف کرده و نور LED متصل به آن را از کم به زیاد کنترل می کنیم. این LED بر روی برد آردوینو تعبیه شده است.

#include "MD_PWM.h"
MD_PWM pwm(13);
void setup() {
  pwm.begin();
}

void loop() {
  for (int i = 0; i < 255; i++) {
    pwm.write(i);
    delay(200);
  }

}

 


لوازم مورد نیاز


آردوینو UNO

آردوینو نانو

 


جمع بندی


در مجموعه آموزش های تحلیل و بررسی کتابخانه ها، این آموزش را به بررسی کتابخانه MD_PWM اختصاص دادیم. از آنجاییکه بردهای آردوینو تنها بر روی تعداد خاصی از پایه ها قادر به تولید سینال PWM هستند؛ لذا به کمک این کتابخانه شما می توانید روی پایه های دلخواه پالس PWM خود را ایجاد کنید. این کتابخانه از تایمرهای داخلی میکروکنترلر جهت تولید پالس PWM بهره می برد. در این آموزش ابتدا به معرفی مختصر تکنیک پالس PWM پرداختیم. سپس در ادامه نصب کتابخانه را مشاهده کردیم. پس از نصب، الزامات و نکات فنی کتابخانه مورد تحلیل قرار گرفت. پس از این قسمت، به تشریح توابع کلیدی و کاربردی پرداختیم. در نهایت با ارائه مثال، نحوه استفاده از توابع را در برنامه های عملی مشاهده نمودیم.

 

چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریع‌ترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند می‌توانید از همین طریق اطلاع رسانی کنید.

 

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

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه