PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : Pwm



amiraliforoozandeh
25-11-2011, 22:07
سلام
من با استفاده از کدویزاردی که تو انجمن هست pwm رو راه انداختم.
کسی میدونه برای ایجاد 50 هرتز باید چه کار کرد؟
دیوتی سایکل رو چه طور باید عوض کرد؟
فرمول های اون چیه؟

1nafar
15-01-2012, 23:25
سلام
همون طور که میدونید برای PWM یه سری ریجستر وجود داره که باید اونا رو مقدار دهی کنیم
اولین قدم برای راه اندازی PWM ، تنظیم کردن مقدار فرکانس تایمر هست ( البته بعد از فعال سازی کانال های دلخواه ) که میشه اون رو با فرمول زیر حلش کرد :

You can see links before reply
You can see links before reply
توی رجیستر PWM_MR میشه کلاک pwm رو با دو روش تعیین کرد ، اولین روش مقدار دهی CLKA, CLKB و روش دوم مقدار دهی PREA, PREB هست .

توی فرمول بالا عدد 2 برای حالتی به کار میره که شما بخوایید جاروب pwm از وسط شروع بشه .( Center Aligned ) ، در صورتی که میخوایید pwm به صورت Left Aligned باشه ، به جای 2 عدد 1 بزارید ( 2 رو حذف کنید از فرمول ) .
برای کسب اطلاعات بیشتر در مورد Left Aligned و Center Aligned ) تصویر موجود در صفحه ی 429 دیتا شیت میکروکنترلر At91sAM7X256 رو ببینید .
همچنین منظور از x مقدار prescaler یا همون عددی هست که با مقدار دهی PREA, PREB بدست میاد .

.................................................. ..................
توی این بخش ما مقدار t رو داریم ، مقدار mck ( فرکانس کلاک میکرو کنترلر که با استفاده از pll اون رو به 66 مگا هرتز رسوندیم) رو داریم ، پس میتونیم به diva یا divb (یا x) مقدار بدیم و CPRD رو بدست بیاریم یا به CPRD مقدار بدیم و diva یا divb (یا x) رو بدست بیاریم ، مقدار دهی diva یا divb ( یا x) و CPRD به ترتیب در رجیستر PWM_MR و PWM_CPRD انجام میشه .
مطابق معمول من ساده ترین روش رو انتخاب میکنم و رجیستر PWM_MR رو طوری مقدار دهی میکنم که در اون از PREA, PREB برای تعیین مقدار فرکانس استفاده بشه ، در این حالت باید 8 بیت اول و سوم این رجیستر با عدد یک و بیت های 8 تا 11 و 24 تا 27 رو با عددی که از فرمول دوم بدست میاد مقدار دهی کنم .
همچنین رجیستر PWM_CPRD هم در بیشترین مقدار خودش یعنی 0xFFFF مقدار دهی دهی میشه ( البته شاید بعدا مجبور بشیم برای بدست آوردن فرکانس دقیق ، این مقدار رو تغییر بدیم . )
در صورتی مقادیر رو در فرمول بزاریم ، مقدار x مطابق تصویر زیر بدست میاد :

You can see links before reply
عدد بدست اومده شد 40.28 ، که ما باید نزدیک ترین عدد استاندارد ( یکی از اعداد 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, or 1024) رو انتخاب کنیم ، من64 رو انتخاب میکنم ( عدد انتخاب شده باید بزرگتر از مقدار بدست اومده باشه )
در این حالت مقدار فرکانس تایمر برابر با mck/64م میشه و فرکانس pwm برابر با 15 هرتز میشه که از فرکانس مورد نظر ما خیلی کمتره .
در این حالت و با تعیین شدن فرکانس میشه مقدار دقیق PWM_CPRD رو بدست آورد :


You can see links before reply
الان ما یه دونه پالس pwm با فرکانس 50هرتر داریم . و باید دیوتی سایکلش رو روی 50 هرتز تنظیم کنیم ، برای دیوتی سایکل هم یه فرمول به شکل زیر وجود دارد :

You can see links before reply
در فرمول بالا هم مانند حالت قبل یه عدد 2 وجود داره که قبلا در موردش توضیح دادم .
در این فرمول ما یه مجهول به نام CDTY داریم که باید مقدارش رو بدست بیاریم و در رجیستر PWM_CDTYx قرار بدیم .
در این فرمول period ، مقدار دوره ی تناوب مود نظر هست ( 1/f ) و fchannel_x_clock هم مقدار فرکانس کانال مورد نظر .

امید وارم توضیحات کامل باشه و بتونی به نتیجه برسی

amiraliforoozandeh
16-01-2012, 00:36
سلام
با اینکه 2 ماه از پرسیدن سوالم میگزره ولی مهم اینه بالاخره به جوابم رسیدم
ممنون

agape
16-01-2012, 15:54
خوب بازم جای شکرش باقی هست ! البته من هدر کامل رو تو بخش آموزش ها گذاشتم که میتونید از اونم استفاده کنید!

baha_manesh
08-04-2015, 13:05
با سلام برای محاسبه pwm با فرکانس 40 کیلوهرتز باید چجوری محاسبه کنم؟؟