Luận văn Thiết kế mạch điện điều khiển kho hàng thông minh

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.

doc76 trang | Chia sẻ: lylyngoc | Lượt xem: 2700 | Lượt tải: 4download
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:

  • docdo_antot_nghiep_dhlt__0838.doc