راه اندازی واحد PWM توسط EasyMCU
راه اندازی واحد PWM توسط EasyMCU : تا حالا قصد داشتید سرعت چرخش یک موتور DC را کنترل کنید؟ یا زاویه ی قرار گیری شفت سروو موتور را تعیین کنید؟ شدت روشنایی LED را کنترل کنید؟ یا با ترکیب نورهای متنوع توسط RGB LED ترکیب رنگ های جالب بسازید؟ و یا …
مفهوم PWM
واحد PWM که سرنام کلمات Pulse Width Modulation به مفهوم مدولاسیون عرض پالس می باشد این امکان را به سادگی میسر می سازد. در این تکنیک یک قطار پالس با فرکانس ثابت ساخته می شود و با تعیین میزان عرض پالس بین 0 تا 100% ، میزان روشن (1) و خاموش (0) بودن سیگنال تعیین می شود. به همین سبب با وجود فرکانس مطلوب می توان درصد توانی مشخص و اختیاری به مصرف کننده اختصاص داد.
واحد PWM در Zcross
پایه های P23 تا P28 علاوه بر ورودی/خروجی ، می توانند به عنوان خروجی PWM ( مدولاسیون عرض پالس ) نیز پیکربندی شوند و مورد استفاده قرار بگیرند. برای دسترسی به کلاس PWM و استفاده از متودهای آن در ابتدا به سراغ شیء pwm می رویم. با گذاشتن علامت “.” { “dot” خوانده می شود } بعد از آن می توانیم دسترسی به متودهای کلاس PWM داشته باشیم. به جای x در عبارت pwm.x باید یکی از متود های زیر قرار بگیرد.
1 2 3 4 5 6 7 8 |
init() enable() disable() set() ch() apply() setRange() readCh() |
پیکربندی واحد PWM با فرکانس 60Hz (هرتز) و رزولوشن 100
1 |
pwm.init(60, 100); |
تعیین میزان حداقل و حداکثر مجاز برای Duty Cycle (دوره وظیفه) سیگنال PWM
Duty Cycle یا به اختصار D.C. میزان درصد 1 بودن سیگنال PWM را تعیین می کند.
1 |
pwm.setRange(0, 100); |
فعال کردن پایه ی PWM مدنظر
1 |
pwm.enable(CH6); |
تعیین مقدار Duty Cycle
1 |
pwm.set(CH6, fade); |
توجه:
پایه های P23 تا P28 طبق PinOut بورد Zcross به ترتیب معادل CH6 تا CH1 می شوند. در متودهای فوق بجای CHx می توان از نام خود پایه Px نیز استفاده کرد.
توجه:
با متود set در هر لحظه می توان تنها میزان Duty Cycle یک پایه را تعیین کرد.اما با استفاده از ترکیب متودهای ()ch و ()apply می توان ابتدا مقادیر نهایتا 6 کانال PWM را تعیین کرد و به صورت آنی نهایتا 6 مقدار مختلف در 6 خروجی PWM بورد Zcross داشت. در مثال نمونه ی زیر از این روش استفاده شده است.
نحوه ی سیم بندی پروژه
لطفا هرگونه سوال و … راجع به این مطلب را در انجمن ایزی.ام.سی.یو مطرح نمایید.
مثال نمونه
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
#include "headers.h" /* Fade This example shows how to fade an LED on pin 23 -> P23 = CH6 using pwm.set() | pwm.ch() | pwm.apply() | methods. This example code is in the public domain. */ int main() { int fade = 1; // for store fading amount // initialize pwm frequency and resolution -> 60Hz , 0~100 : pwm.init(60, 100); // set min , max range for duty cycle: pwm.setRange(0, 100); // enable pwm channel: pwm.enable(CH6); while (1) {/* Loop forever */ // set the brightness of pin 23 -> P23 = CH6 -> Check pinout: pwm.ch(6, fade); pwm.apply(); // other available methodes for EasyMCU: //pwm.set(CH6, brightness); //analogWrite(CH6, brightness); // wait and increase fading amount: delay.ms(40); fade++; // fading again and again: if (fade > 99) { fade = 0 ; } } /* while */ } /* main */ |