اطلاعیه

Collapse
No announcement yet.

مشکل در تولید موج pwm

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

    مشکل در تولید موج pwm

    سلام.من میخوام یک موج pwm با فرکانس و dc متغیر تولید کنم.
    3تا کلید دارم که به 3تا پورت وصل میشه.یکیشون selector برای انتخاب تغییر duty cycle و یا فرکانسه.
    2 تای دیگه هم برای کم وزیاد کردنه. فرکانس از 4k تا 10k متغیره و با step 100 هرتزی تغییر میکنه.
    مد هم fast pwm هست.
    حالا مشکل اینجاست که هر کاری میکنم فقط duty cycle عوض میشه.
    برای اینکه فرکانس در dc یکسان مثلا 50 درصد عوض بشه باید مقدار اولیه ی تایمر تغییر کنه.ولی هر کاری میکنم وقتی به وقفه ov میره TCNT هیچ تغییری نمیکنه.
    لطفا کمکم کنید. چیکار کنم که فقط فرکانس عوض بشه؟
    برنامه هم code vision

    #2
    پاسخ : مشکل در تولید موج pwm

    سلام دادا.
    تنظیمات رو مطابق عکسی که گذاشتم تنظیم کن و بعد توی برنامه به TCNT1L و TCNT1H مقدار بده.
    در ضمن هنگام ساخت فایل کدویژن میخواد که پایه های مربوطه رو خروجی کنه که شما باید ok کنید.



    موفق باشید.
    تشکر لازم نیست!

    دیدگاه


      #3
      پاسخ : مشکل در تولید موج pwm

      میخوام با timer 0 این کارو انجام بدم. چون تازه کارم و هنوز به تایمر 1 مسلط نیستم.
      روابطی که بدست اوردم اینجوریه.
      foc=fclk/256-TCNT(min)1
      dc=OCR+1-TCNT(min)/256-TCNT(min
      حالا اگه مینیمم رو بزارم 6 فرکانس 4k میشه.و حداکثر میتونه 156 باشه .یعنی 0x9c .
      خوب اگه 6 تا 6تا اضافه کنم فرکانس 100هرتز بالا میره.
      و اگه بخوام dc ثابت بمونه باید OCR 3 تا اضافه بشه.
      مشکلم اینه که ocr اضافه میشه ولی TCNT هظافه نمیشه.
      چیکار کنم؟
      میشه یه راهنمایی بکنی؟
      راستی n=8 یعنی fclk =1mhz

      کد توی روتین وقفه به شکل زیر هست.
      interrupt [TIM0_OVF] void timer0_ovf_isr(void)
      {
      int x=0x84;
      if (PINA.2==0)
      {
      if(PINA.0==0) { x=x+6; OCR0=OCR0+3; delay_ms(100);}
      if (PINA.1==0) {x=x-6; OCR0=OCR0-3; delay_ms(100);}
      }
      else
      {
      if (PINA.0==0) {OCR0=OCR0+25; delay_ms(100);}
      if (PINA.1==0) {OCR0=OCR0-25; delay_ms(100); }
      }
      TCNT0=x;

      }

      مقدار اولیه tcnt v رو 0x84 گرفتم تا فرکانس پیش فرض 8K بشه و OCR هم برای اینکه DC 50 درصد بشه 0XC1 گرفتم.
      لطفا بگین مشکل چیه که TCNT عوض نمیشه.
      pina.2 SELECTOR
      pina.1 و A.0 برای افزایش و کاهش هست.
      خروجی pwm دارم ولی فقط DUTY CYCLE عوض میشه .و تست کردم دیدم که فقط رجیستر OCR عوض میشه.
      چرا tcnt عوض نمیشه؟

      دیدگاه


        #4
        پاسخ : مشکل در تولید موج pwm

        سلام دادا.
        فرقی نمیکنه. شما تنظیمات تایمر صفر رو مثل همین تایمر یک انجام بده.

        موفق باشی.
        تشکر لازم نیست!

        دیدگاه


          #5
          پاسخ : مشکل در تولید موج pwm

          فهمیدم مشکل چیه.
          باید x رو قبل از interrupt [TIM0_OVF] void timer0_ovf_isr(void) تعریف میکردم.

          به هر حال مرسی از راهنماییت.

          دیدگاه

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