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

موضوع: ساخت pwmدقیق

  1. #1
    کاربر فعال
    تاریخ عضویت
    Jul 2012
    نوشته ها
    101
    تشکر
    23
    تشکر شده 3 بار در 1 پست

    پیش فرض ساخت pwmدقیق

    با سلام
    دوستان من چطور میتونم یک PWM دقیق داشته باشم طریقه محاسبه کردن اش هم بلد نیستم ممنون میشم کمکم کنید
    من آی سی18F8720 رو دارم و کریستال ام هم 14745600 میباشد و مثلا میخوام 1درجه بر ثانیه سرعت خروجیم ست بشه چه راه حلی وجو داره
    محاسبه خود duty به چه صورت است
    من PWM رو راه اندازی کردم ولی کنترل دست من نیست حتی اعداد زیر صفر هم ست میکنم تو duty یه سرعتی میگیره
    ; ( set_pwm2_duty(0.06
    ; ( set_pwm2_duty(26
    ; ( set_pwm2_duty(20
    ; ( set_pwm2_duty(300
    همه اینا یه سرعتی میشه ولی من میخوام محاسبه کنم
    setup_timer_1 (T1_INTERNAL|T1_DIV_BY_8);
    setup_timer_2(T2_DIV_BY_16, 243 , 1);




    setup_ccp1(CCP_PWM);
    setup_ccp2(CCP_PWM);
    دوستان خواهشا کمک کنید
    از اینم چیزی سر در نیاوردم در helpخود PCW


    Examples:
    // For a 20 mhz clock, 1.2 khz frequency,
    // t2DIV set to 16
    // the following sets the duty to 50% (or 416 us).

    long duty;

    duty = 512; // .000416/(16*(1/20000000))
    set_pwm1_duty(duty);

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

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

    پیش فرض

    سلام
    اگه از pwm برای راه اندازی موتور استفاده میکنید ، سرعت موتور ، رابطه ی متسقیم با ولتاژ اعمالی به موتور و rpm موتور داره و از روی pwm نمیشه به صورت مسقیم اون رو محاسبه کرد .
    برای راه اندازی pwm در کامپایلر ccs باید مراحل زیر رو طی کنید :
    در میکروکنترلر های pic برخلاف میکروکنترلر های avr واحد pwm از تایمر و کانتر ها مجزا هست و با نام CCP شناخته میشه . CCP میتونه در مد های capture, compare و PWM پیکربندی بشه .
    در مد capture/compare فرکانس کاری CCP با مقدار دهی تایمر های 1 یا سه تعیین میشه .
    در مد pwm فرکانس کاری ccp با مقدار دهی تایمر 2 یا 4 تعیین میشه .
    بسته به نوع میکروکنترلر و تعداد ماژول های CCP ممکنه از تایمر های دیگه هم استفاده بشه .
    تعیین فرکانس :
    میکروکنترلر های pic معمولا دارای 2 تا 6 واحد CCP هستند ، CCP معمولا از تایمر 2 یا 4 برای عمل کرد در مد pwm استفاده میکنند ، با مراجعه به دیتاشیت میکروکنترلر مورد نظرتون میتونید شماره دقیق تایمر رو بدست بیارید . برای مثال میکروکنترلر pic18f8720 دارای Five Capture/Compare/PWM (CCP) modules هست و کاربر میتونه از تایمر 2 یا 4 برای تعیین فرکانس ccp استفاده کنه ( اطلاعات بیشتر در بخش 13 و 15 دیتاشیت میکروکنترلر ) .
    قبل از هر کاری باید ccp رو در مد pwm راه اندازی کنید :
    کد:
    setup_ccp1 (mode)
    و بعد تایمر 2 رو مقدار دهی کنید تا فرکانس pwm مشخص بشه :
    setup_timer_2 (mode, period, postscale)
    فرکانس pwm از رابطه محاسبه میشه ، و شما میتونید با جستوجوی دستورات بالا در راهنمای ccs اطلاعات بیشتری رو در موردشون بدست بیارید :
    کد:
    (1/clock)*4*t2div*(period+1)
    مثال :
    کد:
    #use delay(clock=10000000)
    
       setup_ccp1(CCP_PWM);   // Configure CCP1 as a PWM
     
    setup_timer_2(T2_DIV_BY_1, 127, 1); // (1/10000000)*4*1*128 =  51.2 us or 19.5 khz
    
       setup_ccp1(CCP_PWM);   // Configure CCP1 as a PWM
    setup_timer_2(T2_DIV_BY_4, 127, 1);//(1/10000000)*4*4*128 = 204.8 us or 4.9 khz
       
       setup_ccp1(CCP_PWM);   // Configure CCP1 as a PWM
    setup_timer_2(T2_DIV_BY_16, 127, 1); //     (1/10000000)*4*16*128= 819.2 us or 1.2 khz
    در بالا سه تا مثال برای پیکربندی pwm وجود داره که توضیحات مربوط بهش در کامنت های مقابلش اورده شده .
    تعیین دیوتی سایکل :
    برای تعیین مقدار دیوتی سایکل از دستور زیر استفاده میشه :
    کد:
    set_pwm1_duty (value)
    که مقدار value از فرمول زیر بدست میاد :
    کد:
    duty cycle = value / [ 4 * (PR2 +1 ) ]
    در این رابطه PR2 حداکثر مقداری هست که تایمر 2 میشمره ( مقدار period در دستور پیکربندی تایمر ) .
    مثال :
    کد:
    // For a 20 mhz clock, 1.2 khz frequency,
     // t2DIV set to 16, PR2 set to 200
     // the following sets the duty to 50% (or 416 us).
      
     long duty;
      
     duty = 408; // [408/(4*(200+1))]=0.5=50%
     set_pwm1_duty(duty);

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


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

  1. پاسخ: 16
    آخرين نوشته: 23-05-2016, 09:39
  2. کمک در ساخت pwmبا تایمر صفر
    توسط foaad در انجمن AVR
    پاسخ: 7
    آخرين نوشته: 29-03-2014, 16:44
  3. راه اندازی PWMدر dsPIC30f6014A
    توسط Raha323 در انجمن PIC
    پاسخ: 0
    آخرين نوشته: 11-03-2014, 16:47

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

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