ĐỒ ÁN TỐT NGHIỆP VI ĐIỀU KHIỂN ROBOT DÒ ĐƯỜNG
1
MỤ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
2
Bà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ý
DCR0
DCR1
12
12
DCL0
DCL1
HD1
HD2
A0 A2 A4 A6
A1 A3 A5 A7
SW1 SW3 SW5 SW7
SW0 SW2 SW4 SW6
5 4 3 2 1
10 9 8 7 6
5 4 3 2 1
10 9 8 7 6
0 L C D
0 R C D
1 L C D
1 R C D
+24V
+24V
DD1
DD2
C1
C2
VCC
VCC
GND
GND
GND
GND
104
104
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
VCC DK0 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
VCC DK1 PWM1
HDC1
HDC2
2
1
2
1
BUT1
BUT0
4
3
4
3
SW1
SW2
1 N R
GND
GND
A0 A1 A2 A3 A4 A5 A6 A7
1 2 3 4 5 6 7 8
39 38 37 36 35 34 33 32
T2/P1.0 T2 EX/P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
C3
VCC
RN3
R1
RES
10K
VCC
GND
1K
10uF
PWM0 DK0 PWM1 DK1
2
1
4
3
2 N R
K 0 1
SW3
SW0 SW1 SW2 SW3 SW4 SW5 SW6 SW7
10 11 12 13 14 15 16 17
21 22 23 24 25 26 27 28
BUT1 BUT0
RXD/P3.0 TXD/P3.1 INT0/P3.2 INT1/P3.3 T0/P3.4 T1/P3.5 WR/P3.6 RD/P3.7
P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
LR1
VCC
10K
RES
9
31
R2
RESET
EA/VPP
VCC
SW2
Cx1 33pF
VCC
GND
250
LED
18 19
30 29
3 2 1 JP1
GND
XTAL1 XTAL2
ALE/PROG PSEN
X1 12Mhz
IC1
Cx2
33pF
PNP1
1
3
+24V
HD3 1 2
2
R3
D1
1
3
IN
OUT
VCC
D N G
47
1 2 HD4
R4 270
2
C4 2200uF/16V
C5 2200uF/16V
IC2
LD1
C6 104
C7 104
GND
3
Mạch in
1 1 2 0 0
2 1 2 3 1
1 2 1
2 5 2 1 2 3 2 2 1 1 1 2 1 2 1
2
21 20 2 9 9 30 15 30 15 2 22 19 1 8 8 29 14 29 14 6 1 23 18 1 7 7 28 13 28 13 7 2 1 24 17 2 6 6 27 12 27 12 8 3 25 16 5 5 26 11 26 11 9 4 26 15 2 4 4 25 10 25 10 10 5 27 14 3 3 24 9 24 9 28 13 2 2 23 8 23 8 29 12 4 1 1 1 1 22 7 22 7 30 11 21 6 21 6 31 10 20 5 20 5 1 2 2 3 1 32 9 19 4 19 4 2 33 8 18 3 18 3 3 34 7 6 1 17 2 17 2 4 35 6 7 2 16 1 16 1 5 36 5 2 8 3 6 37 4 9 4 7 38 3 10 5 8 39 2 1 2 1 2 1 9 40 1 1 2 1 2
4
1 3 1 3 3 1 2 2 5 4 2 4 2 1
Mạch điều khiển động cơ “ IC MC 33486”
Mạch nguyên lý
+24V
R1
HD-MC1
10K
LD1
DCR0
R2
VCC
270
LD2
GND
PWM0
R3 270
DCL0
LD3
DK0
R4
270
+24V
LD4
GND
DCR0
5
OUT1
2
D
G
4
Q1 IRF840
GLS1
1
VCC DK0 PWM0
VCC PWM0 DK0 VCC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3S
CHAN CAM
GND
+24V
DCL0
13
OUT2
2
D
G
GND
19 3 18 20 2 12 21 10 1
17
C1 47uF/50V
Q2 IRF840
ST IN1 IN2 WAKE Cur R NC V+ NC GND
GLS2
1
3S
MC1
GND
5
Mạch in
2
2
1
1
2
1
2
1
15
2
2
2
2
14
1
1
1
1
13
13
1
12
2
11
21
3
10
9
8
5
1
7
2
6
5
4
3
3
2
2
1
1
Mạch so sánh (“IC LM358”)
a. Mạch nguyên lý
6
RN1 102
VCC
LD1
LD2
LD3
LD4
LD5
LD6
LD7
LD8
0 A
1 A
2 A
3 A
4 A
5 A
6 A
7 A
A0 A2 A4 A6
A1 A3 A5 A7
5 4 3 2 1
10 9 8 7 6
DD1
VCC
GND
VR1
VR2
GND
GND
VCC 5
0
VCC 3
1
100K
7
A0
1
A1
100K
LDED0
6
LDED1
2
IC1A
IC1B
VR3
VR4
GND
GND
LDED1 LDED3 LDED5 LDED7
LDED0 LDED2 LDED4 LDED6
VCC 5
2
VCC 3
3
100K
5 4 3 2 1
10 9 8 7 6
7
A2
1
A3
100K
LDED2
6
LDED3
2
DD2
VCC
IC2A
IC2B
GND
VR5
VR6
RN2
GND
GND
100K
VCC 5
4
VCC 3
5
7
A4
1
A5
100K
LDED4
6
LDED5
2
IC3A
IC3B
VR7
VR8
GND
GND
LDED0 LDED1 LDED2 LDED3 LDED4 LDED5 LDED6 LDED7 VCC
VCC 5
6
VCC 3
7
7
A6
1
A7
100K
100K
103
LDED6
6
LDED7
2
IC4A
IC4B
b. Mạch in
0
6
7
8
9
10
1
2
3
4
5
9
8
7
6
5
4
3
2
1
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
8
1
8
1
8
8
1
2
7
2
7
2
7
7
2
3
6
3
6
3
6
6
3
4
5
4
5
4
5
5
4
1
1
1
1
1
1
1
1
2
2
2
2
2
2
2
2
3
3
3
3
3
3
3
3
1
2
3
4
5
6
7
8
9
6
8
9
10
7
1
1
3
4
5
2
7
Mắt dò đường
Mạch nguyên lý
VCC
VCC
VCC
VCC
VCC
VCC
VCC
VCC
LDR1
LDR2
LDR3
LDR4
LDR5
LDR6
LDR7
LDR8
LDED0 LDED2 LDED4 LDED6
LDED1 LDED3 LDED5 LDED7
LDED0
LDED1
LDED2
LDED3
LDED4
LDED5
LDED6
LDED7
5 4 3 2 1
10 9 8 7 6
DD1
R1 10K
R2 10K
R3 10K
R4 10K
R5 10K
R6 10K
R7 10K
R8 10K
VCC
GND
GND
GND
GND
GND
GND
GND
GND
GND
VCC
VCC
VCC
VCC
VCC
VCC
VCC
VCC
R9 1K
R10 1K
R11 1K
R12 1K
R13 1K
R14 1K
R15 1K
R16 1K
LD1
LD2
LD3
LD4
LD5
LD6
LD7
LD8
GND
GND
GND
GND
GND
GND
GND
GND
Mạch in
10
9
8
7
6
0
3
5
4
3
2
1
2
1
2
1
2
1
2
1
1
2
1
2
1
2
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
1
2
2
1
1
2
1
2
1
2
2
1
2
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
8
II. CODE Robot dò đường
#include
//========= Đị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;
//------------------------------------------------------------------------------------
9
TR0=1; tocdo1=tocdo0; dk1=1; } if (chieu==back)
TR0=1; tocdo1=tocdo0; dk1=0; }
// 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) { { }
10
TR1=1; tocdo2=tocdo0; dk2=1; } if (chieu==back)
TR1=1; tocdo2=tocdo0; dk2=0; }
TR1=0; TL1=256-tocdo2;
//----------------------------------------------------------------------------------- // =============== Điều khiển bánh phải================== void banhphai (unsigned char tocdo0,unsigned char chieu) { if (chieu==go) { { } //----------------------------------------------------------------------------------- //============ Tao Xung PWM bánh phải ============= void ngatt1 (void) interrupt 3 { y++; if( y==1) {
xung2=1; TR1=1; } if (y==2)
11
{ TR1=0;
TL1=256-(100-tocdo2); xung2=0; TR1=1; y=0; }
{ TR0=0; TL0=256-tocdo1;
} //----------------------------------------------------------------------- //============ Tao Xung PWM bánh trái ============= void ngatt0 (void) interrupt 1 { x++; if (x==1)
xung=1; TR0=1; } if (x==2) { TR0=0; TL0=256-(100-tocdo1); xung=0; TR0=1; x=0; }
12
} //----------------------------------------------------------------------- //=============== 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;
13
nhotrai=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); banhtrai(15,go); nhophai=1;
14
nhotrai=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;
15
nhotrai=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!=R 5)||(INPUT!=R6)||(INPUT!=R7)||(INPUT!=L1)||(INPUT!=L2)||(INPUT!=L3
16
)||(INPUT!=L4)||(INPUT!=L5)||(INPUT!=L6)||(INPUT!=L7)||(INPUT!=out) )); { 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);
17
} }
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
Lê Xuân Định Nguyễn Trần Cường
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ớp: CDT- K9
18