Exp.4: To control the Speed of DC motor using PWMinPIC18F




CODE


#include<p18f4550.h>

void delay(unsigned int time)

{

unsigned int i, j;

for(i=0;i<time;i++)

for(j=0;j<1000;j++);

}

void main(void)

{

unsigned int i;

TRISCbits.TRISC1 = 0; //RC1 pin as output

TRISCbits.TRISC2 = 0; //CCP1 pin as output

LATCbits.LATC1 = 0;

CCP1CON = 0x3c; //Select PWM mode;

CCPR1L = 0x0F; //Duty cycle 10%T2CON = 0x20; //Prescalar = 16; Timer2 OFF

PR2 = 0x95; //Period Register

TMR2ON = 1; //Timer2 ON

while(1) //Loop forever

{

for(i=15;i<150;i++)

{

CCPR1L = i;

delay(100);

}

for(i=150;i>15;i- -)

{

CCPR1L = i;

delay(100);

}

}

}



Revised code:




#include <p18f4550.h>


void delay(unsigned int time)

{

    unsigned int i, j;

    for (i = 0; i < time; i++)

    {

        for (j = 0; j < 1000; j++);

    }

}


void main(void)

{

    unsigned int i;


    TRISCbits.TRISC1 = 0; // RC1 pin as output

    TRISCbits.TRISC2 = 0; // CCP1 pin as output

    LATCbits.LATC1 = 0;

    CCP1CON = 0x3C; // Select PWM mode

    CCPR1L = 0x0F; // Duty cycle 10%

    T2CON = 0x04; // Prescaler = 16; Timer2 ON

    PR2 = 0x95; // Period Register

    TMR2 = 0; // Initialize Timer2


    while (1) // Loop forever

    {

        for (i = 15; i < 150; i++)

        {

            CCPR1L = i;

            delay(100);

        }


        for (i = 150; i > 15; i--)

        {

            CCPR1L = i;

            delay(100);

        }

    }

}



Comments