اطلاعیه

Collapse
No announcement yet.

pwm با فرکانس های مختلف در lcp1768

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

    pwm با فرکانس های مختلف در lcp1768

    سلام خدمت همه دوستان!
    من با تابع زیر بخش pwm میکرو lpc1768 را راه انداختم!
    ولی الان یه مشکلی دارم و اونم اینه که فرکانس همه ی کانال های pwm با هم برابره و فقط میشه دیوتی سایکل را تغییر داد.
    من نیاز به چند فرکانس مختلف برای pwm دارم.
    به نظرتون راه حل مشکل چیه؟؟
    کد:
    void pwm1_init(int dt)
    {
     LPC_PINCON->PINSEL4 = (1<<0) | (1<<2) | (1<<4) | (1<<6); //1.2.3.4   
     LPC_PWM1->TCR = 0x01; 
     LPC_PWM1->MCR = 0x02; 
     LPC_PWM1->PCR =  (1<<11) ;
     LPC_PWM1->MR0 = 24000;
     LPC_PWM1->MR1 = dt;
     LPC_PWM1->MR2 = dt;
     LPC_PWM1->MR3 = dt;
     LPC_PWM1->MR4 = dt;
     LPC_PWM1->LER = (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4); 
     LPC_PWM1->PCR = (1<<9) | (1<<10) | (1<<11) | (1<<12);
    }
    یه سوال دگ هم داشتم! توی دیتاشیت lcp1768 گشتم ولی اصن یه خط کد هم ندیدم توی user manul هم چیزی نبود.
    می خوام بدونم این رجیستر ها و محاسباتشون دقیقا کجا نوشته شده؟

    #2
    پاسخ : pwm با فرکانس های مختلف در lcp1768

    سلام
    دیتا شیت بصورت کامل توضیح داده محاسبات رو دوست من
    در LPC_PWM1 شما شش تا کانال دارید که همه شون از MR0 فرکانس خودشون رو میگیرن
    وبقیه MR1..MR6 برای تعیین اندازه دیدتی سایکل هستند
    بنابراین حداقل برای یک سیکل فرکانس هر شش کانال یکی هستش
    و اگه نیاز دارید در حین کار فرکانس رو تغییر بدید اینتراپتش رو فعال کنید و بعد در اونجا بسته به شرایط برنامه تون مقدار فرکانس رو با MR0 تغییر بدید
    مطمنم این کدی که نوشتم میتونه کمکتون کنه
    [FONT=Yekan]void pwm1_init(void)[/FONT]
    {
    //--void PWMSingleEdgeInit(void)
    LPC_SC->PCONP |= (1 << 6); //PCPWM1 PWM1 power/clock control bit
    LPC_SC->PCLKSEL0 |= ((1<<13) | (1<<12));//CCLK/8, bits 13:12 PCLK_PWM1 Peripheral clock selection for PWM1
    //-- 5:4 P1.18 GPIO Port 1.18 USB_UP_LED PWM1.1 CAP1.0 00
    LPC_PINCON->PINSEL3 |= (1<<5);//-- Red LED on header board p1.18
    LPC_PINCON->PINSEL3 &= ~(1<<4);
    //--
    // LPC_PINCON->PINMODE3 &= ~((1<<5) | (1<<4)); //-- page 123
    //--
    LPC_PWM1->MR0 = (unsigned int)((SystemCoreClock/8*0.618)-1);// PERIOD
    LPC_PWM1->MR1 = (unsigned int)((SystemCoreClock/8*0.600)-1); // On time
    //--
    //PWM Control Register. Enables PWM outputs and selects PWM channel
    LPC_PWM1->PCR |= (1<<9);// bite [14..9] The PWM6..PWM1 output enabled.
    //--
    //PWM Latch Enable Register
    LPC_PWM1->LER |= ((1<<1) | (1<<0)); // (1<<0) better is removed Match0
    //--
    //PWM Match Control Register
    // 1 : Reset on PWMMR0: the PWMTC will be reset if PWMMR0 matches it.
    // 0 : Interrupt on PWMMR0: an interrupt is generated when PWMMR0 matches the value in the PWMTC.
    LPC_PWM1->MCR |= ((1<<1)|(1<<0));
    //--
    //PWM Timer Control Register
    LPC_PWM1->TCR |= ((1<<3) | (1<<0));//-- PWM Enable
    //--
    NVIC_EnableIRQ(PWM1_IRQn);//
    //--
    return;
    [FONT=Yekan]}[/FONT]





    [FONT=Yekan]/**********************************************************************/[/FONT]

    void PWM1_IRQHandler(void)
    {
    //--
    LPC_PWM1->IR |= (1u<<0); // Reset the MR0 Interrupt;
    // LPC_PWM1->LER |= ((1<<1) | (1<<0)); // (1<<0) better is removed Match0
    // LPC_PWM1->MR0 = (SystemCoreClock/8*2)-1;// PERIOD = 2 sec
    // LPC_PWM1->MR1 = (SystemCoreClock/8*1)-1; // 1 sec on "Period = 1 secend"
    LPC_WDT->WDFEED = 0xAA; // feed sequence.
    LPC_WDT->WDFEED = 0x55;
    //--
    return;
    }
    [LEFT][FONT=Yekan]/**********************************************************************/[/FONT][/LEFT]

    دیدگاه


      #3
      پاسخ : pwm با فرکانس های مختلف در lcp1768

      ممنونم.
      خیلی واسم جای خوشحالی هست که یک نفر به این تاپیک جواب داد.

      یک سوال؟
      من دیوتی سایکل را از طریق usart تغییر میدم و برحسب درصد یک عددی را واسه میکرو میفرستم ولی توی درصد های پایین مثلا وقتی 40 در صد به پایین را میفرستم میکرو هنگ میکنه.
      گاهی اوقاتم اینطور نیست.
      ممنون میشم اگه راهنماییم کنید

      دیدگاه


        #4
        پاسخ : pwm با فرکانس های مختلف در lcp1768

        دوست من سلام
        کم و زیاد کردن دیوتی سایل هرگز نمیتونه باعث هنگ کردن میکرو بشه
        مشکل رو در جای دیگه جستجو کنید
        پاک نکردن فلگ مربوط به اینتراپت های فعال شده پس از اجرای روتین وقفه - میتونه یکی از دلایل مشکل شما باشه

        دیدگاه


          #5
          پاسخ : pwm با فرکانس های مختلف در lcp1768

          نوشته اصلی توسط kazem1010 نمایش پست ها
          دوست من سلام
          کم و زیاد کردن دیوتی سایل هرگز نمیتونه باعث هنگ کردن میکرو بشه
          مشکل رو در جای دیگه جستجو کنید
          پاک نکردن فلگ مربوط به اینتراپت های فعال شده پس از اجرای روتین وقفه - میتونه یکی از دلایل مشکل شما باشه
          شما درست میگید.
          چون خودم هم با تایمر ها یک pwm شبیه سازی کردم ولی بازم این مشکلو توی ارسال مقدار از خط سریال به میکرو داشتم.
          من برای دریافت اطلاعات از وقفه استفاده نکردم.

          دیدگاه

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