ĐỒ ÁN TỐT NGHIỆPVI ĐIỀU KHIỂN ROBOT DÒ ĐƯỜNG... Bài báo cáo vi điều khiển Robot do đườngI... Mạch nguyên lý... Đồ án Robot dò đường dùng vi điều khiển 89S52 Thực hiên đồ án: Phạm Văn Lượ
Trang 1ĐỒ ÁN TỐT NGHIỆP
VI ĐIỀU KHIỂN ROBOT DÒ ĐƯỜNG
Trang 2MỤC LỤC
MỤC LỤC 2
Bài báo cáo vi điều khiển Robot dò đường 3
I Mạch 3
Mạch điều khiển 89S52 3
Mạch nguyên lý 3
Mạch in 4
Mạch điều khiển động cơ “ IC MC 33486” 5
Mạch nguyên lý 5
Mạch in 6
Mạch so sánh (“IC LM358”) 6
Mắt dò đường 8
Mạch nguyên lý 8
Mạch in 8
II CODE Robot dò đường 9
TR0=1; 10
TR0=1; 10
TR1=1; 11
TR1=1; 11
TR1=1; 11
TR1=0; 12
TR1=1; 12
TR0=0; 12
TL0=256-tocdo1; 12
TR0=1; 12
TR0=0; 12
TR0=1; 12
TR0=0; 17
TR1=0; 17
IT0=1; 17
IP=0; 17
III Đồ án Robot dò đường dùng vi điều khiển 89S52 18
Trang 3Bài báo cáo vi điều khiển Robot do đường
I Mạch
Mạch điều khiển 89S52
Mạch nguyên lý
T2/P1.0 1 T2 EX/P1.1 2
P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8
RESET 9
RXD/P3.0 10 TXD/P3.1 11 INT0/P3.2 12
INT1/P3.3 13
T0/P3.4 14 T1/P3.5 15 WR/P3.6 16 RD/P3.7 17
XTAL1 18 XTAL2 19
P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27 P2.7/A15 28
PSEN 29 ALE/PROG 30 EA/VPP 31
P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32
IC1
DK0 DK1
PWM0 PWM1
1
2
3
4
5
6
7
8
9
10
DD1
GND VCC
A0 A1 A2 A3 A4 A5 A6 A7
10K
10K
SW0 SW1 SW2 SW3 SW4 SW5 SW6 SW7 VCC
1 2 3 4 5
6 7 8 9 10
DD2
GND VCC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
HDC1
DCR0
DCL0
+24V
VCC DK0
C1 104
GND
PWM0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
HDC2
DCR1
DCL1
+24V
VCC DK1
C2 104
GND
PWM1
RN3
R2 250
LR1 LED
VCC GND
R3 47 C4
2200uF/16VC6104
C5 2200uF/16V C7104
VCC
GND
LD1
R4 270
1
3
PNP1
+24V
VCC
X1 12Mhz Cx2 33pF
Cx1 33pF
GND
RES
R1 1K
C3 10uF
2 1 4
SW3
GND
1 2 3
JP1
1
2
HD3
1
2
HD4
IN 1
OUT 3
IC2
HD1
HD2
D1
BUT0 BUT1
2 1 4
SW1
2 1 4
SW2
BUT0 BUT1
Trang 4Mạch in
5
5
1
4
1
2 3
4
1
2
1
2
2
1
1
2 2
1
2
1
2
2
3
2
1
2
1
2 1 2
1
1
2 3
4
2
1
2
1
2
1
8
6
4
3
2
1
5 7
9
8
6
4
3
2
1
5 7 9
8 6
4 3 2 1
5
7
9
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
2 1
2
1
1 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2 1
2 1
Trang 5Mạch điều khiển động cơ “ IC MC 33486”
Mạch nguyên lý
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
HD-MC1
CHAN CAM
DCR0
PWM0 DK0 VCC
DCL0
GND
LD3 LD2 LD1
R1 10K R2 270 R3 270 R4270
GND PWM0
DK0
VCC +24V
C1 47uF/50V
VCC
VCC
+24V
PWM0 DK0
GND
G 1 2
3 S
D Q1 IRF840
G 1 2
3 S
D Q2 IRF840
GND
GND
DCR0
DCL0 NC
10 NC 12 V+
21
GND 1
Cur R 2
IN1 3
GLS1 4 OUT1 5
OUT2 13 GLS2 17
IN2 18 ST 19
WAKE 20
MC1
Trang 6Mạch in
2
1 2
1 1
1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3
3 2 1
21
5 13
2 1
Mạch so sánh (“IC LM358”)
a Mạch nguyên lý
Trang 77 5
6
IC1B
1 3
2
IC1A
VR1 100K
LD1
VR2 100K
LD4 LD6 LD2 LD3 LD5 LD7 LD8
7 5
6
IC2B
1 3
2
IC2A
VR3 100K
VR4 100K
7 5
6
IC3B
1 3
2
IC3A
VR5 100K
VR6 100K
7 5
6
IC4B
1 3
2
IC4A
VR7 100K
VR8 100K
VCC
A A A A A A A A
1
3
5
6
8
10
DD2
GND
VCC
RN2
103
LDED0
LDED2
LDED4
LDED6
VCC
1
3
5
6
8
10
DD1
GND
VCC
b Mạch in
1 0
3
2
1
3
2
1
3 2 1
3 2 1
3 2 1
3 2 1
3 2 1
3 2 1
9 7 5
2
5 6 7 8
4
3
2
1
5 6 7 8
4 3 2 1
5 6 7 8
4 3 2 1
5 6 7 8
4 3 2 1
Trang 8Mắt dò đường
Mạch nguyên lý
R3 10K
1
3
5
6
8
10
DD1
GND
VCC
LDR3
GND
VCC
R4 10K LDR4
GND
VCC
R5 10K LDR5
GND
VCC
R6 10K LDR6
GND
VCC
R7 10K LDR7
GND
VCC
R8 10K LDR8
GND
VCC
R1 10K LDR1
GND
VCC
LDED0
R2 10K LDR2
GND
VCC
LD1
R9 1K
GND
VCC
LD2
R10 1K
GND
VCC
LD3
R11 1K
GND
VCC
LD4
R12 1K
GND
VCC
LD5
R13 1K
GND
VCC
LD6
R14 1K
GND
VCC
LD7
R15 1K
GND
VCC
LD8
R16 1K
GND VCC
Mạch in
3
0
2
1 2
1 2
1 2
1 2
1 2
1 2
1 2
2
1 2
1 2
1 2
1 2
1 2
1 2
1
2
2 2
2 2
2 2
2 2
2 2
2 1
2 1
1 2
1 3 5 6 8 10
Trang 9II CODE Robot dò đường
#include <REGX51.H>
//========= Định nghĩa chiều quay bánh==========
#define go 1
#define back 0
// -#define out 0xFF // 0B11111111
//============= Định nghĩa mắt dò================
#define R7 0x7F // 0B01111111
#define R6 0x3F // 0B00111111
#define R5 0xBF // 0B10111111
#define R4 0x9F // 0B10011111
#define R3 0xDF // 0B11011111
#define R2 0xAF // 0B11001111
#define R1 0xEF // 0B11101111
#define TT 0xE7 // 0B11100111
#define L1 0xF7 // 0B11110111
#define L2 0xF3 // 0B11110011
#define L3 0xFB // 0B11111011
#define L4 0xF9 // 0B11111001
#define L5 0xFD // 0B11111101
#define L6 0xFA // 0B11111100
#define L7 0xFE // 0B11111110
// -// =========== Định nghĩa Pin xung PWM, Pin điều khiển======= sbit xung=P2^0;
sbit dk1=P2^1;
sbit dk2=P2^3;
sbit xung2=P2^2;
Trang 10
// -// khai báo
unsigned char tocdo1,tocdo2 ;
unsigned char x=0,y=0;
unsigned long int counter0=0;
unsigned char INPUT;
// ==============Hàm tạo trễ===============
void delay(unsigned long int a)
{
unsigned long int i;
for (i=0;i<=a;i++);
}
// -//========== Đếm đường ngắt 0=================
void ngat0(void) interrupt 0
{
counter0++;
}
// -//================ Điều khiển bánh trái================== void banhtrai (unsigned char tocdo0,unsigned char chieu)
{
if (chieu==go)
{
TR0=1;
tocdo1=tocdo0;
dk1=1;
}
if (chieu==back)
{
TR0=1;
tocdo1=tocdo0;
dk1=0;
Trang 11// -// =============== Điều khiển bánh phải==================
void banhphai (unsigned char tocdo0,unsigned char chieu)
{
if (chieu==go)
{
TR1=1;
tocdo2=tocdo0;
dk2=1;
}
if (chieu==back)
{
TR1=1;
tocdo2=tocdo0;
dk2=0;
}
}
// -//============ Tao Xung PWM bánh phải ============= void ngatt1 (void) interrupt 3
{
y++;
if( y==1)
{ TR1=0;
TL1=256-tocdo2;
xung2=1;
TR1=1;
}
if (y==2)
Trang 12{
TR1=0;
TL1=256-(100-tocdo2);
xung2=0;
TR1=1;
y=0;
}
}
// -//============ Tao Xung PWM bánh trái =============
void ngatt0 (void) interrupt 1
{
x++;
if (x==1)
{
TR0=0;
TL0=256-tocdo1;
xung=1;
TR0=1;
}
if (x==2)
{
TR0=0;
TL0=256-(100-tocdo1);
xung=0;
TR0=1;
Trang 13}
// -//=============== Hàm do đường ================ void doduong(unsigned long int cm)
{
unsigned char nhotrai,nhophai;
unsigned char INPUT;
counter0=0;
while((100*cm)>=(counter0*18))
{
INPUT=P1; // mắt dò đượng nhận vào bằng PORT 1
switch (INPUT)
{
case TT:
{
banhphai(50,go);
banhtrai(50,go);
nhophai=0;
nhotrai=0;
break;
}
case L1:
{
banhphai(55,go);
banhtrai(45,go);
nhophai=0;
nhotrai=0;
break;
}
case L2:
{
banhphai(60,go);
banhtrai(40,go);
nhophai=0;
Trang 14nhotrai=0;
break;
}
case L3:
{
banhphai(65,go);
banhtrai(35,go);
nhophai=0;
nhotrai=0;
break;
}
case L4:
{
banhphai(70,go);
banhtrai(30,go);
nhophai=0;
nhotrai=0;
break;
}
case L5:
{
banhphai(75,go);
banhtrai(25,go);
nhophai=1;
nhotrai=0;
break;
}
case L6:
{
banhphai(80,go);
banhtrai(20,go);
nhophai=1;
nhotrai=0;
break;
}
case L7:
{
banhphai(85,go);
Trang 15nhotrai=0;
break;
}
case R1:
{
banhphai(45,go);
banhtrai(55,go);
nhophai=0;
nhotrai=0;
break;
}
case R2:
{
banhphai(40,go);
banhtrai(60,go);
nhophai=0;
nhotrai=0;
break;
}
case R3:
{
banhphai(35,go);
banhtrai(65,go);
nhophai=0;
nhotrai=0;
break;
}
case R4:
{
banhphai(30,go);
banhtrai(70,go);
nhophai=0;
nhotrai=0;
break;
}
case R5:
{
banhphai(25,go);
banhtrai(75,go);
nhophai=0;
Trang 16nhotrai=1;
break;
}
case R6:
{
banhphai(20,go);
banhtrai(80,go);
nhophai=0;
nhotrai=1;
break;
}
case R7:
{
banhphai(15,go);
banhtrai(85,go);
nhophai=0;
nhotrai=1;
break;
}
case out:
{
if (nhotrai == 1)
{
banhphai(90,go);
banhtrai(10,back);
}
if (nhophai == 1)
{
banhphai(10,back);
banhtrai(90,go);
}
break;
}
default :
{
if(((INPUT!=R1)||(INPUT!=R2)||(INPUT!=R3)||(INPUT!=R4)||(INPUT!
=R5)||(INPUT!=R6)||(INPUT!=R7)||(INPUT!=L1)||(INPUT!=L2)||(INPUT!
Trang 17{
banhphai(50,go);
banhtrai(50,go);
}
break;
}
}
}
}
// -//================ Hàm Stop===============
void stop(void)
{
TR0=0;
TR1=0;
xung=0;
dk1=0;
dk2=0;
xung2=0;
}
// -// Hàm chính
void main (void)
{
TMOD=0x22;
IE=0x8B;
IT0=1;
IP=0;
while(1)
{
doduong(300); // dò đường 3m dừng
stop();
while(1);
}
Trang 18}
Bài sử dụng các tài nguyên của 89S52 như sau:
o Timer 0,1 chế đỗ 8bit tạo xung dùng ngắt 1,3
o Ngắt ngoài 0 để đếm đường bằng Encoder
o PORT 1 để nhận tín hiệu từ mắt dò
o Và Pin I/O điều khiển
III Đồ án Robot dò đường dùng vi điều khiển 89S52
Thực hiên đồ án: Phạm Văn Lượng
Lê Xuân Định Nguyễn Trần Cường
Lớp: CDT- K9