NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4426 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 6 از 6

موضوع: راه اندزای pwm در میکرو at91

  1. #1
    کاربر فعال soodi آواتار ها
    تاریخ عضویت
    Jun 2010
    نام
    مسعود محمدی
    نوشته ها
    264
    تشکر
    111
    تشکر شده 296 بار در 138 پست

    پیش فرض راه اندزای pwm در میکرو at91

    با سلام

    من می خواهم واحد PWM رو در میکروکنترلر AT91SAM7X256 فعال کنم و در کنترل نور یک LED یا سرعت یک موتور یا اعمال به L298 یا ... استفاده کنم
    دیتاشیت رو مطالعه کردم و جدول زیر که مربوط به رجیستر ها است رو در زیر آپلود کردم ، 8 تا رجیستر اول که مربوط به فعال یا غیر فعال کردن PWM و وقفه داخلی می باشد ولی رجیستر های بعدی رو اگر لطف فرمایید و توضیح دهید خیلی خیلی ممنون میشوم
    توی Bascom-AVR یک مقدار رو داخل PWM قرار می دادم و نور LED یا سرعت موتور نسبت به این مقدار تغییر می کردم ولی حالا توی ARM و Keil چطوریه ؟

    تا جایی که فهمیدم ، پایه ای رو که می خواهیم PWM رو روی آن فعال کنید باید ابتدا واحد PIO روی پایه رو غیر فعال کنید و سپس حالت Multi-Driver رو فعال می کنیم تا تمامی امکانات روی پایه از قبیل مقاومت Pull-Up یا ... غیر فعال شود و سپس رجیستر واحد همزمان سازی داده ها روی پورت های مختلف رو فعال می کنیم

    لطفا من رو کمک و راهنمایی فرمایید




    با سپاس

    __________________________________________________ ________________________

    سلام

    دوستان کسی نیست این PWM رو به زبون ساده برای ما بگه ؟؟؟ حق الزحمت رو هم میدم
    2 تا کتاب ARM دیگه هم خریدم و قسمت PWM رو خوندم ولی باز هم چیزی دستگیرم نشد ، یعنی یه چیزهایی فهمیدم ولی نمیدونم چرا جواب نمیگیرم ، خدایا دیگه دارم دیوانه میشم ، به خدا اگر یه نفر یه طوری این PWM رو برای من بگه که یاد بگیرم و بتونم یه LED رو نورش رو کنترل کنم یا سروو موتور رو روشن کنم ، با پیغام خصوصی با هم حساب میکنیم

    الان این برنامه منه ولی هیچی به هیچی :
    کد:
    #include <AT91SAM7X256.h> #include <lib_AT91SAM7X256.h> #include <delay.h> #define LCD_PORT_B #define LCD_RS 20 #define LCD_E 21 #define LCD_DB4 22 #define LCD_DB5 23 #define LCD_DB6 24 #define LCD_DB7 25 #include <lcd.h> int main (void) { int A; A=0; AT91C_BASE_PIOA->PIO_PDR=100000; AT91C_BASE_PIOA->PIO_ASR=100000; AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PWMC); AT91C_BASE_PWMC->PWMC_DIS=0xF; AT91C_BASE_PWMC->PWMC_MR=0; AT91C_BASE_PWMC_CH0->PWMC_CMR=(0x208); AT91C_BASE_PWMC_CH0->PWMC_CPRDR=150; AT91C_BASE_PWMC_CH0->PWMC_CDTYR=A; AT91C_BASE_PWMC->PWMC_ENA=0x1; lcd_init(); while(1) { AT91C_BASE_PWMC_CH0->PWMC_CDTYR=A; cursor_off(); lcd_clear(); lcd_gotoxy(1,1); lcd_puts(AT91C_BASE_PWMC_CH0->PWMC_CDTYR); A++; delay_ms(50); } }
    ممنون

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    کاربر فعال soodi آواتار ها
    تاریخ عضویت
    Jun 2010
    نام
    مسعود محمدی
    نوشته ها
    264
    تشکر
    111
    تشکر شده 296 بار در 138 پست

    پیش فرض

    با سلام

    من به تازگی شروع به کار با ARM کرده ام و با میکرو SAM7X256 و Keil کار میکنم و چند وقتی است که روی راه اندازی PWM وقت گزاشته ام ولی هیچی به هیچی ، چندتا کتاب هم در این رابطه خواندم ولی چیزی نفهمیدم ، تا این که به کتابخانه موجود در لینک زیر برخوردم و برنامه ام رو به صورت زیر نوشتم :
    کلیه آموزش ها و نکات مهم برد eke2sam7x v2.0 کویرالکترونیک - ایـــــــــران میـــــــکرو ™

    کد:
    #include <at91sam7x256.h> #include <lib_at91sam7x256.h> #include <delay.h> #include <PWM.h> #define LCD_PORT_B #define LCD_RS 20 #define LCD_E 21 #define LCD_DB4 22 #define LCD_DB5 23 #define LCD_DB6 24 #define LCD_DB7 25 #include <lcd.h> int main(void){ int i; i=0; AT91C_BASE_PMC->PMC_PCER|=1<<AT91C_ID_PWMC; PWMC_Configure_PIO(AT91C_BASE_PIOB,19); PWMC_ConfigureClocks(500000,0,48000000); PWMC_ConfigureChannel(0,AT91C_PWMC_CPRE_MCKA,0,0); PWMC_SetPeriod(0,0xFFF); PWMC_SetDutyCycle(0,240); PWMC_EnableChannel(0); lcd_init(); while(1) { i++; PWMC_SetPeriod(0,i); cursor_off(); lcd_clear(); lcd_gotoxy(1,1); lcd_puts(i); } return 0; }
    1 . من برای کنترل نور یک LED و یا کنترل سرعت موتور باید الان چی رو تغییر بدهم ؟

    2 . برای ایجاد PWM با مشخصات زیر باید چکار کنم یعنی کمترین مقدار DutyCycle و بیشترین مقدار DutyCycle رو باید چه مقداری قرار بدهم و Period رو چطوری تغییر بدهم ؟
    فرکانس 50 هرتز (پریود 20 میلی ثانیه) و DutyCycle بین 5% تا 10% به ازای کمترین و بیشترین سرعت موتور یعنی 1 تا 2 میلی ثانیه است

    3 . در رجیستر PWMC_ConfigureChannel برای منبع کلاک باید چه مقداری رو قرار بدهم چون clka و mck رو قبول نمیکند !!! و لطفا یه توضیحی در این مورد بدهید

    الان یک LED به پورت B پین 19 متصل کردم ولی با برنامه مذکور هیچ تغییری نمیکند !!! من کدوم مقادیر رو باید تغییر بدهم ؟

    خیلی خیلی ممنون می شوم اگر من رو کمک و راهنمایی کنید ، خیلی گیر کرده ام
    سپاس بسیار بسیار فراوان

  4. #3
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    دایی جان شما باید فرکانس کریری رو رو تنظیم کنی هر فرکانسی که دوست داری با استفاده از تابع PWMC_SetPeriod و بعد درصد دیوتی سایکل رو تنظیم میکنی با فرمان PWMC_SetDutyCycle و در ضمن قبلش باید کانال رو کانفیگ کنی - یعنی این که مشخص کنی از کدام منبع کلاک قراره استفاده کنی.
    همون مثال کار میکنه دایی جان - من قبلا تستش کردم

  5. کاربران : 2 تشکر کرده اند از شما agape برای ارسال این پست سودمند:


  6. #4
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    مطالب پست زیر رو بخونید :
    Pwm - ایـــــــــران میـــــــکرو ™
    اگه سوال داشتید مطرح کنید.

  7. کاربران : 3 تشکر کرده اند از شما 1nafar برای ارسال این پست سودمند:


  8. #5
    کاربر فعال soodi آواتار ها
    تاریخ عضویت
    Jun 2010
    نام
    مسعود محمدی
    نوشته ها
    264
    تشکر
    111
    تشکر شده 296 بار در 138 پست

    پیش فرض

    آقا خیلی ممنون از پاسختون

    طبق فرمول زیر :
    MCK/X*CPRD مقدار Period برابر است با 48000000/4*50000=240
    :پس
    کد:
    PWMC_SetPeriod(0,240);
    و سپس تنظیم DutyCycle :
    پس :
    کد:
    PWMC_SetDutyCycle(0,i);
    و مقدار متغیر i باید بین اعداد 0 تا 240 تغییر کند
    برای تایین منبع کلاک هم باید مقدار دوم رجیستر زیر تغییر کند که می تواند clka , clkb , mck باشد
    ولی چرا کامپایلر هنگام قرار دادن mck در این رجیستر Error می دهد ؟؟؟
    کد:
    PWMC_ConfigureChannel(0,AT91C_PWMC_CPRE_MCKA,0,0);
    2. برای ایجاد PWM با مشخصات زیر باید چکار کنم ؟
    فرکانس 50 هرتز (پریود 20 میلی ثانیه) و DutyCycle بین 5% تا 10% به ازای کمترین و بیشترین سرعت موتور یعنی 1 تا 2 میلی ثانیه است


    تاپیکی که معرفی نمودید رو مطالعه کردم ولی مثل کتاب توضیح داده شده است ، من چیز زیادی نفهمیدم
    من آموزش به زبان ساده و مرحله به مرحله می خواهم

    من الان این تغییرات رو اعمال می کنم و نتیجه رو اعلام میکنم

    سپاس بسیار فراوان

  9. #6
    کاربر فعال soodi آواتار ها
    تاریخ عضویت
    Jun 2010
    نام
    مسعود محمدی
    نوشته ها
    264
    تشکر
    111
    تشکر شده 296 بار در 138 پست

    پیش فرض

    سلام

    مشکل حل شد
    اشکال از lcd بود که به پورت b وصل شده بود و کل پورت b رو ریخته بود به هم
    فکر کنم هدرش مشکل داره !!!!

  10. تشکرها از این نوشته :


موضوعات مشابه

  1. تبیدیل کتابخانه 2.8 lcd رنگی at91 به stm32
    توسط wantedboy در انجمن stm32
    پاسخ: 3
    آخرين نوشته: 31-12-2013, 21:59
  2. تبدیل کتابخانه 2.8 lcd رنگی at91 به stm32
    توسط wantedboy در انجمن AT91 series (ATMEL)
    پاسخ: 0
    آخرين نوشته: 23-12-2013, 19:43
  3. مشکل اساسی واحد pmc در میکرو سری at91
    توسط ramin_kent در انجمن AT91 series (ATMEL)
    پاسخ: 1
    آخرين نوشته: 28-08-2013, 20:09
  4. برنا مه های اولیه بدون هدر برای at91 sam7
    توسط farzin_ffr در انجمن AT91 series (ATMEL)
    پاسخ: 1
    آخرين نوشته: 29-08-2012, 02:54
  5. at91-isp
    توسط MEYSAMHL در انجمن AT91 series (ATMEL)
    پاسخ: 0
    آخرين نوشته: 26-08-2011, 10:14

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •