PIC Lesson: PWM Module

February 11th, 2010  Posted at   Lesson PIC
arrow   |   19 Commentsarrow

PWM adalah singkatan bagi Pulse Width Modulation. PWM adalah satu teknik yang sangat berguna untuk mengawal litar analog daripada isyarat digital. Isyarat digital ini boleh dihasilkan daripada microcontroller. Address yang terlibat untuk menghasilan PWM dalam PIC16 adalah CCPCON, CCPR dan PR2.

PWM hanyalah signal ‘ON’ dan ‘OFF’ atau ‘HIGH’ dan ‘LOW’. PWM mempunyai dua parameter iaitu Frequency dan Duty Cycle. Daripada signal di bawah, Frequency adalah 1/T dan Duty Cycle adalah (t/T)x100%.

Daripada datasheet, PWM Module menggunakan persamaan matematik berikut untuk menghasilkan frekuensi dan duty cycle yang dikehendaki.

Tosc adalah masa bagi satu cycle atau 1/f, frekuensi bagi oscillator. TMR2 preescale perlu ditetapkan Timer2 Module sama ada 1, 4 atau 16. PWM duty cycle di atas adalah dalam saat, tetapi kebiasaannya duty cycle di tulis dalam %. Jadi, untuk menukarkannya kepada % adalah dengan membahagi PWM period kemudian darabkan dengan 100%. Tukarkan formula di atas kepada PR2 dan CCP sebagai perkara rumus. PR2 adalah 8bit data manakala CCP adalah 10bit data. CCP merangkumi CCPR1L:CCP1CON<5:4>.

Berikut adalah videonya.

PIC Source Code

19 Responses to “PIC Lesson: PWM Module”

  1. Hamizah says:

    boleh tak encik shahrul tunjukkan cara penulisan coding bg CCP1CON and CCP2ON tu..saya masih baru dlm microc ni..tak berapa faham cara nk tulis..terima kasih..

  2. Hamizah says:

    Assalamualaikum..

    saya nak tanya, kalau ada 2 pwm yg digunakan dlm microc macam mana nak shiftkan salah satu pwm tu? macam mana cara nak tulis coding untuk shifted pwm? terima kasih..

  3. Ming says:

    Hi,

    I try to display both of my ADC read_a2d(0) and read_a2d(1) on LCD display. How come the output only show read_a2d(0)? Thank you.

  4. ayu says:

    macam yang contoh coding kat atas ni utk control of CCP PWM kn?bukan untuk power control pwm kn? en shahrul ada contoh coding utk power control pwm x?:)

  5. ayu says:

    selalunya pic boleh generate hanya 2 signal pwm tp ade tak pic yg possible bleh generate 6 signal pwm…selain drpd nk kena guna 3 pic sekaligus..huhu..thanks.:)

  6. mtaufiq23 says:

    salam…dlm pwm code saudara, ape yg dmaksudkan dgn code yg saudara tulis spt dbwh:

    CCPR2L=a/4; //knp kene bhg 4?
    CCP2CON=(CCP2CON&0b11001111)|((a%4)<<4); // what purpose for this line?

  7. Zan says:

    Assalamualaikum Shahrul,

    Boleh kah saya gunakan program ini untuk project saya
    ?Project saya seperti berikut.
    “Constant motor speed through feedback”. Apabila load on the motor changes, the speed increases automatically by using feedback from the motor.Terima Kasih

  8. eason says:

    Mr Shahrul
    Now i having my final year project
    Im very very weak in programming part.
    My title is solar panel battery charger
    So i plan to use 6v solar panel, then connect to a
    DC-to-DC flyback converter.
    Is it this coding can be use in control the DC-to-DC flyback converter?

    Thanks for reply me

  9. eason says:

    Mr shahrul
    Is it i can use this coding to control my mosfet?

  10. Adzhar says:

    Assalamualaikum Shahrul, saya ada beberapa pertanyaan ttg coding Shahrul, harap sudi menjelaskan..

    1) freq=(int)(18.3285*read_a2d(0)+1250); -> kenapa perlu 1.3285 & +1250 ini?

    2) duty=(int)(0.09776*read_a2d(1)); -> kenapa perlu 0.09776 ini?

    3) PR2=(_XTAL_FREQ/(4*16))/(freq)-1;-> kenapa perlu 4*16 ini?

    4) a=(PR2+1)*duty/25; -> kenapa dibahagi /25 ?

    5) utk coding Shahrul ni, berapa minimun dan maksimum pwm frekuensi yg boleh dihasilkan?

    terima kasih

    • Shahrul says:

      ws,

      1) read_a2d adalah nombor 10bit. Jadi nilainya dari 0-1023. Bila rumus freq=18.3285*read_a2d(0)+1250, akan menghasilkan range frequensi dari 1250-20,000Hz.

      2) duty=0.09776*read_a2d(1), akan menghasilkan range duty dari 0-100%

      3) PR2=(_XTAL_FREQ/(4*16))/(freq)-1, mengikut rumus 4*(TMR2 Preescale). Jd, 16 adalah nilai TMR2 Preescale, telah diset pada T2CON.

      4) Untuk tukarkan duty cycle dlm datasheet drpd second kpd %, (duty_cycle/period)*100. No 25 terhasil apabila 100/4. 4 ada di dalam PWM_period.

      5) Minimum dan maximum frequensi, ikut rumus pd 1). Jd, range 1250-20,000Hz.

Leave a Reply

What is 13 + 13 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)