اطلاعیه

Collapse
No announcement yet.

pwm

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    pwm

    سلام.

    ببخشید من تازه کار هستم.میخواستم در مورد pwm در میکرو ی atmega16l اطلاعات کاملی در اختیار من قرار بدید.

    :read:

    متشکرم.

    #2
    پاسخ : pwm

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

    دیدگاه


      #3
      پاسخ : pwm

      سلام بیا: :bye:

      نقل قول از mahziyar

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

      pwm یا مدولاسین پهنای پالس یکی از امکانات پرکاربرد در avr میباشد ، از این موج برای کنترل دور موتور ساخت پالس مربعی و دیگر پالس ها و ... استفاده میشود ، در این نوع مدولاسیون دامنه پالس ثابت است و نسبت زمان صفر به یک ان تغییر میکند .pwm در میکرو های قدیم (قبل از xmega) میتواند 8 یا 9 یا 10 بیتی باشد که مقدار بیت هرچه بیشتر یاشد دقت موج بیشتر است (تعداد پله بیشتر است ) pwm هشت بیتی تا 256 سرریز میشود (شما میتوانید 256 واحد ان را کم یا زیاد کنید) pwm نه بیتی تا 512 و pwm ده بیتی تا 1024 سر ریز میشود . ما برای توضیح روابط مد تایمر یک را در نظر میگیریم وبرای ما بقی تایمر ها با استفاده از پیکره بندی دیگر تایمر ها قابل تعمیم است .
      راه اندازی تایمر/کانتر 1 در مد pwm با دستورات زیر انجام میشود :
      Config Timer1 = Pwm,Pwm = 8|9|10 , Compare A Pwm=Clear Up |Clear Down |Disconnect
      ,Compare B Pwm =Clear Up |Clear Down |Disconnect , Prescale=1|8|64|256|1024
      pwm=8/9/10: همان مشخص کننده بیت pwm است که در بالا گفته شد.
      Compare A Pwm=Clear Up |Clear Down |Disconnect : در صورت استفاده از گزینه clear up موج pwm از سطح 0 شروع میشود و در صورت انتخاب cleardown موج pwm از سطح صفر شروع میشود و در صورت انتخاب disconnect هنگامی که مقدار pwm با pwm1a که در برنامه مشخص میشود برابر شد ، ارتباط پالس با پایه ی oc1a قطع میشود.
      قابل ذکر است در حالت استفاده از تایمر یک پایه های oc1a و oc1b به عنوان خروجی pwm میباشد.
      درمورد گزینه یCompare b Pwm=Clear Up |Clear Down |Disconnect نیز حالات فوق صورت میگیرد با این تفاوت که کنترل روی پایه ی oc1b صورت میگیرد .
      Prescale : این گزینه و مقدار کریستال در تعیین فرکانس pwm نقش دارند . برای تولید pwm با فرکانس های متفاوت از این گزینه ها استفاده میشود .
      بعد از معرفی دستورات ساده پیکره بندی در قسمت بعد به معرفی رابطه ها و تعیین دقیق duty cycle می پردازیم.


      در این قسمت قصد دارم چگونه به دست اوردن فرکانس وزمان تناوب رو در پالس های تولیدی pwm توضیح بدم . همین تور که حتما میدانید فرکانس موج های تولید شده با pwm از روابط زیر به دست می اید :
      (pwm (8bit) frequncy =crystal frquncy / (510 * prescale
      pwm (9bit) frequncy =crystal frquncy / (1022 * prescale
      pwm (10bit) frequncy =crystal frquncy / (2046 * prescale
      که فرکانس کریستال در فرمولات بالا عبارت است از فرکانس اصلی کریستال خارجی یا همان فرکانس اصلی کریستال داخلی میکرو . prescale هم که در همان پیکره بندی ابتدایی میکرو انتخاب شده است . و طبق فرمول که میدانیم زمان تناوب از رابطه ی T=1/F به دست می اید . مثلا برای موج با فرکانس 50 هرتز زمان تناوب برابر 20 میلی ثانیه است . اما زمان تناوب چیست ؟ دانستن زمان تناوب در تعیین duty cycle دقیق بسیار مهم است . زمان چرخش یک دوره را دوره یا زمان تناوب می گویند در واقع زمان لازم برای ایجاد یک تناوب را زمان تناوب می گوییم. ما با دانستن مقدار زمان تناوب و اینکه چند درصد موج در صطح یک وچند در صد در صطح صفر است میتوانیم مقدار زمان یک بودن پالس رو به دست بیاریم مثلا اگر 78 درصد موج در صطح یک باشد و زمان تناوب 20 میلی ثانی باشد داریم 0.78*20=15.6 یعنی موج ما در 15.6 میلی ثانیه یک و در 4.4 میلی ثانیه صفر است . در قسمت بعد به بدست اوردن همین در صدها با کمک برنامه نویسی می پردازیم .

      در این قسمت با طرح یک مثال ساده به بررسی مطالب قبلی و تعیین دقیق duty cycle میپردازیم . به مثال زیر دقت کنید:

      "regfile = "M8DEF.dat$
      crystal = 6528000$
      Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 256
      Do
      Pwm1a = 10
      Loop
      End

      در این مثال ابتدا با توجه به پیکره بندی pwm متوجه میشویم که روی پایه ی oc1a یک موج با فرکانس 50 هرتز تولید میشود . طبق رابطه گفته شده : فرکانس = 6528000/(510 * 256) = 50
      طبق همین فرمول ساده شما با انتخاب بیت pwm و prescale و فرکانس اصلی میکرو میتوانید هر فرکانسی بسازید تنها نیاز به کمی سعی و خطا و استفاده از ماشین حساب دارید.
      و طبق رابطه T=1/F زمان تناوب مو ج ما 20 میلی ثانیه میباشد . دقت کنید در این پیکره بندی موج از سطح صفر شروع میشود .
      اما در دستور pwm1a=10 (همان compare1a) تمام نکات تولید duty cycle در این قسمت نهفته است . همانطور که در این مثال میبینید ما از تایمر یک برای تولید موج استفاده کردیم و pwm رو 8بیتی (8^2) انتخاب کردیم پس موج 256 ( دو بتوان 8 ) پله دارد . تایمر تا 255 میشمرد (از صفر تا 255 برابر 256 پله است) و صفر میشود ، با صفر شدن تایمر دو با ره وضعیت پایهoc1a معکوس میشود ، دو باره تایمر تا 10 میشمارد ، دوباره وضعیت پایه معکوس میشود و این روند مدام تکرار میشود . یعنی به طور مفهوم تر ابتدا سطح موج صفر است تایمر تا 10 میشمارد وسطح موج یک میشود حال دوباره تایمر ادامه میدهد و تا 255 میشمارد و مجددا صفر میشود با این حساب ، از 255 پله ، تعداد 10 عدد در صطح صفر و تعداد 245 عدد در سطح یک می باشد .در صورتی که 255 را صددرصد بگیریم ، میتواین بگوییم که 96.07 درصد موج را سطح یک ان تشکیل میدهدو در واقع ضریب مدولاسیون یا چرخه ی کار یا duty cycle برابر با 96.07 درصد است . وبا یک نسبت ساده وبا دانستن زمان تناوب 20 میلی ثانیه میفهمیم 96.07 درصد 20 عبارت است از 19.214 میلی ثانیه . یعنی موج ما 19.214 میلی ثانیه در سطح یک و 0.786 میلی ثانیه در صطح صفر است . حال مجددا با کمی سعی وخطا میتوان به هر عدد دلخواهی رسید مثلا با تغییر pw1a=25 میبینیم 90 درصد موج در سطح یک قرار میگیرد و همان نسیت های قبلی.
      در قسمت بعد با مثال دیگر انجام این رابطه هارو به صورت معکوس انجام میدهیم ویک کاربرد دقیق از این دقت pwm بیان میکنم.

      ببینید دوستان عزیز استفاده بسیار دقیق از سیکل کاری pwm در بعضی پروژه ها اهمیت بسیاری دارد . برای نمونه یکی از ابزار بسیار دقیق برای پروژه های رباتیک سروو متور ها میباشند . این متور ها علاوه بر 2سیم زمین وتغذیه دارای یک سیم دیگر به نام سیم پالس یا سیگنال میباشند . با دادن پالسهای موجود در دیتا شیت این متورها شفت این متور ها در زاویه ی دلخواه قرار می گیرد . در ایران اکثر کاربران از سروو مدل sg-50 10 استفاده میکنند این سروو با پالس 420 us به زاویه 90- وبا پالس 2390 us به زاویه 90+ وبا پالس 1360 us به زاویه صفر درجه میرود .(با میان گیری میان عداد موجود به دست اوردن دیگر زوایا ممکن است) با دیدن این پالسها که فکر میکنم به صورت ازمون و خطا به دست امده اهمیت دقت پالسهای ایجاد شده در مد pwm اشکار است . در این موارد منظور از پالس مثلا 430 میکرو ثانیه این استکه موج تولید شده توسط pwm باید در مدت 430 میکرو ثانیه در سطح یک باشد در واقع در این گونه مثالها که ما نیاز به چندین سطح موج داریم تنها کافی است مقدار pwm1a یا pwm1b را به صورت یک متغیر تعریف کنیم و هرزمان که نیاز داریم در برنامه این متغیر را عدد دلخواه انتخاب کنیم تا به سطح مو ج دلخواه برسیم البته از قبل باید به صورت عملی برای هر عدد که به متغیر میدهیم سیکل کار را به دست اورده باشیم . قابل ذکر است ما برای سنجیدن این پالسها نیاز به اسکوپ داریم اما نرم افزار پروتوس یک ابزار بسیار قدرتمند برای این کار در نظر گرفته است که در قسمت بعد به صورت کامل در باره ی ان بحث میکنیم.

      انا لله و انا الیه الراجعون

      دیدگاه

      لطفا صبر کنید...
      X