Mỗi chân có chức năng như các đường I/O xuất/nhập, trong đó 24 chân có công dụng kép: mỗi đường có thể hoạt động như một đường I/O hoặc như một đường điều khiển hoặc như thành phần của b
Trang 1MỞ ĐẦU
WX
Từ xưa đến nay, đo lường hay định lượng là một vấn đề vô cùng quan trọng
không chỉ trong sản xuất, kinh doanh mà còn rất cần thiết trong đời sống Thử nghĩ
một nhà máy sản xuất sẽ ra sao khi sản phẩm làm ra không đảm bảo về trọng lượng,
uy tín của các cơ sở kinh doanh sẽ suy giảm thế nào khi khách hàng không an tâm về
khối lượng sản phẩm của họ… Nói như thế để có thể thấy được tầm quan trọng của sự
chính xác trong đo lường công nghiệp
Không những thế, việc tiết kiệm thời thời gian cũng như lưu trữ dữ liệu trong
đo lường cũng không kém phần quan trọng, chúng sẽ thúc đẩy năng suất sản xuất,
nâng cao uy tín thương hiệu cũng như chất lượng sản phẩm
Xuất phát từ các mục tiêu trên, chúng em đã chọn đề tài : “Thiết kế và thi công
hệ thống cân băng tải 10 Kg” với hy vọng khi đưa vào thực nghiệm cũng như sản
xuất thực tế sẽ đáp ứng được phần nào nhu cầu thiết thực mà xã hội đã đặt ra
Trang 2Chương 1 : GIỚI THIỆU TỔNG QUAN VỀ ĐỀ TÀI
1.1- Khái niệm chung về cân trong công nghiệp :
Cân là khâu quan trọng trong công nghiệp Có thể nói cân chiếm vị trí không
nhỏ trong sản xuất, cả trong khâu chuẩn bị nguyên liệu cho đến khâu thành phẩm Việc
đo lường chính xác khối lượng nguyên liệu sẽ giảm thiểu tình trạng dư thừa trong quá
trình sản xuất, tiết kiệm nguyên liệu cũng như đảm bảo chất lượng sản phẩm Cùng với
đó, sản phẩm sau khi được hoàn thành thì việc cân đo một lần nữa lại có ý nghĩa rất
quan trọng Nếu trọng lượng sản phẩm dưới định mức yêu cầu thì người tiêu dùng sẽ
không chấp nhận, ảnh hưởng rất lớn đến uy tín Còn nếu trọng lượng sản phẩm vượt
quá định mức thì gây thiệt hại cho nhà sản xuất
Chính vì thế những yêu cầu khắt khe trong đo lường nói chung và cân nói riêng
là không thừa, phải cần được thực hiện một cách nghiêm túc
Bên cạnh việc tiết kiệm nguyên liệu còn cần phải nói đến việc tiết kiệm thời
gian Trong bất cứ lĩnh vực nào kể cả sản xuất lẫn kinh doanh thì thời gian đóng một
phần không nhỏ trong sự thành bại của doanh nghiệp hoặc nhà máy bởi nó quyết định
đến năng suất của sản phẩm làm ra mà việc cân đo nguyên liệu cũng không nằm ngoài
yêu cầu này Ngoài ra, cũng cần phải nói tầm quan trọng đến lưu trữ và quản lí dữ liệu
trong đo lường
Việc quản lí tốt những thông số sau khi cân đo chắc chắn sẽ ảnh hưởng tốt đến
việc sản xuất kinh doanh Ngược lại sẽ ảnh hưởng rất xấu đến chất lượng doanh
nghiệp
Trên đây là các vấn đề mà việc cân bằng phương pháp thủ công thông thường
không đảm bảo được Bằng việc áp dụng những kiến thức chuyên ngành đã học và
nghiên cứu, hy vọng sẽ giải quyết được phần nào yêu cầu đề ra
1.2- Nguyên lí hoạt động cơ bản của hệ thống cân :
Băng tải hoạt động một cách hoàn toàn tự động Sản phẩm sau khi được đặt lên
băng tải sẽ được cân và trọng lượng của nó sẽ được lưu trữ thông qua đường truyền
RS232 sau khi đã được xử lí Số lượng sản phẩm sẽ được đếm lên sau mỗi lần cân nhờ
Trang 3Loadcell
10kg
các cảm biến được bố trí ngay trên băng tải Tổng khối lượng cũng như tổng sản phẩm
có thể được reset về 0 khi cần thiết
Ngoài ra hệ thống cân băng tải có thể được sử dụng như một bàn cân thông
thường khi cho dừng động cơ
*Mô hình hệ thống cân băng tải gồm có 2 phần riêng biệt và được hai sinh viên
Mạch đầu cân RS232
Mạch điều khiển Hiển thị
Lưu trữ
Bộ chuyển đổi A/D
Trang 4Chương 2 : GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 2.1- Giới thiệu AT89C51 :
AT89C51 là một Microcomputer 8 bit, loại CMOS, có tốc độ cao và công suất
thấp với bộ nhớ Flash có thể lập trình được Nó được sản xuất với công nghệ bộ nhớ
không bay hơi mật độ cao của hãng Atmel, và tương thích với chuẩn công nghiệp của
80C51 và 80C52 về chân ra và bộ lệnh
Hình2.1 : Sơ đồ khối của AT89C51
2.1.1- Những đặc trưng của AT89C51 :
¾ Tương thích với các sản phẩm MCS-51
¾ 4KByte bộ nhớ Flash có thể lập trình lại với 1000 chu kỳ đọc/xoá
Trang 5¾ 128 x 8 bit RAM nội
¾ 32 đường xuất-nhập lập trình được (tương ứng 4 port)
¾ Hai timer/counter 16 bit
¾ Một port nối tiếp song công lập trình được
¾ Mạch đồng hồ và bộ dao động trên chip
Hình2.2 : Cấu hình chân của AT89C51
Như vậy AT89C51 có tất cả 40 chân Mỗi chân có chức năng như các đường I/O
(xuất/nhập), trong đó 24 chân có công dụng kép: mỗi đường có thể hoạt động như một
đường I/O hoặc như một đường điều khiển hoặc như thành phần của bus địa chỉ và bus
dữ liệu
Mô tả chân :
VCC (chân 40) : Chân cấp nguồn +5V DC
GND (chân 20) : Chân nối đất
Trang 6Port 0 :
Port 0 là một port xuất/nhập song hướng cực máng hở 8 bit Nếu được sử dụng
như là một ngõ xuất thì mỗi chân có thể kéo 8 ngõ vào TTL Khi mức 1 được viết vào
các chân của port 0, các chân này có thể được dùng như là các ngõ nhập tổng trở cao
Port 0 có thể được định cấu hình để hợp kênh giữa bus địa chỉ và bus dữ liệu
(phần byte thấp) khi truy cập đến bộ nhớ dữ liệu và bộ nhớ chương trình ngoài Ở chế
độ này, P0 có các điện trở pullup bên trong
Port 0 cũng nhận các byte code (byte mã chương trình) khi lập trình Flash, và
xuất ra các byte code khi kiểm tra chương trình Cần có các điện trở pullup bên ngoài
khi thực hiện việc kiểm tra chương trình
Port 1 :
Port 1 là một port xuất/nhập song hướng 8 bit có các điện trở pullup bên trong
Các bộ đệm ngõ ra của port 1 có thể kéo hoặc cung cấp 4 ngõ nhập TTL Khi mức 1
được viết vào các chân của port 1, chúng được kéo lên cao bởi các điện trở pullup nội
và có thể được dùng như là các ngõ nhập Nếu đóng vai trò là các ngõ nhập, các chân
của port 1 (được kéo xuống thấp qua các điện trở bên ngoài) sẽ cấp dòng IIL do các
điện trở pullup bên trong
Port 2 :
Port 2 là một port xuất/nhập song hướng 8 bit có các điện trở pullup bên trong
Các bộ đệm ngõ ra của port 2 có thể kéo hoặc cung cấp 4 ngõ vào TTL Khi các
mức 1 được viết vào các chân của port 2 thì chúng được kéo lên cao bởi các điện trở
pullup nội và có thể được dùng như các ngõ vào Khi được dùng như các ngõ vào, các
chân của port 2 (được kéo xuống qua các điện trở bên ngoài) sẽ cấp dòng IIL do có các
điện trở pullup bên trong
Port 2 phát ra byte cao của địa chỉ khi đọc từ bộ nhớ chương trình ngoài và khi
truy cập bộ nhớ dữ liệu ngoài dùng các địa chỉ 16 bit (MOVX @DPTR) Trong ứng
dụng này, nó dùng các điện trở pullup nội "mạnh" khi phát ra các mức 1 Khi truy cập
Trang 7bộ nhớ dữ liệu ngoài dùng các địa chỉ 8 bit (MOVX @RI), port 2 phát ra các nội dung
của thanh ghi chức năng đặc biệt P2
Port 2 cũng nhận các bit cao của địa chỉ và một vài tín hiệu điều khiển khi lập
trình và kiểm tra Flash
Port 3 :
Port 3 là một port xuất-nhập song hướng 8 bit có điện trở pullup nội bên trong
Các bộ đệm ngõ ra của port 3 có thể kéo hoặc cung cấp 4 ngõ vào TTL Khi các
mức 1 được viết vào các chân của port 3 thì chúng được kéo lên cao bởi các điện trở
pullup nội và có thể được dùng như các ngõ vào Khi được dùng như các ngõ vào, các
chân của port 3 (được kéo xuống qua các điện trở bên ngoài) sẽ cấp dòng IIL do có các
điện trở pullup bên trong
Port 3 cũng cung cấp các chức năng của các đặc trưng đặc biệt như được liệt kê
INT0 INT1
T0 T1
WR
RD
Port nhập nối tiếp Port xuất nối tiếp Ngắt 0 bên ngoài Ngắt 1 bên ngoài Ngõ vào Timer/Counter 0 Ngõ vào Timer/Counter 1 Xung ghi bộ nhớ dữ liệu ngoài Xung đọc bộ nhớ dữ liệu ngoài
Bảng 2.1: Các chức năng chuyển đổi trên Port 3 RST (chân 9) :
Trang 8Ngõ vào reset Khi ngõ vào tín hiệu này đưa lên cao ít nhất là 2 chu kỳ máy, các
thanh ghi bên trong được nạp những giá trị thích hợp để khởi động hệ thống Khi cấp
điện mạch tự động Reset
ALE/PROG :
ALE là một xung ngõ ra để chốt byte thấp của địa chỉ trong khi truy cập bộ nhớ ngoài
Chân này cũng là ngõ nhập xung lập trình (PROG) khi lập trình Flash
Khi hoạt động bình thường, ALE được phát với một tỷ lệ không đổi là 1/6 tần
số bộ dao động và có thể được dùng cho các mụch đích timing và clocking bên ngoài
Tuy nhiên, lưu ý rằng một xung ALE sẽ bị bỏ qua mỗi khi truy cập bộ nhớ dữ liệu
ngoài
Nếu muốn, hoạt động ALE có thể cấm được bằng cách set bit 0 của SFR tại địa
chỉ 8Eh Nếu bit này được set, ALE chỉ dược hoạt động khi có một lệnh MOVX hoặc
MOVC Ngược lại, chân này được kéo lên cao bởi các điện trở pullup "nhẹ" Việc set
bit cấm-ALE không có tác dụng khi bộ vi điều khiển đang ở chế độ thi hành ngoài
PSEN :
PSEN (Program Store Enable) là xung đọc bộ nhớ chương trình ngoài Khi
AT89C51 đang thi hành mã (code) từ bộ nhớ chương trình ngoài, PSENđược kích
hoạt hai lần mỗi chu kỳ máy, nhưng hai hoạt động PSEN sẽ bị bỏ qua mỗi khi truy
cập bộ nhớ dữ liệu ngoài
EA /Vpp :
EA (External Access Enable) phải được nối với GND để cho phép thiết bị đọc
code từ bộ nhớ chương trình ngoài có địa chỉ từ 0000H đến FFFFH Tuy nhiên, lưu ý
rằng nếu bit khoá 1 (lock-bit 1) được lập trình, EA sẽ được chốt bên trong khi reset
EA phải được nối với Vcc khi thi hành chương trình bên trong Chân này cũng
nhận điện áp cho phép lập trình Vpp=12V khi lập trình Flash (khi đó áp lập trình 12V
được chọn)
Trang 9XTAL1 và XTAL2 :
XTAL1 và XTAL2 là hai ngõ vào và ra của một bộ khuếch đại dao động nghịch
được cấu hình để dùng như một bộ dao động trên chip
Hình 2.3 : Các kết nối của bộ dao động
Không có yêu cầu nào về duty cycle của tín hiệu xung ngoài,vì ngõ nhập nối
với mạch tạo xung nội là một flip-flop chia đôi, nhưng các chỉ định về thời gian high
và low, các mức áp tối đa và tối thiểu phải được tuân theo
Các đặc trưng khác sẽ được trình bày một cách chi tiết hơn ở những phần tiếp
theo sau đây
2.1.2- Tổ chức bộ nhớ :
89C51 có bộ nhớ theo cấu trúc Harvard: có những vùng bộ nhớ riêng biệt cho
chương trình và dữ liệu Như đã nói ở trên, cả chương trình và dữ liệu có thể ở bên
Trang 10trong; dù vậy chúng có thể được mở rộng bằng các thành phần ngoài lên đến tối đa 64
Kbytes bộ nhớ chương trình và 64 Kbytes bộ nhớ dữ liệu
Bộ nhớ bên trong bao gồm ROM và RAM trên chip, RAM trên chip bao gồm
nhiều phần : phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank thanh
ghi và các thanh ghi chức năng đặc biệt
Hai đặc tính cần lưu ý là :
Các thanh ghi và các port xuất nhập đã được xếp trong bộ nhớ và có thể được
truy xuất trực tiếp giống như các địa chỉ bộ nhớ khác
Ngăn xếp bên trong RAM nội nhỏ hơn so với RAM ngoài như trong các bộ vi
xử lý khác
Chi tiết về bộ nhớ RAM trên chip:
Như ta thấy trên hình hình 2.3, RAM bên trong 89C51 được phân chia giữa các
bank thanh ghi (00H–1FH), RAM địa chỉ hóa từng bit (20H–2FH), RAM đa dụng
(30H–7FH) và các thanh ghi chức năng đặc biệt (80H–FFH)
2.1.2.1- RAM đa dụng :
Mặc dù trên hình cho thấy 80 byte RAM đa dụng chiếm các địa chỉ từ 30H–
7FH, 32 byte dưới cùng từ 00H đến 1FH cũng có thể được dùng với mục đích tương tự
(mặc dù các địa chỉ này đã có mục đích khác)
Mọi địa chỉ trong vùng RAM đa dụng đều có thể được truy xuất tự do dùng
cách đánh địa chỉ trực tiếp hoặc gián tiếp
RAM bên trong cũng có thể được truy xuất dùng cách đánh địa chỉ gián tiếp qua
R0 hay R1
Trang 11Bảng2.1 : Tóm tắt các vùng nhớ của 89C51
CODE Memory
Enable via PSEN
DATA Memory
Trang 12Bảng 2.2: Tóm tắt bộ nhớ dữ liệu trên chip
18
Bank 2 17
10
Bank 1 0F
không được địa chỉ hóa bit
FF
Trang 132.1.2.2- Thanh ghi trạng thái chương trình :
Thanh ghi trạng thái chương trình (PSW : Program Status Word) ở địa chỉ D0H
chứa các bit trạng thái như bảng 2.3 :
Bảng 2.3 : Các bit trạng thái của thanh ghi trang thái
Cờ nhớ
Cờ nhớ (CY) có công dụng kép Thông thường nó được dùng cho các lệnh toán
học : nó sẽ được set nếu có một số nhớ sinh ra bởi phép cộng hoặc có một số mượn bởi
phép trừ Ví dụ, nếu thanh ghi tích lũy chứa FFH, thì lệnh ADD A, #1 sẽ trả về thanh
ghi tích lũy kết quả 00H và set cờ nhớ trong PSW
Cờ nhớ cũng có thể xem như một thanh ghi 1 bit cho các lệnh luận lý thi hành trên bit
Ví dụ, lệnh sau sẽ AND bit 25H với cờ nhớ và đặt kết quả trở vào cờ nhớ :
ANL C, 25H
Cờ nhớ phụ
Khi cộng các số BCD, cờ nhớ phụ (AC) được set nếu kết quả của 4 bit thấp
trong khoảng 0AH đến 0FH Nếu các giá trị được cộng là số BCD, thì sau lệnh cộng
cần có DA A (hiệu chỉnh thập phân thanh ghi tích lũy) để mang kết quả lớn hơn 9 vào
PSW.4 RS1 D4H Bit 1 chọn bank thanh ghi
PSW.3 RS0 D3H Bit 0 chọn bank thanh ghi
00 = bank 0 : địa chỉ 00H–07H
01 = bank 1 : địa chỉ 08H–0FH
10 = bank 2 : địa chỉ 10H–17H
11 = bank 3 : địa chỉ 18H–1FH PSW.2 OV D2H Cờ tràn
PSW.1 – D1H Dự trữ
PSW.0 P D0H Cờ parity chẵn
Trang 14Cờ 0
Cờ 0 (F0) là 1 bit cờ đa dụng dành cho các ứng dụng của người dùng
Cờ tràn
Cờ tràn (OV) được set sau một lệnh cộng hoặc trừ nếu có một phép toán bị tràn
Khi các số có dấu được công hoặc trừ với nhau, phần mềm có thể kiểm tra bit này để
xác định xem kết quả có nằm trong tầm xác định không Khi các số không dấu được
cộng, bit OV có thể được bỏ qua Các kết quả lớn hơn +127 hoặc nhỏ hơn -128 sẽ set
bit OV
Kết quả là một số có dấu 8EH được xem như -116, không phải là kết quả đúng
(142), vì vậy, bit OV được set
2.1.2.3- Thanh ghi B :
Thanh ghi B ở địa chỉ F0H được dùng cùng với thanh ghi tích lũy A cho các
phép toán nhân và chia Lệnh MUL AB sẽ nhân các giá trị không dấu 8 bit trong A và
B rồi trả về kết quả 16 bit trong A (byte thấp) và B (byte cao) Lệnh DIV AB sẽ chia A
cho B rồi trả về kết quả nguyên trong A và phần dư trong B Thanh ghi B cũng có thể
được xem như thanh ghi đệm đa dụng Nó được địa chỉ hóa từng bit bằng các địa chi
bit F0H đến F7H
2.1.2.4- Con trỏ dữ liệu :
Con trỏ dữ liệu (DPTR) được dùng để truy xuất bộ nhớ ngoài là một thanh ghi 16
bit ở địa chỉ 82H (DPL : byte thấp) và 83H (DPH : byte cao) Ba lệnh sau sẽ ghi 55H
vào RAM ngoài ở địa chỉ 1000H :
MOV A, #55H
MOV DPTR, #1000H
MOVX @DPTR, A
Lệnh đầu tiên dùng địa chỉ tức thời để tải dữ liệu 55H vào thanh ghi tích lũy
Lệnh thứ hai cũng dùng địa chỉ tức thời, lần này để tải dữ liệu 16 bit 1000H vào con
Trang 15trỏ dữ liệu Lệnh thứ ba dùng địa chỉ gián tiếp để di chuyển dữ liệu trong A (55H) đến
RAM ngoài ở địa chỉ được chứa trong DPTR (1000H)
2.1.2.5- Các thanh ghi timer :
89C51 chứa hai bộ định thời / đếm 16 bit được dùng cho việc định thời hoặc
đếm sự kiện Timer 0 ở địa chỉ 8AH (TL0 : byte thấp) và 8CH (TH0 : byte cao) Timer
1 ở địa chỉ 8BH (TL1 : byte thấp) và 8DH (TH1 : byte cao) Việc vận hành timer được
set bởi thanh ghi Timer Mode (TMOD) ở địa chỉ 89H và thanh ghi điều khiển timer
(TCON) ở địa chỉ 88H Chỉ có TCON được địa chỉ hóa từng bit
2.1.2.6- Các thanh ghi port nối tiếp :
89C51 chứa một port nối tiếp trên chip dành cho việc trao đổi thông tin với các
thiết bị nối tiếp như máy tính, modem hoặc cho việc giao tiếp với các IC khác có giao
tiếp nối tiếp (các bộ chuyển đổi A/D, các thanh ghi dịch ) Một thanh ghi gọi là bộ
đệm dữ liệu nối tiếp (SBUF) ở địa chỉ 99H sẽ giữ cả hai dữ liệu truyền và nhận Khi
truyền dữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF Các mode vận hành
khác nhau được lập trình qua thanh ghi điều khiển port nối tiếp (SCON) (được địa chỉ
hóa từng bit) ở địa chỉ 98H
2.1.2.7- Các thanh ghi ngắt :
89C51 có cấu trúc 5 nguồn ngắt, 2 mức ưu tiên Các ngắt bị cấm sau khi reset
hệ thống và sẽ được cho phép bằng việc ghi thanh ghi cho phép ngắt (IE) ở địa chỉ
A8H Cả hai thanh ghi được địa chỉ hóa từng bit
2.1.2.8- Thanh ghi điều khiển port nối tiếp :
Chế độ hoạt động của port nối tiếp được đặt bằng cách ghi vào thanh ghi chế độ
port nối tiếp (SCON) ở địa chỉ 98H Sau đây là các bảng tóm tắt thanh ghi SCON và
các chế độ của port nối tiếp :
Trang 16Bit Ký hiệu Địa chỉ Mô tả
port nối tiếp
port nối tiếp
Bit 2 của chế độ port nối tiếp Cho phép truyền thông
đa xử lý trong các chế độ 2 và 3, RI sẽ không bị tác động nếu bit thứ 9 thu được là 0
Cho phép bộ thu phải được đặt lên 1
để thu (nhận) các
ký tự
Bit 8 phát, bit thứ 9 được phát trong các chế độ 2 và 3; được đặt và xóa bằng phần mềm
thu được
Trang 17lên 1 khi kết thúc phát ký tự; đượcxóa bằng phần mềm
Cờ ngắt thu Đặt lên 1 khi kết thúc thu ký tự; được xóa bằng phần mềm
Bảng 2.4: Tóm tắt thanh ghi chế độ port nối tiếp SCON
Bảng 2.5 :Các chế độ port nối tiếp
Trước khi sử dụng port nối tiếp, phải khởi động SCON cho đúng chế độ Ví dụ,
lệnh MOV SCON, #01010010B khởi động port nối tiếp cho chế độ 1 (SM0/SM1 =
0/1), cho phép bộ thu (REN = 1) và đặt cờ ngắt phát (T1 = 1) để chỉ bộ phát sẵn sàng
hoạt động
Các chế độ hoạt động :
Port nối tiếp có 4 chế độ hoat động, có thể chọn được bằng cách viết các số 1
hay 0 vào các bit SM0 và SM1 trong SCON Có ba chế độ cho phép truyền thông bất
đồng bộ, với mỗi ký tự được thu (nhận) hoặc phát đều được đóng khung bằng một bit
start và 1 bit stop Ở chế độ thứ tư, port nối tiếp hoạt động như một thanh ghi dịch đơn
giản
Thanh ghi dịch 8 bit (chế độ 0)
0 0 0 Thanh ghi dịch Cố định (FOSC /12)
0 1 1 UART 8 bit Thay đổi (đặt bằng timer)
1 0 2 UART 9 bit Cố định (FOSC chia cho 12 hoặc 64)
1 1 3 UART 9 bit Thay đổi (đặt bằng timer)
Trang 18Chế độ 0 được chọn bằng cách ghi các bit 0 vào SM1 và SM0 của SCON, đưa
port nối tiếp vào chế độ thanh ghi dịch 8 bit Dữ liệu nối tiếp vào và ra qua RXD và
TXD xuất xung nhịp dịch 8 bit được phát hoặc thu với bit đầu tiên là LSB Tốc độ
baud cố định ở 1/12 tần số dao động trên chip
Việc phát đi được khởi động bằng bất cứ lệnh nào ghi dữ liệu vào SBUF Dữ
liệu được dịch ra ngoài trên đường RXD (P3.0) với các xung nhịp được gửi ra đường
TXD (P3.1) Mỗi bit phát đi hợp lệ (trên RXD) trong một chu kỳ máy Trong mỗi chu
kỳ máy, tín hiệu xung nhập xuống thấp ở S3P1 và trở về mức cao ở S6P1
Hình 2.1 : Giản đồ thời gian port nối tiếp phát ở chế độ 0
Việc thu được khởi động khi bit cho phép bộ thu (REN) là 1 và bit ngắt thu (RI)
là 0 Qui tắc tổng quát là đặt REN khi bắt đầu chương trình để khởi động port nối tiếp,
rồi xóa RI để bắt đầu hoạt động nhập dữ liệu Khi RI bị xóa, các xung nhịp được đưa
Trang 19ra đường TXD, bắt đầu chu kỳ máy kế tiếp, và dữ liệu theo xung nhịp ở đường RXD
Lấy xung nhịp cho dữ liệu vào port nối tiếp xảy ra ở cạnh dương của TXD
Hình 2.2 : Giản đồ thời gian port nối tiếp thu ở chế độ 0
Một ứng dụng của chế độ thanh ghi dịch là mở rộng khả năng xuất của 89C51
IC thanh ghi dịch nối tiếp ra song song có thể được nối vào các đường TXD và RXD
của 89C51 để cung cấp thêm 8 đường ra Có thể nối xâu chuỗi thêm các thanh ghi dịch
để mở rộng thêm
Chế độ thanh ghi dịch của port nối tiếp
UART 8 bit với tốc độ baud thay đổi được (chế độ 1)
Ở chế độ 1, port nối tiếp của 89C51 làm việc như một UART 8 bit với tốc độ
baud thay đổi được Một UART (Universal Asynchronous Receiver/Transmitter : Bộ
thu/phát bất đồng bộ vạn năng) là một dụng cụ thu và phát dữ liệu nối tiếp với mỗi ký
tự dữ liệu đi trước là bit start ở mức thấp và theo sau là bit stop ở mức cao Đôi khi xen
thêm bit kiểm tra chẵn lẻ giữa bit dữ liệu cuối cùng và bit stop Hoạt động chủ yếu của
UART là chuyển đổi song song sang nối tiếp với dữ liệu xuất và chuyển đổi nối tiếp
sang song song với dữ liệu nhập
8051
Thêm 8 ngõ ra
Trang 20Ở chế độ 1, 10 bit được phát trên TXD hoặc thu trên RXD Những bit đó là : 1
bit start (luôn luôn là 0), 8 bit dữ liệu (LSB đầu tiên) và 1 bit stop (luôn luôn là 1) Với
hoạt động thu, bit stop được đưa vào RB8 trong SCON Trong 89C51 chế dộ baud
được đặt bằng tốc độ báo tràn của Timer 1
Truyền dữ liệu (phát) được khởi động bằng cách ghi vào SBUF, nhưng vẫn
chưa thật sự bắt đầu chạy cho đến khi sự thay thế kế tiếp của bộ đếm chia cho 16 cung
cấp tốc độ baud cổng nối tiếp Dữ liệu được dịch ra ngoài trên đường TXD bắt đầu
bằng bit start, theo sau là 8 bit dữ liệu và sau cùng là bit stop Độ rộng (theo thời gian
của mỗi bit) là nghịch đảo của tốc độ baud được lập trình trong timer Cờ ngắt phát
(TI) được đặt lên 1 khi xuất hiện bit stop trên TXD
Đặt cờ TI port nối tiếp
Việc thu dữ liệu được khởi động bằng một chuyển trạng thái từ 1 xuống 0 trên
RXD Bộ đếm 16 tức thời được xóa để đồng bộ số đếm với luồng bit đến Luồng bit
đến được lấy mẫu giữa 16 lần đếm
Bộ thu sẽ phát hiện được bit start sai bằng cách yêu cầu trạng thái 0 ở (bit start) ở
lần đếm thứ 8 sau khi có chuyển trạng thái từ 1 xuống 0 đầu tiên Nếu điều này không
xảy ra, người ta giả sử là bộ thu được kích bởi nhiễu chứ không phải do một ký tự hợp
lệ Bộ thu được reset và quay về trạng thái nghỉ (idle), tìm kiếm (đợi) chuyển trạng
thái từ 1 xuống 0 kế
Giả sử đã phát hiện được bit start hợp lệ, thì tiếp tục thu ký tự Bit start được bỏ
qua và 8 bit dữ liệu được đưa vào thanh ghi dịch cổng nối tiếp theo xung nhịp Khi đã
có được tất cả 8 bit, điều sau đây xảy ra :
bit
start D0 D1 D2 D3 D4 D5 D6 D7 stop bit
TXD
1 tốc độ baud
TI (SCON.1)
Ngắt phát (chuẩn bị cho dữ liệu)
Trang 21Bit thứ 9 (bit stop) được chốt vào RB8 trong SCON
SBUF được nạp với 8 bit dữ liệu
Cờ ngắt bộ thu (RI) được đặt lên 1
Tuy nhiên, những điều này chỉ xảy ra nếu đã có những điều kiện sau :
RI = 0
SM2 = 1 và bit stop thu được là 1, hoặc SM2 = 0
Đòi hỏi RI = 0 để bảo đảm là phần mềm đã đọc ký tự trước (và RI được xóa)
Điều kiện thứ hai hơi phức tạp nhưng chỉ áp dụng trong chế độ truyền thông đa
xử lý Điều đó hàm ý là “không đặt RI lên 1 trong chế độ truyền thông đa xử lý
khi bit dữ liệu thứ 9 là 0)
2.1.2.9 Tốc độ baud port nối tiếp
Sử dụng Timer 1 làm xung nhịp tốc độ baud
Cách thông dụng để tạo tốc độ baud là khởi động TMOD cho chế độ 8 bit tự
động nạp lại (chế độ 2) và đặt giá trị nạp lại đúng vào TH1 để cho tốc độ tràn đúng với
tốc độ baud TMOD được khởi động như sau :
MOV TMOD, #0010xxxxB
Các x là các bit 1 hoặc 0 cần cho timer
Cũng có thể đạt được các tốc độ baud thấp bằng cách sử dụng timer chế độ 1 với
TMOD = 0001xxxxB Tuy nhiên, tốn thêm phần mềm vì các thanh ghi TH1/TL1 phải
được khởi động lại sau mỗi lần tràn Việc này sẽ được thực hiện trong chương trình
phục vụ ngắt Một chọn lựa khác là cấp xung nhịp cho Timer 1 từ ngoài dùng
T1(P3.5) Và luôn luôn tốc độ baud là tốc độ tràn của Timer 1 được chia cho 32 (hoặc
cho 16, nếu SMOD = 1)
Công thức tổng quát để xác định tốc độ baud trong các chế độ 1 và 3 là :
Tốc độ baud = Tốc độ tràn của Timer 1 ÷ 32
Bảng 2.6 tóm tắt các giá trị nạp lại cho các tốc độ baud thông dụng nhất, dùng
Trang 23Chương 3 : THIẾT KẾ HỆ THỐNG 3.1- Giới thiệu :
Hệ thống cân băng tải gồm 2 phần :
Bộ điều khiển hệ thống cân
Bộ đầu cân
Hệ thống cân băng tải của em là một hệ thống thu thập dữ liệu nhờ vào hai load
cell (mỗi load cell cân được khối lượng tối đa là 20kg ), dữ liệu thu thập được sẽ thay
đổi theo sự thay đổi của điệp áp đầu ra của load cell theo sự thay đổi khối lượng của
bao được cân
Điện áp đầu ra của load cell được đưa vào mạch đầu cân và được xử lý để hiển
thị khối lượng hiện tại của bao đang cân trên led 7 đoạn và đồng thời cung lúc này
khối lượng của vật đang cân được truyền về mạch điều khiển qua IC MAX232 Mạch
điều khiển là mạch điều khiển toàn bộ quá trình hoạt động của hệ thống cân, dữ liệu từ
đầu cân đưa về bộ điều khiển sẽ được xử lý tính toán để hiển thị khối lượng hiện tại
của bao đang cân, hiển thị tổng khối lượng của các lần cân và hiển thị số bao được cân
và đồng thời dữ liệu của tổng số bao và dữ liệu của tổng khối lượng của các lần cân
cũng được lưu vào bộ nhớ EPROM của AT24C04
Hình 4.1 : Sơ đồ khối của hệ thống cân
Tín hiệu đưa
về từ load cell
Bộ đầu cân
Hiển thị khối lượng hiện tại của
Bộ điều khiển hệ thống cân
Hiển thị khối lượng hiện tại của
Hiển thị tổng khối lượng cân
Hiển thị tổng số bao
Lưu vào EEPROM AT24C04
Trang 243.2 Tính toán và thiết kế phần cứng :
* Thiết kế cơ khí :
Mô hình bàn cân gồm các phần chính sau :
- Băng tải được làm bằng chất liệu đặc biệt, kích thước 0.8m x 0.4m có thể ép
dính 2 mép lại với nhau một cách tương đối phẳng Điều này giúp cho việc giảm sai số
khi băng tải hoạt động
- Động cơ kéo băng tải là loại động cơ có công suất nhỏ (~220W), tốc độ
~0.1m/s Do đó có thể cân khoảng 300 sản phẩm/giờ
-Cảm biến gồm :
+ 2 Loadcell loại 20 Kg được bố trí ở 2 đầu bàn cân Tổng trọng lượng tối đa
có thể cân được sau khi đã loại bỏ khối lượng của vật liệu làm bàn cân là 10Kg
+ 2 cảm biến quang thu phát hồng ngoại được đặt dọc theo bàn cân để phát hiện
sản phẩm và lấy mốc để xử lí tín hiệu
- Sai số khi cân vào khoảng 3%
* Mạch điều khiển :
Mạch điều khiển điều khiển toàn bộ hoạt động của hệ thống Khi được cấp
nguồn mạch điều khiển sẽ kích cho băng tải hoạt động thông qua mạch động lực bằng
nút nhấn Vật thể cần cân được di chuyển trên băng tải và được phát hiện bởi các cảm
Trang 25biến được bố trí dọc theo bàn cân, các tín hiệu từ cảm biến sẽ được đưa về CPU để
đếm số lượng vật thể Đồng thời mạch điều khiển sẽ xử lý tính toán, lưu trữ dữ liệu
truyền về từ mạch đầu cân và hiển thị số liệu lên các LED 7 đoạn
3.2.1 Khối mạch hiển thị :
Mạch hiển thị gồm 17 LED 7 đoạn, 17 transistor A564, IC giải mã 74LS154
-Tính phân cực cho Transitor A564 :
31
1 2 3 4 5 6 7 8
21 22 23 24 25 26 27 28
10 11
12 13
14 15 16 17
39 38 37 36 35 34 33 32
RST
XTAL2 XTAL1
EA/VPP
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 P2.0/A8
P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15
P3.0/RXD P3.1/TXD
P3.2/INT0 P3.3/INT1
P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7
LED13
LED17
R7 R
LED5
LED11 EN_LED
LED15 ADD1
VCC
VCC
LED3
LED1 LED7S
7 6 4 2 1 9 10 5
a b c d e f g
p C1 C2
c
LED1 ADD0
Q11 PNP
3
LED7 LED4
b
e d
23 22 21 20 18 19
G1 G2
f
LED14 EN_LED
Y 1
LED12
LED1 LED6
ADD3
ADD3
Với VCC = 5V DC , Transitor SI và có β = 100, điện áp ngõ ra tại mỗi chân
port của 89C51 VOL = 0,45V, dòng để mỗi LED sáng là 10mA
Chọn chế độ hoạt động của Transistor là bão hoà VEC = 0,5V
Ta có :
LED
OL LED EC CC
V V V V
10
45 , 0 2 5 , 0
5 − − −
=
LED
Trang 26Cực B của Transistor được nối với ngõ ra của IC74154, mỗi chân ngõ ra của IC
giải mã có điện áp VOL = 0,45V
Để cho 1 thanh Led sáng thì dòng qua nó là 10mA, do đó để cả 8 đoạn LED
sáng thì dòng cung cấp cho LED là IC = 80mA
Để Transitor dẫn bão hoà : IB
I
V V
5 , 1
4 , 0 2 , 1 5
Chọn RB = 2,2KΩ
3.2.2 Khối lưu trữ dữ liệu :
Khối lưu trữ dữ liệu sử dụng IC AT24C04, dữ liệu được truyền nối tiếp
từ 89C51 và lưu trữ vào EEPROM với thanh ghi A mang data, thanh ghi B định địa
1 3 5 7 21
23 25 27
10 12
14 16
39 37 35 33
RST XTAL2 EA/VPP
P1.0 P1.2 P1.4 P1.6 P2.0/A8 P2.2/A10 P2.4/A12 P2.6/A14
P3.0/RXD P3.1/TXD P3.2/INT0
P3.4/T0 P3.6/WR P3.7/RD
P0.0/AD0 P0.2/AD2 P0.4/AD4 P0.6/AD6
U2
AT24C04
1 3
5
6 7
A0 A2 SDA
SCL WP
R16
R
Y 1
Trang 27Quá trình đọc/ghi dữ liệu được thực hiện qua 2 chân SCL (serial clock) và SDA
(seriral data), khi xuất hiện cạnh lên tại ngõ vào chân SCL thì dữ liệu truyền từ 89C51
được lưu vào bộ nhớ EEPROM của AT24C04 và khi xuất hiện cạnh xuống thì dữ liệu
từ EEPROM sẽ được đọc ra Dữ liệu sẽ được truyền qua chân SDA theo cả hai hướng
tuỳ thuộc vào trạng thái của chân SCL Chân SDA thường ở mức cao, khi chân SCL ở
mức thấp sẽ làm cho dữ liệu trên chân SDA thay đổi
Chân A2, A1, A0 là các địa chỉ ô nhớ ngõ vào, AT24C04 sử dụng chân A2, A1
cho việc định địa chỉ nhớ trên EEFROM, chân A0 không sử dụng
Điều kiện để bắt đầu một quá trình đọc/ ghi dữ liệu từ 89C51⇔AT24C04 : khi
chân SDA chuyển từ mức cao xuống mức thấp khi chân SCL vẫn giữ ở mức cao, sau
đó là một thanh ghi địa chỉ có nội dung xác định :
Điều kiện để báo kết thúc quá trình đọc/ ghi :khi chân SDA chuyển từ mức
thấp lên mức cao khi chân SCL vẫn ở mức cao
Vì dữ liệu đọc/ghi của AT24C04 là một chuỗi truyền 8 bit nối tiếp nên sau mỗi
lần truyền xong 8 bit, EEPROM đều gởi một tín hiệu báo là đã nhận/ truyền xong 1
byte (ACKNOWLEDGE), tín hiệu này luôn có tích cực mức thấp
89C51 sử dụng thanh ghi A và thanh ghi B để thực hiện đọc/ ghi dữ liệu, thanh
ghi A chứa dữ liệu đọc/ghi, thanh ghi B chứa địa chỉ
Quá trình ghi dữ liệu : sau khi thiết lập được điều kiện bắt đầu của quá trình
đọc/ ghi và 8 bit của thanh ghi địa chỉ, nếu là quá trình ghi thì bit R/W được đặt = 0,
sau đó là 8 bit địa chỉ của thanh ghi B, tiếp theo là 8 bit dữ liệu được ghi vào
EEPROM và cuối cùng là bit STOP Mỗi lần truyền xong 1 byte, EEPROM đều gởi ra
1 bit ACK mức thấp báo đã truyền xong một byte
Trang 28Hình 3.1 : Giao thức ghi byte
Quá trình đọc dữ liệu : Bit R/W được set =1còn các điều kiện thiết lập ban đầu
của quá trình đọc/ghi tương tự như quá trình ghi Khi kết thúc quá trình truyền 8 bit
đại chỉ của thanh ghi B, điều kiện bắt đầu của quá trình đọc ghi phải được thiết lập lại,
sau đó là 8 bit địa chỉ được ghi vào thanh ghi A từ EEPROM, sau khi đọc được 8 bit
là bit STOP, trong giao thức này không có bit ACK
P3.0
Khối nhận dữ liệu sử dụng OPTO 4N35 để nhận tín hiệu từ Max 232 truyền về
Do điện áp ra ở T1OUT = 12 V,dòng để LED phát sáng là 10mA nên ta chọn
điện trở R hạn dòng cho LED là
R=
mA
V
10 12
=1200Ω
Trang 29R18 R
C2
104
U4 MOC3020
1 2
Q19 C828
Khi chân P3.7 của 89C51 được CLR về mức 0, Transistor C828 ngưng dẫn,
dòng qua LED của MOC 3020 làm LED phát sáng kích dẫn cho BT134-600E thông
qua Triac của MOC làm động cơ hoạt động
Khi chân P3.7 được SET lên mức 1, Transistor C828 dẫn bão hòa, dòng qua
LED của MOC ~ 0, xung kích cho BT134 bị ngắt, động cơ ngừng hoạt động
018
Trang 30BE OH
10 4 1
7 0 4 2
4
Chọn RB = 10 KΩ
Triac BT134 là linh kiện công suất được kích dẫn bằng dòng, dòng kích dẫn
khoảng 10mA, ta tính được điện trở hạn dòng RK cho Triac :
RK = = 22000 Ω 10
220
mA V
Do BT134 có thể dẫn được 4A mà công suất động cơ khoảng 200W nên BT134
có thể dẫn dòng an toàn
3.3 Giải thuật chương trình :
Gọi t là khoảng thời gian sản phẩm đi từ sensor 1 đến sensor 2 Đây là khoảng
thời gian để CPU xử lý, tính toán số liệu truyền về từ mạch đầu cân
Khi phát hiện sản phẩm, sensor 1 sẽ gởi tín hiệu về CPU Lúc này CPU sẽ đếm
tăng tổng số sản phẩm và cộng dồn trọng lượng sản phẩm đang cân cho đến khi sensor
2 tác động Đó là lúc sản phẩm ra khỏi bàn cân, CPU ngưng lấy mẫu, tiến hành chia
trung bình, lưu trữ và hiển thị thông tin ra LED 7 đoạn
Do trong quá trình hoạt động bàn cân phải chịu tác động của các lực lên xuống
bởi sản phẩm gây ra nên sẽ xảy ra tình trạng sai số trong khi cân Để khắc phục tình
trạng này CPU sẽ nhận 5 chuỗi xung, tiến hành chia trung bình nhằm tìm giá trị ít sai
số nhất và lấy giá trị này để hiển thị và lưu trữ
Trang 31Giải thuật chương trình chính :
Trang 32BẮT ĐẦU THIẾT LẬP CÁC THÔNG SỐ BAN ĐẦU
KHỞI ĐỘNG CÁC PORT VÀ CÁC NGẮT
(TIMER, TRUYỀN THÔNG)
NHẤN START ?
NHẤN STOP ?
NHẤN RST ?
CẢM BIẾN SEN1 TÁC ĐỘNG?
SEN_BIT=
1 ?
CNT=7 ?
-KHỞI ĐỘNG HỆ THỐNG -START BIT=1 -DELAY
-DỪNG HỆ THỐNG -START_BIT=0 -SEN1_BIT=0 -SEN2_BIT=0 -CAN_BIT=0 -LUU_BIT=0 -DELAY
-RESET_MEMO -DOI_SO
START_
BIT=0 ?
-CAN_BIT=1 -SEN1_BIT=0
-HAND=0 -CNT=0
CẢM BIẾN SEN2 TÁC ĐỘNG ?
-DỪNG HỆ THỐNG -START_BIT=0 -SEN1_BIT=0 -CAN_BIT=0 -LUU_BIT=0 -DELAY
-CNT=0 -HANDS=0
SEN2=0
?
-CAN_BIT=1 -SEN1_BIT=0
Trang 33Giải thuật chương trình ngắt truyền thông :
RI = 0 NGẮT_RECEIVE
Đ
Trang 34Giải thuật chương trình cộng dồn :
Đặt các giá trị BF1= #0
… BF8= #0
Trang 35Giải thuật chương trình chia trung bình :
Trang 36Giải thuật chương trình tính tổng :
Giải thuật tăng đếm :
CNT3=10
?
CNT3=0 TĂNG CNT2
CNT2=10
?
CNT2=0 TĂNG CNT1
Trang 37Chương 4 : KẾT QUẢ VÀ BÀN LUẬN 5.1- Tính năng của mạch điều khiển :
Dữ liệu từ mạch đấu cân đưa về được mạch điều khiển xử lý sau đó được hiển
thị trên 17 LED 7 đoạn gồm có :
8 LED 7 đoạn : Hiển thị tổng khối lượng cân
5 LED 7 đoạn : Hiển thị khối lượng cân hiện tại
4 LED 7 đoạn : Hiển tổng số bao đã được cân
Dữ liệu từ mạch đầu cân truyên về sau khi xử lý sẽ được lưu vào EFROM của
IC nhớ AT24C04 đảm bảo dữ liệu sẽ không bị mất đi khi mất điện
Điều khiển mạch động lực
Lấy tín hiệu từ cảm biến để điều khiển toàn bộ hệ thống
5.2- Kết quả đạt được :
Trong khoảng thời gian gần ba tháng tìm hiểu, thiết kế và thi công đề tài dưới
sự hướng dẫn tận tình của thầy Trần Viết Thắng, em đã thực hiện được các nội dung
sau :
Thiết kế và thi công mạch điều khiển
Thiết kế và thi công mô hình cân băng tải 10kg
Tìm hiểu về ngôn ngữ ASSEMBLY và vi điều khiển 89C51
Kết nối được các bộ phận và viết chương trình điều khiển
Về phần cứng : mạch thi công chạy tốt
Về phần mềm : viết được chương trình điều khiển và xử lý dữ liệu
5.3- Hướng phát triển của đề tài :
Có thể giao tiếp với máy tính, để có thể in dữ liệu ra khi cần thiết và dữ liệu
được quản lý tốt hơn, ngoài ra khi hệ thống được giao tiếp với máy tính thì hệ thồng
được điều khiển và giám sát được dễ dàng hơn
Có thêm vào đầu cân một số tính năng như : nút chỉnh về zero, nút chống rung
khi cân v.v… do thời gian còn hạn chế em chưa thực hiện được
Tìm hiểu các phương pháp điều khiển sao cho kết quả tối ưu nhất