Thông báo

Collapse
No announcement yet.

bác nào biết tính tần số trong pwm power trong 4331 chỉ e tính với

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • bác nào biết tính tần số trong pwm power trong 4331 chỉ e tính với

    e dung thach anh 20mhz em không biết giá trị đưa vào trong lệnh dưới này là bao nhiêu?

    mong mọi người giúp đở:

    setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1,0,9 9,0,1, 0);

  • #2
    em dùng 89xx hả ko cần phải dùng thạch anh cao vạy dau 12MH la đủ rồi công thức f=1/t từ công thúc trên em tính ra và đưa giá trị phù hợp vào câu lệnh

    Comment


    • #3
      em dung pic anh ah e dung 18f4331

      Comment


      • #4
        không ai trả lời mình thế nhỉ.mọi người đâu hết rồi.

        Comment


        • #5
          Công thức của bạn cần tính là:

          setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1,0,9 9,0,1, 0);

          Công thức tổng quát:

          setup_power_pwm(modes, postscale, time_base, period, compare, compare_postscale, dead_time)

          Trong đó:

          //PWM_CLOCK_DIV_4: ( 1: 4 )
          //Mode = Free Run
          // Postscale = 1 (1-16) Timebase output postscaler
          // TimeBase = 0 (0-65355) Initial value of PWM Timebase
          // Period là khoảng thời gian đếm từ 0 lên tới PTPER như vậy có thể hiểu cái PTPER của bạn là 99.( Nếu vậy, trong công thức tổng quát thì phải thay Period là PRPER chứ nhỉ? mình cũng ko hiểu chỗ này ? Các bạn xem hình dưới minh họa để hiểu thêm ) Vậy là Period chính là thời gian chu kỳ xung của pwm
          // Compare = 0 (Timebase value for special event trigger)
          // Compare Postscale = 1 (Postscaler for Compare value)
          // Dead Time = 0

          Tham khảo thêm tại link : config module power pwm của pic 18fxx31 - PIC Vietnam

          Theo như datasheet của Pic8f4431-trang 195 thì công thức tính tần số ( PWM Frequency ) là:

          PWM Frequency = 1/ PWM_period = 1/Tpwm ( PWM_period = Tpwm = chu kỳ thời gian của tần số muốn điều chế xung pwm )

          Với:

          Tpwm = ( PTPER +1 ) * PTMRPS ) / ( Fosc/4)

          Trong đó:

          - Fosc: Tần số thạch anh ngoài 20Mhz=20.000.000Hz
          - PTPER : bit thời gian cần đếm tới và sẽ được nạp vào 2 thanh ghi PTPERL và PTPERH ( của bạn là 99 ) Bộ đếm sẽ đếm từ 0 lên tới PTPER
          - PTMRPS: là một bộ đếm . Như của bạn là dùng bộ đếm 4 ( PWM_CLOCK_DIV_4 ) thì PTMRPS = 4 ( mình hiều vậy )
          Bộ đếm 4 theo mình hiểu nghía là cứ sau một khoảng thời gia t_clock4 nào đó thì sẽ đếm 0, 1, 2...

          như vậy t_clock4 = 1/(( Fosc/4 ) /4) ( như hình )


          như vậy thì :

          Tpwm = (( 99 +1 ) * 4 ) / ( 20.000.000/4) = 0.00008

          ==>PWM Frequency = Fpwm = 1/Tpwm = 1/ 0.00008= 12500Hz = 12.5Khz

          Cách tính % duty: ( % độ rộng xung )

          %dutycyle = dutycycle/(PTPER*4)

          Lệnh trong CCS để thay đổi độ rộng xung là:
          ví dụ : set_power_pwm0_duty ( duty )

          Giá trị dutycycle = %dutycyle* PTPER *4

          Ví dụ:

          - Bạn muốn chạy với độ rộng xung là 50% thì:

          dutycyle = 50% * 99 * 4 = 198 ( vì PTPER của bạn là 99 )

          - Do đó lệnh trong code của bạn là:

          set_power_pwm0_duty (198);


          Hình minh họa
          Attached Files
          Last edited by luongthitu; 23-12-2013, 16:42.

          Comment


          • #6
            Cách tính trên của em không đúng lắm.
            ---> Em xin tính lại

            Cách tính đúng là:

            FrequencyPWM = Fosc/(4*[prescale*(PTPER+1)])

            Trong đó:
            - Fosc : Tần số thạch anh ngoài
            - Prescale: Timebase output postscaler
            - PTPER chính là period trong công thức tổng quát.

            Công thức tổng quát: setup_power_pwm(modes, postscale, time_base, period, compare, compare_postscale, dead_time)

            -------------------------------------------------------------------------------------------------------------------
            Như vậy, công thức cần tính của bạn sẽ ra tần số điều chế xung PWM là:

            setup_power_pwm(PWM_CLOCK_DIV_4|PWM_FREE_RUN,1,0,9 9,0,1, 0);

            f = 20.000.000/(4*[1*(99+1)]) = 50.000Hz = 50khz

            Giá trị đã được kiểm tra bằng osilo thực tế.
            Last edited by luongthitu; 28-12-2013, 16:36.

            Comment

            Về tác giả

            Collapse

            bkvinh Tìm hiểu thêm về bkvinh

            Bài viết mới nhất

            Collapse

            Đang tải...
            X