On E
DC Motor Speed And Direction Control
EEE342
Date:
20/06 /2013
Submitted By:
Jawad Ali REG ID : CIIT/DDP-FA10-BTE-022/LHR
2|Page
Program Code:void main() { short duty = 0; //initial value for duty TRISD = 0xFF; //PORTD as input TRISC = 0x00; //PORTC as output TRISB = 0x00; //PORTB as output PORTB = 0x02; //Run motor RB2_bit=1; //PB2=1 PWM1_Init(1000); //Initialize PWM1 PWM1_Start(); //start PWM1 PWM1_Set_Duty(duty); //Set current duty for PWM1 while (1) // endless loop { if (!RD0_bit && duty<256) //if button on RD0 pressed { Delay_ms(400); duty = duty + 20; //increment current_duty PWM1_Set_Duty(duty); //Change the duty cycle } if (!RD1_bit && duty >0) //button on RD1 pressed { Delay_ms(400); duty = duty - 20; //decrement duty PWM1_Set_Duty(duty); } Delay_ms(500); // slow down change pace a little if(!RB2_bit) //if button on RB0 pressed { PORTB=~PORTB; //Toggle PORTB } } }
3|Page
Schematic:SW1
SW-SPDT
SW2 U1
13 14 OSC1/CLKIN OSC2/CLKOUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD 33 34 35 36 37 38 39 40 15 16 17 18 23 24 25 26 19 20 21 22 27 28 29 30 SW-SPDT 2 7 1
X1
8 VS OUT1 OUT2
U2
3 6
0.00
CRYSTAL
C2
22pF
C1
22pF
2 3 4 5 6 7 8 9 10 1 VDD
RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+ RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RC0/T1OSO/T1CKI RE0/AN5/RD RC1/T1OSI/CCP2 RE1/AN6/WR RC2/CCP1 RE2/AN7/CS RC3/SCK/SCL RC4/SDI/SDA MCLR/Vpp/THV RC5/SDO RC6/TX/CK RC7/RX/DT RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 PIC16F877A
R1
10k
R2
10k
9 10 15
GND
11 14
L293D
B1
5V
MOTOR SUPPLY
12V
UP
DOWN
VSS
4|Page