اطلاعیه

Collapse
No announcement yet.

تولید PWM

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

    تولید PWM

    باسلام

    قصد ایجاد PWM با مشخصات زیر رو برای کنترل موتور دارم :
    فرکانس 50 هرتز (پریود 20 میلی ثانیه) و DutyCycle بین 5% تا 10% به ازای کمترین و بیشترین سرعت موتور یعنی 1 تا 2 میلی ثانیه است ، مانند تصویر زیر :
    رجیستر ها مثل PWMC_CMR و PWMC_CPRDR و PWMC_CDTYR چطور تنظیم کنم ؟
    تنظیم فرکانس میکرو روی 48 مگاهرتز و PWMC_CPRDR روی 250 درست است ؟



    با سپاس
    http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

    #2
    پاسخ : تولید PWM

    سلام
    می تونی به صورت زیر عمل کنی


    void pwm_init(void)
    {
    AT91C_BASE_PIOA->PIO_PDR = (AT91C_PIO_PA0);
    AT91C_BASE_PIOA->PIO_ASR = (AT91C_PIO_PA0);
    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 = (0x8 | AT91C_PWMC_CPOL);
    AT91C_BASE_PWMC_CH0->PWMC_CPRDR = 3600;
    AT91C_BASE_PWMC_CH0->PWMC_CDTYR = 180;
    AT91C_BASE_PWMC->PWMC_ENA = 0X1;
    }

    حالا با استفاده از تابع زیر با دادن عددی بین 180 تا 360 دیوتی سایکل بین 5 تا 10 درصد تغییر می کند
    void pwm_duty(int a)
    {
    AT91C_BASE_PWMC_CH0->PWMC_CUPDR = a;
    }

    دیدگاه


      #3
      پاسخ : تولید PWM

      سلام

      الان پروگرام کردم ولی کار نمیکنه
      چندتا سوال دارم

      الان شما توی این خط AT91C_BASE_PWMC->PWMC_MR = 0 مد PWM رو چی انتخاب کردید ؟
      و توی این خط (AT91C_BASE_PWMC_CH0->PWMC_CMR = (0x8 | AT91C_PWMC_CPOL آیا می خواستید CPOL رو هم فعال کنید ؟ خوب این که میشه 0x208 ؟
      http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

      دیدگاه


        #4
        پاسخ : تولید PWM

        سلام
        در PWMC_MR می تونی دو تا کلاک با نام a و b بسازی و بعد در PWMC_CMR یکیش رو بدی به pwm .

        بله می خواستم cpol رو فعال کنم که 0x208 درسته . اگر cpol فعال نباشه باید مقدار pwm رو بین 3240 تا 3420 بدی.

        من برنامه رو با شبیه ساز keil تست کردم درست بود

        #include <at91sam7s256.h>
        void pwm_init(void)
        {
        AT91C_BASE_PIOA->PIO_PDR = (AT91C_PIO_PA0);
        AT91C_BASE_PIOA->PIO_ASR = (AT91C_PIO_PA0);
        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 = 3600;
        AT91C_BASE_PWMC_CH0->PWMC_CDTYR = 180;
        AT91C_BASE_PWMC->PWMC_ENA = 0X1;
        }


        void pwm_duty(int a)
        {
        AT91C_BASE_PWMC_CH0->PWMC_CUPDR = a;
        }

        int main(void)
        {
        pwm_init();
        pwm_duty(360);
        while(1);
        }

        دیدگاه


          #5
          پاسخ : تولید PWM

          سلام

          ممنون جواب داد
          http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

          دیدگاه


            #6
            پاسخ : تولید PWM

            سلام

            من می خواهم با برنامه زیر فرکانس 490 هرتز با پریود 2 میلی ثانیه ایجاد بکنم :agree:
            فیلم و عکس فرکانس در زیر موجود هست که قراره دقیقاه یه همچنین فرکانسی ایجاد کنم
            اگر ممکنه راهنمایی کنید که مقادیر : CUPDR و CPRDR و CDTYR رو چطوری تعیین بکنم :question:
            این هم برنامه :
            کد:
            void pwm_init(void)
            {
            AT91C_BASE_PIOB->PIO_PDR = (1<<19);
            AT91C_BASE_PIOB->PIO_MDER = (1<<19);
            AT91C_BASE_PIOB->PIO_ASR = (1<<19);
            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 = 3600;
            AT91C_BASE_PWMC_CH0->PWMC_CDTYR = 180;
            AT91C_BASE_PWMC->PWMC_ENA = 0X1;
            }
            
            
            void pwm_duty(long a)
            {
            AT91C_BASE_PWMC_CH0->PWMC_CUPDR = a;
            }
            این هم فیلم فرکانس از صفحه اسکوپ : http://uplod.ir/ugwswjt5vbwf/22112012021.mp4.htm
            این هم عکس فرکانس :



            با سپاس
            http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

            دیدگاه


              #7
              پاسخ : تولید PWM

              سلام

              میگن انگار نمیشه با ARM همچنین فرکانسی ایجاد کرد
              اگر نمیشه از آیسی کنترل PWM استفاده کنم یا از 555
              یعنی واقعا نمیشه ؟

              باسپاس
              http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

              دیدگاه

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