PIC Lesson: PWM To Analog


PWM boleh menghasilkan analog voltage. PWM to Analog juga adalah merupakan DAC. Jika menggunakan R-2R Ladder, lapan output daripada microcontroller diperlukan untuk menghasilkan satu analog output. Menggunakan PWM, hanya satu output diperlukan bagi satu analog output dengan mengubah duty cycle nya sahaja. Litar PWM kepada voltan adalah seperti berikut.

Litar di atas sebenarnya adalah litar low pass filter di mana litar yang hanya menyalurkan frekuensi rendah dan menyekat frekuensi tinggi. Dalam isyarat PWM terdapat voltan DC dan AC yang dikenali harmonic. Apabila PWM melalui low pass filter, litar akan mengurangkan voltan AC yang berfrekuensi dan hanya menyalurkan voltan DC yang tidak berfrekuensi.

Dalam maksud lain, PWM adalah signal ‘ON’ dan ‘OFF’. Apabila melalui litar RC, capacitor akan charging ketika input 5V dan discharging ketika input 0V. Proses ini berlaku dengan sangat cepat dalam frekuensi PWM yang tinggi. Oleh itu, dengan mengubah duty cycle PWM tersebut, boleh mengubah voltan keluaran.

Vout1 adalah hasil voltan daripada nilai RC yang lebih tinggi berbanding Vout2. Dalam program ini saya juga mengubah frekuensi PWM bagi menunjukkan perubahan frekuensi tidak menunjukkan perubahan output yang ketara.

Berikut adalah videonya.

PIC Source Code

Sertai Telegram Group bagi dapatkan source code


10 responses to “PIC Lesson: PWM To Analog”

  1. Hi..Mr shahrul
    My name is eason…
    I have a question about this programming code.
    I watch the video that you upload, inside the video show that your duty cycle or frequency can be varying.
    How did you do that?
    Can u teach me?
    I hope get ur reply soon..
    Thank you very much

      • Oh…ok
        But i see u got turning the Potential meter issit?
        is it tat meter cause the duty cycle and frequency varying?
        thanks for reply me..:)

        • Yes, you see this 3 lines
          freq=(int)(18.3285*read_a2d(0)+1250);
          duty=(int)(0.09776*read_a2d(1));
          pwm_set(freq,duty);

          That’s why the freq comes from analog input RA0 and duty cycle comes from analog input RA1.

  2. Mr shahrul
    1.What is void convert(int no, char base);??

    2.For the CCP2CON=(CCP2CON&0b11001111)|((a%4)<<4);
    what is the |((a%4)<<4)??

Leave a Reply to madi Cancel reply

Your email address will not be published. Required fields are marked *