مدولاسیون پهنای باند Pulse Width Modulation، یک تکنیک برای دریافت خروجی آنالوگ از دیجیتال است. کنترل دیجیتال برای ساخت یک موج مربعی استفاده میشود. سیگنالی که بین صفر و یک سوییج شده و فقط دو حالت دارد. الگوی خاموش و روشن میتواند ولتاژ را بین ۵ ولت یا ۳٫۳ ولت تا GND شبیه سازی کند. مدت زمان سپری شده در این بازه را عرض پالس PULSE WIDTH مینامند. برای به دست آوردن مقادیر آنالوگ متفاوت، باید عرض پالس PULSE WIDTH را شبیه سازی کرد. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
مدولاسیون پهنای پالس یا PWM چیست
PWM چیست و چه کاربردی دارد
استفاده از PWM یکی از روشهای مهم و مؤثر در کنترل قدرت الکتریکی در پروژههای الکترونیکی است. استفاده از PWM میتواند بازدهی و کارایی سیستم را افزایش دهد، زیرا این تکنیک به ارائه کنترل دقیق بر روی قدرت الکتریکی کمک میکند. با تنظیم دقیق پهنای باند پالسهای الکتریکی، میتوان قدرت الکتریکی را به نحوی تنظیم کرد که بازدهی بیشتری داشته باشد. PWM برای کنترل سرعت موتورها و سایر محرکهای الکتریکی استفاده میشود. با تنظیم پهنای باند پالسها، میتوان سرعت موتور را تنظیم کرد و همچنین قدرت الکتریکی مورد نیاز را برای حرکت موتور تنظیم کرد. PWM به طور گسترده برای کنترل روشنایی در ال ای دی ها و سایر روشنایی ها استفاده میشود. با تغییر پهنای باند پالسهای الکتریکی، میتوان روشنایی دستگاه را تنظیم کرد.
تفاوت بین چرخه کاری و فرکانس یک سیگنال PWM چیست؟
چرخه کاری به صورت درصد از زمان کل دوره PWM بیان میشود و به عنوان دوره کاری نیز شناخته میشود. به عنوان مثال، اگر دوره کاری یک سیگنال PWM برابر با ۶۰ درصد باشد، به معنی این است که پالس الکتریکی به مدت ۶۰ درصد از دوره PWM در حال ON بودن است و به مدت ۴۰ درصد دیگر در حال OFF بودن است. بنابراین، میتوان گفت که فرکانس سیگنال PWM تعداد پالسهای الکتریکی در هر ثانیه را نشان میدهد و چرخه کاری به مدت زمانی اشاره دارد که پالس الکتریکی در حال ON یا OFF بودن است. سه پارامتر اصلی PWM به صورت زیر است.
- TON = ON TIME = زمانیکه سیگنال در بالاترین حد HIGH است.
- TOFF = OFF TIME = زمانیکه سیگنال در پایین ترین حد LOW است.
- پریود = PERIOD = حاصل جمع زمان TON و TOFF پریود گفته میشود.
- دیوتی سایکل = DUTY CYCLE = درصد زمان هنگامی که سیگنال در بالاترین حد در مدت زمان مشخص باشد.
به عنوان مثال در دیوتی سایکل ۵۰% و فرکانس ۱Hz، ال ای دی به مدت نیم ثانیه در بالاترین حد HIGH و به مدت نیم ثانیه دیگر در پایین تر حد LOW تغییر وضعیت میدهد. اگر فرکانس را تا ۵۰Hz افزایش دهیم، ال ای دی ها با نور بیشتری روشن خواهند شد. به تصویر زیر نگاه کنید. در دیوتی سایکل ۲۰ درصد، مدت زمان یا همان PERIOD کوتاه تر است و رفته رفته با افزایش دیوتی سایکل پریود طولانی تر خواهد شد. هر خط عمودی نشان دهنده ی یک دوره زمانی منظم است.
PWM در آردوینو
با استفاده از PWM، میتوان سرعت سروموتورها را به دقت کنترل کرد و در نتیجه، حرکت دستگاهها را به دقت کنترل کرد. در برخی پروژههای الکترونیکی، نیاز به کنترل دقیق ولوم صدا وجود دارد. با استفاده از PWM، میتوان ولوم صدا را به دقت کنترل کرد و برای پروژههای صوتی دقیق و کارآمد، مناسب است. بهطور کلی، PWM در آردوینو، به کاربر امکان میدهد تا توان موتورها، سرعت سروموتورها، روشنایی LEDها و دمای سیستم را به دقت کنترل کند. با توجه به دقت بالای PWM، این قابلیت، در بسیاری از پروژههای الکترونیکی، بسیار مفید است.
Duty Cycle چیست؟
دوره وظیفه (Duty Cycle) یا همچنین با نام دیوتی سایکل، در مخابرات و الکترونیک به مقدار نسبی یا درصدی از زمان کل یک چرخه مربوط میشود که در آن یک سیگنال فعال است. دوره وظیفه نشان میدهد که در یک دوره زمانی یک سیگنال چه مدتی در حال فعالیت و چه مدتی در حال غیرفعالیت است.به طور معمول، دوره وظیفه به صورت درصدی بیان میشود و مقدار آن بین ۰ تا ۱ یا ۰ تا ۱۰۰ درصد قرار میگیرد. برای مثال، اگر دوره وظیفه ۵۰٪ باشد، این بدان معنی است که سیگنال فعال در نصف زمان یک دوره و غیرفعال در نصف دیگر آن است.دوره وظیفه مهمترین ویژگیهای سیگنالهای پالسی و سیستمهای سوئیچینگ مانند مبدلهای DC-DC را مشخص میکند. با تغییر دوره وظیفه، میتوان کنترل کرد که چه مدتی سیگنال در وضعیت فعال یا غیرفعال قرار میگیرد. این ویژگی از اهمیت بالایی برای کنترل قدرت و توان در مدارها و سیستمهای الکترونیکی برخوردار است.
به عنوان مثال، در مبدل DC-DC، دوره وظیفه میزان زمانی را که خروجی آن در وضعیت فعال یا غیرفعال است را تنظیم میکند. با افزایش دوره وظیفه، زمانی که خروجی فعال است بیشتر میشود و در نتیجه توان خروجی افزایش مییابد. در عوض، با کاهش دوره وظیفه، زمانی که خروجی فعال است کاهش مییابد و توان خروجی نیز کاهش مییابد.دوره وظیفه مفید برای تعیین سیگنالهای پالسی، مدارات سوئیچینگ و کنترل توان است و در صنایع مختلف از جمله الکترونیک، مخابرات، رایانهها و انرژی استفاده میشود.مدولاسیون پهنای باند یا PWM در برنامه نویسی، یک تکنیک برای دریافت خروجی آنالوگ ANALOG از پایه های دیجیتال DIGITAL است.
کنترل دیجیتالی یک موج مربعی صفر و یک در خروجی تولید میکند که بین ۰ و ۱ تغییر وضعیت دارد. این الگوی خاموش و روشن میتواند ولتاژ را بین VCC ( 5, 3.3 V) و GND را با مدت زمان سپری شده تغییر داده و شبیه سازی کند. مدت زمان روشن بودن ONTIME پهنای پالس نامیده میشود. برای دریافت مقادیر آنالوگ مختلف، بایستی پهنای باند را تغییر یا مدوله دهید. اگر همین الگو ON -OFF را با یک ال ای دی برای نمونه اجرا کنید. میتوانید ولتاژ ال ای دی را بین ۰ و ۱ با تغییر شدت نور در هر لحظه مدیریت کنید.
در این تصویر خطوط سبز، نشان دهنده ی یک دوره زمانی منظم است. این مدت زمان همان فرکانس PWM است. فرکانس PWM آردوینو ۵۰۰ هرتز است که با توجه به این تصویر هر ۲ میلی ثانیه اندازه گیری میشود. با فراخوانی AnalogWrite بازه مقیاس بین ۰ تا ۲۵۵ است. به طوریکه اگر مقدار Analogwrite برابر با ۲۵۵ باشد، دیوتی سایکل ۱۰۰ درصد است.
۱۰۰% DutyCycle - AnalogWrite(255)
اگر مقدار AnalogWrite برابر با صفر باشد، دیوتی سایکل ۰ درصد خواهد بود.
۰% Dutycycle - AnalogWrite(255)
به همین ترتیب بازه های بین ۰ تا ۱۰۰ درصد مقادیر متفاوتی از آنالوگ رایت را در اختیار میگیرد. در دیوتی سایکل ۲۵ درصد مقدار Analogwrite برابر با ۶۴ است و در دیوتی سایکل ۵۰ درصد مقدار analogwrite برابر با ۱۲۷ است.
آردوینو و PWM
نرم افزار آردوینو دارای دستور داخلی analogWrite است که برای تولید سیگنال PWM استفاده میشود. فرکانس PWM برای هر پایه ۴۹۰Hz است و در خروجی مقداری بین ۰ تا ۲۵۵ را نمایش میدهد.
اگر مقدار analogWrite صفر باشد به این معنی است که دیوتی سایکل Dutycycle صفر است.
اگر مقدار analogWrite برابر با ۱۲۷ باشد، به این معنی است که دیوتی سایکل ۵۰ درصد است.
اگر مقدار analogWrite برابر با ۲۵۵ باشد به این معنی است که دیوتی سایکل ۱۰۰ درصد است.
استفاده از فانکشن analogWrite
فانکشن AnalogWrite یک مقدار آنالوگ PWM WAVE را بر روی یک پایه رایت میکند. از این تابع برای کنترل ال ای دی ها، سرو موتورها و موتورها استفاده میشود. پس از فراخوانی analogwrite یک موج مربعی با دیوتی سایکل مشخص بر روی پایه اعمال میشود. فرکانس سیگنال pwm در هر پایه تقریبا ۴۹۰Hz است.
روش فراخوانی
analogWrite(pin, value)
- منظور از پین پایه ای است که باید رایت شود.
- منظور از value دیوتی سایکل است که بین عدد ۰ و ۲۵۵ است.
نمونه کد آردوینو تست ال ای دی با PWM
برای تست ماهیت PWM در آردوینو از یک ال ای دی و یک پتانسیومتر برای کنترل شدت نور و رایت مقادیر بر روی پایه استفاده میکنیم.
int ledPin = 9; // ال ای دی به پایه دیجیتال شماره ۹ متصل است int analogPin = 3; // پتانسیومتر به پایه شماره ۳ آنالوگ متصل است int val = 0; // انتخاب یک متغیر برای ذخیره مقادیر خوانده شده void setup() { pinMode(ledPin, OUTPUT); // انتخاب پین به عنوان خروجی } void loop() { val = analogRead(analogPin); // خواندن پین ورودی analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255 // مقادیر ANALOGREAD از ۰ تا ۱۰۲۳ متغیر است و سپس با دستور ANALOGWRITE در بازه ی ۰ تا ۲۵۵ رایت میشود }
اتصال پروژه PWM با آردوینو
تست نمونه کد آردوینو با SERVO MOTOR PWM
#include <Servo.h> Servo myservo; // ساخت یک آبجکت برای سرو موتور int pos = 0; // انتخاب یک متغیر برای ذخیره زاویه void setup() { myservo.attach(9); // مشخص کردن یک پایه برای سرو موتور } void loop() { for (pos = 0; pos <= 180; pos += 1) { // چرخش سرو از تا ۰ تا ۱۸۰ درجه myservo.write(pos); // سرو در زاویه ای که در متغیر POS ذخیره شده است قرار میگیرد delay(15); // توقف به مدت ۱۵ میلی ثانیه for (pos = 180; pos >= 0; pos -= 1) { // چرخش از ۱۸۰ درجه به ۰ درجه myservo.write(pos); // سرو در زاویه ای که در متغیر POS ذخیره شده است قرار میگیرد delay(15); // توقف به مدت ۱۵ میلی ثانیه } }
جدول پایه های PWM در بردهای آردوینو
مثال هایی برای PWM
PWM چندین استفاده دارد.
- کنترل ال ای دی DIMMING LED
- تامین خروجی آنالوگ; اگر خروجی دیجیتال فیلتر شده باشد، ولتاژ آنالوگ بین ۰ تا ۱۰۰ درصد تامین میکند.
- تولید سیگنال صدا
- تامین کنترل دور موتور
- تولید سیگنال مدوله شده
جمع بندی لیدی پای
استفاده از PWM در برنامه نویسی آردوینو پرکاربردترین دستورات برنامه نویسی است. از PWM برای کنترل خروجی و روند افزایشی و کاهشی چراغ ها، کنترل دور موتور استفاده میشود. برای کدنویسی آردوینو برای اعمال دستورات از تابع فانکشن analogWrite استفاده میشود که مقدار دیتا را در همان پایه رایت میکند. در متن آموزش دو آموزش راه اندازی ماهیت PWM نوشته شده است و با یک بار اجرای دستورات میتوانید نحوه ی عملکرد و فراخوانی را یاد بگیرید.
سلام ممنون از مطالب
به نظرم نمونه کد تست servo motor
در انتها یک”{”
کم دارد .
اضافه بشه کد درست میشه
با سلام
کاربر گرامی سپاس از همراهی شما
اصلاح خواهد شد.
سلام
من این برنامه رو نوشتم. مشکل اینه که سرو من فقط ۹۰ درجه می چرخه به نظر شما مشکل از کجاست؟
تشکر
با سلام
زاویه سرو موتور شما چند درجه است؟
سلام. ضمن تشکر سرو معمولی SG90 هستش که ۱۸۰ درجه هست. تشکر
این مورد را با دستورات اصلی کتابخانه سرو موتور تست کنید.
سلام . با اردوینو میشه به سروو موتور دلتا پالس داد . ؟ وایرینگش چجوریه و برنامش چطور ؟؟
با سلام
این مورد توسط بنده تست نشده است. از دیگر کاربرانی که در این خصوص تجربه ای دارند، تقاضا میکنم در بحث شرکت کنند.
سلام ما خروجی از پایه های آنالوگ نداریم؟؟؟
با سلام
از پایه های آنالوگ برای دریافت و ارسال دیتا میتوانید استفاده کنید.
با سلام
برای analgread analogwrite باید از pwm استفاده کرد؟
با سلام
اگر از pwm استفاده میکنید بایستی در خروجی برای رایت شدن داده ها از analogwrite استفاده کنید.
سلام
در واقع اگر بخوایم از داده های انالوگ دیتا بگریم باید از pwm استفاده کنیم خیلی جالبه
با سلام
بله از analogWrite استفاده میکنیم.
کاملترین آموزش pwm برای ماهایی که الکترونیک بلد نیستیم و فقط کد میدیم دم شما گرم
سلام
سپاس از همراهی شما کاربر گرامی
سلام برای اتصال دو سرو موتور باید از pwm استفاده کنیم؟
با سلام حتما بایستی از پایه های pwm که بر روی برد آردوینو مشخص شده است، استفاده کنید.
سلام پایه های pwmدر برد nodemcu به جه صورته
با سلام
پایه های D1 تا D8 و D12 پایه های pwm هستند.
خیلی ممنون از بابت آموزش های عالی تون
با سلام
سپاس از همراهی شما کاربران گرامی امیدوارم مفید واقع شده باشد.
سلام
منظور از ۷۵ درصد دیوتی سایکل چیست؟
با سلام
منظور ۷۵ درصد زمان به صورت HIGH و ۲۵ درصد به صورت LOW است.
سلام من قصد دارم چندین سرو موتور به آردوینو وصل کنم برای افزایش پایه لطفا راهنمایی کنید.
با سلام
در این خصوص بایستی دقت داشته باشید برای راه اندازی سرو موتور از پایه های PWM بایستی استفاده کنید. اگر با کمبود پایه pwm مواجه شدید از مبدل افزاینده PWM باید استفاده کنید.
ماژول PWM PCA9685 کنترل سروو موتور SERVO MOTOR و ۱۲ بیتی ۱۶ کاناله
برای تنظیم سرعت موتور باید حتما از pwm استفاده کنیم؟
با سلام
بله از map برای نگاشت بازه ها بین ۰ تا ۱۰۲۳ تا ۰ تا ۲۵۵ استفاده کنید.
سلام ممنونم از آموزش کاملت مهندس
با سلام
کاربر گرامی سپاس از همراهی شما
امیدوارم مفید واقع شده باشد.
سلام
برای استفادده از سرو موتور باید از pwm حتما استفاده شود؟
با سلام
بله باید از PWM استفاده کنید.
بله باید از pwm استفاده کنید اما حتما دقت کنید که از خود کتابخانه servo.h استفاده کنید. استفاده از دستور analogWrite برای سرو زیاد مناسب نیست چون خود کتابخانه servo.h پالس مورد نیاز سرو رو دقیق محاسبه میکنه و خروجی میده. انجام همین کار با analogWrite غیر اصولیه و باعث لرزش و نویز روی سرو میشه و احتمال خرابیش رو بالا می بره.
کاربر گرامی
از اینکه تجربه خود را با دیگر کاربران به اشتراک میگذارید، صمیمانه سپاسگزاریم.
آیا برای بردهای ESP هم این آموزش مناسب است؟
با سلام
تا حدودی یکسان است اما بایستی از همان کلاس های میکروپایتون برای esP استفاده کنید.
با سلام
می خواستم یه فرکانس متغیر از دامنه ۱ هرتز تا ۱کیلو هرتز درست کنم !
کسی از دوستان بلد که بنده رو راهنمایی کنه؟؟
سلام
این مورد توسط بنده تست نشده است. از دیگر کابرانی که در این مورد تجربه ای دارند، تقاضا میکنم در بحث شرکت کنند.
درود بر شما اگر منظورتان تولید موج مربعی است که با استفاده دستور رایت و تاخیر متناسب با پریود موج می توانید در پایه ای که بعنوان خروجی انتخاب کردید تولید کنید . در مورد موج سینوسی کد ها پیچیده تر میشود
سلام می خواهم با ماژل ad9833یه فرکانس خاصی را تولید کنم وبرروی آنتن ارسال و دریافت داشته باشم این در اردینو برنامه اش به چه صورته
با سلام
امکان نوشتن کد در کامنتها مقدور نیست.
سلام وقت بخیر
کد و تصویر شبیه سازی تولید موج PWM با فرکانس و سیکل وظیفه قابل تنظیم توسط پتانسیومترمیخوام ، تو این مورد کمک کنید
با سلام
سوال شما خارج از موضوع این آموزش است و اطلاعی از آن نداریم.