PDA

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



mzarkoob
16-08-2011, 16:48
ایجاد پالس در خروجی و مد pwm
با سلام خدمت دوستان
من می خواهم در کنار سایر برنامه هایی که میکرو انجام میده در دو پایه خروجی ام(شایدم بیشتر) پالس با فرکانس قابل کنترل داشته باشم(از مثلا 1KH تا چند صد KH) . ساده ترین حالت set کردن،ایجاد تاخیر و clr کردن است. ولی انگار از مد pwm هم میشه برای ایجاد پالس استفاده کرد. چون در این حالت دیوتی سایکل و فرکانس قابل تنظیمه. در مجله 3 صفحه 53 با اتمل توضیح داده شده که از این مد Waveform چگونه استفاده بشه ولی در مورد فیلیپس به این شکل ذکر نشده. همین طور آموزش های آقای تروشه در بحث تایمر و کانتر این مد را نگفته(شاید هم من نگرفتم). می خواستم ببینم برای این کار چطوری باید تنظیمات رجیستر ها را انجام بدیم که به این هدف برسیم و در خروجی پالس pwm داشته باشیم؟
با تشکر:hi:

sigma-mx
16-08-2011, 18:49
سلام. این برنامه رو تست کن ، کارت راه میوفته..


#include <LPC23xx.H> /* include for LPC23xx#


static void PWMInit(){
/* considering LPC2387 */
/* Select PWM1.2 output on P1.20 */
PINSEL3 |= (0x2 << 8);

/* reset PWM counter */
PWM1TCR = 0x02;

/* setup match control to reset on MR0 */
PWM1MCR = 0x02;

/* select single edge for PWM1.2 and enable PWM1.2 o/p */
PWM1PCR = 1 << 10;

/* setup PWM period */
PWM1MR0 = 100;

/* setup PWM duty cycle (50%) */
PWM1MR2 = 50;

/* start counter and enable PWM */
PWM1TCR = 0x81;

/* enable LER */
PWM1LER = 0x04;
}

int main()
{
PWMInit();
while(1);

}


فکر می کنم از توضیحات هم بشه فهمید ، ولی می گم :
برای محاسبه پریود باید اون عدد 100 که بالا تو رجیستر نوشته در پریود cclk/4 ضرب کنی ، مثلا من که تست کردم cclk برای من 48MHz بود پس تقسیم به 4 میشه 12MHz و اگه پریودش رو حالا در 100 ضرب کنی ( یعنی 100 پریود) طول پریود PWM محاسبه میشه. که در این حالت 125KHz هست. عدد 50 که بالا برای duty cycle نوشته تاکید میکنم به معنی 50% نیست ، بلکه بمعنای 50 از 100 (نصف پریود) است . مثلا اگه پریود 300 بود 50% میشه 150. پس باید اونجا 150 بزاری... اینم با سیمولاتور Keil میتونی امتحان کنی
اگه مشکل داشتی ، بگو........:wink:

mzarkoob
17-08-2011, 03:14
اگه مشکل داشتی ، بگو........:wink:





خیلی ممنون
سوال که زیاده!!! ولی مجالش ئر یک تایپیک نمیشه. چون اطلاعاتم در این مد فیلیپس کمه، در آموزش های فارسی هم چیزی گفته نشده. ابتدا باید از منبعی اطلاعات بیشتری بدست آورد و اگه ایرادی بود مطرح کنم. می خواستم بپرسم در چه رفرنسی این مد بیشتر بررسی شده و رجیستر ها توضیح داده شده؟(البته با مثال)

sigma-mx
18-08-2011, 14:07
با سلام .
راستش من همیشه اعتقاد دارم بهترین کمک برای یادگیری چیزی datasheet محصول هست.
توی pdf رجیسترهای بخش pwm رو کاملا توضیح داده . توی سایته nxp , sample های مربوط به lpc2378 رو دانلود کن ، توش لایبرری فول امکانات این میکرو با حتی فایل پروژه Keil هست . فقط باید بازش کنی و استفاده کنی . منم تازه nxp رو شروع کردم ، یعنی از اول با این تیم از اتمل شروع کردم ، ولی چون من عادت دارم از معماری شروع کنم بیام بالا ، دیدم از آرم اتمل اصلا خوشم نمیاد (مثل AVR ) . و واقعا راضیم از اینکه با nxp کار می کنم ...
در ضمن توی همین برنامه ای که گذاشتم ، اگه این رجیسترها رو با دیتاشیت مقایسه کنی ، کاملا متوجه میشی که برای تنظیم کانال pwm باید اولا از PINSEL پایه مورد نظر رو به pwm وصل کنی ، بعد ادامه رو برای اون کانال مثل برنامه کانفیگ کنی ، یه جورایی مثل adc میمونه با این تفاوت که تو pwm وقتی یه duty cycle و freq رو به یه کانال نسبت میدی ، اگه بری یه کانال دیگه ، قبلیه هنوز داره کار میکنه ولی تو adc چون معمولا سخت افزاری کانال ها multiplex میشن فقط می تونی کانال جاری رو بخونی ...
یه چیز خیلی جالب هم بگم در مورد سیمولاتور Keil . از این راه هم خیلی چیزا رو میشه یاد گرفت . اگه محتوای رجیسترها رو زمان اجرای خط به خط نگاه کنی متوجه خیلی چیزا میشی.
شروع کن با دیتاشیت ببینم چیکار می کنی...

mzarkoob
18-08-2011, 15:30
اتفاقا دیشب دنبال همین بودم! و داشتم بررسی اش می کردم. برام جالبه یه مدته که فیلیپس کار می کنم، دیتا شیت را نگرفته بودم

در راهنمای میکرو که بخش pwm را ضمیمه کردم رجیستر های این مد شرح داده شده. بررسی می کنم شاید متوجه شدیم!:0013:

البته جای خالی این بخش در مجله pmm احساس میشه

mzarkoob
21-08-2011, 17:11
یه سوال داشتم از اساتید

در تنظیمات میکرو lpc2378 مطابق شکل ضمیمه یک قسمت برای تنظیم pwm0 وجود دارد.ولی در پایه های میکرو همه برای pwm1 می باشد. حالا اگه بخواهیم به جای pwm1 از pwm0 استفاده کنیم بعد از تغییر برنامه پایه های خروجیمون کدوم میشه؟ یعنی باید کدام پایه راPINSEL کنیم؟ اصلا میشه!؟

sigma-mx
21-08-2011, 19:16
با سلام .
در lpc2378 شما تنها یک pwm در اختیار دارید ! اونم pwm1 هست.
فیلیپس هم مثل خیلی از شرکت ها ، میکروهایی با ساختمان یکسان ولی کمی تغییرات در حافظه ، امکانات محیطی و ... تولید می کنه. مثلا برای lpc2377/78 با هم یه دیتاشیت می زنه ، چون طراحیش یکیه ، یا driver میده برای سری 23xx و 24xx با هم. خوب درسته که شما انتخاب میکنی lpc2378 ، ولی فایل startup معمولا مختص چندین نوع میکرو با همه ! در واقع تو lpc23xx ما pwm0 نداریم ولی تو lpc24xx داریم. فایل استارت آپ مشترکه ...

mzarkoob
23-08-2011, 06:23
با توجه به زمانی که داشتم یه کم بیشتر رجیستر های مدpwm را بررسی کردم و گذاشتم در قسمت کلیه مثالها. البته این هفته کلا نیستم و گر نه تمومش می کردم.

یه سوال از اساتید داشتم که برام باقی مونده. ظاهرا در این مد این جوره که در فرکانس ثابت ، می توان دیوتی سایکل را برای هر پایه تغییر داد. آیا می توان تنظیمات را طوری انجام داد که در یک پایه(مثلا pwm1.1 ) موج مربعی با یک فرکانس داشته باشیم و در یک پایه دیگر(pwm1.2) موج مربعی با فرکانس دیگر(هر دو دیوتی سایکل یکسان) ؟