پنج شنبه , ۲ آذر ۱۳۹۶
آخرین نوشته‌ها
خانه | سیستم های نهفته | میکروکنترلر | دوره آموزشی AVR | مد PWM در تایمرهای AVR (بخش اول) – (جلسه ی ۷)

مد PWM در تایمرهای AVR (بخش اول) – (جلسه ی ۷)

سلام به همه ی علاقه مندان به میکروکنترلر !

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

 – مفاهیم پایه ای تایمرها

 – تایمر صفر

 – تایمر یک و دو

 – مد CTC

 

pwm-title

در چند جلسه ی اخیر در مورد مفاهیم اولیه ی تایمرها، کار با تایمرهای AVR و همچنین در مورد مد CTC یاد گرفتیم. مد دیگری که تایمرهای AVR می توانند در آن کار کنند، مد PWM است. PWM که مخفف عبارت Pulse Width Modulation و به معنای مدولاسیون پهنای پالس می باشد، یک تکنیک رایج در انتقال اطلاعات و کنترل توان است. در این بحث یاد می گیریم که چگونه به آسانی این مدولاسیون را به وسیله ی میکروکنترلرهای AVR پیاده سازی نماییم. در این جلسه تمامی مفاهیم تئوری مرتبط با PWM گفته خواهد شد. برای معرفی مدولاسیون PWM از یک مثال ساده شروع می کنیم. فرض کنید همان طور در شکل زیر نمایش داده شده است، یک موتور DC به یک منبع تغذیه متصل شده باشد.

dc-motor-pwm

مقادیر نامی این موتور به صورت  ۱۲ ولت و ۳۰۰ دور بر دقیقه است. یعنی اگر ولتاژ ۱۲ ولت به آن اعمال گردد با ۳۰۰ دور بر دقیقه کار می کند. حال اگر به این موتور ولتاژ ۶ ولت اعمال کنیم در ۱۵۰ دور بر دقیقه کار خواهد کرد. واضح است که اگر ولتاژ صفر به آن اعمال شود کلا در حال توقف باقی خواهد ماند. حال فرض کنید ولتاژ زیر را به موتور اعمال کنیم:

۵۰dutycycle

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

حال اگر سیگنال ولتاژ ورودی را به صورتی که در شکل زیر نشان داده شده است، تغییر دهیم:

۲۵dutycycle

فکر می کنید چه اتفاقی بیفتد؟ اتفاقی که می افتد این است که چون زمان روشن بودن موتور کم می شود سرعت مؤثر موتور نیز کاهش خواهد یافت. در این حالت به ۷۵ دور بر دقیقه کاهش می یابد (چون زمان خاموشی سه برابر  زمان روشن بودن است و بنابراین: ۷۵ = ۳۰۰/۴). همان طور که قبلا نیز اشاره شد، مدولاسیون PWM مدولاسیونی است در آن پهنای پالس حامل، طبق سیگنال پیام آنالوگ تغییر می کند. همان طور که گفتیم این مدولاسیون در کنترل توان ورودی وسایل الکترونیکی از جمله موتور، LED ، اسپیکر و … کاربرد دارد.

تولید موج PWM

ساده ترین راه برای تولید یک موج PWM به وسیله ی مقایسه ی یک شکل موجِ از قبل تعریف شده با سطح ولتاژی ثابت امکان پذیر است. این روش در شکل زیر نشان داده شده است.

pwm-generation

در شکل بالا یک موج دندان اره ای از قبل تعریف شده ای داریم که با سطح ثابت DC مقایسه می شود. می توان سه نوع عملکرد برای مدهای خروجی مقایسه تعریف نمود:

  • مد معکوس: در این مد در صورتی که مقدار شکل موج بزرگ تر از سطح مقایسه باشد، خروجی “۱” شده و در غیر این صورت خروجی برابر با “۰” خواهد بود. این مد در شکل بالا با برچسب «الف» نشان داده شده است.
  • مد غیر معکوس: در این مد هنگامی که مقدار سطح مقایسه از مقدار شکل موج بیشتر باشد خروجی “۱” و در غیر این صورت خروجی برابر با “۰” خواهد شد. این مد نیز با برچسب «ب» در شکل بالا نشان داده شده است.
  • مد تغییر وضعیت: در این مد هر بار که تطبیقی در مقایسه رخ دهد خروجی تغییر وضعیت می دهد. یعنی اگر خروجی “۱” باشد صفر می شود و بالعکس.

البته ضرورتی ندارد که حتما مقدار مقایسه یک سطح dc ثابت باشد. گاهی در مخابرات آنالوگ/دیجیتال حالت هایی پیش می آید که نیاز به مقایسه ی موج دندان اره ای از پیش تعریف شده با یک موجی سینوسی داریم. شکل زیر این حالت را نشان می دهد:

pwm-sin

چرخه ی کار

چرخه ی کار یک موج PWM به صورت زیر تعریف می شود:

D-ctcle-formula

این فرمول در شکل زیر روشن تر بیان شده است:

D-ctcle-figure

بررسی مفاهیم تایمر در رابطه با PWM

در این بخش برخی از مفاهیم مهم و اساسی تایمرها در رابطه با مد PWM را توضیح می دهیم. دیاگرام تایمر زیر را در نظر بگیرید:

pwm-timer

همان طور که می دانیم میکروکنترلر AVR هر دو نوع تایمرهای ۸ و ۱۶ بیتی را در اختیار ما قرار می دهد. تایمرهای ۸ بیتی از ۰ تا ۲۵۵ می شمارند و دوباره صفر شده و دوباره به همین ترتیب به شمارش ادامه می دهند. تایمرهای ۱۶ بیتی از صفر تا ۶۵۵۳۵ شمرده و سپس صفر می شوند. بنابراین برای تایمر هشت بیتی حداکثر مقدار ۲۵۵ و برای تایمر ۱۶ بیتی ۶۵۵۳۵ می باشد.

تایمر همیشه از صفر تا مقدار TOP  (حد بالا) می شمرد و دوباره به صفر باز می گردد. در شکل «الف» نشان داده شده در بالا، ” ماکزیمم = حد بالا ” می باشد. در جلسه ی قبل با مد CTC آشنا شدید. درمد CTC هنگامی که در عمل مقایسه تطبیق رخ می دهد تایمر صفر می شود. در این حالت چون تطبیق در مقایسه قبل از سرریز شدن تایمر رخ می دهد مقدار TOP (حد بالا) کاهش می یابد. (به عنوان مثال اگر بخواهیم مقدار تایمر با عدد ۱۸۰ مقایسه شود، هنگامی که مقدار تایمر به ۱۸۰ رسید ریست می شود و بنابراین مقدار TOP برابر با ۱۸۰ می شود. )

در شکل بالا در قسمت «ب» کاهش یافتن “حد بالا” در مد CTC نشان داده شده است. خط زرد رنگ نشان می دهد که مقدار تایمر در صورتی که در مد نرمال باشد تا کجا بالا می رود. حال مد CTC می تواند به گونه ای توسعه یابد که TOP متغیر باشد (مانند شکل «ج» ). توجه کنید که مقدار TOP هیچ گاه از مقدار ماکزیمم بیشتر نخواهد شد. اکنون که با اصلاحات حد بالا (TOP) و  ماکزیمم (MAX)  و حد پایین (BOTTOM)  و تعاریف آن ها آشنا شدید، می توانیم مدهای کاری دیگری را نیز تعریف کنیم:

مدهای کاری PWM

به طور کلی سه نوع مد کاری در PWM داریم:

  • PWM سریع
  • PWM تصحیح فاز
  • PWM تصحیح فاز و فرکانس

PWM سریع

شکل زیر را در نظر بگیرید:

fast-pwm

یک شکل موج دندان اره ای داریم و آن را با مقداری ثابت مقایسه می کنیم (مثلا در شکل بالا مقدار «الف»). و در نتیجه خروجی PWM که در شکل بالا با برچسب «الف» و به رنگ قرمز نشان داده شده است را خواهیم داشت. حال فرض کنید که مقدار مقایسه را زیاد کنیم تا به سطح «ب» برسیم. در این حالت همانطور که در شکل نیز قابل مشاهده است، پهنای پالس کاهش می یابد و در نتیجه چرخه ی کار (duty cycle) نیز کم می شود. در شکل بالا PWM با چرخه ی کار کمتر با برچسب «ب» و با رنگ زرد مشخص شده است. اگر به شکل بالا دقت کنید متوجه می شوید که هر دو پالس تولید شده ی «الف» و «ب» دارای زمان پایان یکسان و زمان شروع متفاوت می باشند. در این مد از یک موج دندان اره ای استفاده می شود و رجیستر تایمر/کانتر TCNTn (که n می تواند ۰ یا ۱ و یا ۲ باشد) از مقدار «حد پایین» شروع به شمارش کرده و هنگامی که به مقدار «حد بالا» رسید می تواند سرریز شود و یا پس از تطبیق مقایسه ریست گردد و دوباره به مقدار «حد پایین» برگردد.

مد PWM تصحیح فاز

به دیاگرام های شکل زیر بنگرید:

phase-pwm

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

مد PWM تصحیح فاز و فرکانس

عملا مد PWM تصحیح فاز و مد PWM تصحیح فاز و فرکانس، یکی هستند البته در صورتی که مقدار «حد بالا» یا همان TOP ثابت باقی بماند. اگر مقدار TOP متغیر داشته باشیم، فرکانس موج خروجی همان طور که در شکل زیر نیز نشان داده شده است متغیر خواهد بود. شکل زیر این مد را نشان می دهد:

freq-pwm

با توجه به این که در اغلب اوقات مقدار TOP (حد بالا) ثابت است، اهمیتی ندارد که از بین مد تصحیح فاز و تصحیح فرکانس و فاز کدام یک را انتخاب کنیم.

مد PWM و میکروکنترلر AVR

اکنون مفاهیم پایه ای PWM را می دانیم، این تصمیم گیری به عهده ی ما است که :

  • کدام تایمر را انتخاب کنیم؟
  • کدام مد کاری را انتخاب کنیم؟
  • کدام مد خروجی مقایسه انتخاب کنیم؟

انتخاب تایمر

در میکروکنترلر AVR مد PWM در هر سه تایمر موجود است. «تایمرهای صفر و دو» دقت ۸ بیتی را برای ما فراهم می آورند در حالی که «تایمر یک» دقت ۱۶ بیتی را در اختیارمان قرار می دهد. در دقت ۸ بیتی ۲۵۶ گام جداگانه موجود است در حالی که در دقت ۱۶ بیتی ۶۵۵۳۶ گام جداگانه وجود دارد. حال فرض کنید که می خواهیم سرعت یک موتور DC را کنترل کنیم. در این مورد داشتن ۶۵۵۳۶ گام کاملا بی استفاده است. به همین خاطر از یک تایمر ۸ بیتی برای این کار استفاده می کنیم. هرچند برای این کاربرد  ۸ بیت هم بیش از حد زیاد است ولی انتخاب دیگری برایمان باقی نمی ماند. واضح است که تفاوت چندانی بین ۱۲۳/۲۵۶ سرعت موتور و ۱۲۴/۲۵۶ سرعت موتور وجود ندارد. اما هنگامی که داریم از سروموتور استفاده می کنیم باید از تایمر ۱۶ بیتی استفاده کنیم که در جلسات آتی در مورد آن صحبت خواهیم کرد.

انتخاب مد کاری

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

انتخاب مدهای خروجی مقایسه

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

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

درباره‌ی مجتبی

کارشناس الکترونیک و کارشناس ارشد مخابرات سیستم | زمینه ی تحقیقاتی : پردازش تصویر و تعقیب اشیاء متحرک |‌فعال در حوزه ی الکترونیک مبتنی بر میکروکنترلر | برنامه نویس و طراح بردهای الکترونیکی مبتنی بر میکروکنترلر

۶ ديدگاه

  1. بسیار عالی و کاربردی – متشکرم

  2. عالی بود. مرسی

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

    استادمون گفته با CodeVisionAVR برنامه ای بنویسید که با زدن کلید s1، ده در صد به عرض پالس افزدوه شود و بازدن کلید s2،ده در صد از عرض پالس کاسته شود.

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

    • سلام
      نظر لطف شماست. بازخوردهایی که از مخاطبای دوست داشتنی مون میگیرم، به ما برای ادامه ی مسیر انرژی میده. ممنونم.
      مشکلی برای نوشتن برنامه نیست. فقط تا بخواد به صورت مطلبی در بیاد که بشه به صورت پست گذاشت طول میکشه. در صورتی که عجله دارین به بنده ایمیل بزنین:
      mojtaba_hakimian@yahoo.com
      در خدمتم.

  4. سلام
    ممنونم از مطالب مفیدتون. خیلی با توضیحات و با تفصیل گفتید.
    فقط من توی سایت دنبال قسمت دوم این پست گشتم ولی پیداش نکردم
    لطف می کنید لینکش رو قرار بدین؟

    • سلام به شما دوست عزیز 🙂
      هدف ما بیان مطلب به ساده ترین و کامل ترین شکل هست تا دانشجویان بتونن مشکلاتشون را حل کنن.
      حق با شماست که نتونستید لینک قسمت دوم را پیدا کنید. چون هنوز پست دوم این مطلب منتشر نشده. به زودی قسمت دوم منتشر میشه. سایت را دنبال کنید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Time limit is exhausted. Please reload CAPTCHA.