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

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

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

در سلسله آموزش های تحلیل و بررسی کتابخانه، در این قسمت به بررسی کتابخانه تراشه PCA9685 می پردازیم. این تراشه که بر مبنای آن یک ماژول توسط Ada Fruit توسعه یافته، قادر به درایو ۱۶ سرور موتور می باشد. از طرفی دیگر این ماژول از پروتکل I2C جهت راه اندازی و کار استفاده می کند. بدین ترتیب به کمک تنها دو پایه، قادر به کنترل ۱۶ پایه با ایجاد پالس PWM خواهید بود. جهت راه اندازی و کار با این ماژول کتابخانه تحت آردوینو توسط شرکت آدافروت توسعه یافته که در این آموزش به تحلیل و بررسی آن می پردازیم. در ادامه این آموزش با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک، همراه باشید.

 


نصب کتابخانه PCA9685 توسعه AdaFruit


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

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

 

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

 

  • در نهایت فولدر را در مسیر نصب آردوینو و در قسمت libraries کپی نمایید. از آنجاییکه معمولا نرم افزار آردوینو در درایو c نصب می گردد، لذا مسیر زیر را برای قرار دادن این فولدر در پیش بگیرید.

C:->Program Files->Arduino->Libraries

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

 


الزامات و نکات فنی در استفاده از کتابخانه PCA9685


 پیش از استفاده از کتابخانه، می بایست به بررسی الزامات فنی آن بپردازیم. از آنجاییکه آی سی PCA9685 از پروتکل I2C پشتیبانی می کند، لذا برد مورد استفاده شما می بایست به صورت سخت افزاری از این پروتکل پشتیبانی نماید. این کتابخانه تحت پلتفرم آردوینو توسعه یافته و می توان انتظار داشت که از آن در تمامی بردها استفاده نمود.

الزامات و نکات فنی در استفاده از کتابخانه PCA9685 - دیجی اسپارک

 


توابع کلیدی و کاربردی کتابخانه PCA9685 توسعه یافته توسط AdaFruit


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

شرح ورودی ها تابع
این تابع، تابع سازنده کلاس کتابخانه است. ورودی های این تابع هر دو اختیاری بوده و در صورت عدم تعیین، به صورت خودکار تعیین خواهند شد. این تابع برای راه اندازی و کار با کتابخانه، الزامی است. ورودی اول از نوع ثابت و بدون علامت ۸ بیتی بریا تعیین آدرس I2C تراشه

ورودی دوم اشاره گر از نوع کلاس کتابخانه I2C جهت تعیین پایه های I2C

  Adafruit_PWMServoDriver(const uint8_t addr, TwoWire &i2c)
به کمک این تابع ارتباط بین ماژول و برد آردوینو و (یا سایر بردها) فراهم می گردد.

ورودی این تابع اختیاری بوده و تقسیم فرکانسی نسبت به فرکانس کریستال روی برد را تعیین می کند. این فرکانس در PWM کاربرد دارد.

می توانید این ورودی را خالی بگذارید.

ورودی از نوع بدون علامت ۸ بیتی

 

void begin(uint8_t prescale = 0)
به کمک این تابع ماژول در حالت sleep قرار خواهد گرفته و توان مصرفی آن کاهش می یابد. بدون ورودی void sleep()
به کمک این تابع ماژول از حالت sleep خارج خواهد شد. بدون ورودی   void wakeup()
به کمک این تابع فرکانس PWM تنظیم می گردد. این فرکانس در ووردی تابع قرار گرفته و تا ۱۶۰۰ کیلوهرتز معتبر است. ورودی از نوع اعشاری void setPWMFreq(float freq)
به کمک این تابع خروجی ماژول تنظیم می شود. در صورت true بودن خروجی به صورت push pull و در غیر اینصورت به صورت open drain نیز خواهد بود. ورودی از نوع بولین void setOutputMode(bool totempole)
به کمک این تابع عدد پالس PWM تنظیم شده در خروجی قرار می گیرد.

در ورودی این تابع شماره پایه ای که می خواهید PWM آن را بدانید تعیین می گردد. در خروجی نیز عدد PWM قرار می گیرد.

ورودی از نوع بدون علامت ۸ بیتی   uint8_t getPWM(uint8_t num)
به کمک این تابع سیگنال PWM تنظیم می شود. ورودی نخست پایه خروجی که بین ۰ الی ۱۵ قابل تعیین است را تعیین می کند. ورودی  دوم مدت زمان ON بودن و ورودی سوم مدت زمان OFF بودن را تعیین می کند. این مقادیر در بازه ۰ الی ۴۰۹۶ (به دلیل ۱۲ بیت بودن دقت PWM تراشه) تعیین می گردد. ورودی اول از نوع ۸ بیتی بدون علامت جهت تعیین شماره پایه از ۰ الی ۱۵

ورودی دوم از نوع ۱۶ بیتی بدون علامت جهت تعیین مدت زمان ON بودن

ورودی سوم از نوع ۱۶ بیت بدون علامت جهت تعیین  مدت زمان OFF بودن

void setPWM(uint8_t num, uint16_t on, uint16_t off)
این تابع فرم ساده تری از ایجاد موج PWM را فراهم می کند. در این تابع ورودی اول شماره پایه، ورودی دوم عدد pwm بین ۰ الی ۴۰۹۵ را تعیین کرده و بدین ترتیب موج pwm ایجاد خواهد شد. خروجی سوم این تابع اختیاری بوده و می توانید آن را خالی بگذارید. اگر این خروجی true تعیین شود، خروجی pwm همواره به صورت invert نسبت به ورودی تعیین شده، ایجاد خواهد شد.

 

ورودی اول از نوع بدون علامت ۸ بیتی جهت تعیین شماره پایه خروجی بین ۰ الی ۱۵

ورودی دوم از نوع بدون علامت ۱۶ بیتی جهت تعیین مقدار PWM که این مقدار بین ۰ الی ۴۰۹۵ باید باشد.

ورودی سوم در صورتیکه true باشد، خروجی به صورت معکوس ظاهر می گردد.

  void setPin(uint8_t num, uint16_t val, bool invert = false)
به کمک این تابع فرکانس اسیلاتور ماژول تعیین می گردد. ورودی از نوع بدون علامت ۳۲ بیتی void setOscillatorFrequency(uint32_t freq

 

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

 


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


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

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); //ایجاد یک شی از کلاس کتابخانه سرو
void setup() {
  Serial.begin(9600);
  Serial.println("16 channel PWM test!");
  pwm.begin(); //راه اندازی و برقررای ارتباط با ماژول
  pwm.setOscillatorFrequency(27000000);   //تعیین فرکانس کریستال
  pwm.setPWMFreq(1600);  // This is the maximum PWM frequency!
  Wire.setClock(400000);
}

void loop() {
  pwm.setPin(0, 1023);//مقدار ۱۰۲۳ روی پایه ۰ قرار می گیرد.
}

 


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


انواع برد آردوینو

انواع برد ESP8266

ماژول درایور سرو موتور ۱۶ کانال

 


جمع بندی


 در این آموزش به تحلیل و بررسی کتابخانه آردوینو مخصوص درایور موتور سرو پرداختیم. این کتابخانه که برای کار با تراشه PCA9685 توسعه یافته، راه اندازی سرو موتورها را بسیار ساده می کند. ماژول درایور موتور ۱۶ کاناله دارای پروتکل I2C بوده که تنها از طریق دو پایه، می تواند ۱۶ موتور سرو را کنترل نماید. در این آموزش همانند رویه آموزش های تحلیل کتابخانه، ابتدا به نصب و بررسی نکات فنی کتابخانه پرداختیم. سپس در ادامه توابع کلیدی و کاربردی کتابخانه مورد بررسی قرار گرفت. در نهایت با ارائه یک مثال، نحوه استفاده از توابع در یک برنامه را مشاهده نمودیم.

 

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

 

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

معین صابری

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

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

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