Challenge

Project 1 - Controlling a DC motor using PWM and monitoring its Running status

AIM:

Implement a system on the simulator for controlling a DC motor using L293 motor driver, monitor its status and print the running status of motor on the LCD Display.

Goals:

  • Implement a system on simulator for Controlling the DC motor using L293 motor driver.
  • Displaying the running status of DC motor on the LCD display.

Key Highlights of the Project:

  • The DC motor can be controlled by using L293 motor driver.
  • The speed of a DC motor can be controlled by varying its input voltage, for doing this is to use PWM (Pulse Width Modulation).

L293D IC is a typical Motor Driver IC which allows the DC motor to drive on any direction

Deliverables of this project:

  • Implement the system for controlling DC motor.
  • Controlling the speed of the DC motor using PMW.
  • Displaying the present running status of DC machine on LCD display.

PROGRAM:


#include <avr/io.h>
#define F_CPU 16000000ul
#include "avr/interrupt.h"
#include <util/delay.h>
#define sw_dir (PIND&(1<<1))
#define sw_spd (PIND&(1<<2))
#define pw (PINC&(1<<3))
#define lcd_port PORTB
unsigned char i;
#define RS_high PORTD|=(1<<5);
#define RS_low PORTD&=~(1<<5);
#define EN_high PORTD|=(1<<6);
#define EN_low PORTD&=~(1<<6);
void lcd_cmd(char cmd)
{
lcd_port=(cmd&0xf0); // Masking 4 bits for 4 bit LCD mode//
RS_low;
EN_low;
_delay_ms(1);
EN_high;
lcd_port=((cmd<<4)&(0xf0));
RS_low;
EN_low;
_delay_ms(1);
EN_high;
}
void lcd_data(char data)
{
lcd_port=(data &0xf0);
RS_high;
EN_low;
_delay_ms(1);
EN_high;
lcd_port=((data<<4)&(0xf0));
RS_high;
EN_low;
_delay_ms(1);
EN_high;
}
void lcd_init()
{

lcd_cmd(0x02);_delay_ms(5);//return the cursor to home
lcd_cmd(0x01);_delay_ms(5); //clear screen
lcd_cmd(0x0C);_delay_ms(5);//display ON cursor OFF
lcd_cmd(0x06);_delay_ms(5);//increment cursor
lcd_cmd(0x80);_delay_ms(5);//force cursor to begin 1st line
lcd_cmd(0x28);_delay_ms(5);//used for 4 bits lcd mode
}
void cursorpos(char x, char y)
{
if ((x<1||x>2)||(y>16||y<1)) // Excecution if loop
{
x=1;
y=1;
}
if (x==1)
{
lcd_cmd(0x7f+y);
}
else
{
lcd_cmd(0xBF+y);
} }
void lcd_out(char x, char y, char *str)
{
cursorpos(x,y);
while (*str)
{
lcd_data(*str);
str++;
} }

int main() // execution of main function
{
DDRB=0xFF; //datadirective register Bb is enabled
DDRA|=((1<<0)|(1<<1)); // port 0 and 1 is enabled
DDRD&=~(1<<1); //port D1 is reest
DDRD&=~(1<<2);
DDRD|=(1<<5);
DDRD|=(1<<6);
DDRC&=~(1<<3);
PORTD|=(1<<2);
PORTC|=(1<<3);
i=64;
TCCR0=0X61;
GICR=(1<<INT0);
MCUCR=0X02;
sei();
lcd_init();

while (1)

{
while(pw==0)
{
if (sw_dir==0)
{
PORTA=0b00000001;
lcd_out(1,1,"Motor is Running");
lcd_out(2,3,"Clockwise");
}
else
{
PORTA=0b00000010;
lcd_out(1,1,"Motor is Running");
lcd_out(2,3,"Anticlockwise");
}
OCR0=i;
}
PORTA=0x00;
lcd_out(1,1,"Motor is Off");
lcd_out(2,3,"Caution !!!!!");
}
}
ISR(INT0_vect) //interupt service routine 0
{
i=i+20;

}

Expected Outcomes/REPORTS:

  • Implement a system on simulator to control a DC motor using PMW.
  • Monitoring the running status of the DC motor using L293 motor driver which allows the DC motor to drive on any direction.
  • Running status i.e. on which direction the DC motor is running is to be displayed on the LCD screen.
Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.