Đo lường điều khiển bằng máy tính
Trang 1CHƯƠNG 1: TỔNG QUAN VỀ VI ĐIỀU KHIỂN 89C51
1.1 Giới thiệu chung
MCS-51 là họ vi điều khiển của hãng Intel Vi mạch tổng quát của họ MCS-51 là chip 8051 Chip 8051 có một số đặc trưng cơ bản sau:
Bộ nhớ chương trình bên trong: 4KB (ROM)
Bộ nhớ dữ liệu bên trong: 128 byte (RAM)
Bộ nhớ chương trình bên ngoải: 64KB (ROM)
Bộ nhớ dữ liệu ngoài: 64KB (RAM)
4 port xuất nhập (I/O port) 8 bit
2 bộ định thời 16 bit
Mạch giao tiếp nối tiếp
Bộ xử lý bit (thao tác trên các bit riêng rẽ)
210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit
Nhân/ chia trong 4µs
1.2 Sơ đồ chân chip 8051
Trang 2CHƯƠNG 2: TỔNG QUAN VỀ CHUẨN GIAO TIẾP RS232 2.1 Đặt Vấn Đề
Vấn đề giao tiếp giữa PC và vi điều khiển rất quan trọng trong các ứng dụng điều khiển, đo lường Ghép nối qua cổng nối tiếp RS232 là một trong những kỹ thuật được
sử dụng rộng rãi để ghép nối các thiết bị ngoại vi với máy tính Đây là một chuẩn giao tiếp nối tiếp dùng định dạng không đồng bộ, kết nối nhiều nhất là 2 thiết bị , chiều dài kết nối lớn nhất cho phép để đảm bảo dữ liệu là 12.5 đến 25.4m, tốc độ 20 Kbit/s đôi khi là tốc độ 115 Kbit/s với một số thiết bị đặc biệt
Ý nghĩa của chuẩn truyền thông nối tiếp nghĩa là trong một thời điểm chỉ có một bit được gửi đi dọc theo đường truyền Có hai phiên bản RS232 được lưu hành trong thời gian tương đối dài là RS232B và RS232C Nhưng cho đến nay thì phiên bản RS232B cũ thì ít được dùng còn RS232C hiện vẫn được dùng và tồn tại thường được gọi là tên ngắn gọn là chuẩn RS232 Các máy tính thường có 1 hoặc 2 cổng nối tiếp theo chuẩn RS232C được gọi là cổng COM Trên Main máy tính có loại 9 chân hoặc loại 25 chân tùy vào đời máy và Main của máy tính Việc thiết kế giao tiếp với cổng RS232 cũng tương đối dễ dàng, đặc biệt khi chọn chế độ hoạt động là không đồng bộ và tốc độ truyền dữ liệu thấp
2.2 Đặc điểm của chuẩn RS232
Ưu điểm của giao diện nối tiếp RS232:
Khả năng chống nhiễu của các cổng nối tiếp cao
Thiết bị ngoại vi có thể tháo lắp ngay cả khi máy tính đang được cấp điện
Có thể ghép nối với vi điều khiển hay PLC (Programmable Logic Device)
Các mạch điện đơn giản có thể nhận được điện áp nguồn nuôi qua công nối tiếp
2.2.1 Những đặc điểm cần lưu ý trong chuẩn RS232.
Cổng COM không phải là một hệ thống bus nó cho phép dễ dàng tạo ra liên kết dưới hình thức điểm với điểm giữa hai máy cần trao đổi thông tin với nhau, một thành viên thứ ba không thể tham gia vào cuộc trao đổi thông tin này
Trong chuẩn RS232 có mức giới hạn trên và dưới (logic 0 và 1) là ± 12V Hiện nay đang được cố định trở kháng tải trong phạm vi từ 3 KΩ đến 7 KΩ
Mức logic 1 có điện áp nằm trong khoảng -3V đến -12V, mức logic 0 từ
± 3V đến 12V
Tốc độ truyền nhận dữ liệu cực đại là 100 Kbps
Các lối vào phải có điện dung nhỏ hơn 2500 pF
Trở kháng tải phải lớn hơn 3 KΩ nhưng phải nhỏ hơn 7 KΩ
Độ dài của cáp nối giữa máy tính và thiết bị ngoại vi ghép nối qua cổng
Trang 3 Đối với các đường điều khiển, thời gian chuyển của tín hiệu (từ TRUE sang FALSE, hoặc từ FALSE sang TRUE ) không được vượt qúa 1ms.Đối với các đường dữ liệu, thời gian chuyển (từ 1 sang 0 hoặc từ 0 sang 1) phải không vượt quá 4% thời gian của 1 bit hoặc 1ms
Các giá trị tốc độ truyền dữ liệu chuẩn : 50, 75, 110, 750, 300, 600, 1200,
2400, 4800, 9600, 19200, 28800, 38400, ,56600, 115200 bps
2.2.2 Các mức điện áp trên đường truyền.
RS 232 sử dụng phương thức truyền thông không đối xứng, tức là sử dụng tín hiệu điện áp chênh lệch giữa một dây dẫn và đất Ngoài mức điện áp tiêu chuẩn ( logic 0 và 1) cũng cố định các giá trị trở kháng tải được đấu vào bus của bộ phận và các trở kháng ra của bộ phát
Mức điện áp của tiêu chuẩn RS232C ( chuẩn thường dùng bây giờ) được mô tả như sau:
Mức logic 0 : +3V , +12V
Mức logic 1 : -12V, -3V
Các mức điện áp trong phạm vi từ -3V đến 3V là trạng thái chuyển tuyến Chính
vì từ -3V tới 3V là phạm vi không được định nghĩa, trong trường hợp thay đổi giá trị logic từ thấp lên cao hoặc từ cao xuống thấp, một tín hiệu phải vượt qua quãng quá độ trong một thơì gian ngắn hợp lý Điều này dẫn đến việc phải hạn chế về điện dung của các thiết bị tham gia và của cả đường truyền Tốc độ truyền dẫn tối đa phụ thuộc vào chiều dài của dây dẫn Đa số các hệ thống hiện nay chỉ hỗ trợ với tốc độ 19,2 Kbps
2.2.3 Cổng RS232 trên PC
Hầu hết các máy tính cá nhân hiện nay đều được trang bị ít nhất là 1 cổng COM hay cổng nối tiếp RS232 Số lượng cổng COM có thể lên tới 3 hay nhiều hơn tùy từng loại main máy tính Khi đó các cổng COM đó được đánh dấu là COM 1, COM 2, COM 3 Trên đó có 2 loại đầu nối được sử dụng cho cổng nối tiếp RS232 loại 9 chân (DB9) hoặc 25 chân (DB25) Tuy hai loại đầu nối này có cùng song song nhưng hai loại đầu nối này được phân biệt bởi cổng đực (DB9) và cổng cái (DB25)
Địa chỉ cơ bản của cổng nối tiếp của máy tính PC có thể tóm tắt trong bảng các địa chỉ sau:
COM 1 (cổng nối tiếp thứ nhất) Địa chỉ cơ bản = 3F8(Hex)
COM 2 (cổng nối tiếp thứ hai) Địa chỉ cơ bản = 2F8(Hex)
COM 3 (cổng nối tiếp thứ ba) Địa chỉ cơ bản = 3E8(Hex)
COM 4 (cổng nối tiếp thứ tư) Địa chỉ cơ bản = 2E8(Hex)
Trang 4Ta xét sơ đồ chân cổng COM 9 chân:
Chức năng của các chân như sau:
Chân 1 : Data Carrier Detect (DCD) : Phát tín hiệu mang dữ liệu
Chân 2: Receive Data (RxD) : Nhận dữ liệu
Chân 3 : Transmit Data (TxD) : Truyền dữ liệu
Chân 4 : Data Termial Ready (DTR) : Đầu cuối dữ liệu sẵn sàng được kích hoạt bởi bộ phận khi muốn truyền dữ liệu
Chân 5 : Singal Ground ( SG) : Mass của tín hiệu
Chân 6 : Data Set Ready (DSR) : Dữ liệu sẵn sàng, được kích hoạt bởi bộ truyền khi nó sẵn sàng nhận dữ liệu
Chân 7 : Request to Send : yêu cầu gửi,bô truyền đặt đường này lên mức hoạt động khi sẵn sàng truyền dữ liệu
Chân 8 : Clear To Send (CTS) : Xóa để gửi ,bô nhận đặt đường này lên mức kích hoạt động để thông báo cho bộ truyền là nó sẵn sàng nhận tín hiệu
Chân 9 : Ring Indicate (RI) : Báo chuông cho biết là bộ nhận đang nhận tín hiệu rung chuông
Qua chân cắm ra TXD máy tính gởi dữ liệu của nó đến KIT Vi điều khiển Trong khi đó các dữ liệu mà máy tính nhận được, lại được dẫn đến chân RXD Các tín hiệu còn lại có chức năng hỗ trợ để thiết lập và điều khiển quá trình truyền, được gọi là các tín hiệu bắt tay (handshake).Ưu điểm của quá trình truyền dùng tín hiệu bắt tay là có thể kiểm soát đường truyền và vì thế không phải trong mọi trường hợp ứng dụng đều dùng hết
Truyền dữ liệu qua cổng nối tiếp RS232 được thực hiện không đồng bộ Do vậy nên tại một thời điểm chỉ có một bit được truyền (1 kí tự) Bộ truyền gửi một bit bắt đầu (bit start) để thông báo cho bộ nhận biết một kí tự sẽ được gửi đến trong lần truyền bit tiếp theo Bit này luôn bắt đầu bằng mức 0 Tiếp theo đó là các bit dữ liệu (bits data) được gửi dưới dạng mã ASCII( có thể là 5,6,7 hay 8 bit dữ liệu) Sau đó là một Parity bit ( Kiểm tra bit chẵn, lẻ hay không) và cuối cùng là bit dừng - bit stop có thể là 1, 1,5 hay 2 bit dừng
Trang 5Định dạng của khung truyền dữ liệu theo chuẩn RS-232 như sau:
Khi không truyền dữ liệu, đường truyền sẽ ở trạng thái mark (điện áp -10V) Khi bắt đầu truyền, DTE sẽ đưa ra xung Start (space: 10V) và sau đó lần lượt truyền từ D0 đến D7 và Parity, cuối cùng là xung Stop (mark: -10V) để khôi phục trạng thái đường truyền
g) Truyền thông giữa hai nút.
Các sơ đồ khi kết nối dùng cổng nối tiếp:
Khi thực hiện kết nối như trên, quá trình truyền phải bảo đảm tốc độ ở đầu phát và thu giống nhau Khi có dữ liệu đến DTE, dữ liệu này sẽ được đưa vào bộ đệm và tạo ngắt
2.2.5 Tốc độ Baud
Đây là một tham số đặc trưng của RS232 Tham số này chính là đặc trưng cho quá trình truyền dữ liệu qua cổng nối tiếp RS232 là tốc độ truyền nhận dữ liệu hay còn gọi là tốc độ bit Tốc độ bit được định nghĩa là số bit truyền được trong thời gian 1 giây hay số bit truyền được trong thời gian 1 giây Tốc độ bit này phải được thiết lập ở bên phát và bên nhận đều phải có tốc độ như nhau ( Tốc độ giữa vi điều khiển và máy tính phải chung nhau 1 tốc độ truyền bit)
Ngoài tốc độ bit còn một tham số để mô tả tốc độ truyền là tốc độ Baud Tốc độ Baud liên quan đến tốc độ mà phần tử mã hóa dữ liệu được sử dụng để diễn tả bit được truyền còn tôc độ bit thì phản ánh tốc độ thực tế mà các bit được truyền.Vì một phần tử báo hiệu sự mã hóa một bit nên khi đó hai tốc độ bit và tốc độ baud là phải đồng nhất
Một số tốc độ Baud thường dùng: 50, 75, 110, 150, 300, 600, 1200, 2400, 4800,
9600, 19200, 28800, 38400, 56000, 115200 … Trong thiết bị thường dùng tốc độ là 19200
Khi sử dụng chuẩn nối tiếp RS232 thì yêu cầu khi sử dụng chuẩn là thời gian chuyển mức logic không vượt quá 4% thời gian truyền 1 bit Do vậy, nếu tốc độ bit càng
Trang 6cao thì thời gian truyền 1 bit càng nhỏ thì thời gian chuyển mức logic càng phải nhỏ Điều này làm giới hạn tốc Baud và khoảng cách truyền
2.2.6 Bit chẵn lẻ hay Parity bit
Đây là bit kiểm tra lỗi trên đường truyền Thực chất của quá trình kiểm tra lỗi khi truyền dữ liệu là bổ xung thêm dữ liệu được truyền để tìm ra hoặc sửa một số lỗi trong quá trình truyền Do đó trong chuẩn RS232 sử dụng một kỹ thuật kiểm tra chẵn lẻ
Một bit chẵn lẻ được bổ sung vào dữ liệu được truyền để ch thấy số lượng các bit
"1" được gửi trong một khung truyền là chẵn hay lẻ
Một Parity bit chỉ có thể tìm ra một số lẻ các lỗi chả hạn như 1,3,,5,7,9 Nếu như một bit chẵn được mắc lỗi thì Parity bit sẽ trùng giá trị với trường hợp không mắc lỗi vì thế không phát hiện ra lỗi Do đó trong kỹ thuật mã hóa lỗi này không được sử dụng trong trường hợp có khả năng một vài bit bị mắc lỗi
2.2.7 Sơ đồ kết nối dùng IC MAX232
Vi mạch MAX 232 của hãng MAXIM là một vi mạch chuyên dùng trong giao diện nối tiếp với máy tính Chúng có nhiệm vụ chuyển đổi mức TTL ở lối vào thành mức +12V hoặc –12V ở phía truyền và các mức +3…+15V hoặc -3…-15V thành mức TTL ở phía nhận
Max232 là IC chuyên dùng cho giao tiếp giữa RS232 và thiết bị ngoại vi Đây là
IC chạy ổn định và được sử dụng phổ biến trong các mạch giao tiếp chuẩn RS232 Mỗi đầu truyền ra và cổng nhận tín hiệu đều được bảo vệ chống lại sự phóng tĩnh điện Ngoài
ra Max232 còn được thiết kế với nguồn +5V cung cấp nguồn công suất nhỏ
Sơ đồ kết nối cổng COM với MAX232:
V C C
1
5 9 8 7 6
U 1 7
M A X 2 3 2 A
C 1 + 1
C 1 -3
C 2 + 4
C 2
R 1 I N
1 3
T 1 O U T
1 4
1 0 u
1 0 u
T X
R X
Trang 7Sơ đồ chân và cấu trúc bên trong của MAX232
Vi mạch MAX 232 có hai bộ đệm và hai bộ nhận Đường dẫn điều khiển lối vào CTS, điều khiển việc xuất ra dữ liệu ở cổng nối tiếp khi cần thiết, được nối với chân 9 của vi mạch MAX 232 Còn chân RST (chân 10 của vi mạch MAX ) nối với đường dẫn bắt tay để điều khiển quá trình nhận Thường thì các đường dẫn bắt tay được nối với cổng nối tiếp qua các cầu nối, để khi không dùng đến nữa có thể hở mạch các cầu này Cách truyền dữ liệu đơn giản nhất là chỉ dùng ba đường dẫn TxD, RxD và GND (mass)
Trang 8CHƯƠNG 3: THIẾT KẾ VÀ THI CÔNG 3.1 Sơ đồ nguyên lý
Trang 93.2 Giao diện Visual Basic
3.3 Chương trình viết trên vi xử lý P89V51RD2:
#include <P89V51RD2.INC>
ORG 00H
LJMP START
ORG 0023H
LJMP SERIAL
ORG 40H
;*********************************************************
MAIN:
START:
MOV SCON,#50H
Trang 10MOV T2CON,#00110000B
MOV RCAP2H,#0FFH
MOV RCAP2L,#0DCH
SETB TR2
MOV TMOD,#02H
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
SETB TR0
MOV IE,#92H
SJMP $
;******************************************************
SERIAL:
CLR RI
MOV A,SBUF
CJNE A,#3,SERIAL1
CLR TR1
;***********************************************
SERIAL1:
CJNE A,#1,SERIAL2
SJMP CHEDO1
CHEDO1:
CLR P1.4
SETB P1.5
SETB P1.6
SETB P1.7
MOV R0,#00H
MOV DPTR,#TABLE2
SANGDUOI:
MOV A,R0
MOVC A,@A+DPTR
MOV P0,A
MOV SBUF,A
JNB TI,$
CLR TI
ACALL DELAY
CLR RI
MOV A,SBUF
CJNE A,#3,LAP
LJMP STOP2
LAP:
INC R0
CJNE R0,#32,SANGDUOI
;**************************************************
Trang 11SETB P1.4
SETB P1.6
SETB P1.7
MOV DPTR,#TABLE
S1:
MOV A,#00h
MOVC A,@A+DPTR
CJNE A,#01H,S2
LJMP CHEDO2
S2:
MOV P0,A
MOV SBUF,A
JNB TI,$
CLR TI
LCALL DELAY
INC DPTR
CLR RI
MOV A,SBUF
CJNE A,#3,LAP1
SJMP STOP2
LAP1:
SJMP S1
SERIAL3:
CJNE A,#4,SERIAL4
SJMP CHEDO3
CHEDO3:
CLR P1.6
SETB P1.4
SETB P1.5
SETB P1.7
MOV R0,#00H
MOV DPTR,#TABLE3
SANGDAN:
MOV A,R0
MOVC A,@A+DPTR
MOV P0,A
MOV SBUF,A
JNB TI,$
CLR TI
ACALL DELAY
CLR RI
MOV A,SBUF
CJNE A,#3,LAP2
SJMP STOP2
LAP2:
INC R0
CJNE R0,#9,SANGDAN
SERIAL4:
Trang 12CJNE A,#5,BAT_DAU
SJMP CHEDO4
CHEDO4:
CLR P1.7
SETB P1.4
SETB P1.5
SETB P1.6
MOV R0,#00H
MOV DPTR,#TABLE4
HAIBIAVAORA:
MOV A,R0
MOVC A,@A+DPTR
MOV P0,A
MOV SBUF,A
JNB TI,$
CLR TI
ACALL DELAY
CLR RI
MOV A,SBUF
CJNE A,#3,LAP4
SJMP STOP2
LAP4:
INC R0
CJNE R0,#8,HAIBIAVAORA
;******************************
BAT_DAU:
LJMP SERIAL
;******************************
STOP2:
SETB P1.4
SETB P1.5
SETB P1.6
SETB P1.7
MOV P0,#11111111B
RETI
;*************************************
DELAY:
MOV R1,#200
DELAY1:
MOV R2,#164
DELAY2:
MOV R3,#2
DELAY3:
Trang 13DB 00H, 0FFH,00H, 0FFH
DB 01H
TABLE2:
DB 0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,07FH
DB 0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,07FH
DB 07FH,0BFH,0DFH,0EFH
DB 0F7H,0FBH,0FDH,0FEH
DB 07FH,0BFH,0DFH,0EFH
DB 0F7H,0FBH,0FDH,0FEH
TABLE3:
DB 0FFH,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H
TABLE4:
DB 0FFH,7EH,3CH,18H,00H,18H,3CH,7EH,0FFH
END
3.4 Chương trình viết trên máy tính:
Private Declare Sub InitCommonControls Lib "comctl32" ()
Dim TTLED1 As Byte
Dim TTLED As String
Dim a, b, c, d, e, f, g, h, i, j, k, l, m, n, p As Integer
Private Sub CONNECT_Click()
DIS.Enabled = True
CONNECT.Enabled = False
On Error GoTo Loiketnoi
MSComm1.Settings = "9600,N,8,1"
MSComm1.CommPort = Combo1.ListIndex + 1
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
START.Enabled = True
Combo1.Enabled = False
Combo2.Enabled = False
THONGBAOKN.Caption = "DANG KET NOI"
THONGBAOKN.ForeColor = vbRed
CHEDO1.Enabled = True
CHEDO2.Enabled = True
CHEDO3.Enabled = True
CHEDO4.Enabled = True
End If
Loiketnoi:
If Err.Number = 8002 Then
Trang 14MsgBox "LOI KET NOI", vbInformation, "THONG BAO"
Combo1.Enabled = True
CONNECT.Enabled = True
DIS.Enabled = False
End If
End Sub
Private Sub DIS_Click()
DIS.Enabled = False
MSComm1.Output = Chr(3)
CONNECT.Enabled = True
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
START.Enabled = False
STOPCT.Enabled = False
CHEDO1.Enabled = False
CHEDO2.Enabled = False
CHEDO3.Enabled = False
CHEDO4.Enabled = False
CHEDO1.Value = False
CHEDO2.Value = False
CHEDO3.Value = False
CHEDO4.Value = False
Combo1.Enabled = True
Combo2.Enabled = True
LED1.BackColor = &H80000005
LED2.BackColor = &H80000005
LED3.BackColor = &H80000005
LED4.BackColor = &H80000005
LED5.BackColor = &H80000005
LED6.BackColor = &H80000005
LED7.BackColor = &H80000005
LED8.BackColor = &H80000005
THONGBAOKN.Caption = "NGAT KET NOI"
THONGBAOKN.ForeColor = vbRed
End If
End Sub
Private Sub EXIT_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
Trang 15End Sub
Private Sub Form_Load()
START.Enabled = False
STOPCT.Enabled = False
CHEDO1.Enabled = False
CHEDO2.Enabled = False
CHEDO3.Enabled = False
CHEDO4.Enabled = False
CHEDO1.Value = False
CHEDO2.Value = False
CHEDO3.Value = False
CHEDO4.Value = False
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
TTLED = MSComm1.Input
TTLED1 = Asc(TTLED)
End If
a = TTLED1 Mod 2
b = TTLED1 \ 2
If a = 1 Then
LED1.BackColor = &H80000005
Else
LED1.BackColor = vbRed
End If
c = b Mod 2
d = b \ 2
If c = 1 Then
LED2.BackColor = &H80000005
Else
LED2.BackColor = vbRed
End If
e = d Mod 2
f = d \ 2
If e = 1 Then
LED3.BackColor = &H80000005
Else
LED3.BackColor = vbRed
End If
g = f Mod 2
h = f \ 2
If g = 1 Then
LED4.BackColor = &H80000005
Else