Chương trình hỗ trợ đầy đủ các câu lệnh, các cấu trúc C cơ bản. Ngoài ra thì C51 còn có tất cả các cấu trúc khác mà chuẩn C có như: kiểu mảng, con trỏ, hàm. (ngoại trừ kiểu file).
Nội dung ngôn ngữ C51
1. Bộ nhớ:
- Bộ nhớ chương trình: khi các bạn lập trình trong C51 nếu không lỗi chương trình sẽ biên dịch thành file.hex và bước tiếp theo là dùng một phần mềm kèm mạch nạp chuyên dụng để nạp vào chíp. Bộ nhớ để lưu file.hex gọi là bộ nhớ chương trình 8Kbyte.
- Bộ nhớ dữ liệu: Trong chương trình các bạn có thể khai báo biến để lưu trữ dữ liệu, bộ nhớ ram nội trong AT89S52 có 256 Byte dùng cho mục đích này, khi mất điện RAM nội không lưu trữ được nội dung.
76 trang |
Chia sẻ: lylyngoc | Lượt xem: 2822 | Lượt tải: 4
Bạn đang xem trước 20 trang tài liệu Luận văn Thiết kế mạch điện điều khiển kho hàng thông minh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
lệnh của chương trình được đọc từ ROM thông qua bus dữ liệu (Port0) và bus địa chỉ (Port0 + Port2).
Khi 8051 thi hành chương trình trong ROM nội, PSEN sẽ ở mức logic 1.
ALE/ PROG (Address Latch Enable / Program): ALE/ PROG (chân 30) cho phép tách các đường địa chỉ và dữ liệu tại Port 0 khi truy xuất bộ nhớ ngoài. ALE thường nối với chân Clock của IC chốt (74373, 74573). Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và có thể được dùng làm tín hiệu clock cho các phần khác của hệ thống. Xung này có thể cấm bằng cách set bit 0 của SFR tại địa chỉ 8Eh lên 1. Khi đó, ALE chỉ có tác dụng khi dùng lệnh MOVX hay MOVC. Ngoài ra, chân này còn được dùng làm ngõ vào xung lập trình cho ROM nội ( /PROG ).
EA /VPP (External Access) :
EA (chân 31) dùng để cho phép thực thi chương trình từ ROM ngoài. Khi nối chân 31 với Vcc, AT89C51 sẽ thực thi chương trình từ ROM nội (tối đa 8KB), ngược lại thì thực thi từ ROM ngoài (tối đa 64KB).
Ngoài ra, chân /EA được lấy làm chân cấp nguồn 12V khi lập trình cho ROM.
RST (Reset):
RST (chân 9) cho phép reset AT89C51 khi ngõ vào tín hiệu đưa lên mức 1 trong ít nhất là 2 chu kỳ máy.
X1, X2:
Ngõ vào và ngõ ra bộ dao động, khi sử dụng có thể chỉ cần kết nối thêm thạch anh và các tụ như hình vẽ trong sơ đồ. Tần số thạch anh thường sử dụng cho AT89C51 là 12Mhz.
Hình 2.3 . Sơ đồ kết nối thạch anh
2.3. Cổng vào/ra
Tất cả các vi điều khiển 8051 đều có 4 cổng vào/ra 8 bit có thể thiết lập như cổng vào hoặc ra. Như vậy có tất cả 32 chân I/O cho phép vi điều khiển có thể kết nối với các thiết bị ngoại vi.
Hình 2.4. Cổng vào/ra
Hình 2.4 mô tả sơ đồ đơn giản của mạch bên trong các chân vi điều khiển trừ cổng P0 là không có điện trở kéo lên (pull-up).
Chân ra: Một mức logic 0 đặt vào bit của thanh ghi P làm cho transistor mở, nối chân tương ứng với đất (hình 2.5)
Hình 2.5. Chân ra xuất mức 0
Hình 2.6. Trở treo nội tại chân
Chân vào:
Một bit 1 đặt vào một bit của thanh ghi cổng, transistor đóng và chân tương ứng được nối với nguồn Vcc qua trở kéo lên (hình 2.7)
Hình 2.7. Chân vào xuất mức 1
Port 0 : có 2 chức năng ở các chân 32 – 39 của AT89C51:
- Chức năng I/O (xuất/nhập): dùng cho các thiết kế nhỏ. Tuy nhiên, khi dùng chức năng này thì Port 0 phải dùng thêm các điện trở kéo lên (pull-up), giá trị của điện trở phụ thuộc vào thành phần kết nối với Port.
- Khi dùng làm ngõ vào, Port 0 phải được set mức logic 1 trước đó.
- Chức năng địa chỉ / dữ liệu đa hợp: khi dùng các thiết kế lớn, đòi hỏi phải sử dụng bộ nhớ ngoài thì Port 0 vừa là bus dữ liệu (8 bit) vừa là bus địa chỉ (8 bit thấp).
Ngoài ra khi lập trình cho AT89C51, Port 0 còn dùng để nhận mã khi lập trình và xuất mã khi kiểm tra (quá trình kiểm tra đòi hỏi phải có điện trở kéo lên).
Port 1:
Port1 (chân 1 – 8) chỉ có một chức năng là I/O, không dùng cho mục đích khác (chỉ trong 8032/8052/8952 thì dùng thêm P1.0 và P1.1 cho bộ định thời thứ 3). Tại Port 1 đã có điện trở kéo lên nên không cần thêm điện trở ngoài.
Port 1 có khả năng kéo được 4 ngõ TTL và còn dùng làm 8 bit địa chỉ thấp trong quá trình lập trình hay kiểm tra.
Khi dùng làm ngõ vào, Port 1 phải được set mức logic 1 trước đó.
Port 2: Port 2 (chân 21 – 28) là port có 2 chức năng:
- Chức năng I/O (xuất / nhập)
- Chức năng địa chỉ: dùng làm 8 bit địa chỉ cao khi cần bộ nhớ ngoài có địa chỉ 16 bit. Khi đó, Port 2 không được dùng cho mục đích I/O.
- Khi dùng làm ngõ vào, Port 2 phải được set mức logic 1 trước đó.
Port 3: Port 3 (chân 10 – 17) là port có 2 chức năng:
Chức năng I/O. Khi dùng làm ngõ vào, Port 3 phải được set mức logic 1 trước đó.
Chức năng khác mô tả như sau:
Bảng 2.1. Chức năng các chân của Port
Bit
Tên
Chức năng
P3.0
RxD
Ngõ vào port nối tiếp
P3.1
TxD
Ngõ ra port nối tiếp
P3.2
INT0
Ngắt ngoài 0
P3.3
INT1
Ngắt ngoài 1
P3.4
T0
Ngõ vào của bộ định thời 0
P3.5
T1
Ngõ vào của bộ định thời 1
P3.6
WR
Tín hiệu điều khiển ghi dữ liệu lên bộ nhớ ngoài.
P3.7
RD
Tín hiệu điều khiển đọc từ bộ nhớ dữ liệu ngoài.
2.4. Tổ chức bộ nhớ
Bộ nhớ trong
ROM 4KB
0000h – 0FFFh
RAM 128 byte
00h – 7Fh
SFR
80h – 0FFh
Bộ nhớ ngoài
Bộ nhớ chương trình 64 KB
0000h – FFFFh
Điều khiển bằng PSEN
Bộ nhớ dữ liệu 64 KB
0000h – FFFFh
Điều khiển bằng RD và WR
Hình 2.8. Các vùng nhớ trong AT89C51
Bảng 2.2. Các thanh ghi chức năng đặc biệt
Địa
chỉ
byte
Có thể
định địa
chỉ bit
Không định địa chỉ bit
F8h
F0h
B
E8h
E0h
ACC
D8h
D0h
PSW
C8h
(T2CON)
(RCAP2L)
(RCAP2H)
(TL2)
(TH2)
C0h
B8h
IP
SADEN
B0h
P3
A8h
IE
SADDR
A0h
P2
98h
SCON
SBUF
BRL
BDRCON
90h
P1
88h
TCON
TMOD
TL0
TH0
TL1
TH1
AUXR
CKCON
80h
P0
SP
DPL
DPH
PCON
Bộ nhớ của họ MCS-51 có thể chia thành 2 phần: bộ nhớ trong và bộ nhớ ngoài. Bộ nhớ trong bao gồm 4KB ROM và 128 byte RAM (256 byte trong 8052). Các byte RAM có địa chỉ từ 00h – 7Fh và các thanh ghi chức năng đặc biệt (SFR) có địa chỉ từ 80h – 0FFh có thể truy xuất trực tiếp. Đối với 8052, 128 byte RAM cao (địa chỉ từ 80h – 0FFh) không thể truy xuất trực tiếp mà chỉ có thể truy xuất gián tiếp (xem thêm trong phần tập lệnh).
Bộ nhớ ngoài bao gồm bộ nhớ chương trình (điều khiển đọc bằng tín hiệu PSEN ) và bộ nhớ dữ liệu (điều khiển bằng tín hiệu RD hay WR để cho phép đọc hay ghi dữ liệu). Do số đường địa chỉ của MCS-51 là 16 bit (Port 0 chứa 8 bit thấp và Port 2 chứa 8 bit cao) nên bộ nhớ ngoài có thể giải mã tối đa là 64KB.
2.4.1. Tổ chức bộ nhớ trong (bảng 2.3)
Bộ nhớ trong của MCS-51 gồm ROM và RAM. RAM bao gồm nhiều vùng có mục đích khác nhau: vùng RAM đa dụng (địa chỉ byte từ 30h – 7Fh và có thêm vùng 80h – 0FFh ứng với 8052), vùng có thể địa chỉ hóa từng bit (địa chỉ byte từ 20h – 2Fh, gồm 128 bit được định địa chỉ bit từ 00h – 7Fh), các bank thanh ghi (từ 00h – 1Fh) và các thanh ghi chức năng đặc biệt (từ 80h – 0FFh).
Các thanh ghi chức năng đặc biệt (SFR – Special Function Registers Bảng 2.2)
Bảng 2.3. Địa chỉ RAM nội 8051
Địa chỉ byte
Địa chỉ bit
Chức năng
7F
Vùng RAM đa dụng
30
Vùng RAM đa dụng
2F
7F
7E
7D
7C
7B
7A
79
78
Vùng có thể định địa chỉ bit
2E
77
76
75
74
73
72
71
70
Vùng có thể định địa chỉ bit
2D
6F
6E
6D
6C
6B
6A
69
68
Vùng có thể định địa chỉ bit
2C
67
66
65
64
63
62
61
60
Vùng có thể định địa chỉ bit
2B
5F
5E
5D
5C
5B
5A
59
58
Vùng có thể định địa chỉ bit
2A
57
56
55
54
53
52
51
50
Vùng có thể định địa chỉ bit
29
4F
4E
4D
4C
4B
4A
49
48
Vùng có thể định địa chỉ bit
28
47
46
45
44
43
42
41
40
Vùng có thể định địa chỉ bit
27
3F
3E
3D
3C
3B
3A
39
38
Vùng có thể định địa chỉ bit
26
37
36
35
34
33
32
31
30
Vùng có thể định địa chỉ bit
25
2F
2E
2D
2C
2B
2A
29
28
Vùng có thể định địa chỉ bit
24
27
26
25
24
23
22
21
20
Vùng có thể định địa chỉ bit
23
1F
1E
1D
1C
1B
1A
19
18
Vùng có thể định địa chỉ bit
22
17
16
15
14
13
12
11
10
Vùng có thể định địa chỉ bit
21
0F
0E
0D
0C
0B
0A
09
08
Vùng có thể định địa chỉ bit
20
07
06
05
04
03
02
01
00
Vùng có thể định địa chỉ bit
1F
18
Bank 3
Các bank thanh ghi
17
10
Bank 2
Các bank thanh ghi
1F
08
Bank 1
Các bank thanh ghi
07
00
Bank thanh ghi 0 ( mặc định cho R0-R7)
Các bank thanh ghi
Các thanh ghi có thể định địa chỉ bit sẽ có địa chỉ bit bắt đầu và địa chỉ byte trùng nhau. Ví dụ như: thanh ghi P0 có địa chỉ byte là 80h và có địa chỉ bit bắt đầu từ 80h (ứng với P0.0) đến 87h (ứng với P0.7). Chức năng các thanh ghi này sẽ mô tả trong phần sau
RAM nội:
Chia thành các vùng phân biệt: vùng RAM đa dụng (30h – 7Fh), vùng RAM có thể định địa chỉ bit (20h – 2Fh) và các bank thanh ghi (00h – 1Fh).
b. RAM đa dụng:
RAM đa dụng có 80 byte từ địa chỉ 30h – 7Fh có thể truy xuất mỗi lần 8 bit bằng cách dùng chế độ địa chỉ trực tiếp hay gián tiếp.
Các vùng địa chỉ thấp từ 00h – 2Fh cũng có thể sử dụng cho mục đich như trên ngoài các chức năng đề cập như phần sau.
RAM có thể định địa chỉ bit:
Vùng địa chỉ từ 20h – 2Fh gồm 16 byte (= 128 bit) có thể thực hiện giống như vùng RAM đa dụng (mỗi lần 8 bit) hay thực hiện truy xuất mỗi lần 1 bit bằng các lệnh xử lý bit. Vùng RAM này có các địa chỉ bit bắt đầu tại giá trị 00h và kết thúc tại 7Fh.
Như vậy, địa chỉ bắt đầu 20h (gồm 8 bit) có địa chỉ bit từ 00h – 07h; địa chỉ kết thúc 2Fh có địa chỉ bit từ 78h – Fh.
Các bank thanh ghi:
Vùng địa chỉ từ 00h – 1Fh được chia thành 4 bank thanh ghi: bank 0 từ 00h- 07h, bank 1 từ 08h – 0Fh, bank 2 từ 10h – 17h và bank 3 từ 18h – 1Fh. Các bank thanh ghi này được đại diện bằng các thanh ghi từ R0 đến R7. Sau khi khởi động hệ thống thì bank thanh ghi được sử dụng là bank 0.
Do có 4 bank thanh ghi nên tại một thời điểm chỉ có một bank thanh ghi được truy xuất bởi các thanh ghi R0 đến R7. Việc thay đổi bank thanh ghi có thể thực hiện thông qua thanh ghi từ trạng thái chương trình (PSW). Các bank thanh ghi này cũng có thể truy xuất bình thường như vùng RAM đa dụng đã nói ở trên.
2.4.2. Tổ chức bộ nhớ ngoài
MCS-51 có bộ nhớ theo cấu trúc Harvard: phân biệt bộ nhớ chương trình và dữ liệu. Chương trình và dữ liệu có thể chứa bên trong nhưng vẫn có thể kết nối với 64KB chương trình và 64KB dữ liệu. Bộ nhớ chương trình được truy xuất thông qua chân PSEN còn bộ nhớ dữ liệu được truy xuất thông qua chân WR hay RD .
Lưu ý rằng việc truy xuất bộ nhớ chương trình luôn luôn sử dụng địa chỉ 16 bit còn bộ nhớ dữ liệu có thể là 8 bit hay 16 bit tuỳ theo câu lệnh sử dụng. Khi dùng bộ nhớ dữ liệu 8 bit thì có thể dùng Port 2 như là Port I/O thông thường còn khi dùng ở chế độ 16 bit thì Port 2 chỉ dùng làm các bit địa chỉ cao.
Port 0 được dùng làm địa chỉ thấp/ dữ liệu đa hợp. Tín hiệu /ALE để tách byte địa chỉ và đưa vào bộ chốt ngoài.
Trong chu kỳ ghi, byte dữ liệu sẽ tồn tại ở Port 0 vừa trước khi /WR tích cực và được giữ cho đến khi /WR không tích cực.Trong chu kỳ đọc, byte nhận được chấp nhận vừa trước khi /RD không tích cực.
Bộ nhớ chương trình ngoài được xử lý 1 trong 2 điều kiện sau:
- Tín hiệu /EA tích cực ( = 0).
- Giá trị của bộ đếm chương trình (PC – Program Counter) lớn hơn kích thước bộ nhớ.
PCH: Program Counter High – PCL: Program Counter Low
DPH: Data Pointer High – DPL: Data Pointer Low
Hình 2.9. Thực thi bộ nhớ chương trình ngoài
Bộ nhớ chương trình ngoài:
Quá trình thực thi lệnh khi dùng bộ nhớ chương trình ngoài có thể mô tả như hình 2.9. Thực thi bộ nhớ chương trình ngoài”. Trong quá trình này, Port 0 và Port 2 không còn là các Port xuất nhập mà chứa địa chỉ và dữ liệu. Sơ đồ kết nối với bộ nhớ chương trình ngoài mô tả như hình 2.8. Các vùng nhớ trong AT89C51”.
Trong một chu kỳ máy, tín hiệu ALE tích cực 2 lần. Lần thứ nhất cho phép 74HC573 mở cổng chốt địa chỉ byte thấp, khi /ALE xuống 0 thì byte thấp và byte cao của bộ đếm chương trình đều có nhưng ROM chưa xuất vì PSEN chưa tích cực, khi tín hiệu ALE lên 1 trở lại thì Port 0 đã có dữ liệu là mã lệnh. ALE tích cực lần thứ hai được giải thích tương tự và byte 2 được đọc từ bộ nhớ chương trình. Nếu lệnh đang thực thi là lệnh 1 byte thì CPU chỉ đọc Opcode, còn byte thứ hai bỏ qua.
Bộ nhớ dữ liệu ngoài:
Bộ nhớ dữ liệu ngoài được truy xuất bằng lệnh MOVX thông qua các thanh ghi xác định địa chỉ DPTR (16 bit) hay R0, R1 (8 bit).
Quá trình thực hiện đọc hay ghi dữ liệu được cho phép bằng tín hiệu RD hay WR (chân P3.7 và P3.6).
Bộ nhớ chương trình và dữ liệu dùng chung:
Trong các ứng dụng phát triển phần mềm xây dựng dựa trên AT89C51, ROM sẽ được lập trình nhiều lần nên dễ làm hư hỏng ROM. Một giải pháp đặt ra là sử dụng RAM để chứa các chương trình tạm thời. Khi đó, RAM vừa là bộ nhớ chương trình vừa là bộ nhớ dữ liệu. Yêu cầu này có thể thực hiện bằng cách kết hợp chân RD và chân PSEN thông qua cổng AND. Khi thực hiện đọc mà lệnh, chân /PSEN tích cực cho phép đọc từ RAM và khi đọc dữ liệu, chân RD sẽ tích cực.
Giải mã địa chỉ
Trong các ứng dụng dựa trên AT89C51, ngoài giao tiếp bộ nhớ dữ liệu, vi điều khiển còn thực hiện giao tiếp với các thiết bị khác như bàn phím, led, động cơ, … Các thiết bị này có thể giao tiếp trực tiếp thông qua các Port. Tuy nhiên, khi số lượng các thiết bị lớn, các Port sẽ không đủ để thực hiện điều khiển. Giải pháp đưa ra là xem các thiết bị này giống như bộ nhớ dữ liệu. Khi đó, cần phải thực hiện quá trình giải mã địa chỉ để phân biệt các thiết bị ngoại vi khác nhau. Quá trình giải mã địa chỉ thường được thực hiện thông qua các IC giải mã như 74139 (2 ® 4), 74138 ( 3 ® 8), 74154 (4 ® 16). Ngõ ra của các IC giải mã sẽ được đưa tới chân chọn chip của RAM hay bộ đệm khi điều khiển ngoại vi.
2.5. Các thanh ghi chức năng đặc biệt (SFRs - Special Function Registers)
2.5.1. Thanh ghi tích luỹ (Accumulator)
Thanh ghi tích luỹ là thanh ghi sử dụng nhiều nhất trong AT89C51, được ký hiệu trong câu lệnh là A. Ngoài ra, trong các lệnh xử lý bit, thanh ghi tích luỹ được ký hiệu là ACC.
Thanh ghi tích luỹ có thể truy xuất trực tiếp thông qua địa chỉ E0h (byte) hay truy xuất từng bit thông qua địa chỉ bit từ E0h đến E7h.
Ví dụ:
MOV A,#1
MOV 0E0h,#1
có cùng kết quả. Hay:
SETB ACC.4
SETB 0E4h
cũng tương tự.
Thanh ghi B
Thanh ghi B dùng cho các phép toán nhân, chia và có thể dùng như một thanh ghi tạm, chứa các kết quả trung gian.
Thanh ghi B có địa chỉ byte F0h và địa chỉ bit từ F0h – F7h có thể truy xuất giống như thanh ghi A.
2.5.2. Thanh ghi từ trạng thái chương trình (PSW - Program Status Word)
Thanh ghi từ trạng thái chương trình PSW nằm tại địa chỉ D0h và có các địa chỉ bit từ D0h – D7h, bao gồm 7 bit (1 bit không sử dụng) có các chức năng như sau:
Hình 2.10. Thanh ghi PSW
CY (Carry): cờ nhớ, thường được dùng cho các lệnh toán học không dấu (C = 1 khi có nhớ trong phép cộng hay mượn trong phép trừ)
AC (Auxiliary Carry): cờ nhớ phụ (thường dùng cho các phép toán BCD).
F0 (Flag 0): được sử dụng tuỳ theo yêu cầu của người sử dụng.
RS1, RS0: dùng để chọn bank thanh ghi sử dụng. Khi reset hệ thống, bank 0 sẽ được sử dụng.
Hình 2.11. Chọn bank thanh ghi
OV (Overflow): cờ tràn. Cờ OV = 1 khi có hiện tượng tràn số học xảy ra (dùng cho số nguyên có dấu).
F1 (Flag 1): được sử dụng tuỳ theo yêu cầu của người sử dụng.
P (Parity): kiểm tra parity (lẻ). Cờ P = 1 khi tổng số bit 1 trong thanh ghi
A là số lẻ (nghĩa là tổng số bit 1 của thanh ghi A cộng thêm cờ P là số chẵn). Ví dụ như: A = 10101010b có tổng cộng 4 bit 1 nên P = 0. Cờ P thường được dùng để kiểm tra lỗi truyền dữ liệu.
2.5.3.Thanh ghi con trỏ stack (SP – Stack Pointer)
Con trỏ stack SP nằm tại địa chỉ 81h và không cho phép định địa chỉ bit. SP dùng để chỉ đến đỉnh của stack. Stack là một dạng bộ nhớ lưu trữ dạng LIFO (Last In First Out) thường dùng lưu trữ địa chỉ trả về khi gọi một chương trình con. Ngoài ra, stack còn dùng như bộ nhớ tạm để lưu lại và khôi phục các giá trị cần thiết.
Đối với AT89C51, stack được chứa trong RAM nội (128 byte đối với 8031/8051 hay 256 byte đối với 8032/8052). Mặc định khi khởi động, giá trị của SP là 07h, nghĩa là stack bắt đầu từ địa chỉ 08h (do hoạt động lưu giá trị vào stack yêu cầu phải tăng nội dung thanh ghi SP trước khi lưu). Như vậy, nếu không gán giá trị cho thanh ghi SP thì không được sử dụng các bank thanh ghi 1, 2, 3 vì có thể làm sai dữ liệu. Đối với các ứng dụng thông thường không cần dùng nhiều đến stack, có thể không cần khởi động SP mà dùng giá trị mặc định là 07h. Tuy nhiên, nếu cần ta có thể xác định lại vùng stack cho MCS-51.
Con trỏ dữ liệu DPTR (Data Pointer)
Con trỏ dữ liệu DPTR là thanh ghi 16 bit bao gồm 2 thanh ghi 8 bit: DPH (High) nằm tại địa chỉ 83h và DPL (Low) nằm tại địa chỉ 82h. Các thanh ghi này không cho phép định địa chỉ bit. DPTR được dùng khi truy xuất đến bộ nhớ có địa chỉ 16 bit.
2.5.4. Các thanh ghi port
Các thanh ghi P0 tại địa chỉ 80h, P1 tại địa chỉ 90h, P2, tại địa chỉ A0h, P3 tại địa chỉ B0h là các thanh ghi chốt cho 4 port xuất / nhập (Port 0, 1, 2, 3). Tất cả các thanh ghi này đều cho phép định địa chỉ bit trong đó địa chỉ bit của P0 từ 80h – 87h, P1 từ 90h – 97h, P2 từ A0h – A7h, P3 từ B0h – B7h. Các địa chỉ bit này có thể thay thế bằng toán tử địa chỉ.
Ví dụ: Hai lệnh sau là tương đương:
SETB P0.0
SETB 80h
Thanh ghi port nối tiếp (SBUF - Serial Data Buffer)
Thanh ghi port nối tiếp tại địa chỉ 99h thực chất bao gồm 2 thanh ghi: thanh ghi nhận và thanh ghi truyền. Nếu dữ liệu đưa tới SBUF thì đó là thanh ghi truyền, nếu dữ liệu đươc đọc từ SBUF thì đó là thanh ghi nhận. Các thanh ghi này không cho phép định địa chỉ bit.
2.5.5. Các thanh ghi định thời (Timer Register)
Các cặp thanh ghi (TH0, TL0), (TH1, TL1) và (TH2, TL2) là các thanh ghi dùng cho các bộ định thời 0, 1 và 2 trong đó bộ định thời 2 chỉ có trong 8032/8052. Ngoài ra, đối với họ 8032/8052 còn có thêm cặp thanh ghi (RCAP2L, RCAP2H) sử dụng cho bộ định thời 2.
2.5.6. Các thanh ghi điều khiển:
Bao gồm các thanh ghi IP (Interrupt Priority), IE (Interrupt Enable), TMOD (Timer Mode), TCON (Timer Control), T2CON (Timer 2 Control), SCON (Serial port control) và PCON (Power control).
+ Thanh ghi IP tại địa chỉ B8h cho phép chọn mức ưu tiên ngắt khi có 2 ngắt xảy ra đồng thời. IP cho phép định địa chỉ bit từ B8h – BFh.
+ Thanh ghi IE tại địa chỉ A8h cho phép hay cấm các ngắt. IE có địa chỉ bit từ A8h – AFh.
+ Thanh ghi TMOD tại địa chỉ 89h dùng để chọn chế độ hoạt động cho các bộ định thời (0, 1) và không cho phép định địa chỉ bit.
+ Thanh ghi TCON tại địa chỉ 88h điều khiển hoạt động của bộ định thời và ngắt. TCON có địa chỉ bit từ 88h – 8Fh.
+ Thanh ghi T2CON tại địa chỉ C8h điều khiển hoạt động của bộ định thời 2. T2CON có địa chỉ bit từ C8h – CFh.
+ Thanh ghi SCON tại địa chỉ 98h điều khiển hoạt động của port nối tiếp. SCON có địa chỉ bit từ 98h – 9Fh.
2.5.7. Thanh ghi điều khiển nguồn PCON
Thanh ghi PCON tại địa chỉ 87h không cho phép định địa chỉ bit bao gồm các bit như sau:
Hình 2.12. Thanh ghi PCON
+ SMOD1 (Serial Mode 1): = 1 cho phép tăng gấp đôi tốc độ port nối tiếp trong chế độ 1, 2 và 3.
+ SMOD0 (Serial Mode 0 = 0): cho phép chọn bit SM0 hay FE trong thanh ghi SCON (Serial Mode 0 = 1 chọn bit FE).
+ POF (Power - off Flag): dùng để nhận dạng loại reset. POF = 1 khi mở nguồn. Do đó, để xác định loại reset, cần phải xoá bit POF trước đó.
+ GF1, GF0 (General purpose Flag): các bit cờ dành cho người sử dụng.
+ PD (Power Down): được xoá bằng phần cứng khi hoạt động reset xảy ra.
Khi bit PD = 1 thì vi điều khiển sẽ chuyển sang chế độ nguồn giảm. Trong chế độ này:
- Chỉ có thể thoát khỏi chế độ nguồn giảm bằng cách reset.
- Nội dung RAM và mức logic trên các port được duy trì.
- Mạch dao động bên trong và các chức năng khác ngừng hoạt động.
- Chân ALE và PSEN ớ mức thấp.
- Yêu cầu Vcc phải có điện áp ít nhất là 2V và phục hồi Vcc = 5V ít nhất 10 chu kỳ trước khi chân RESET xuống mức thấp lần nữa.
- IDL (Idle): được xoá bằng phần cứng khi hoạt động reset hay có ngắt xảy ra. Khi bit IDL = 1 thì vi điều khiển sẽ chuyển sang chế độ nghỉ. Trong chế độ này:
+ Chỉ có thể thoát khỏi chế độ nguồn giảm bằng cách reset hay có ngắt xảy ra.
+ Trạng thái hiện hành của vi điều khiển được duy trì và nội dung các thanh ghi không đổi.
- Mạch dao động bên trong không gửi được tín hiệu đến CPU.
- Chân ALE và PSEN ở mức cao.
Lưu ý rằng các bit điều khiển PD và IDL có tác dụng chính trong tất cả các IC họ MSC-51 nhưng chỉ có thể thực hiện được trong các phiên bản CMOS
CHƯƠNG III
THIẾT KẾ MẠCH ĐIỆN ĐIỀU KHIỂN KHO HÀNG THÔNG MINH
3.1. Yêu cầu công nghệ
Với mục đích phục vụ cho việc học tập và giảng dạy tại trường Đại học Sao đỏ chúng em đưa ra yêu cầu công nghệ của hệ thống điều khiển kho hàng thông minh như sau:
Hệ thống vận chuyển hàng từ nơi tập kết đến kho hàng đảm bảo các yêu cầu sau:
- Nhấn start hệ thống hoạt động, các cảm biến báo trong kho có hàng và vị trí đặt hàng còn trống, cơ cấu di chuyển hoạt động, đưa cơ cấu gắp vật tới vị trí kho hàng. Khi tới vị trí kho hàng, hệ thống hạ cơ cấu gắp vật, đồng thời gắp vật ra khỏi vị trí của kho. Lúc này cơ cấu di chuyển mang vật từ vị trí hàng tập kết đến nơi để hàng.
- Quá trình di chuyển được giới hạn hành trình bằng các cảm biến và công tắc hàng trình.
- Vị trí đặt hàng được ưu tiên theo quy tắc, hàng 1 cột 1, hàng 2 cột 2, hàng 3 cột 3.
- Sản phẩm sẽ tự động dừng khi kho hàng đầy.
- Quá trình lặp lại khi có một vị trí trống khác, đảm bảo có đủ chỗ cho cất giữ hàng.
3.2. Cấu tạo và nguyên lý làm việc:
Cấu tạo:
Cơ cấu đẩy hàng gồm 1 pittong khí A1, được giới hạn hành trình di chuyển bằng các swith hành trình. Hệ thống di chuyển và mang hàng gồm 1 động cơ 1 chiều 24VDC, di chuyển dọc trục bằng Vit-me và hệ thống trượt, 1 pittong điều khiển đầu hút sản phẩm bằng nguồn khí nén có áp lực âm. Các hệ thống pittong khí A2 đưa hàng đến đúng các vị trí kho hàng đã định trước. Các sensor, swith báo hành trình, báo sản phẩm, và báo nguồn hàng.
Nguyên lý làm việc:
Sản phẩm từ nhà máy được vận chuyển đến nơi tập kết, tại đây 1 pittong làm nhiệm vụ đẩy sản phẩm vào vị trí cánh tay gắp vật. Khi có sản phẩm tại vị trí và vị trí sắp xếp hàng còn trống, hệ thống mang hàng di chuyển đến nơi tập kết sản phẩm gắp sản phẩm đến vị trí trống. Khi số sản phẩm được sắp xếp đầy trong kho hàng, cánh tay dừng, đèn báo màu đỏ báo sản phẩm đã đầy kho.
3.2.1. Sơ đồ nguyên lý mạch điện điều khiển
Hình 3.1. Sơ đồ nguyên lý mạch điện điều khiển
- Khối cảm biến là các sensor và công tắc hành trình, được ghép nối qua cách ly quang trước khi làm tín hiệu đưa vào vi điều khiển.
- VĐK làm nhiệm vụ nhận tín hiệu từ các cảm biến và so sánh với các câu lệnh đã được lập trình sẵn để đưa ra các tín hiệu ở đầu ra, điều khiển tải: Motor, relay.
Ngoài ra còn có các LED báo trạng thái tín hiệu đầu vào, ra giúp chúng ta quan sát được trạng thái làm việc của vi điều khiển
3.2.2. Nguyên lý làm việc mạch điều khiển
3.2.2.1. Khối cảm biến
Hình 3.2. Mạch kết nối cảm biến với cách ly quang
Nguồn 24VDC được kết nối với cảm biến, đầu ra của cảm biến được nối với điện trở 2,2k (mục đích hạ áp 24VDC xuống 2,3VDC) trước khi đưa vào cách ly quang. Đầu ra của cách ly quang là điện áp 5VDC được đưa làm tín hiệu đầu vào VĐK.
Nguyên lý hoạt động: Ban đầu khi chưa có vật, cảm biến chưa tác động, dòng điện không đi qua trở 2,2K , LED báo trạng thái không sáng và 2 chân Anot, Ktot của cách ly quang chưa được phân cực thuận. Đầu ra của cách ly quang bị “cấm”
Khi có vật nằm trong vùng tác động của cảm biến, dòng điện 24VDC từ nguồn qua điện trở phân cực thuận cho cách ly quang, LED trạng thái sáng, đồng thời đầu ra của cách ly quang có mức logic 5VDC.
3.2.2.2. Khối điều khiển
Hình 3.3. Khối điều khiển
Khối điều khiển sử dụng chíp vi điều khiển họ 8051, nhận tín hiệu từ khối cảm biến. Đầu ra được kết nối với ULN2803 điều khiển tải. Khi vi điều khiển nhận được 1 tín hiệu đầu vào từ cảm biến, lập tức chương trình con nạp sẵn được thực thi và tùy vào điều kiện đầu vào mà đầu ra có mức logic 0 hay 1 tương ứng.
Các Post 0,1,2 được kết nối với mạch cảm biến, Post 3 được kết nối với ULN2803. Ngoài ra còn có các chân đặc biệt, reset, xtal, Enable...
3.2.2.3. Khối tải
Hình 3.4. Khối tải
Sử dụng ULN2803 để cách ly giữa vi điều khiển và phần mạch lực, nguyên lý hoạt động của khối này như sau: Khi đầu vào của ULN2803 có mức logic 0, LED báo trạng thái không sáng đầu ra của ULN2803 bị cấm, động cơ không quay. Khi đầu vào của ULN2803 có mức logic 1, LED báo trạng thái sáng. ULN2803 được phân cực, đầu ra có mức logic 0, dòng điện đi từ nguồn qua động cơ làm động cơ hoạt động.
3.3. Giới thiệu một số thiết bị sử dụng trong mạch điện điều khiển.
3.3.1. Cảm biến tiệm cận điện dung
- Cảm biến tiệm cận điện dung khi có mặt của đối tượng làm thay đổi điện dung C của bản cực.
- Cảm biến tiệm cận điện dung gồm 4 bộ phận chính: Cảm biến (các bản cực cách điện); mạch dao động; bộ phát hiện; mạch đầu ra. Tuy nhiên cảm biến điện dung không đòi hỏi đối tượng làm bằng kim loại. Đối tượng phát hiện là chất lỏng, vật liệu phi kim, thuỷ tinh, nhựa. Tốc độ chuyển mạch tương đối nhanh, có thể phát hiện đối tượng có kích thước nhỏ, phạm vi cảm nhận lớn.
- Cảm biến điện dung chịu ảnh hưởng bởi bụi và độ ẩm. Cảm biến điện dung có vùng cảm nhận lớn hơn vùng cảm nhận của cảm biến điện cảm
Hình 3.5. Cảm biến tiệm cận kiểu điện dung.
Cảm biến tiệm cận kiểu điện dung không tiếp xúc, đo những thay đổi về tính chất điện tương ứng thường gọi là cảm biến điện dung. Điện dung mô tả hai vật dẫn điện cách nhau một khoảng phản ứng lại với sự chênh thế giữa chúng. Đặt một điện thế vào hai đầu của một điện trở ta được một tụ điện giữa hai vật dẫn đó (một đầu dương, một đầu âm).
Bảng 3.1 Thông số kỹ thuật cơ bản của cảm biến tiệm cận kiểu điện dung
Thông số kỹ thuật cơ bản
Tên sản phẩm
Cảm biến tiệm cận
- Nhà sản xuất
Omron,...
- Hình dạng
Theo từng model, Z seri
- Loại tiếp điểm
SPDT
- Dòng điện
1,5A, 3A, 5A (tùy model)
- Điện áp
24VDC
- Vật liệu vỏ
Nhựa, thép
- Màu sắc
Màu đen, vàng, đỏ
- Tiêu chuẩn
IEC
- Chức năng
Dùng trong mạch điều khiển tự động
3.3.2. Công tắc hành trình
Công tác hành trình dùng để giới hạn di chuyển cho cơ cấu di chuyển cánh tay gắp vật. Thiết bị được gắn trên hành trình của cơ cấu và thực hiện chức năng ngắt dòng điện bằng tiếp điểm khi có sự tác động cơ học.
Hình 3.6. Công tắc hành trình
Bảng 3.2. Thông số kỹ thuật cơ bản của công tắc hành trình
Thông số kỹ thuật cơ bản
Tên sản phẩm
Công tắc hành trình
- Nhà sản xuất
Autonics, Omron,...
- Hình dạng
Theo từng model, Z seri
- Loại tiếp điểm
SPDT
- Dòng điện
1,5A, 3A, 5A (tùy model)
- Dòng khởi động
NC=30A, NO=15A
- Điện áp
24VDC, 480 VAC
- Tần số hoạt động
Cơ 240 lần/phút, Điện 20 lần/phút
- Vật liệu vỏ
Nhựa
- Màu sắc
Màu đen
- Tiêu chuẩn
IEC
- Chức năng
Dùng trong mạch điều khiển tự động
3.3.3. Rơ-le 24VDC
Rơle là một loại thiết bị điện tự động mà tín hiệu đầu ra thay đổi nhảy cấp khi tín hiệu đầu vào đạt những giá trị xác định. Dùng để đóng cắt mạch điện điều khiển, bảo vệ và điều khiển sự làm việc của mạch điện động lực.
Hình 3.6. Hình ảnh Rơle trong thực tế
* Hãng sản xuất OMRON, tên gọi Rơ le trung gian , số cặp tếp điểm: DPDT
- Tải trở : 10A, 110 VAC / 10A, 24 VDC
- Tải cảm ứng: 7.5A, 110 VAC / 5A, 24 VDC
- Kích thước (mm) 36x28x21.5
- Xuất xứ Japan
* Các đặc điểm khác:
Có chắn hồ quang
Công suất 15A loại LY1 và 10A lý tưởng cho nhiều ứng dụng
Chịu được điện áp tới 2000V;
Các loại tiếp điểm: SPDT, DPDT, 3PDT, 4PDT
3.3.4. ULN 2803
Hình 3.7. Hình ảnh và sơ đồ chân ULN 2803 trong thực tế
ULN 2803 là một vi mạch đệm, bản chất cấu tạo là các mảng darlington chịu được dòng điện lớn và điện áp cao, trong đó có chứa 7 cặp darlington cực góp hở với cực phát chung. Mỗi kênh trong số 7 kênh đều có thể chịu được dòng điện lớn trong một khoảng thời gian dài lên tới 500 mA với biên độ đỉnh lên tới 600 mA. Mỗi kênh có một diode chặn- diode này có thể sử dụng trong trường hợp tải có tính cảm ứng, ví dụ như cácrơle…
Ứng dụng của ULN2803 được sử dụng trong các mạch đệm điều khiển động cơ một chiều ,động cơ bước, khối hiển thị ma trận led....
Nguyên lý hoạt động:
- Nếu các chân đầu vào I1 ÷ I8 là mức 0 thì ngõ ra thả nổi.
- Nếu các chân đầu vào I1 ÷ I8 là mức 1 thì ngõ ra ở mức 0
3.3.5. JC817
JC 817 dùng để cách ly giữa phần điều khiển (có điện áp thấp) và phần tải (có điện áp cao), nhằm tránh những hư hỏng có thể xảy ra với mạch điều khiển như: dòng dò, điện áp ngược...
Hình 3.8. Hình ảnh và sơ đồ nguyên lý của JC 817
JC817 (cách ly quang) cấu tạo gồm: 2 tầng công suất cách ly với nhau bởi cặp photo transistor.
Tầng công suất thấp, cấu tạo gồm 1 diode phát quang có cấp điện áp 3~5VDC
Tầng công suất cao là 1 photo transistor npn có cực B hở, cấp điện áp lên tới 35V – 50mA.
3.3.6. Van đảo chiều 5/2
Van đảo chiều 5/2 tác động trực tiếp bằng dòng khí nén vào từ hai phía của nòng van. Đây là loại van không có vị trí “ không “, van có đặc điểm là “nhớ” vị trí hoạt động khi không còn tín hiệu tác động
Van đảo chiều 5/2 có nhiệm vụ điều khiển hoạt động của pittong theo yêu cầu công nghệ.
Hình 3.9. Hình ảnh van đảo chiều 5/2
Van khí nén 5/2 một đầu sử dụng cuộn dây điện từ một chiều cấp điện áp 24V, một đầu sử dụng lò xo tích hợp.
Nguyên lý hoạt động: Khi cấp nguồn vào 2 đầu của cuộn dây (với loại van khí 1 đầu là cuộn dây và 1 đầu là lò xo), lực từ sinh ra do dòng điện hút ti van dịch chuyển, đóng , mở cửa khí. Làm đường khí di chuyển theo hướng khác hoặc bị chặn. Khi cuộn dây mất điện, ti van được đẩy về vị trí ban đầu nhờ cơ cấu lò xo. Các đường khí trở lại trạng thái ban đầu.
3.3.7. Motor
Hình 3.10. Hình ảnh động cơ điện một chiều
Bảng 3.3 Thông số kỹ thuật cơ bản của động cơ điện một chiều
Thông số kỹ thuật cơ bản
Tên sản phẩm
Motor 24VDC
- Kiểu, loại
35C- AM – 30 - KA
- Xuất xứ
Isukasa Electric Co.ltd Japan
- Hình dạng
Theo từng model
- Điện áp
24VDC
- Dòng điện
3A
- Tốc độ
300 vòng/phút
- Vật liệu vỏ
Sắt
- Màu sắc
Màu đen, xám, bạc
- Chức năng
Dùng trong mạch điều khiển tự động
CHƯƠNG IV. THỰC NGHIỆM.
Để thiết kế được mạch điện điều khiển kho hàng thông minh chúng em đã sử dụng phần mềm Proteus và phần mềm mềm biên dịch.
4.1. Giới thiệu phần mềm Protues 7.10 Professional
Protues là phần mềm của hãng Labcenter, dùng để vẽ sơ đồ nguyên lý, mô phỏng và thiết kế mạch điện. Gói phần mềm gồm có các phần mềm chính:
- ISIS dùng để vẽ sơ đồ nguyên lý và mô phỏng.
- ARES dùng để thiết kế mạch in.
Sau khi tải về, quá trình cài đặt bình thường. Sau khi cài đặt thành công bạn sẽ thấy chương trình trong Start menu.
4.1.1. Vẽ sơ đồ nguyên lý và mô phỏng mạch
4.1.1.1. Vẽ sơ đồ nguyên lý với ISIS Professional 7.10:
- Giới thiệu giao diện sử dụng:
Để vẽ sơ đồ nguyên lý, vào Start menu Khởi động chương trình, chương trình được khởi động và có giao diện như hình 4.1
Hình 4.1: Giao diện chương trình Protues 7.10
Phía trên và phía phải của chương trình là công cụ để ta có thể thiết kế sơ đồ nguyên lý. Phần giữa có màu xám là nơi chúng ta có thể làm việc.
Section mode: Chức năng chọn linh kiện.
Component mode: Dùng để lấy linh kiện trong thư viện linh kiện.
Đặt lable cho Wire.
Bus
Terminal: Chứa Power, Ground...
Graph: Dùng để vẽ dạng sóng, datashet, trở kháng
Generator Mode: Chứa các nguồn điện, nguồn xung, nguồn dòng.
Voltage Probe Mode: Dùng để đo điện thế tại 1 điểm trên mạch, đây là dụng cụ chỉ có một chân và không có thật trong thực tế.
Curent Probe mode: Dùng để đo chiều và độ lớn của dòng điện tại 1 điểm trên Wire.
Virtual Instrument Mode: Chứa các dụng cụ đo dòng, áp và các dụng cụ này có thật trong thực tế.
Hình 4.2 Nhóm công cụ để vẽ các ký hiệu, chú thích.
- Một số tùy chọn của chương trình:
Set BOM Scrip: Dùng để xuất danh sách các loại, số lượng linh kiện có trong mạch. Để thay đổi chọn System/Set BOM Scrip.
Hình 4.3. Lựa chọn tùy chọn của chương trình
Chúng ta có thể add, edit, delete các linh kiện mà chúng ta muốn.
Hình 4.4. Giao diện khi thực hiện thêm bớt linh kiện
Với công cụ này, sau khi vẽ sơ đồ nguyên lý xong ta có thể xác định một cách nhanh chóng loại và số lượng linh kiện mà ta dùng trong mạch để tiện cho việc chọn mua linh kiện trong mạch thực.
Ví dụ ta có bảng thống kê như sau:
Bill Of Materials For OCL VISAI
Design Title : OCL VISAI
Author : NGUYEN SI LUAN 01DHLT DIEN
Revision : 1
Design Created : Sunday, Step 05, 2012
Design Last Modified : Friday, Step 24, 2012
Total Parts In Design : 50
21 Resistors
Quantity: References Value
2 R1, R2 0R22
2 R3, R5 1k
2 R6, R15 3.3k
1 R7 2.7k
3 R8, R10, R13 10k
3 R9, R22, R24 1.5k
1 R11 680
2 R12, R14 390k
1 R17 4
2 R18, R19 270
1 R21 220
1 R23 500
6 Capacitors
Quantity: References Value
1 C1 0.33uF
1 C2 3.3uF
1 C3 100u
1 C4 1200uF
2 C5, C6 33u
11 Transistors
Quantity: References Value
1 Q1 2N3773
2 Q2, Q10 MJE340
1 Q3 2N6609
2 Q4, Q11 MJE350
1 Q5 BC327
4 Q6-Q9 2N2219
7 Diodes
Quantity: References Value
6 D1-D3, D5-D7 1N4148
1 D4 LED-RED
5 Miscellaneous
Quantity: References Value
4 RV1-RV4 100
1 RV5 50k
Set Environment: Tùy chọn này cho phép bạn thay đổi:
- Số lần Undo (Ctrl+Z)
- Times auto save
- Number of file on file menu vv…
* Set Sheet Size: Cho phép người dùng có thể điều chỉnh kích thước sheet A4, A3,...
Hình 4.5. Giao diện điều chỉnh kích thước khổ giấy khi vẽ trên Proteus
* Set sheet editor: thay đổi font, size text, …..
Hình 4.6. Giao diện điều chỉnh phông chữ khi vẽ trên Proteus
* Set keyboard mapping: Cho phép Designer tạo các phím tắt để thực hiện các lệnh.
- Trước hết chọn “Command Group”
- Sau đó chọn lệnh muốn đặt phím tắt.
- Trong mục Key for command ta gõ vào Key mà ta muốn.
- Ví dụ cho lệnh Open Design là Ctrl+O
* Set Animation Option: Cho phép hiển thị chiều của dòng điện các mức logic, frame per second… khi Simulation.
Hình 4.7. Giao diện hiển thị chiều của dòng điện khi mô phỏng
* Simulation option: Thay đổi độ nhiễu môi trường, sai số.
Hình 4.8. Giao diện thay đổi độ nhiễu môi trường, sai số
Để lưu các thiết lập chọn “Save Preferrence” , ngoài ra ta còn có các mục thay đổi giao diện sử dụng cũng như màu sắc của bản vẽ, graph... (nên mặc định).
* Cách lấy linh kiện: Để lấy linh kiện ta nhấn vào phím trái của chương trình và thực hiện như sau:
- Bấm vào biểu tượng Component Mode
- Sau đó bấm vào chữ P, hoặc biểu tượng chữ P trên Keyboad.
Hình 4.9. Giao diện thực hiện lấy linh kiện (cách 1)
- Hoặc cũng có thể Right Click trên Editting Window và chọn Place.
Hình 4.10. Giao diện thực hiện lấy linh kiện (cách 2)
- Chương trình Pick Devices hiện ra như hình sau:
Hình 4.11. Giao diện Pick Devices
1. Ô tìm kiếm linh kiện, chỉ cần gõ vào từ khóa, ví dụ BJT, 2N2222 (không phân biệt chữ hoa và chữ thường).
2. Các nhóm linh kiện liên quan đến từ khóa cần tìm.
3. Nhóm con của linh kiện, ví dụ như transistor thì có BJT, FET
4. Ký hiệu Schematic trên sơ đồ nguyên lý.
5. Hình dáng trên sơ đồ mạch in PCB, ví dụ BJT có nhiều kiểu đóng gói như TO18, TO220,vv...
6. Kết quả của việc tìm kiếm linh kiện
Double Click vào linh kiện cần lấy, lập tức linh kiện sẽ được bổ sung vào “Bàn làm việc” là vùng màu trắng phía bên trái.
7. Tên nhà sản xuất
4.1.2. Vẽ và hoàn thiện mạch in
ARES Là một công cụ trong gói Protues được hãng Labcenter phát hành. Chương trình hỗ trợ vẽ sơ đồ nguyên lý, tạo thư viện, vẽ mạch in. Tuy là phần mềm đi kèm nhưng ARES hỗ trợ khá đầy đủ cho phép người dùng thiết kế sơ đồ nguyên lý và mạch in một cách nhanh chóng, thuận tiện mà không cần đến một gói phần mềm của hãng thứ 2.
Hình 4.12. Giao diện chính của chương trình ARES Professional
Vùng 1 là nơi ta thiết kế
Vùng 2 là nơi lấy linh kiện
Vùng 3 là hình ảnh, đối tượng chúng ta chọn.
Trong khuôn khổ của đồ án này chúng em xin giới thiệu các thao tác cơ bản để vẽ một sơ đồ mạch in từ sơ đồ nguyên lý sẵn có và cách xử lý tình huống “chương trình không định dạng kiểu chân linh kiện được hỗ trợ”. Các bước thực hiện như sau:
Khởi động chương trình ISIS professional từ desktop, chờ cho chương trình khởi động xong, trong giao diện của trình ISIS, hãy chọn Open và chọn đường dẫn đến thư mục chứa chương trình cn vẽ mạch in, ví dụ “DATN-01DHLT Dien”
Hình 4.12. Giao diện khi chọn đường dẫn để vẽ mạch in
Sơ đồ của “DATN-01DHLT Dien” sẽ được mở ra như sau:
Hình 4.13. Sơ đồ nguyên lý của mạch chuẩn bị vẽ mạch in
Bây giờ chúng ta sẽ nhấp chuột vào biểu tượng của trình vẽ mạch ARES nằm ở góc phải trên màn hình (đuợc hình khoanh đỏ ở trên). Lưu ý nếu sơ đồ do chúng ta tự tạo khi chuyển qua ARES trình sẽ yêu cầu bạn save sơ đồ lại.
Sau khi chuyển qua giao diện của trình ARES nếu thấy xuất hiện khung hộp thoại thông báo với tiêu đề là “Pakage selector” nguyên nhân là do trình không tìm đuợc định dạng chân linh kiện mà ISIS cung cấp nên buộc chúng ta phải tự tìm chân linh kiện theo kiểu Maual. Các bước tiến hành như sau, kích vào biểu tượng ARES trên thanh công cụ. Một hộp thoại chương trình hiện ra cho phép bạn thao tác như sau:
+ Linh kiện 1 : Sounder (loa) : chúng ta sẽ gõ vào “conn-sil2” (đế cắm 2 chân), sau đó nhấn Enter.
+ Linh kiện 2,3 : Resistor (trở) : gõ vào “res40” (chọn kiểu chân điện trở 0,6 W) Enter.
Việc chọn linh kiện khi vẽ sơ đồ nguyên lý cũng là một điều đáng chú ý, sẽ có ảnh hưởng rất lớn đến việc hoàn thành mạch in nhanh hay chậm, khi chọn linh kiện nên chú ý nhìn xem nó có đuợc hỗ trợ dạng chân cắm chưa, nếu chưa nên tìm linh kiện tương đương nhưng có hỗ trợ định dạng.
Sau khi chọn xong dạng chân cho 3 linh kiện trên thì khung “Pakage selector” biến mất, lúc này các linh kiện đuợc xếp vào ô “component”.
Bây giờ chúng ta sẽ tiến hành vẽ đường bao của panel bằng cách chọn vào công cụ “2D graphic box” trên thanh công cụ tool, tiếp đến chọn “board edge” (có màu vàng).
Hình 4.13. Cách vẽ đường bao của mạch in
Sau đó rê chuột ra giữa màn hình, kích giữ trái chuột và vẽ thành một khung (nếu muốn thay đổi size của khung, kích phải chuột vào vành khung, sau đó kéo chuột tùy chỉnh size cho phù hợp).
Hiện tại do trong danh mục của ARES không có định dạng chân cắm cho Button nên chúng ta sẽ phải tự tạo ra nó bằng cách : chọn vào “2D graphic box” chọn “topsilk” rồi vẽ một khung đúng bằng kích thước của button (căn cứ vào độ dài từ điểm tới điểm trên ma trận thì vừa nhanh vừa chuẩn), sau đó chọn “round through hole…” trên toolbar chọn kích cỡ lỗ khoan trong ô “Circus through” là “C70-30” (là kích thướcc via và lỗ khoan). Ta sẽ gắn 4 via vào topsilk để tạo thành 4 chân. Kích chuột phải vào từng chân và đánh số thứ tự chân và trong ô number. Nếu muốn đẹp hơn ta có thể vẽ thêm cái vòng tròn ở giữa button bằng mực “top silk” tượng trưng cho cái phím tròn, hoặc muốn bảo đảm tiếp xúc của button bạn có thể chọn vào “Track mode” trên toolbar & chọn “Bottom copper” sau đó nối hai đôi cặp chân lại. Các bạn save linh kiện vừa tạo bằng cách kích phải chuột vào linh kiện lại và chọn vào biểu tượng hình “con IC có dấu +” (make pakage).
Hình 4.14. Cách vẽ chân linh kiện
Tiếp theo chúng ta sẽ đặt tên cho nó là “button” , chọn library sẽ lưu trữ vào, dạng chân cắm xuyên lỗ (through) hay bề mặt (surface) cuối cùng chỉ việc save vào là xong (sau này chúng ta có thể sử dụng pakage của button vừa tạo). Chúng ta cũng có thể xóa bỏ khung hình vừa tạo, vì phần linh kiện đã được lưu trong thư viện.
Lưu ý với mạch in khi thiết kế có sử dụng LED và chân nguồn, chúng ta cũng nên khai báo chân để thuận tiện cho việc thiết kế mạch. Chúng ta sẽ quay về ISIS và đặt tên cho 2 con led, và 2 cái button + bỏ dấu check trong ô “exclude PCB layout” bằng cách kích phải chuột vào linh kiện và chọn “edit properties”. Tiếp theo đặt tên luôn cho nguồn dương là “VDD” và nguồn âm (đất) là “VSS”, nếu không thì 2 chân nguồn được “ẩn” của IC trình sẽ bỏ trống vì chẳng biết nối vào đâu.
Click chọn vào linh kiện trong ô component và click ra bên ngoài, lúc này linh kiện sẽ theo con trỏ đi đến vị trí các bạn cần đặt, nếu vừa ý chúng ta click chuột thêm lần nữa là xong, nếu không thích chúng ta có thể kích phải hai lần vào linh kiện, lập tức nó sẽ tự nhảy trở lại vào ô component. Còn muốn xoay linh kiện chúng ta click phải một lần lên linh kiện, chọn các kiểu xoay. Để tối ưu hơn trong việc đi mạch, chúng ta nên vừa đặt linh kiện vừa nhìn theo sơ đồ nguyên lý.
Tiếp theo, để đi mạch tự động chọn vào “auto route”, kế đến chọn vào “edit strategies” để thay đổi nội dung đi mạch, cụ thể ARES có chia ra hai phân vùng là “power” (đuờng nguồn) và “signal” (đuờng tín hiệu), ta lần lượt hiệu chỉnh các thông số, đầu tiên là lớp mạch, bài này ta chỉ cần sử dụng một lớp “Bottom”, ở mục “corner” (góc bo) bạn nên check luôn cả hai cái “Optimize” và “Diagonal” để mạch tự động đi góc rất đẹp. Click OK.
Quá trình hoàn tất, chúng ta có thể thao tác lựa chọn chỉnh lại bằng tay cho vừa ý, hoặc để yên. Tiếp đến là đổ đồng cho mạch và in ra giấy.
Hình 4.14. Mạch in khi hoàn tất
Chúng ta cũng có thể lựa chọn công cụ xem trước “3D visualization” để xem sản phẩm khi hoàn thành.
Hình 4.14. Mô hình thực tế 3D visualization
4.2. Giới thiệu trình biên dịch cho họ vi điều khiển 8051
Ngôn ngữ C là một ngôn ngữ lập trình thông dụng, là một trình biên dịch mạnh mẽ, sinh mã tối ưu. Đồng thời cung cấp cho người lập trình tập hợp những hàm phong phú nhằm giải quyết tất cả các yêu cầu khác nhau.
Mục đích của C51 là cung cấp cho lập trình viên công cụ để viết những chương trình bằng ngôn ngữ C thay thế cho ASSEMBLY chạy trên các chíp đơn dòng trong 8051 như AT89C2051, AT89C4051, AT89C51, AT89C52...
Lưu ý ngôn ngữ C lập trình cho 8051 :
- Ngôn ngữ C khi ra đời chỉ là một chuẩn ngôn ngữ không phụ thuộc phần cứng máy tính.
- C51 được thiết kế trên nền ngôn ngữ C và được biên dịch chỉ để sử dụng cho 8051, vì lý do này mà nó còn được gọi là trình biên dịch chéo.
- C51 khác TURBO C ở chỗ tuy chung một chuẩn C nhưng lại khác nhau về chíp thực hiện.
Giao diện chương trình C51:
Hình 4.15. Giao diện chương trình C51
Trình tự cài đặt phần mềm
Chạy file intall.exe trong thư mục cài đặt, khi quá trình cài đặt kết thúc chương trình sẽ tạo ra trong thư mục “C:\8051” , tiếp đó tiến hành xác thực bản quyền và sử dụng chương trình.
Chương trình hỗ trợ đầy đủ các câu lệnh, các cấu trúc C cơ bản. Ngoài ra thì C51 còn có tất cả các cấu trúc khác mà chuẩn C có như: kiểu mảng, con trỏ, hàm... (ngoại trừ kiểu file).
Nội dung ngôn ngữ C51
1. Bộ nhớ:
- Bộ nhớ chương trình: khi các bạn lập trình trong C51 nếu không lỗi chương trình sẽ biên dịch thành file.hex và bước tiếp theo là dùng một phần mềm kèm mạch nạp chuyên dụng để nạp vào chíp. Bộ nhớ để lưu file.hex gọi là bộ nhớ chương trình 8Kbyte.
- Bộ nhớ dữ liệu: Trong chương trình các bạn có thể khai báo biến để lưu trữ dữ liệu, bộ nhớ ram nội trong AT89S52 có 256 Byte dùng cho mục đích này, khi mất điện RAM nội không lưu trữ được nội dung.
Sử dụng chương trình:
Từ màn hình chính Desktop khởi tạo biểu tượng C51.exe giao diện chương trình hiện ra như sau:
Chương trình hỗ trợ thư viện chuẩn theo cấu trúc khóa: “ #include ”
Tiến hành viết 1 đoạn chương trình.
Tiến hành lưu đoạn chương trình vừa viết, chương trình khởi tạo có phần mở rộng file.C
Quá trình viết code hoàn thành, bấm “biên dịch” hoặc F9 để thực hiện kiểm tra lỗi và biên dịch ra file.hex nếu chương trình không có lỗi ta sẽ nhận được hộp thoại thông báo:
File.hex được khởi tạo sẽ nằm chung thư mục với chương trình vừa lưu. Nếu quá trình viết code sai, khi biên dịch chương trình sẽ báo lỗi:
Kết thúc quá trình, tiến hành nạp vào vi điều khiển và chạy thử
4.3. Lưu đồ thuật toán và chương trình điều khiển
* Lưu đồ thuật toán điều khiển
* Chương trình điều khiển
#include
// khai bao cac dau ra P2
sbit dc_thuan = P2^0; // dong co quay thuan
sbit dc_nghich= P2^1; // dong co quay nghich
sbit pt_sp1 = P2^2; // pittong day sp
sbit pt_sp2 = P2^3; // pittong day sp
sbit pt_vt1 = P2^4; // pittong vi tri
sbit pt_vt2 = P2^5; // pittong vi tri
sbit pt_ha = P2^6; // pittong nang ha de hut sp
sbit hutsp = P2^7; // hut sp
// khai bao cac bien dau vao P1
sbit sensor00 = P1^0; // bao sp vao dung opto
sbit sensor01 = P1^1; // bao sp ra dung 2 cam bien dau //
sbit sensor1 = P1^2; // vi tri cot 1 dung cam bien kim loai
sbit sensor2 = P1^3; // vi tri cot 2 dung cam bien kim loai
sbit sensor3 = P1^4; // vi tri cot 3 dung cam bien kim loai
sbit sensor6 = P1^5; // vi tri hang 1 dung cam bien ap than pt
sbit sensor7 = P1^6; // vi tri hang 2 dung cam bien ap than pt
sbit sensor8 = P1^7; // vi tri hang 3 dung cam bien ap than pt
//--------------------------
sbit CTHT1 =P3^0;
sbit CTHT2 =P3^1;
// sbit start = P0^6; // nut nhan start
sbit stop = P0^7; // nut nhan stop
//--------------------------
void delay (unsigned int t) // chuong trinh tao tre 1000 = 1s
{
unsigned int x,y;
for(x=0;x<t;x++)
{
for(y=0;y<=120;y++);
}
}
//--------------------------
void quaythuan_1 (void) // quay den vt cot 1
{
dc_nghich=0;
dc_thuan=1;
while (sensor1==1) // khi sensor cot 1 co tin hieu
{};
if (sensor1==1)
dc_thuan=0;
delay(3000);
}
//--------------------------
void quaythuan_2 (void) // quay den vt cot 2
{
dc_nghich=0;
dc_thuan=1;
while (sensor2==1) // khi sensor cot 2 co tin hieu
{};
if (sensor2==1)
dc_thuan=0;
delay(3000);
}
//--------------------------
void quaythuan_3 (void) // quay den vt cot 3
{
dc_nghich=0;
dc_thuan=1;
while (sensor3==1) // khi sensor cot 3 co tin hieu
{};
if (sensor3==1)
dc_thuan=0;
delay(3000);
}
//--------------------------
void quaynghich (void)
{
dc_thuan=0;
dc_nghich=1;
delay(100);
while (CTHT1==0)
{};
if (CTHT1==0)
dc_nghich=0;
delay(100);
}
//---------------------------
void hang1 (void) // pt_vt1 = P2^4 pittong vi tri lam viec
{
pt_vt1=0;
delay(1000);
pt_vt2=1;
while (sensor6==1) // cham vt sensor ap than pt 1
{};
if (sensor6==1)
pt_vt2=0;
delay(1000);
}
//---------------------------
void hang2 (void) // pt_vt1 = P2^4 pittong vi tri lam viec
{
pt_vt1=0;
delay(1000);
pt_vt2=1;
while (sensor7==1) // cham vt sensor ap than pt 2
{};
if (sensor7==1)
pt_vt2=0;
delay(1000);
}
//---------------------------
void hang3 (void) // pt_vt1 = P2^4 pittong vi tri lam viec
{
pt_vt1=0;
delay(1000);
pt_vt2=1;
while (sensor8==1) // cham vt sensor ap than pt 2
{};
if (sensor8==1)
pt_vt2=0;
delay(1000);
}
//---------------------------
void gapvat (void) // pt_sp1 pittong day sp, pt_ha, hutsp lam viec
{
if (sensor00==1|sensor00==1) // dieu kien co san pham
{
pt_sp1=1;
pt_sp2=0;
delay(2000);
pt_ha=1;
delay(5000);
hutsp=1;
delay(1000);
pt_sp1=0;
pt_sp2=1;
delay(1000);
pt_ha=0;
delay(1000);
}
}
//---------------------------
void nhavat (void)
{
pt_ha=1;
delay(2000);
hutsp=0;
delay(2000);
pt_ha=0;
delay(2000);
pt_vt2=0;
delay(2000);
pt_vt1=1;
delay(3000);
}
//----------------------------
void main (void)
{
P0=P1=P2=P3=0x00;
do
{
nhavat();
delay(2000);
quaynghich();
delay(2000);
gapvat();
delay(2000);
quaythuan_1();
delay(2000);
hang1();
delay(2000);
nhavat();
delay(2000);
quaynghich();
//---------------
gapvat();
delay(5000);
quaythuan_1();
delay(5000);
hang2();
delay(5000);
nhavat();
delay(5000);
quaynghich();
//---------------
gapvat();
delay(5000);
quaythuan_1();
delay(5000);
hang3();
delay(5000);
nhavat();
delay(5000);
quaynghich();
//======================
gapvat();
delay(50);
quaythuan_2();
delay(50);
hang1();
delay(50);
nhavat();
delay(5000);
quaynghich();
//---------------
gapvat();
delay(5000);
quaythuan_2();
delay(5000);
hang2();
delay(5000);
nhavat();
delay(5000);
quaynghich();
//---------------
gapvat();
delay(5000);
quaythuan_2();
delay(5000);
hang3();
delay(5000);
nhavat();
delay(5000);
quaynghich();
//======================
gapvat();
delay(5000);
quaythuan_3();
delay(5000);
hang1();
delay(5000);
nhavat();
delay(5000);
quaynghich();
//---------------
gapvat();
delay(5000);
quaythuan_3();
delay(5000);
hang2();
delay(5000);
nhavat();
delay(5000);
quaynghich();
//---------------
gapvat();
delay(5000);
quaythuan_3();
delay(5000);
hang3();
delay(5000);
nhavat();
delay(5000);
quaynghich();
}
while (P0^7==1);
}
Chương trình quét phím:
// ma tran phim 9 nut, vao p1 ra p2 hien thi tren led 7 thanh
#include
#include
sbit LED1=P3^0; // den LED 1 bao khay san con trong
sbit LED2=P3^1; // den LED 2 bao khay san pham da day
unsigned long int num,i;
unsigned char M[10] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x83,0xF8,0x80,0x98};
void hienthi()
{
if(P1==0xde)
{
P2=M[1]; // hien thi so 1
LED1=0;
LED2=1;
}
if(P1==0xdd)
{
P2=M[2]; // hien thi so 2
LED1=0;
LED2=1;
}
if(P1==0xdb)
{
P2=M[3]; // hien thi so 3
LED1=0;
LED2=1;
}
if(P1==0xee)
{
P2=M[4]; // hien thi so 4
LED1=0;
LED2=1;
}
if(P1==0xed)
{
P2=M[5]; // hien thi so 5
LED1=0;
LED2=1;
}
if(P1==0xeb)
{
P2=M[6]; // hien thi so 6
LED1=0;
LED2=1;
}
if(P1==0xf6)
{
P2=M[7]; // hien thi so 7
LED1=0;
LED2=1;
}
if(P1==0xf5)
{
P2=M[8]; // hien thi so 8
LED1=0;
LED2=1;
}
if(P1==0xf3)
{
P2=M[9]; // hien thi so 9
LED1=1;
LED2=0;
}
}
void quet(void)
{
int n[3]={0xfe,0xfd,0xfb};
for(i=0;i<=2;i++)
{
P1=n[i];
hienthi();
}}
void main()
{
P2=M[0]; // hien thi so 0
while(1)
{
quet();
}
}
4.4. Chế tạo mô hình
4.4.1. Mạch nguyên lý
Hình 4.16. Sơ đồ nguyên lý mạch điện điều khiển kho hàng thông minh
4.4.2. Mạch in
Hình 4.17. Mặt trước của mạch in
Hình 4.18. Mặt sau của mạch in
4.4.3. Mô hình thực tế
Hình 4.19. Mô hình kho hàng thông minh
KẾT LUẬN
Qua thời gian làm đồ án, với sự hướng dẫn tận tình của cô giáo Lê Thị Mai và qua quá trình tìm tòi của bản thân, đồ án tốt nghiệp của em đạt được một số kết quả sau:
Về mặt lý thuyết:
Tìm hiểu về vi điều khiển nói chung và 89C52 nói riêng.
Tìm hiểu được phần mềm như Proteus.
Tìm hiểu được nguyên lý làm việc một số phần tử khí nén.
Phương pháp thiết kế mạch điện điều khiển.
Về mặt thực hành:
Sử dụng thành thạo phần mềm Proteus để vẽ mạch sơ đồ nguyên lý.
Thiết kế được phần cứng và phần mềm cho việc điều khiển kho hàng thông minh.
Đấu nối mạch điện điều khiển và mạch cơ khí chính xác, mô hình chạy ổn định.
Với đề tài “ Thiết kế mạch điện điều khiển kho hàng thông minh” là một đề tài có tính ứng dụng cao phục vụ trong thực tế và đặc biệt cho phòng thí nghiệm Vi xử lý của các trường học nói chung, trường Đại học Sao đỏ nói riêng.
TÀI LIỆU THAM KHẢO
1. Nguyễn Tăng Cường “Cấu trúc lập trình và họ vi điều khiển 8051” Nhà xuất bản Khoa học kỹ thuật (1999).
2. Phạm Thượng Hàn, Nguyễn Trọng Quế, Nguyễn Văn Hòa, Võ Thanh Sơn, Đào Văn Tú “Các bộ cảm biến trong kĩ thuật đo lường và điều khiển”. Nhà xuất bản khoa học kỹ thuật (2005).
3. Lê Đăng Hưng, Tạ Tuấn Anh, Nguyễn Hữu Đức, Nguyễn Thanh Thủy “ Lập trình hướng đối tượng với C++”. Nhà xuất bản khoa học kỹ thuật (2006)
4. Tống Văn On “Lập trình hệ thống với vi điều khiển” Nhà xuất bản Khoa học kỹ thuật (2000).
Các file đính kèm theo tài liệu này:
- do_antot_nghiep_dhlt__0838.doc