آردوینو پروژه های آردوینو

طراحی و پیاده سازی سیگنال ژنراتور PWM با برد آردوینو Arduino

create-pwm-signal-generator-with-arduino-digispark
نوشته شده توسط معین صابری

ماژول های سیگنال ژنراتور یکی از مهم ترین و پرکابردترین ابزارها در صنایع الکترونیک و پروژه های وابسته به شمار می رود. به کمک این ابزار شما می توانید فرکانس مد نظر خود را تولید کنید. در کنار این، از آنجاییکه موج تولید شده به صورت PWM است، بنابراین می توان عرض پالس را هم تعیین نمود. در این آموزش قصد داریم تا به کمک برد آردوینو UNO به طراحی و پیاده سازی یک سیگنال ژنراتور بپردازیم. به کمک این سیگنال ژنراتور می توان به تنظیم عرض پالس(Duty Cycle) اقدام نمود. در این پروژه جهت فرمان از کاربر به کمک سریال مانیتور دریافت می گردد. پس از دریافت فرمان، میزان عرض پالس تعیین می گردد. با تعیین عرض پالس، شما می توانید با اتصال وسیله برقی به آردوینو، آن را کنترل نمایید.

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

 


شناخت ماژول سیگنال ژنراتور


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

شناخت ماژول سیگنال ژنراتور - دیجی اسپارک

 

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

 


پالس PWM و تعریف مفهوم


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

پالس PWM و تعریف مفهوم در برد آردوینو - دیجی اسپارک

 

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

برای روشن شدن شدن موضوع، یک بازه ۱۰ ثانیه ای را درنظر بگرید. در این ۱۰ ثانیه، ۷ ثانیه ولتاژ خروجی آردوینو ۵ ولت و برای ۳ ثانیه ولتاژ خروجی ۰ است. پس در ۷۰ درصد مواقع ما ولتاژ ۵ داریم. اگر بخواهیم نسبت به ولتاژ ۵ در نظر بگیرید، ۷۰ درصد ۵ ولت برابر با ۳٫۵ ولت خواهد بود. جالب بود! نه؟ حال بازه ۱۰ ثانیه را به ۱۰۰ میلی ثانیه کاهش دهید. در این حالت ۷۰ میلی ثانیه ۵ ولت و ۳۰ میلی ثانیه ۰ ولت داریم. در این حالت ۷۰ درصد ۵ ولت برابر با ۳٫۵ خواهد بود؛ اما از آنجاییکه سرعت تغییرات ولتاژ بسیار بالاست، چون زمان در حد میلی ثانیه است، بنابراین تغییرات ولتاژ را متوجه نخواهیم شد و ولتاژ را همیشه ۳٫۵ فرض می کنیم. این مثال در مورد برق شهری هم وجود دارد. همانطور که می دانید در برق شهری لامپ دائما در حال خاموش و روشن شدن است؛ اما چون فرکانس این تغییرات بسیار بالاست(فرکانس ۵۰ یا ۶۰ هرتز)، بنابراین خاموش و یا روشن شدن لامپ را اصلا متوجه نخواهیم شد. حال که با این مفاهیم آشنا شدیم، قسمت بعد را به کدهای پروژه سیگنال ژنراتور اختصاص می دهیم.

 


کدهای پروژه سیگنال ژنراتور PWM


پس از آشنایی با مفهوم پالس PWM، این قسمت را به کدهای پروژه سیگنال ژنراتور اختصاص می دهیم. کدهای زیر برای برد آردوینو UNO توسعه داده شده است. کافیست آنها را روی برد آپلود کنید.

String data = "";
int pin = 0, pwm = 0;
void setup() {
  Serial.begin(115200);
  pinMode(3, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop() {
}
void serialEvent() {  //تابع(روتین) وقفه سریال، هرگاه داده ای از طریق سریال دریافت گردد این تابع اجرا می گردد.
  while (Serial.available()) {  //در صورت وجود  کاارکتر در بافر، کاراکتر ها خوانده می شوند.
    char inChar = (char)Serial.read();
    data += inChar;  //اضافه کردن کاراکتر به رشته
    if (inChar == '\n') {  //در صورتیکه انتهای رشته کاراکتر n\ باشد یعنی کاربر کلید enter را فشرده است.
      pwm = data.substring(0, data.indexOf(",")).toInt();  //جداسازی مقدار روشن ماندن رله و تبدیل آن به عدد صحیح
      pin = data.substring(data.indexOf(",") + 1).toInt();  //جداسازی مقدار روشن ماندن رله و تبدیل آن به عدد صحیح
      Serial.println(pwm);
      Serial.println(pin);
      analogWrite(pin, pwm);
      data = "";

    }
  }
}

 


اجرای پروژه سیگنال ژنراتور


پس از آپلود کدهای پروژه سیگنال ژنراتور نوبت به اجرا می رسد. در این پروژه از طریق سریال مانیتور فرمان به برد آردوینو ارسال می گردد. فرمت فرمان به صورت تعیین عرض پالس PWM و شماره پایه است. برد آردوینو UNO بر روی پایه های زیر پالس PWM تولید می کند.

۳ ۵ ۶ ۹ ۱۰ ۱۱

جهت ارسال فرمان، به فرمت  pwm,pin در سریال مانیتور میزان PWM و عدد PIN را تعیین و به برد آردوینو ارسال می کنیم.  به عنوان مثال برای ایجاد پالس PWM روی پایه ۱۱ با عرض پالس ۱۵۵، به صورت زیر عمل می کنیم.

۱۵۵,۱۱

در ادامه در صورتیکه بخواهید میزان پالس پایه شماره ۳ را روی عرض ۲۵۵ تنظیم کنیم، به صورت زیر عمل می کنیم.

۲۵۵,۳

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

نکته۲: فرکانس تمام پایه های PWM به جز ۲ پایه ۵ و ۶ برابر با ۴۹۰ مگاهرتز است. دو پایه ۵ و ۶ دارای فرکانس ۹۸۰ مگاهرتزی است.

نکته ۳: پس از تایپ تنظیمات، حتما با فشردن دکمه ENTER تنظیمات را به برد اعمال نمایید.

اجرای پروژه سیگنال ژنراتور pwm آردوینو - دیجی اسپارک

 


تحلیل کدهای پروژه PWM


پس از اجرای پروژه نوبت به تحلیل و بررسی کدها می رسد. از آنجاییکه درون کدهای پروژه به صورت خط به خط کامنت(توضیح) درج شده، بنابراین در این قسمت به معرفی توابع پروژه می پردازیم. در این پروژه دو تابع اصلی داریم:

۱-serialEvent()

۲-analogWrite()

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

 


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


برد آردوینو

 


جمع بندی


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

 

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

 

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

معین صابری

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

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

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