You are on page 1of 15

Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

Lời nói đầu


Kỹ thuật vi điều khiển hiện nay rất phát triển, nó được ứng dụng vào rất nhiều
lĩnh vực sản xuất công nghiệp, tự động hóa, trong đời sống và còn nhiều lĩnh vực
khác nữa. So với kỹ thuật số thì kỹ thuật vi điểu khiển nhỏ gọn hơn rất nhiều do nó
được tích hợp lại và có khả năng lập trình được để điều khiển nên rất tiện dụng và
cơ động. Với tính ưu việt của vi điều khiển chúng em đã ứng dụng để nghiên cứu và
thực hiện đề tài: “Đếm sản phẩm bằng cảm biến hồng ngoại” hiển thị lên LCD
Mục đích của đề tài hướng đến: tạo ra bước đầu cho sinh viên thử nghiệm những
ứng dụng của kĩ thuật vi điều khiển trong thực tiễn để giúp học tốt môn vi điều
khiển, đồng thời là ứng dụng vào thực tế sau này.
Trước tiên, chúng em xin chân thành cảm ơn cô giáo Vũ Thị Thu Hương đã tận
tình giúp đỡ, theo dõi động viên, khuyến khích, tạo mọi điều kiện để em hoàn
thành tốt đồ án môn Vi điều khiển.
Chúng em xin gởi lời cám ơn đến Ban Giám Hiệu, toàn thể thầy cô và nhất là các
thầy cô trong khoa Điện tử đã tạo điều kiện thuận lợi để chúng em hoàn thành được
đồ án môn Vi điều khiển.
Do thời gian làm bài và kinh nghiệm còn hạn chế nên không tránh khỏi những
thiếu sót . Vì vậy, chúng em rất mong sự góp ý của các thầy cô và các bạn để có thể
hoàn thiện kĩ năng của mình hơn nữa.

Hà Nội, ngày 27 tháng 07 năm 2010


Nhóm thực hiện đồ án: Nhóm 9
Bùi Thanh Sơn
Bùi Văn Sơn
Lê Trọng Thanh

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

ĐỒ ÁN VI XỬ LÝ

Đề bài : Thiết kế bộ đếm sản phẩm dùng cảm biến hồng ngoại
I Giới thiệu về mạch và sơ đồ khối
Mạch sử dụng cảm biến hồng ngoại để đếm sản phẩm đi qua một vị trí cô định trên băng
truyền.
Mạch đếm sản phẩm bằng phương pháp đếm xung nên mỗi khi sản phẩm đi qua băng
chuyền thì cần có mạch để chuyển tín hiệu từ cảm biến thành dạng xung.Ta goi phần nay
la mạch điều chế.
Xung tao ra sẽ được đưa qua khối xử lý để tiến hành đếm sau đó số sản phẩm được hiển
thị lên máy tính.
Vì vi điều khiển sử dụng mức logic TTL còn máy tính thì được thiết kế cổng COM theo
chuẩn RS232 nên để giao tiếp giữa vi điều khiển và máy tính chúng ta cần có một mạch để
chuyển đổi mức tín hiệu.
Từ đó ta có sơ đồ khối như sau:

Cảm Xử
biến lý Chuyển Hiển
và và đổi mức thị
điều tính tín
chế toán hiệu lên
LCD

II Tìm hiểu về các khối chức năng


1/ Khối cảm biến và điều chế
a/Cảm biến hồng ngoại
- Cảm biến hồng ngoại sử dụng một cặp LED thu/phát hồng ngoại
- LED phát sẽ phát ra tia hồng ngoại khi được cấp dòng
- LED thu khi không có ánh sáng hồng ngoại chiếu vào thì có điện trở rất lớn.Ánh sáng
hồng ngoại có cường độ càng mạnh thì điện trở của LED thu càng nhỏ..

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

LED phát LED thu


V C C
R 3

R 1 R 2
D 1
L E D
U 3
1 3 U 2 A
8

3 +
2 4 1 I N _ T H
2 -
V R 1

L M 3 5 8
4

Mạch thu phát


- Biến trở VR1 sẽ được điều chỉnh đẻ tạo điện áp so sánh vào chân 2.
- Led D1 dùng để báo cho ta biết mức logic của đầu ra 7.
2/ Khối xử lý và tinh toán
Trong khối này chúng ta sử dụng vi điều khiển 89s52 để tính toán và hiển thị lên LCD.
a. Giới thiệu cấu trúc phần cứng 89s52
a1) Sơ đồ chân 89s52:
8051 là họ vi điều khiển (Microcontroller) do hãng Intel sản xuất. 89s52 có đặc điểm như
sau:
- 8k byte ROM,256 byte RAM
- 4 Port I/O 8 bit (32 chân xuất nhập)
- 3 bộ đếm/ định thời 16 bit.
- Giao tiếp nối tiếp song công hoàn toàn UART (full duplex UART)
- 64k byte không gian bộ nhớ chương trình mở rộng.
- 64k byte không gian bộ nhớ dữ liệu mở rộng.
- Một bộ xử lý luận lý (thao tác trên các bít đơn).
- 6 nguồn ngắt
- Watch Dog Time (WDT)

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

Sơ lược về các chân của 8051 (89s52):

a2/ Chức năng của các chân 8051:


Port 0: từ chân 32 đến chân 39 (P0.0 _P0.7). Port 0 có 2 chức năng: trong các
thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các đường IO, đối
với thiết kế lớn có bộ nhớ mở rộng nó được kết hợp giữa bus địa chỉ và bus dữ liệu.
Port 1: từ chân 1 đến chân 9 (P1.0 _ P1.7). Port 1 là port IO dùng cho giao tiếp
với thiết bị ngoài nếu cần.
Port 2: từ chân 21 đến chân 28 (P2.0 _P2.7). Port 2 là một port có tác dụng kép
dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị
dùng bộ nhớ mở rộng.
Port 3: từ chân 10 đến chân 17 (P3.0 _ P3.7). Port 3 là port có tác dụng kép. Các
chân của port này có nhiều chức năng, có công dụng chuyển đổi có liên hệ đến các
đặc tính đặc biệt của 8051 như ở bảng sau :

Bit Tên Chức năng chuyển đổi


P3.0 RXD Ngõ vào dữ liệu nối tiếp.
P3.1 TXD Ngõ xuất dữ liệu nối tiếp.
P3.2 INT0\ Ngõ vào ngắt cứng thứ 0.
P3.3 INT1\ Ngõ vào ngắt cứng thứ 1.
P3.4 T0 Ngõ vào TIMER/ COUNTER thứ 0.
P3.5 T1 Ngõ vào của TIMER/ COUNTER thứ 1.
P3.6 WR\ Tín hiệu ghi dữ liệu lên bộ nhớ ngoài.

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

P3.7 RD\ Tín hiệu đọc bộ nhớ dữ liệu ngoài

PSEN (Program store enable):


PSEN là tín hiệu ngõ ra có tác dụng cho phép đọc bộ nhớ chương trình mở rộng
và thường được nối đến chân OE\ của Eprom cho phép đọc các byte mã lệnh.
PSEN ở mức thấp trong thời gian 8051 lấy lệnh. Các mã lệnh của chương trình
được đọc từ Eprom qua bus dữ liệu, được chốt vào thanh ghi lệnh bên trong 8051 để
giải mã lệnh. Khi 8051 thi hành chương trình trong ROM nội PSEN ở mức cao.
ALE (Address Latch Enable):
Khi 8051 truy xuất bộ nhớ bên ngoài, Port 0 có chức năng là bus địa chỉ và dữ
liệu do đó phải tách các đường dữ liệu và địa chỉ. Tín hiệu ra ALE ở chân thứ 30 dùng
làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối chúng
với IC chốt.
Tín hiệu ở chân ALE là một xung trong khoảng thời gian port 0 đóng vai trò là
địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.
EA\ (External Access): Tín hiệu vào EA\ ở chân 31 thường được mắc lên mức
1 hoặc mức 0. Nếu ở mức 1, 8051 thi hành chương trình từ ROM nội. Nếu ở mức 0,
8051 thi hành chương trình từ bộ nhớ mở rộng. Chân EA\ được lấy làm chân cấp
nguồn 21V khi lập trình cho Eprom trong 8051.
RST (Reset): Khi ngõ vào tín hiệu này đưa lên mức cao ít nhất 2 chu kỳ máy,
các thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống. Khi
cấp điện mạch phải tự động reset.
Các ngõ vào bộ dao động X1, X2:
Bộ tạo dao động được tích hợp bên trong 8051. Khi sử dụng 8051, người ta chỉ cần nối
thêm tụ thạch anh và các tụ. Tần số tụ thạch anh thường là 12 Mhz
-mạch reset
V C C

S W 2

C 6
1 0 u F

R E S E T R S T

R 2
1 0 K

-Mạch tạo dao động (89s52 có thể lấy tần số thạch anh từ 0  33Mhz)
ở đây ta lấy tần số là 12 Mhz để hiện thị lên LCD

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

C 1
X 1

3 3 p F
Y 1
C 2 1 2 M H z
X 2

3 3 p F

b/ Ngắt (interrupt)
- 89s52 có 6 nguồn gây ngắt : ngắt ngoài 0,ngắt ngoài 1,ngắt timer 0,timer 1, timer 2,ngắt
do port nối tiếp

Vector ngắt và các cờ ngắt.

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

Chúng ta sử dụng ngắt ngoài 0 để đếm xung.Với phương pháp này,nếu sản phẩm đi qua
băng tải khi vi điều khiển đang bận xử lý thì chúng ta vẫn đếm được.Do đó sẽ cho kết
quả chính xác hơn.
- Ngắt ngoài 0 lấy tín hiệu đầu vào là chân INT0 (P3.2).Có hai kiểu gây ngắt đó là ngắt
theo mức “0“ và ngắt theo sườn âm.Khi có tín hiệu ngắt vào chân INT0 thì cờ IE0 được
dựng lên yêu cầu phục vụ ngắt.IE0 được xóa bởi phần mềm.
Có 2 thanh ghi điều khiển ngắt đó là:
- Thanh ghi cho phép/cấm ngắt IE
Bit Ký hiệu Địa chỉ bit Mô tả

IE.7 EA AFH Cho phép / Cấm toàn bộ

IE.6 _ AEH Không được mô tả

IE.5 ET2 ADH Cho phép ngắt từ Timer 2 (8052)

IE.4 ES ACH Cho phép ngắt port nối tiếp

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

IE.3 ET1 ABH Cho phép ngắt từ Timer 1

IE.2 EX1 AAH Cho phép ngắt ngoài 1

IE.1 ET0 A9H Cho phép ngắt từ Timer 0

IE.0 EX0 A8H Cho phép ngắt ngoài 0

Tóm tắt thanh ghi IE

- Thanh ghi ưu tiên ngắt IP:

- 2 bit IT0,IT1 nằm trong thanh ghi TCON dùng để chọn kiểu ngắt.IT0=0 cho ta kiểu ngắt
theo mức “0”,IT0=1 cho ta kiểu ngắt theo sườn âm.Trong bài này ta sử dụng ngắt theo
sườn âm.Code thiết lập ngắt :
EA=EX0=1; // cho phep ngat 0
IT0=1; // ngat bang suon am
c/ Timer 1
Chúng ta dùng timer 1 ở chế độ 2 (tự nạp lại 8 bít – auto- reload)
Sơ đồ hoạt động của time 0 va 1 ở chế độ này là :

Các thanh ghi điều khiển timer 1:

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

Thanh ghi chọn chế độ TMOD :

Thanh ghi điều khiển TCON :

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

Sử dụng phần mềm vẽ mạch altium 9


4/ Mạch nguyên lý

VCC
270

R1
LCD1

R2
1K LD1
R3
220 3 IC1A RS 1 39
8

T2/P1.0 P0.0/AD0
OP1 1 RW 2 38
T2 EX/P1.1 P0.1/AD1
2 EN 3 37
P1.2 P0.2/AD2

LCD 16x2A
VR1 4 36

GND
VDD
VSS
RS
R/W
EN
D0
D1
D2
D3
D4
D5
D6
D7
A
K
10K P1.3 P0.3/AD3
5 35
4

P1.4 P0.4/AD4
6 34

1
2
3
4
5
6
7
8
9
P1.5 P0.5/AD5 GND

10
11
12
13
14
15
16
Optoisolator1 7 33
P1.6 P0.6/AD6
8 32 GND R4
P1.7 P0.7/AD7

EN
VCC

RS
RW

D0
D1
D2
D3
D4
D5
D6
D7
10 21 D0
RXD/P3.0 P2.0/A8 220
11 22 D1 VCC
TXD/P3.1 P2.1/A9
VCC 12 23 D2
INT0/P3.2 P2.2/A10 VR2
GND 13 24 D3
INT1/P3.3 P2.3/A11 10K
14 25 D4
T0/P3.4 P2.4/A12
15 26 D5
T1/P3.5 P2.5/A13
C1 16 27 D6
WR/P3.6 P2.6/A14
10uF 17 28 D7
RD/P3.7 P2.7/A15
2

SW1
9 31 GND
RESET EA/VPP VCC
18 30
XTAL1 ALE/PROG
1

X1 19 29
XTAL2 PSEN
IC2
11.0592 VCC
C2 C3 D1
33 33 1 3
R5 1 IN OUT
10K 2
GND

HD1
C4 C7 C5 C6 R6
2

GND 10uF 10uF 104pF 270


104pF IC3

GND

LD2

GND

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

Mạch in

3
20 19 18 17 16 15 14 13 12 10 9 8 7 6 5 3 2 1
2 1
2 1
2

1 2 1

2 2 1 2
2 1

2
1 1
1

1
2 1
2

21 22 23 24 25 26 27 28 0 30 31 32 33 34 35 36 37 38 39 40
3 3 4

2 1 1 2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2

1 2

1 8

2 7

2 1

3 6

4 5 1 2 3 2 1 2

1 2 1

1 2

1 2

1 2

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

III Đánh già về sản phẩm


*Ưu điểm : Mạch đơn giản do hiển thị lên LCD và cảm biến hồng ngoại không có phần
chống nhiễu (thu và phát ánh sáng hồng ngoại ở một tần số nào đó để chống nhiễu ).Do đó
mạch rẻ tiền và dễ làm.
*Nhược điểm :
- Mạch không có giao tiếp với cac phím nhấn nên không đặt được giá trị cần đếm ban
đầu (chi đếm được từ 0) hoăc giá trị dừng đếm.
- Chỉ đếm được các sản phẩm có khả năng che đươc ánh sáng hồng ngoại
- Không chống được những nguồn nhiễu hồng ngoại
* Hướng phát triển :
- Thêm modun nút ấn cho mạch hoặc thiết kế phần mềm có thể cài đặt các thông số
hiển thị lên LCD
-Thiết kế thêm phần điều chế để có thể chống nhiễu cho cảm biến.
* Ứng dụng :
Với các cải tiến vừa nêu trên sản phẩm hoàn toàn có khả năng đem vào ứng dụng trong
thực tế sản xuất.

VI:CODE

#include<reg52.h>
#include<stdio.h>
#include<math.h>
sbit RS = P1^0;
sbit RW= P1^1;
sbit EN= P1^2;
unsigned char y;
char x;
int num;
int t;
float v;
unsigned char message[32];

void delay30ms(void)
{
TMOD=0x10;
TH1=35535/256;
TL1=35535%256;
TR1=1;
while(!TF1);
TR1=TF1=0;
}
void delay(unsigned long int m)
{

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

unsigned long int i;


for(i=0;i<m;++i);
}
void busy_flag(void)
{
P2=0xff;
RS=0;
RW=1;
do
{
EN=1;
delay(80);
EN=0;
x=P2;
x=x&0x80;
}
while(x==0x80);
}
void write_command(unsigned char LCD_command)
{
busy_flag();
P2=LCD_command;
RS=0;
RW=0;
EN=1;
delay(80);
EN=0;
delay(80);
}
void write_data(unsigned char LCD_data)
{
busy_flag();
if(LCD_data!='\n')
{
P2=LCD_data;
}
else
{
write_command(0xC0);
return;
}
RS=1;
RW=0;

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

EN=1;
delay(50);
EN=0;
delay(50);
}
void write_string(char *s)
{
while(*s)
{
write_data(*s);
s++;
}
}

void init(void)
write_command(0x03);
write_command(0x38);
write_command(0x06);
write_command(0x0e);
}
void hienthi(void)
{//write_command(0x01);
// write_command(0x80);
sprintf(&message[0]," \n ssp = %d sp ",num);
write_string(&message[0]);
delay(20000);
}
void main(void)
{
IE=0x84;
IT1=1;
num=0;
delay30ms();
init();
write_command(0x01);
write_command(0x80);
sprintf(&message[0],"N. SV THUC HIEN: \n Bui Thanh Son ");
write_string(&message[0]);
delay(20000);
write_command(0x01);
write_command(0x80);
sprintf(&message[0],"sinh vien 2. \n Bui Van Son ");
write_string(&message[0]);

Đồ án Vi Điều Khiển Nhóm 9


Đại học Công Nghiệp Hà Nội Lớp Cơ Điện Tử 2 K3

delay(20000);
write_command(0x01);
write_command(0x80);
sprintf(&message[0],"sinh vien 3. \n Le Trong Thanh ");
write_string(&message[0]);
delay(20000);
write_command(0x01);
write_command(0x80);
sprintf(&message[0],"so san pham:");
write_string(&message[0]);

while(1)
{
hienthi();
delay30ms();
}
}
void dsp(void) interrupt 2
{
++num;
}

Đồ án Vi Điều Khiển Nhóm 9

You might also like