اطلاعیه

Collapse
No announcement yet.

pwm

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

    pwm

    برای راه اندازی PWM0 در AT91SAM7S64 باید از کدام پایه استفاده کنم و چگونه کد نویسی می شود
    hardware-ui

    #2
    پاسخ : pwm

    نوشته اصلی توسط hadiyeg
    برای راه اندازی PWM0 در AT91SAM7S64 باید از کدام پایه استفاده کنم و چگونه کد نویسی می شود
    سلام
    پایه های PWM0 در 7S
    PA0
    PA11
    PA23
    می باشدو از هر کدام که بخواهی می توانی استفاده کنید. در مورد برنامه نویسی آن اول از همه باید فرکانس کاری میکرو و فرکانس PWM خود را مشخص کنید چون یک سری فرمول دارد برای محاسبات و مقدار دهی رجیسترها. در کتاب "مرجع کامل میکروکنترلرهای ARM سری AT91" انتشارات نص به طور کامل توضیح داده و چند تا مثال هم دارد و در قسمت پروژه های آن کنترل دور موتور هم می باشد.

    دیدگاه


      #3
      پاسخ : pwm

      سلام

      ممنون.تا حدودی فهمیدم باید کدوم رجیستر هارو مقدار دهی کنم ولی میشه بگی کجا تعیین میشه که حتما از PA0 ، PWM0 خارج میشه؟
      hardware-ui

      دیدگاه


        #4
        پاسخ : pwm

        نوشته اصلی توسط hadiyeg
        سلام

        ممنون.تا حدودی فهمیدم باید کدوم رجیستر هارو مقدار دهی کنم ولی میشه بگی کجا تعیین میشه که حتما از PA0 ، PWM0 خارج میشه؟
        سلام
        این سه خط تعیین می کند که PWM0 از PA0 خارج شود.
        کد:
        AT91C_BASE_PIOA->PIO_PDR = (1<<0);
        AT91C_BASE_PIOA->PIO_MDER = (1<<0);
        AT91C_BASE_PIOA->PIO_ASR = (1<<0);

        دیدگاه


          #5
          پاسخ : pwm

          ممنون
          hardware-ui

          دیدگاه


            #6
            پاسخ : pwm

            سلام
            من این کدارو تونستم از DATASHeet در بیارم .میشه بگید درسته یا اشکال داره؟ اگه بخوام فرکانس PWM 500HZ بشه مقدار رجیستر PWM_CPRD0 چند باید بشه؟ کریستال 18.432 گذاشتم.یه چیزایی از PMC خوندم.لازمه اونم راه بیوفته؟
            *AT91C_PWM_MR=0x00000A01
            *AT91C_PWM_ENA=0x00000001
            *AT91C_PWM_DIS=0x00000000
            *At91C_PWM_CMR0=0x0000000A
            hardware-ui

            دیدگاه


              #7
              پاسخ : pwm

              نوشته اصلی توسط hadiyeg
              سلام
              من این کدارو تونستم از DATASHeet در بیارم .میشه بگید درسته یا اشکال داره؟ اگه بخوام فرکانس PWM 500HZ بشه مقدار رجیستر PWM_CPRD0 چند باید بشه؟ کریستال 18.432 گذاشتم.یه چیزایی از PMC خوندم.لازمه اونم راه بیوفته؟
              *AT91C_PWM_MR=0x00000A01
              *AT91C_PWM_ENA=0x00000001
              *AT91C_PWM_DIS=0x00000000
              *At91C_PWM_CMR0=0x0000000A
              در مورد PMC قبلا هم در یک تایپیک دیگه گفتم باید آنرا فعال کنید و کریستال 18.432MHZ که به میکرو وصل است دلیلی نمیشه که میکرو با این فرکانس کار کند اگر واحد PMC را فعال نکنید میکرو با 32KHZ تقریبا کار می کند. پس اول باید واحد PMC را فعال کنید و فرکانس میکرو را تعیین کنید و سپس توسط واحد PMC کلاک واحد PWM را فعال کنید.
              http://www.eca.ir/forum2/index.php?topic=48607.0
              مقدار رجیستر PWM_CPRD به فرکانس میکرو تون ارتباط مستقیم دارد اول باید فرکانس میکروتون مشخص کنید سپس توسط فرمول آن مقدار این رجیستر را تعیین کنید.
              در مثال زیر PWM0 بر روی PA0 با فرکانس 48KHZ با D.C 10٪ را راه اندازی می کند. فرکانس میکرو هم 48MHZ می باشد.(تمامی این موارد دورن اون کتاب که گفتم هست)

              کد:
              #include <Atmel/ioat91sam7s64.h>
              void main ()
              {
              //--------------------start up--------------------------
              AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; // AT91C_WDTC_WDDIS=(1<<15)
              AT91C_BASE_RSTC->RSTC_RMR=0xA5000001;
              //--------------------speed up--------------------------
              AT91C_BASE_CKGR->CKGR_MOR = 0xF01;
              AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC; 
              AT91C_BASE_PMC->PMC_MCKR = 0x3;
              AT91C_BASE_PMC->PMC_SCER = 0x1;
              //-----------------------------------------------------
              AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PWMC); // AT91C_ID_PWMC=10
              //-----------------------------------------------------
              AT91C_BASE_PIOA->PIO_PDR = (1<<0);
              AT91C_BASE_PIOA->PIO_MDER = (1<<0);
              AT91C_BASE_PIOA->PIO_ASR = (1<<0);   
              AT91C_BASE_PWMC_CH0->PWMC_CMR = 0x202;   
              AT91C_BASE_PWMC_CH0->PWMC_CPRDR = 250;
              AT91C_BASE_PWMC_CH0->PWMC_CDTYR = 25;
              AT91C_BASE_PWMC->PWMC_ENA = 1;
              while(1); 
              }

              دیدگاه

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