الکترونیک، رباتیک و مکانیک

آموزش به زبان بسیار ساده و روان (از صفر تا بینهایت)

الکترونیک، رباتیک و مکانیک

آموزش به زبان بسیار ساده و روان (از صفر تا بینهایت)

الکترونیک، رباتیک و مکانیک

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

نویسندگان
پیوندهای روزانه
طبقه بندی موضوعی
آخرین نظرات

پنجشنبه, ۱۷ دی ۱۳۹۴، ۰۷:۲۱ ق.ظ

۱

آشنایی با مُد PWM ؟ [27](نویسنده: احسان نوری)

پنجشنبه, ۱۷ دی ۱۳۹۴، ۰۷:۲۱ ق.ظ

 

در بیست و هفتمین پست آموزشی،به بررسی مد PWM میپردازیم.

 

پس با ما در ادامه مطلب همراه باشید...

 

سلام

برگشتم با یه پست جذاب دیگه !kiss

پیشتر از این گفتیم که تایمر/کانتر چیه ؟

به چه کاری میاد ؟

انواع تایمر/کانترها ؟

انواع مدهای کاری ؟

و ...

 

مدهای Normal و CTC رو هم بررسی کردیم و در حال حاضر رسیدیم به بررسی مد PWM.

 

پس اگه بر مطالب قبلی اشراف ندارید،این پستو نخونید که ممکنه درست مطالبو متوجه نشید ! ==> پس فحش هم به من ندید !!! laugh

 

PWM مخفف عبارت Pulse Width Modulation بوده و هست ! wink

مدولاسیون پهنای پالس !

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

بیشتر از اینکه بخوایم به PWM به چشم یک مد خشک و خالی تایمر/کانتر نگاه کنیم،بهتره که به چشم یک تکنیک در مباحث کنترل ولتاژ،کنترل سرعت و حتی مخابرات نگاهش کنیم.

 

خب بریم با یه مثال طبق معمول قضیه رو بررسی کنیم و پیش ببریم !

 

در اینجا فرض میکنیم که یک موتور DC معمولی 5 ولت (آرمیچر 5 ولت) داریم.

فعلا فرض میکنیم که میکروکنترلری در کار نیست ! (آزمایش دوران دبستان cheeky)
میخوایم به این بابا (آرمیچر) ور بریم ؛

سه وضعیت داریم :

 

1.ولتاژ صفر بدیم ==> روشن نمیشه !

2.ولتاژ 5 ولت بدیم ==> روشن میشه و با بیشترین زوری که بهش فشار نیاد میچرخه !

3.ولتاژ بیشتر از 5 ولت بدیم ==> روشن میشه و با نهایت زوری که داره میچرخه و دیگه دست خودش نیست که بهش فشار بیاد یا نه! بسته به اون ولتاژی که اعمال میکنیم شروع به چرخش میکنه و دیگه حتما میدونین که احتمال آسیب دیدنش خیلی زیاد میشه در این حالت !

4.ولتاژ کمتر از 5 ولت بدیم ==> ؟؟؟

 

صبر کنید ...

 

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

 

 

شکل بالا یعنی 0 ولت خالص DC بدون ریپل !

 

این یکی هم یعنی 5 ولت خالص !

 

این هم 2.5 ولت !

 

حالا وقتشه که یه سوال مطرح کنم.

در مورد این یکی شکل نظرتون چیه ؟؟؟

 

 

Whats Your Idea? cool

 

اصلا مبحث ما هم در همین مورده !

 

اگه به شکل دقت کنید دیوتی سایکل 50 درصد مشاهده میشه !

یعنی در یک دوره،نصف دوره مقدار 5 ولت و نصف دوره مقدار صفر ولت را داریم !

 

 

حالا تصور کنید که بیایم این ولتاژ رو بدیم به موتورمون !

با فرض اینکه یک دوره برابر 10 میکروثانیه باشه (فرضه،،،،فـــــــــــرض !!!! indecision)

5 میکرو ثانیه ولتاژ 5 ولت و 5 میکروثانیه ولتاژ صفر ولته.

سوالم اینه که تکلیف موتور بدبخت ما این وسط چیه ؟!

بالاخره بچرخه یا نچرخه ؟frown

جواب اینه که موتور با وصل شدن 5 ولت شروع به چرخش میکنه،اما به محض صفر شدن ولتاژ،در همون لحظه از حرکت واینمیسته !

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

در واقع تا موتور یه مقدار سرعتش افت کرد،مجددا ولتاژ بهش میرسه و ...

خلاصه اینکه؛با دیوتی سایکل 50 درصد،مثه اینه که ولتاژ 2.5 ولت به موتور برسه و بنابراین موتور با نصف سرعت نامی اش میچرخه.

 

دیوتی سایکل میتونه هر مقداری باشه،اینجا برای مثال 50 درصد انتخاب شده.

مثلا اگه دیوتی سایکل 30 درصد باشه،سرعت موتور به 3/10 (سه دهم) سرعت نامی میرسه و ...

 

اصلا کاری به میکروکنترلر هم نداریم !

بریم ببینیم اگه خواستیم یه موج PWM بسازیم باید از چه راهکاری استفاده کنیم ؟!

 

چگونه یک موج PWM بسازیم ؟ :

 

ساده ترین راهی که برای تولید موج PWM وجود داره،استفاده از یک شکل موج مشخص و مقایسه اون با یک سطح ولتاژ ثابته !

شکل زیرو ببینید :

 

 

در شکل بالا یک سطح ولتاژ ثابت داریم که با یه موج دندان اره ای در حال مقایسه شدنه !

اما حاصل این مقایسه رو میشه در سه حالت جمع بندی کرد :

 

1.حالت Inverted ؛ حالت معکوس : در این حالت تا زمانی که موج دندان اره ای ما زیر خط سطح Compare هست،مقدار خروجی صفر و زمانی که موج بالاتر از سطح Compare قرار میگیره،خروجی ما یک میشه !

2.حالت Non-Inverted؛حالت غیر معکوس : دقیقا عکس حالت Invert است.

3.حالت Toggle : در این حالت خروجی Toggle میشه.یعنی وقته صفره میشه یک و وقتی یکه میشه صفر !

 

فعلا اینا رو در حد تعریف گوشه ذهنتون داشته باشید تا تو عمل بهتر باهاشون آشنا بشیم.

 

مدهای کاری PWM :

 

1.Fast PWM

2.Phase Correct PWM

3.Frequency and Phase Correct PWM

 

 

1.Fast PWM :

 

به این مد میگن،مد سریع !

چرا ؟!

 

حالا میبینید چرا ...

 

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

 

 

برید تو کف شکل ! laugh

 

یه دونه موج دندون اره ای داریم،و دو سطح مقایسه ای !

سطح A و سطح B

لازم به تذکره که این سطوح کاملا دلخواه و تصادفی انتخاب شده اند،در ضمن برای اینکه بهتر متوجه مطلب بشید از دو سطح A و B استفاده شده وگرنه یه سطحش کافیه ! wink

موج های مربعی هم که معلومه چجوری تشکیل داده شدند !

این همه توضیح دادم بالا !!!

 

در این مد،به محض رسیدن به سطح مقایسه ای ، سریعا سطح سیگنال خروجی عوض میشه(اگه خروجی یکه میشه صفر و اگه صفره میشه یک !)

 

حالا به شکل موج های خروجی نگاه کنید.

اگه دقت کنید نقاط پایانی شکل های A و B در یک دوره،دقیقا در یک مکان هستند.(هم فازند !)

اصلا مهم نیست که از کجا شروع شده اند اما در یه نقطه تموم شده اند ! (جل الخالق !!! laugh) == > این نکته رو داشته باشین تا بهتون بگم !

 

2.Phase Correct PWM :

 

به اینم میگن حالت تصحیح فاز !

 

چرا  ؟!

 

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

 

 

اینجا دیگه خبری از موج دندون اره ای نیست !

اینجا موج مثلثی داریم.
 

همه چیز مثله قبله !

اما اینجا نقاط پایانیمون مثل مد قبلی مکان یکسانی نداره !

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

 

نمیدونم تا الان رسیدین به اون چیزی که من دنبالش بودم یا نه !

PWM رو دیدینش ؟؟؟؟

تونستین تشخیصش بدین ؟

 

اگه نه،یعنی از موضوع پَرتِ پَرتییییید !!!! indecisionsurpriselaughcheeky

 

با توجه به این نکته که دوره با فرکانس نسبت معکوس داره،اگر دقت کنید متوجه میشید که فرکانس مد Fast ، دو برابر فرکانس مد Phase Correct است.(هر چه دوره کمتر بشه،فرکانس بیشتر میشه و بالعکس)

 

حالا با یه معضل دیگه مواجه شدیم،اونم فرکانسه !!!

 

3.Phase and Frequency Correct PWM :

 

این مد،دقیقا مشابه مد Phase Correct PWM بوده و تنها تفاوتش اینه که دارای نقاط TOP متغیره !

یعنی چه ؟!

 

یعنی اینکه اگه به شکل مد Phease Correct نگاه کنید،موج مثلثی ما از یک نقطه BOTTOM شروع میکنه و به یه نقطه TOP میرسه و همین روند مرتبا تکرار میشه ...

اما حالا فرض کنید که بتونیم هر سیکل نقطه TOP متفاوتی نسبت به سیکل های قبلی یا بعدیش داشته باشیم !

 

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

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

 

 

شکل کاملا گویاست.

مثل قبل برای دو سطح مقایسه ای دلخواه A و B دو شکل موج خروجی مربعی شکل داریم.

موج مربعی B نکته جالبی داره که اگه یه کم دقت کنید متوجهش میشید.

 

همه چی مشخصه (همه چی آرومـــــه !!! cheeky)

 

تا اینجا صحبتی راجع به میکروکنترلر نکردیم و فقط گفتیم که چجوری میشه یه چنین موج مربعی را در خروجی داشت !

 

حالا اگه موج PWM مونو به یه LED بدیم،میتونیم نورشو کنترل کنیم.

مثلا اگه یه LED با 3 ولت کار کنه،با دادن ولتاژ 1 ولت بهش نور کمتری داره و نور 2 ولت نور بیشتری نسبت به 1 ولت داره و ...

و استفاده های دیگه ای که میشه از این تکنیک کرد ...

 

خب ...

 

هدفم از این بحث این بود که یاد بگیرین اصلا PWM چی هست و به چه دردی میخوره !

با توجه به اینکه PWM یکی از مدهای کاری تایمر/کانتر هست،و ما هم قبلنا خیلی راجع به تایمر/کانترها بحث کردیم،از توضیحات مربوط به تایمر/کانتر میکروکنترلر AVR صرفنظر کردم،چون فقط کافیه که تایمر/کانتر مونو مثل قبل برنامه ریزی کنیم و مُدشو  مد PWM رو انتخاب کنیم !

 

پس در پست بعدی که کارگاه عملی مبحث PWM خواهد بود،هم یه سری به تایمر/کانترها میزنیم و هم یه برنامه براش مینویسیم که دوباره کاری هم نشه !

موفق باشید.

فعلا ...

منبع : www.noise.blog.ir

نظرات  (۱)

سلام
مطلب بسیار کامل و مفیدی بود

با اجازتون یک سوال دارم:
من در میکرو atmega162 نیاز به 4 تا pwm دارم که با هرکدوم سرعت یک موتور دی سی رو بتونم کنترل کنم که با تایمرهای 16 بیتی 1 و 3 اونهارو ایجاد کردم
کانفیگ هر دو هم عین هم هست اما نمیدونم چرا pwmهای تایمر1 با pwmهای تایمر3 خروجی متفاوت  تولید می کنند و سرعت  دوتا موتور که با تایمر1 کار میکنن با دوتای دیگه که با تایمر3 کار می کنن فرق داره.یعنی دیوتی سایکل هاشون متفاوته!
کدهارو در Bascom می نویسم و شبیه سازی رو در proteus
اینم کد کانفیگ:

$regfile = "m162def.dat"
$crystal = 8000000
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1024
Config Timer3 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1024
Dim A As Word , B As Word , C As Word , D As Word , Taraz As Word

' Normal Start
A = 100
B = 100

C = 100
D = 100

Pwm1a = A
Pwm1b = B

Pwm3a = C
Pwm3b = D

Portc.0 = 1
Portc.1 = 0
Portc.2 = 1
Portc.3 = 0

Portc.4 = 0
Portc.5 = 1
Portc.6 = 0
Portc.7 = 1
End
لطفا درصورت امکان راهنمایی بکنید.
فایل دیتاشیت رو هم هرچی خوندم من که راه چاره پیدا نکردم!!!!!
با سپاس فراوان
منتظر راهنمایی شما هستم

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی