PWM DC Motor Speed Controller Circuit Using PIC16F877A Microcontroller

In our last PIC online tutorial we have covered PWM generation using PIC Microcontroller. As I told earlier PWM has wide application in electronics and robotics engineering.In this article I’m gonna show you one of the important applications of PWM in Robotics, it is called Pulse Width Modulation motor speed control.

The method of generation of PWM signal is the same as before and this signal is applied to the Enable terminal of L293 motor driver IC. L293 is an H bridge motor controller IC capable of driving 2 Motor loads at a time.

Below is the detailed description of dc motor speed control using PWM technique with Proteus simulation and video demonstration.

Read more about: H Bridge L293 Motor driver 

This demonstration was done with available latest version of Proteus design suite and Mikro C pro.

Why We Need PWM For Speed Controlling Of DC Motor?

You may wonder why we need PWM signal for controlling DC motor speed when a resistor in series with the motor can simply do this job.

It’s because this method is not recommended in practical and also you don’t get enough torque to drive the motor with the help of resistor.

Limitation of using resistor

  • DC motor needs more power during the operation, also it draws more current from the supply.
  • If we use resistors, the motor will not get enough power to rotate because some of the power is dropped across the resistor (Low current).
  • Also the current will be very low.

So, How to control DC motor speed effectively? Here comes the importance of PWM technique…!

DC Motor Speed Control Using PWM Technique

  • With the help of PWM it is possible to control the average power delivered to a load and by thus we can easily regulate the speed of the DC Motor.
  • When the width of pulse is high, the motor will rotate with full speed.
  • Obviously with low pulse width, speed of motor gets reduced.
  • In both cases full current reaches the motor and only the average power changes, thus we get better torque in  each case.
  • Basically in this method we are chopping the DC voltage at regular interval.

PWM DC Motor Speed Driver Schematic

PWM DC motor controller circuit
Click to enlarge

PIC 16F877A PWM DC Motor Speed Control Mikro C Program

In this Mikro C embedded C program, two input switches are used to control the duty cycle of PWM signal.

S1 for increasing duty cycle and S2 for decreasing the same.

Frequency of PWM signal is set to 1 KHz

[cc lang=”C”]void main()
short duty1 = 16; //initial value for duty
TRISD = 0xFF; //PORTD as input
TRISC = 0x00; //PORTC as output
TRISB = 0x00; //PORTB as output
PORTB = 0x02; //Run motor in anticlock wise
PWM1_Init(1000); //Initialize PWM1
PWM1_Start(); //start PWM1
PWM1_Set_Duty(duty1); //Set current duty for PWM1

while (1) // endless loop

if (PORTD.F0==0) //Checking the button pressed or not
duty1++; // increment duty cycle
PWM1_Set_Duty(duty1); //Change the duty cycle

if (PORTD.F1==0) // Checking the button pressed or not
duty1–; // decrement duty cycle
} } [/cc]

All the program codes are self-explanatory, if you have any doubts please let us know through the comment box below.

PIC PWM Motor Speed Control Simulation in Proteus 8

Let’s start our virtual lab!

Step 1:
Generate .Hex file for PWM speed control in Mikro C.
Compile the above program in Mikro C, if you don’t know how to build hex file please read our Getting started guide for Mikro C Pro.

Step 2:
Draw the schematic in Proteus 8 as shown.

(Click on the image to enlarge)

Step 3:
Load .Hex file to the PIC.

Practical help: Use our USB PIC Programmer circuit for burning PIC Microcontroller practically.

Step 4:
Now Run the simulation.

Step 5:
Change duty cycle using provided keys and observe the speed of DC motor (watch the video).

Downloads:PWM DC Motor control .Hex file.
Please like our Facebook page to stay connected.

Next → Speed and Direction control of DC motor using PIC Microcontroller

11 thoughts on “PWM DC Motor Speed Controller Circuit Using PIC16F877A Microcontroller

  1. Anyway to control the PWM depending on the load current so that voltage changes and speed is maintained constant during different loads?

  2. hello,
    we have taken this topic for mini project.
    plz will you provide embedded c code for 2 dc motor controller with its hex file.

  3. hi I am an electrician that needs to know how to make a remote control for toy cars. I will be joyed if I am enlightened via this email address.

  4. can we use this for vehicles to control their speed?and plise am final year student of indestrial control.i need to control both speed and load(weight) on big what kind of sensor i use for ma project for the speed and load

  5. I realy need a micro c code for temprature controlled d.c motor fan, its for my thesis and I m left with only one month

Leave a Reply

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