Lời Mở Đầu:
Hiện nay, máy vi tính đã và đang được sử dụng rộng rãi và phổ biến trong xã hội cũng như trong công nghiệp. Với lợi thế là tốc độ xử lý nhanh, có thể xử lý hàng tỷ phép tính trong một giây, nó đã và đang mang đến những thay đổi to lớn trong khoa học và công nghệ cũng như trong đời sống hàng ngày. Từ việc giúp soạn thảo văn bản, tính toán các bảng biểu, lưu trữ dữ liệu đến việc dùng để điều khiển các dây chuyển công nghiệp hiện đại. Ngày nay, các thiết bị máy móc ngày càng trở nên thông minh, tự động hóa cao, các công việc được thực hiện với hiệu quả cao thì máy tính trở thành bộ phận không thể thiếu.
Đối với sinh viên chuyên ngành điện tử, đây là một lĩnh vực hứa hẹn và mở ra nhiều triển vọng. Để góp phần tạo nền tảng ban đầu cho việc học tập, tìm hiểu về ứng dụng máy tính trong điều khiển, chúng tôi xin đề nghị thực hiện đề tài: “Hệ Thống Thu Thập Dữ Liệu Nhiều Kênh”.
Trong quá trình thực hiện đề tài này, mặc dù tôi đã rất cố gắng, xong chắc chắn không tránh khỏi những thiếu sót. Rất mong nhận sự góp ý, phê bình và chỉ dẫn của quí thầy cô và bạn đọc.
Mục lục
Trang
Chương mở đầu: TỔNG QUAN ĐỀ TÀI
1.GIỚI THIỆU 1
2. NỘI DUNG 1
Chương 1: CƠ SỞ LÝ THUYẾT
1. TÍN HIỆU TƯƠNG TỰ VÀ RỜI RẠC
1.1 Tín hiệu 3
1.2 Tín hiệu tương tự 3
1.3 Tín hiệu rời rạc . 3
2. LÝ THUYẾT LẤY MẪU TÍN HIỆU
2.1 Mạch lấy mẫu và giữ . 4
2.2 Lượng tử hóa . 4
2.3 Mã hóa . 5
2.4 Lỗi lượng tử . 5
3. CẢM BIẾN NHIỆT
3.1 Thang nhiệt độ nhiệt động học tuyệt đối . 6
3.2 Các Phương Pháp Đo Nhiệt Độ . 6
3.3 Cảm biến LM35 7
3.4 Cảm biến PT100 (E52MY-PT10C) 7
3.5 Cặp nhiệt điện ( Thermocouples) . 10
4. CHUYỂN ĐỔI A/D VÀ D/A
4.1 Chuyển đổi A/D 11
4.1.1 Nguyên tắt thực hiện chuyển đổi A/D 11
4.1.2 Các phương pháp chuyển đổi A/D 12
4.1.2.1 Phương pháp tích phân . 12
4.1.2.2 Phương pháp ADC xấp xỉ liên tiếp 14
4.2 Chuyển đổi D/A 15
4.2.1 Độ phân giải DAC 15
4.2.2 Độ chính xác 16
4.2.3 Thời gian ổn định . 17
4.2.4 Các phương pháp biến đổi DAC . 17
4.2.4.1 DAC dùng điện trở có trọng số nhị phân và bộ khuếch đại cộng 17
4.2.4.2. DAC R/2R ladder . 18
4.2.4.3 DAC với đầu ra dòng . 19
5. HỆ THU THẬP DỮ LIỆU NHIỀU KÊNH
5.1 Thu thập dữ liệu . 20
5.2 Hệ thống thu thập dữ liệu nhiều kênh 21
6.VI ĐIỀU KHIỂN 89V51
6.1. Họ Vi điều khiển 8051 và IC 89V51RB2/RC2/RD2 23
6.1.1 Giới thiệu khái quát họ vi điều khiển MSC – 51 23
6.1.2. Vi điều khiển 89V51RB2/RC2/RD2 . 24
7.GIAO TIẾP NỐI TIẾP
7.1 Cấu trúc cổng giao tiếp nối tiếp (Comm Port) 32
7.1.1 Cấu trúc cổng nối tiếp . 32
7.1.2 Truyền thông giữa hai nút 35
7.1.3 Truy xuất cổng nối tiếp . 36
7.2 IC MAX 232 36
8. NGÔN NGỮ LẬP TRÌNH VISUAL BASIC 6.0
8.1 Cơ bản về Visual Basic 6.0 . 37
8.2 Lập trình giao tiếp cổng nối tiếp dùng Visual Basic 6.0 sử dụng MSCOMM32.OCX 40
8.3 Giới thiệu về ActiveX Teechart 46
9. ĐIỀU KHIỂN SỐ- ĐIỀU KHIỂN HỒI TIẾP
9.1 Hệ thống điều khiển số . 48
9.1.1 Cấu trúc hệ thống điều khiển số 48
9.1.2 Hệ thống lấy mẫu tín hiệu 48
9.2 Phương pháp điều khiển ON/OFF 48
9.3 Phương pháp điều khiển hồi tiếp 49
Chương 2: THIẾT KẾ HỆ THỐNG THU THẬP DỮ LIỆU NHIỀU KÊNH
1. NHIỆM VỤ, HƯỚNG GIẢI QUYẾT CỦA ĐỒ ÁN
1.1.Nhiệm vụ 53
1.2.Giải quyết vấn đề . 53
2.THIẾT KẾ PHẦN CỨNG
2.1. Sơ đồ khối . 53
2.2.Giải thích nguyên lý từng khối . 54
2.2.1. Sơ đồ nguyên lý 56
2.2.2. Đối tượng lò điện 58
2.3. Thiết kế chi tiết 59
2.3.1. Khối nguồn 59
2.3.2. Khối ADC 59
2.3.3. Khối DAC 63
2.3.4 Khối cảm biến nhiệt 63
2.3.5. Khối giao tiếp PC 66
2.3.6. Khối công suất 66
2.3.7 Khối điều khiển quạt . 67
2.4. Nguyên lý hoạt động của hệ thống thu thập dữ liệu 67
2.5. Bản mạch in . 67
2.6. Lưu đồ giải thuật và chương trình 68
2.6.1 Lưu đồ chương trình chính . 68
2.6.2 Lưu đồ chương trình con lấy mẫu ADC 69
2.6.3 Lưu đồ chương trình con biến đổi ADC . 69
2.6.4 Lưu đồ chương trình ngắt nối tiếp . 70
2.7. Kết quả thi công 72
CHƯƠNG 3: KẾT LUẬN
1. KẾT LUẬN 79
2. HƯỚNG PHÁT TRIỂN 79
PHỤ LỤC . 80
TÀI LIỆU THAM KHẢO . 104
105 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 3686 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Hệ thống thu thập dữ liệu nhiều kênh, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ì cho cho Output= variant = một mảng kiểu Byte.
8.2.2.11 OutBufferCount: trả lại số kí tự trong bộ đệm truyền.
8.2.2.12 OutBuferSize: giống như InBuferSize, mặc định là 512.
8.2.2.13 RthresHold
Cú pháp: MSComm1.Rthreshold [ = value ]
[Value] kiểu số nguyên. Thiết lập số kí tự nhận được trước khi gây lên sự kiện comEvReceive. Mặc định = 0 tức là không có sự kiện OnComm khi nhận được dữ liệu. Thiết lập = 1 tức là sự kiện OnComm xảy ra khi bất kì kí tự nào được chuyển đến bộ đệm nhận.
8.2.2.14 SThreshold
Thiết lập và trả lại số kí tự nhỏ nhất được cho phép trong bộ đệm gửi để xảy ra sự kiện OnComm = comEvSend . Theo mặc định giá trị này = 0 tức là khi truyền sẽ không gây ra sự kiện OnComm. Nếu thiết lập thông số này =1 thì sự kiện OnComm xảy ra khi bộ đệm truyền rỗng. Sự kiện OnComm = comEvSend chỉ xảy ra khi mà số kí tự trong bộ đệm truyền nhỏ hơn hoặc = Sthreshold. Nếu số kí tự trong bộ đệm này luôn lớn hơn Sthreshold thì sự kiện này không thể xảy ra.
8.2.2.15 Sư kiện OnComm
Sự kiện OnComm được phát sinh vào bất cứ khi nào giá trị của đặc tính CommEvent thay đổi.
Sự kiện : Private Sub MsComm_OnComm()
Đặc tính CommEvent chứa mã số của lỗi hay sự kiện phát sinh bởi sự kiện OnComm. Nên đặt các đặc tính Rthreshold hoặc Streshold bằng 0 để vô hiệu bẫy sự kiện Receive and Send.
CommEvent trả lại phần lớn sự kiện giao tiếp hoặc có lỗi. CommEvent xảy ra khi có lỗi hoặc khi xảy ra sự kiện nào đó. Sau đây là một số hằng số lỗi:
Sự kiện
Giá trị
Miêu tả sự kiện
comEventBreak
1001
Xảy ra khi nhận được một tín hiệu Break.
comEventFrame
1004
Lỗi hệ thống. Phần cứng phát hiện ra một lỗi hệ thống
comEventOverrun
1006
Xảy ra khi cổng tự tràn( Overrun). Một kí tự không được
đọc từ phần cứng trước khi kí tự tiếp theo tới và do đó kí tự
này bị mất.
comEventRxOver
1008
Xảy ra khi bộ đệm nhận bị tràn. Không có đủ chỗ cho dữ liệu trong bộ đệm nhận.
comEventRxParity
1009
Lỗi Parity. Phần cứng phát hiện ra một lỗi Parity.
comEventTxFull
1010
xảy ra khi bộ đệm truyền bị đầy. Bộ đệm truyền bị đầy trong khi ghi dữ liệu lớn vào bộ đệm
comEventDCB
1011
Một lỗi không mong muốn khi đang khôi phục lại khối điều khiển thiết bị( DCB – Device Control Block) cho cổng
Một số sự kiện :
Sự kiện
Giá trị
Miêu tả sự kiện
comEvSend
1
Xảy ra khi số kí tự trong bộ đệm truyền nhỏ hơn giá trị
SthresHold.
comEvReceive
2
Xảy ra khi bộ đệm nhận được số kí tự bằng giá trị RthresHold. Sự kiện này được tạo ra liên tục cho tới khi bạn dùng thuộc tính Input để lấy hết dữ liệu từ trong bộ đệm nhận.
RcomEvCTS
3
Xảy ra khi có thay đổi trong đường CTS( Clear To Send)
comEvDSR
4
Xảy ra khi thay đổi trong đường DSR( Data Set Ready). Sự kiện này chỉ xảy ra khi đường DSR thay đổi từ 1 -> 0.
comEvCD
5
Xảy ra khi có thay đổi trong đường CD( Carrier Detect)
comEvRing
6
Phát hiện chuông (Ring).Một số UART không hỗ trợ sự kiện này.
comEvEOF
7
Xảy ra khi nhận được kí tự kết thúc file ( kí tự 26 trong bảng mã ASCII)
8.3 Giới thiệu về ActiveX Teechart
8.3.1 Giới thiệu
Để sử dụng Teechart ta copy teechart7.ocx vào C:/Windows/system32, dùng Visual Basic 6.0 mở Teechart thông qua menu Project > Components
Hình 1.48 – ActiveX Teechart, biểu tượng và giao diện
Để thay đổi giao diện, thiết lập thông số ta kích chuột phải vào giao diện trên Form và chọn Edit. Cửa sổ Editing hiện ra.
Hình 1.49 – Cửa sổ Editing và các kiểu đò thị
Tại TAB Chart/Series, ta chọn Add để thêm đồ thị cần hiển thị và chọn kiểu đồ thị. Ở đây hổ trợ nhiều kiểu đồ thị khác nhau. Bỏ Check 3D để được đồ thị 2D. Kết quả sau khi chọn kiểu đồ thị Point 2D
Hình 1.50 – Đồ thị Point 2D
Ngoài ra, trong cửa sổ Editing ta có thể cài đặt các thông số của đồ thi như Asix (trục đồ thị), Little (Nhãn, tiêu đề)…
8.3.2 Các lệnh cơ bản
8.3.2.1 Lệnh xóa đồ thị
With TChart1.Series(0)
.Clear
End With
Tchart1 là tên của giao diện đồ thị
Series(0) là thứ tự của đồ thị. Ví dụ nếu muốn vẽ 2 đồ thị trên 1 giao diện thì thứ tự của đồ thị lần lược là Series(0), Series(1).
Clear là lệnh xóa.
8.3.2.2 Lệnh vẽ một điểm lên đồ thị
With TChart1.Series(0)
.AddXY timer * 10, vtecd, "", vbRed
End With
AddXY là lệnh vẽ 1 điểm lên đồ thị có trục X là (timer*10) và trục Y là vtecd, đồ thị có màu vbRed (màu chuẩn của Visual Basic 6).
Hoặc lệnh vẽ đồ thị đơn giãn hơn là:
With TChart1.Series(0)
.Add vtecd, "", vbRed
End With
Add là lệnh vẽ 1 điểm lên đồ thị có trục Y là vtecd, trục X là điểm kế tiếp hướng tăng (giả sử trước đó đã vẽ một điểm nào đó, nếu chưa vẽ điểm nào thì X bắt đầu là 0).
9. ĐIỀU KHIỂN SỐ-ĐIỀU KHIỂN HỒI TIẾP
9.1 Hệ thống điều khiển số
9.1.1 Cấu trúc hệ thống điều khiển số
Máy tính số
Đối tượng
Công suất chấp hành
DAC
r(kt)
ADC
Cảm biến
Số (digital) analog
Hình 1.51: Cấu trúc hệ thống điều khiển số
9.1.2 Hệ thống lấy mẫu tín hiệu
Lấy mẫu trong kênh hồi tiếp
Chấp hành và đối tượng
DA
Máy tính số
r(kt) + e(kt) u(kt) u(t)
- y(kt) zoh
ADC
Hồi tiếp
Hình 1.52: Hệ thống lấy mẫu tín hiệu
9.2 Phương pháp điều khiển ON/OFF
Sơ đồ điều khiển lò nhiệt được thể hiện qua hình bên dưới:
Hình 1.53 Sơ đồ điều khiển lò nhiệt
Phương pháp điều khiển ON-OFF còn được gọi là phương pháp đóng ngắt hay dùng khâu relay có trễ: cơ cấu chấp hành sẽ đóng nguồn để cung cấp năng lượng ở mức tối đa cho thiết bị tiêu thụ nhiệt nếu nhiệt độ đặt w(k) lớn hơn nhiệt độ đo y(k), ngược lại mạch điều khiển sẽ ngắt mạch cung cấp năng lượng khi nhiệt độ đặt nhỏ hơn nhiệt độ đo.
Một vùng trễ được đưa vào để hạn chế tần số đóng ngắt như sơ đồ khối ở trên: nguồn chỉ đóng khi sai số e(k) > ∆ và ngắt khi e(k) < - ∆. Như vậy, nhiệt độ đo y(k) sẽ dao động quanh giá trị đặt w(k) và 2∆ còn được gọi là vùng trễ của rơ le.
Khâu rơ le có trễ còn gọi là mạch so sánh Smith trong mạch điện tử và như vậy ∆ là giá trị thềm hay ngưỡng.
Điều khiển ON-OFF có ưu điểm là:
Thiết bị tin cậy, đơn giản, chắc chắn, hệ thống luôn hoạt động được với mọi tải.
Phương pháp này có giá thành rẻ, được ứng dụng cho những đối tượng không yêu cầu cao về chất lượng điều khiển.
Tính toán thiết kế ít phức tạp và cân chỉnh dễ dàng.
Nhưng có nhược điểm là sai số xác lập sẽ lớn do hệ chỉ cân bằng động quanh nhiệt độ đặt và thay đổi theo tải. Khuyết điểm này có thể được hạn chế khi giảm vùng trễ bằng cách dùng phần tử đóng ngắt điện tử ở mạch công suất.
9.3 Phương pháp điều khiển hồi tiếp
Bộ điều khiển PID được sử dụng rất rộng rãi trong thực tế để điều khiển nhiều loại đối tượng khác nhau như nhiệt độ lò nhiệt, tốc độ động cơ, mực chất lỏng trong bồn chứa,… Lý do bộ điều khiển này được sử dụng rộng rãi là vì nó có khả năng triệt tiêu sai số xác lập, tăng đáp ứng quá độ, giảm độ vọt lố nếu các tham số bộ điều khiển được chọn lựa thích hợp. Do sự thông dụng của nó nên nhiều hãng sản xuất thiết bị điều khiển đã cho ra đời các bộ điều khiển thương mại rất thông dụng. Thực tế các phương pháp thiết kế bộ điều khiển PID dùng quỹ đạo nghiệm số, giản đồ Bode hay phương pháp giải tích rất ít được sử dụng do việc khó khăn trong xây dựng hàm truyền đối tượng. Phương pháp phổ biến nhất để chọn tham số PID thương mại hiện nay là phương pháp Ziegler-Nichols.
KHẢO SÁT VÒNG HỞ
Hình 1.54: Đáp ứng nấc của lò nhiệt
Đáp ứng này có thể được xấp xỉ bởi hàm truyền sau:
Trong đó: K : độ lợi tĩnh
T : hằng số thời gian
L : thời gian trễ
Chú ý:
Các tham số của bộ điều khiển PID được tính theo phương pháp đáp ứng nấc của Ziegler-Nichols như bảng 1.
Bảng 1
Bộ điều khiển
KP
TI
TD
P
1/a
PI
0.9/a
3L
PID
1.2/a
2L
L/2
ĐIỀU KHIỂN VÒNG KÍN
Sơ đồ điều khiển như hình 1.55.
Hình 1.55 Sơ đồ điều khiển lò nhiệt
Bộ điều khiển PID có hàm truyền dạng liên tục như sau:
Có 3 phương pháp căn bản để biến đổi z hàm truyền trên.
Phương pháp Euler thuận (Forward Euler):
Phương pháp Euler nghịch (Backward Euler):
Phương pháp hình thang (Tustin):
Biến đổi Z của nó như sau:
Viết lại G(z) như sau:
Đặt:
Suy ra:
Từ đó, ta tính được tín hiệu điều khiển u(k) khi tín hiệu vào e(k) như sau:
Suy ra:
Việc hiệu chỉnh 3 thông số Kp , Ki, Kd sẽ làm tăng chất lượng điều khiển. Ảnh hưởng của 3 thông số này lên hệ thống như sau:
Điều khiển tỉ lệ (Kp) có ảnh hưởng làm giảm thời gian lên và sẽ làm giảm nhưng không loại bỏ sai số xác lập. Điều khiển tích phân (Ki) sẽ loại bỏ sai số xác lập nhưng có thể làm đáp ứng quá độ xấu đi. Điều khiển vi phân (Kd) có tác dụng làm tăng sự ổn định của hệ thống, giảm vọt lố và cải thiện đáp ứng quá độ. Ảnh hưởng của mỗi bộ điều khiển Kp, Ki, Kd lên hệ thống vòng kín được tóm tắt ở bảng bên dưới (bảng 2).
Bảng 2
Đáp ứng
vòng kín
Thời gian
lên
Vọt lố
Thời gian
xác lập
Sai số
xác lập
Kp
Giảm
Tăng
Thay đổi nhỏ
Giảm
Ki
Giảm
Tăng
Tăng
Loại bỏ
Kd
Thay đổi nhỏ
Giảm
Giảm
Thay đổi nhỏ
Chương 2: THIẾT KẾ VÀ THI CÔNG
1. NHIỆM VỤ VÀ HƯỚNG GIẢI QUYẾT
1.1 Nhiệm Vụ
Nhiệm vụ của đồ án này là thiết kế một hệ thống thu thập dữ liệu nhiều kênh, đối tượng thu thập và giám sát là nhiệt độ lò ba lò nhiệt. Yêu cầu là chúng ta phải giám sát và điều khiển nhiệt độ ba lò nhiệt luôn duy trì ở một nhiệt độ như ta mong muốn. Sử dụng vi xử lý 89V51 làm bộ điều khiển trung gian để giao tiếp máy tính.
1.2 Hướng Giải Quyết
Sử dụng các cảm biến nhiệt độ như PT100, LM35.
Sử dụng bộ chuyển đổi A/D và D/A.
Sử dụng phương pháp điều khiển ON/OFF và PID.
Thiết kế và lập trình giao tiếp giữa vi điều khiển 89V51RB2 với máy vi tính
và lò nhiệt.
Sử dụng ngôn ngữ visual basic để tạo giao diện và giao tiếp với vi xử lý
89V51 qua RS232.
Viết chương trình điều khiển.
2. THIẾT KỀ PHẦN CỨNG
2.1 Sơ Đồ Khối Điều Khiển
Hình 2.1: Sơ đồ khối điều khiển
Máy tính ( PC )
Sơ đồ khối chi tiết hệ thống điều khiển
To
Max232
Khuyếch đại tín hiệu
Bộ chuyển
đổi ADC và MUX
PT100
Lò nhiệt 1
Vi xử lý 89V51
Khuyếch đại tín hiệu
LM35
Lò nhiệt 2
Khuyếch đại tín hiệu
LM35
Lò nhiệt 3
PWM
Bộ chuyển đổi
DAC
K.đại và chấp hành 3
K.đại và chấp hành 2
K.đại và chấp hành 1
Bus 3
Khuếch đại
Quạt3
Khuếch đại
Quạt2
Bus 3
Khuếch đại
Quạt1
Hình 2.2: Sơ đồ khối chi tiết hệ thống điều khiển
Lò 1: Điều khiển ON/OFF
Lò 2: Điều khiển ON/OFF
Lò 3: Điều khiển ON/OFF hoặc PID
2.2 Giải thích nguyên lý từng khối
Máy tính(PC):
Dùng ngôn ngữ lập trình Visual Basic 6.0 làm phương tiện giao tiếp. Nhiệm vụ của Visual Basic 6 là:
Tạo giao diện người dùng để giao tiếp với người sử dụng. Trên đó cho phép thay đổi giá trị nhiệt độ yêu cầu, thay đổi bộ thông số PID, vẽ đồ thị biểu diễn đáp ứng của hệ thống.
Thiết lập giao tiếp với khối Vi điều khiển qua cổng nối tiếp RS – 232.
Lấy giá trị đo nhiệt đo thực tế do khối vi điều khiển truyền về để xử lý.
Từ giá trị đo nhiệt độ thực tế, gửi lệnh xuống vi xử lý để thực hiện việc điều khiển đóng/mở (on/off) lò, hay thực hiện thuật toán PID xuất giá trị độ rộng xung về khối Vi xử lý để điều khiển.
Vi điều khiển :
Dùng ngôn ngữ lập trình hợp ngữ 8051 để lập trình cho Vi điều khiển 89V51RB2. Nhiệm vụ của khối vi điều khiển là:
Thiết lập giao tiếp với máy tính qua cổng giao tiếp nối tiếp.
Thực hiện việc lấy nhiệt độ thực tế của lò nhiệt từ bộ chuyển đổi ADC và truyền giá trị này về cho khối máy tính để xử lý.
Xuất giá trị ra bộ chuyển đổi DAC để điều khiển việc đóng/mở lò nhiệt.
Thực hiện thuật toán điều chế độ rộng xung (PWM), xuất xung PWM và xung điều khiển nhiệt độ của lò nhiệt cho khối công suất. Giá trị độ rộng xung nhận được từ khối máy tính.
Mạch công suất: nhiệm vụ của khối này là:
Khuếch đại công suất từ tín hiệu điều khiển do khối vi điều khiển truyền tới để điều khiển lò nhiệt.
Bộ chuyển đổi ADC : Do các tín hiệu đầu ra của cảm biến là các tín hiệu tương tự không thích hợp để đưa vào các mạch số để xử lý. Vì thế cần phải có mạch ADC để chuyển đổi từ tương tự sang số để các vi mạch số có thể hiểu và xử lý được.
Bộ chuyển đổi DAC: Dùng chuyển đổi từ tín hiệu số sang tương tự để điều khiển.
Max 232: Max-232 dùng để giao tiếp giữa máy tính và vi điều khiển
Cảm biến: để thu thập các giá trị của các đại lượng vật lý của môi trường bên ngoài.
Mạch khuyếch đại và điều chỉnh: do giá trị của đầu ra các cảm biến thường nhỏ so với bộ chuyển đổi ADC của hệ thống vì thế cần có mạch khuyếch đại và chuyển đổi cho thích hợp với các mạch chuyển đổi.
2.2.1 Sơ Đồ Nguyên Lý
KHỐI VI XỬ LÝ
2.2.2 Đối tượng lò nhiệt thực tế
Hàm truyền của lò nhiệt được xác định bằng phương pháp thực nghiệm. Cấp nhiệt tối đa cho lò( công suất vào P=100%), nhiệt độ lò tăng dần.Sau thời gian nhiệt độ lò đạt giá trị bão hòa. Do đặc tính chính xác của lò nhiệt khá phức tạp nên ta xấp xỉ bằng đáp ứng gần đúng.
a.Đặc tính chính xác của lò nhiệt
b.Đặc tính gần chính xác của lò nhiệt
Hình 2.3: Đặc tính của lò nhiệt
Ta xác định hàm truyền gần đúng của lò nhiệt dùng định nghĩa sau:
Tín hiệu vào là hàm nấc đơn vị (công suất=100%) : (1)
Tín hiệu ra gần đúng chính là hàm:
Trong đó:
Thực hiện biến đổi Laplace ta được:
Áp dụng định lý chậm trễ ta được: (2)
Từ (1) và (2) suy ra hàm truyền của lò nhiệt là:
Công suất lò nhiệt thực tế:
Với: U: hiệu điện thế cung cấp (220V)
R:là điện trở dây may so (40 Ω)
Nhiệt độ đo tối đa là 2000 C
2.3 Thiết kế chi tiết
2.3.1 Khối nguồn
Hình 2.4: khối nguồn
Hình 2.4 : khối nguồn
Biến điện áp ngõ vào AC thành điện áp DC khi qua cầu điode
IC 7812/IC7912 là IC ổn áp ngõ ra 12v/-12v cung cấp điện áp cho các Opamp hoạt động.
IC 7805 và thành điện áp ngõ ra 5V cung cấp cho vi điều khiển và khối giao tiếp với máy tính.
Các tụ lọc trước và sau IC ổn áp nhằm lọc các tần số cao do các mạch điều khiển và nguồn gây ra giúp cho điện áp ngõ ra ổn định.
2.3.2 Khối ADC
Hình 2.5: Khối ADC
Do chỉ sử dụng bốn ngõ vào nên nối chân chọn A2 xuống mát(chân IN0,IN1,IN2,IN3 được chọn). Để có độ phân giải 19,6mv ta nối chân Vref(+)= 5v,chânVref(-)= 0v.
Độ phân giải ADC = =
Để vi xử lý điều khiển được hoạt động của ADC thì:Chân start nối với ALE nối với P3.6,chân EOC,OE lần lượt nối với P3.4 và P3.5,chân dữ liệu D0-D7 nối P2.
Trong ADC 0809 không có xung clock riêng và do vậy phải cấp xung đồng bộ ngoài đến chân CLK. Mặc dù tốc độ chuyển đổi phụ thuộc vào tần số đồng hồ được nối đến CLK nhưng nó không nhanh hơn 100ms.
Tần số dao động của mạch: f=
Tần số dao động chuẩn là 640 kHz
Suy ra 640.103 =
Với R từ 100W đến vài kW ta chọn R =120 W Þ C = 103p.
ADC 0809 là IC để chuyển đổi tương tự sang số dùng kỹ thuật CMOS. Bao gồm 8 kênh làm việc độc lập với nhau để lựa chọn đầu vào từ In0 đến In7
2.3.2.1.Các chân của ic
IN0 đến IN7 : 8 ngõ vào tương tự
A0 đến A2 : giải mã chọn một trong 8 ngõ vào
D0 đến D8 : ngõ ra song song 8 bit
ALE : cho phép chốt địa chỉ
START : xung bắt đầu chuyển đổi
CLK : xung đồng hồ cho ic hoạt động
REF (+) : điện thế tham chiếu(+)
REF (-) : điện thế tham chiếu (-)
VCC : nguồn cung cấp
EOC :báo kết thúc chuyển đổi
OE :cho phép đọc dữ liệu sau chuyển đổi
VCC và GND cấp nguồn và mát cho ic hoạt động
Các bít A0,A1,A2 để chọn đầu vào theo bảng sau:
A2
A1
A0
Ngõ vào được chọn
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
Hình 2.6. Bit chọn ngõ vào ADC0809
* Các đặc điểm củaADC 0809:
Độ phân giải 8 bit
Tổng sai số chưa chỉnh định ± ½ LSB; ± 1 LSB
Thời gian chuyển đổi: 100ms ở tần số 640 kHz
Nguồn cung cấp + 5V
Điện áp ngõ vào 0 – 5V
Tần số xung clock 10kHz – 1280 kHz
Nhiệt độ hoạt động - 40oC đến 85oC
Dễ dàng giao tiếp với vi xử lý hoặc dùng riêng
Không cần điều chỉnh zero hoặc đầy thang
Sử dụng phương pháp xấp xỉ liên tiếp để biến đổi tín hiệu tương tự sang
tín hiệu số.
2.3.2.2 Cách mắc, Nguyên lý hoạt động của ic
Cách mắc
Hình 2.7: Cách mắc
ADC0809
Nguyên lý hoạt động
Kích hoạt chân ALE (cho phép chốt địa chỉ Address Latch Enable). Nó cần xung thấp lên cao để chốt địa chỉ.
Sau khi kích xung start thì bộ chuyển đổi bắt đầu hoạt động ở cạnh xuống của xung start, ngõ ra EOC(End - Of - Conversion) sẽ xuống mức thấp sau khoảng 8 xung clock (tính từ cạnh xuống của xung start). Lúc này bit có trọng số lớn nhất (MSB) được đặt lên mức 1, tất cả các bít còn lại được đặt xuống mức 0, đồng thời tạo giá trị điện thế Vref/2, điện thế này được so sánh với điện thế vào Vin.
+ Nếu Vin > Vref/2 thì bit MSB vẫn ở mức 1.
+ Nếu Vin < Vref/2 thì bit MSB xuống mức 0.
Tương tự như vậy bit kế tiếp MSB được đặt lên 1 và tạo ra điện thế có giá trị Vref/4 và cũng so sánh với điện áp ngõ vào Vin. Quá trình cứ tiếp tục cho đến khi xác định được bit cuối cùng. Khi đó chân EOC lên mức 1 báo cho biết đã kết thúc chuyển đổi. Để đọc được dữ liệu thì set bit OE(Out put Enable) lên mức 1. Trong quá trình chuyển đổi khi có xung start tác động thì ADC sẽ ngưng chuyển đổi.
2.3.3 Khối DAC
Hình 2.8: Khối DAC
Chân dữ liệu của DAC nối với P0 của vi xử lý.
Ngõ ra của DAC (chân 4) là dòng. Qua mạch chuyển đổi Opamp U6 trở thành áp.
Chân 14 của DAC Vref+=5v. Chân 15 của DAC Vref-=0v
Ta có công thức tính như sau:
Với: K = Vref/ R14 = 5/5k = 1 mA
Ngõ ra của DAC từ A1 đến A8 là mức 1 thì: Io = 1 mA x (255/256)=1 mA x 0.99= 1 mA=> Vo = Io x Rf = 1 mA x 5k = 5 voltĐộ phân giải = 5/255 = 0.02 volt. Độ chính xác ±0.19%, thời gian xác lập nhanh 150 ns
2.3.4 Khối cảm biến nhiệt
2.3.4.1 Cảm biến LM35
Hình 2.9: Khối cảm biến nhiệt Lm35
LM35 hoạt động ở 0oC cho ra điện áp 0v. Cứ tăng 1oC thì điện áp tăng lên 10mv. Ta xét nhiệt độ trong khoảng 100oC thì điện áp tương ứng ở ngõ ra cảm biến là 1V.
Áp dụng phương pháp xếp chồng ta được:
Độ phân giải của ADC0809 là 19,6mv,để đạt được độ chính xác 0,5oC thì:
Av *10mV = 2*19.6mV
=>Av = 3.92
=>Chọn R40 = 22K, R41=20k và R42 = 10K
Biến trở R40=20k dùng bù sai số cho điện trở để cho hệ số khuếch đại Av chính xác.
Hình 2.10: khối cảm biến nhiệt PT100
2.3.4.2 Cảm biến nhiệt PT100
+Ở Opamp U1:
Ta có: V+=Vcc*VR4_2/(VR4_1+R2)
=> VO1=(R7/R6 +1)*V+=2*V+=2* Vcc*VR4_2/(VR4_1+R2) (1)
=> VO1= 5v
+Ở Opamp U5:
Ta có: V-=VO1*(R18/(R18+R8))=VO1*(100/200)=VO1*0.5 (V)
V+=V01*(PT100/(PT100+R9)=VO1*(PT100/(PT100+100)) (V)
VO2=V+*(R14/(R14+R10))*(R20/R16+1)-V-
VO2=V+*(10K/(10K+10K))*(10K/10K+1)-V-
VO2=V+-V- (2)
+Ở Opamp U7:
Ta có: VO3=VO2*(R11+VR12)/R15=VO2*A=VO2*10 (3)
Với hệ số khuyếch đại:
A=(R11+VR12)/R15=(82K+VR12)/10K=(82K+18K)/10K=10 lần
Giả sử ở 100oC thì giá trị PT100 là 138.5 ohms
VO2=V+-V- =2.5*(138.5/238.5)-2.5*0.5= 0.2 V
Hình 2.10: khối cảm biến nhiệt PT100
VO3 =0.2*10=2v
2.3.5 Khối giao tiếp PC
Hình 2.11: Khối giao tiếp PC
Sử dụng IC MAX232 để giao tiếp. Nhiệm vụ của IC MAX232 là đảo điện áp ngõ vào (cổng RS–232 sử dụng mức logic âm, mức 1 ứng với từ –3V đến –15V, mức 0 ứng với từ 3V đến 15V) từ cổng Com cho vi điều khiển và đảo điện áp điều khiển từ vi điều khiển đến cổng Com.
2.3.6 Khối công suất
Hình 2.12: Khối mạch công suất
Chân SEL điều khiển đóng ngắt cho hay không cho Moc3020 hoạt động. Khi điện áp vào chân 1 của Moc3020, nếu mức 1 thì led phát sẽ sáng và làm cho led thu có tín hiệu, dẫn và kích chân G của triac làm cho điện AC qua tải . Ngược lại mức 0 vào chân 1 thì led thu không có tín hiệu và triac không được kích, dòng điện không qua tải.
2.3.7 Khối điều khiển quạt
Hình 2.13: Khối điều khiển quạt
Khi kích mức 1 vào Q2 thì LED sáng và quạt hoạt động. Ngược lại khi kích mức 0 thì led tắt và quạt ngừng hoạt động.
Điện trở R44 là điện trở kéo lên. Điện trở R46 hạn dòng bảo vệ Q2.
Diode D7 dập dòng cảm ứng sinh ra do quạt hoạt động để bảo vệ mạch điều khiển.
2.4 Nguyên lý hoạt động của hệ thống thu thập dữ liệu nhiều kênh
Trên máy tính, ta đặt nhiệt độ của ba lò nhiệt sau đó bấm start để hệ thống bắt đầu hoạt động. Khi đó ba lò nhiệt bắt đầu hoạt động làm nhiệt độ của ba lò tăng lên, các cảm biến nhiệt sẽ đọc nhiệt độ của ba lò nhiệt, sau đó thông qua bộ biến đổi ADC để biến đổi tín hiệu tương tự thành tín hiệu số, vi xử lý sẽ đọc các dữ liệu đó và gửi lên máy tính. Máy tính sẽ hiển thị nhiệt độ của ba lò nhiệt trên màn hình, vẽ đáp ứng của ba lò nhiệt đó, chứa các giá trị nhiệt độ thu được vào một file access. Máy tính gửi mã điều khiển xuống vi xử lý để điểu khiển nhiệt độ của ba lò nhiệt như mong muốn.
2.5 Mạch In
Hình 2.14: Mạch in
2.6 Lưu đồ giải thuật
2.6.1 Lưu đồ chính
Start
– Tạo tốc độ BAUD 9600 bits để giao tiếp VDK với máy tính (Dùng TIMER1)
– Khởi tạo chế độ giao tiếp nối tiếp
– Tắt các bit điều khiển quạt và lò nhiệt
–Nạp giá trị P0=00h
–Nạp P2=0FFh để đọc dữ liệu từ ADC
– Cho phép ngắt TIMER2, Port Nối tiếp
Đ
CHUYEN_ADC=1?
S
_Gọi chương trình Lấy mẫu ADC
_Không cho phép ngắt Port nối tiếp
_Gửi 4 byte dữ liệu lên máy tính
_Cho phép ngắt Port nối tiếp
2.6.2 Lưu đồ chương trình con lấy mẫu ADC
Lấy mẫu ADC
_Chọn ngõ vào IN0 của ADC
_Gọi chương trình Biến đổi ADC
_Cất vào biến tạm ADC1
_Chọn ngõ vào IN1 của ADC
_Gọi chương trình Biến đổi ADC
_Cất vào biến tạm ADC2
_Chọn ngõ vào IN2 của ADC
_Gọi chương trình Biến đổi ADC
_Cất vào biến tạm ADC3
_Chọn ngõ vào IN3 của ADC
_Gọi chương trình Biến đổi ADC
_Cất vào biến tạm ADC4
RET
2.6.3 Lưu đồ chương trình con biến đổi ADC
Biến đổi ADC
START=0 ,ALE=1
EOC=0?
Đ
S
Đọc giá trị ADC từ P2 vào 20h
OE=1
RET
2.6.4 Lưu đồ chương trình ngắt nối tiếp
Ngắt nối tiếp
_Xóa cờ thu RI
_Đọc dữ liệu từ bộ đệm vào thanh ghi A
_Nạp giá trị P0=0FFh
Đ
RETI
CLR chuyen_adc
A=’M’?
S
Đ
RETI
Mở lò 1
A=’A’?
S
Đ
RETI
Đóng lò 1
A=’B’?
S
Mở lò 2
A=’C’?
Đ
RETI
S
Đ
RETI
Đóng lò 2
A=’D’?
S
A=’E’?
Đ
RETI
Mở lò 3
S
Đ
RETI
Đóng lò 3
A=’F’?
Đ
S
RETI
Tắt tất cả các lò
A=’T’?
S
Đóng lò 3,Clr Pwm (Ton = 0, Toff = 255)
RETI
A=0 ?
S
Đ
Mở lò 3, Set Pwm (Ton = 255, Toff =0)
RETI
A=255 ?
S
– Nạp R7 vào R0
– SETB PWM (TON)
– Gọi ctr DELAY
– R0 = R0 - 1
Dùng lệnh và thanh ghi R0 để tạo delay 40μs
RET
DELAY
R0=0?
R0=0?
– Gọi ctr DELAY
– R0 = R0 - 1
– R0 = 255 - R7
– CLR PWM (TOFF)
RETI
2.7 Kết quả thi công
Mạch thi công thực tế:
Giao diện chương trình trên máy tính
Kết quả khi chạy chương trình:
So sánh kết quả khi điều khiển lò nhiệt 3 bằng phương pháp on/off và PID
Phương pháp on/off
Khi đặt nhiệt độ lò nhiệt 3 là 800C ta được đáp ứng sau:
Phương pháp PID
Với các thông số Kp = 10, Ki = 4, Kd = 0.00001, nhiệt độ lò nhiệt 3 đặt là 800C ta có biểu đồ đáp ứng như sau:
Khi điều khiển theo phương pháp on/off thì sai số xác lập sẽ lớn do hệ chỉ cân bằng động quanh nhiệt độ đặt và thay đổi theo tải. Do vậy, phương pháp điều khiển on/off được ứng dụng cho các đối tượng không yêu cầu cao về chất lượng điều khiển.
Khi điều khiển theo phương pháp PID thì nó có khả năng triệt tiêu sai số xác lập, tăng đáp ứng quá độ, giảm độ vọt lố nếu các tham số bộ điều khiển được chọn lựa thích hợp. Do vậy, phương pháp điều khiển pid được ứng dụng cho các đối tượng yêu cầu cao về chất lượng điều khiển và độ chính xác cao.
Chương 3: Kết Luận
1.Kết quả
Đề tài này đã thực hiện được kết quả sau:
Nghiên cứu tìm hiểu lý thuyết vi điều khiển 89V51, cảm biến nhiệt độ (Pt100,LM35), ADC, DAC, phương pháp giao tiếp nối tiếp qua cổng com, phương pháp điều khiển on-off, phương pháp điều khiển PID.
Thực hiện hệ thống thu thập dữ liệu nhiều kênh :
Xây dựng thành công hệ thống giám sát và thu thập dữ liệu (nhiệt độ) từ bốn cảm biến (một cảm biến Pt100, ba cảm biến LM35). Trong ba cảm biến dùng đo nhiệt độ ba lò nhiệt, cảm biến còn lại dùng để đo nhiệt độ môi trường.
Giao tiếp mạch với máy tính thông qua cổng Com.
Các giá trị cài đặt, các giá trị thu thập được hiển thị trên giao diện vì thế kết quả đạt được rất trung thực, trực quan giá trị dễ dàng chỉnh sửa tùy theo người sử dụng.
Kết quả thu thập được chứa vào MSAccess giúp người dùng giám sát một cách dễ dàng.
Thực hiện thuật toán pid số và so sánh kết quả với điều khiển on/off( lò nhiệt ba) và nhận thấy kết quả đáp ứng tốt hơn khi điều khiển bằng pid, sai số nhỏ hơn khi điều khiển bằng on/off.
Nhược điểm:
Do giao tiếp bằng cổng com nên bị giới hạn về khoảng cách truyền.
Có thể thu thập nhiệt độ tối đa là 8 kênh (do ADC0809 có 8 ngõ vào).
Chưa tìm được các thông số Kp, Ki, Kd tối ưu để được đáp ứng tốt nhất.
2.Hướng phát triển
+Có thể dùng PIC,AVR có sẳn ADC để mạch gọn hơn.
+Có thể giao tiếp với máy tính qua nhiều cổng khác nhau như: card PCI 1711, LPT, USB, Wireless…
+Có thể kết nối mạng để thu thập, điều khiển và giám sát, quản lý nhiều hệ thống, kết hợp nhiều hệ thống để xây dựng thành hệ điều khiển phân tán DCS.
+Xây dựng một hệ thống thu thập dữ liệu, giám sát và điều khiển các quá trình từ xa (SCADA).
PHỤ LỤC
1. Code chương trình Visual Basic
Option Explicit
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal _
bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetVersionExA Lib "kernel32" _
(lpVersionInformation As OSVERSIONINFO) As Integer
Private Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End Type
Private Const KEYEVENTF_KEYUP = &H2
Private Const VK_SNAPSHOT = &H2C
Private Const VK_MENU = &H12
Dim blnAboveVer4 As Boolean
''''''''''''''''KHAI BAO BANG GHI**************
Dim db As Database
Dim rs As Recordset
Dim L, T As Double
Dim ti As Double
'KHAI BAO BAO CHAY
Dim Des, DES1, DES2, DES3 As String
Dim I, J, P As Integer
Dim note, CONNECT As Boolean
Dim DATA As String
Dim T1, T11, T22, T33, T2, T3, T4 As Double
Dim dat1, dat2, dat3, dat4, dat5, dat6 As Integer
'KHAI BAO CAC BIEN PID
Dim kp, kd, ki, A0, A1, A2 As Single
Dim e0, e1, e2, nddo, nddat As Single
Dim DUTY, DUTY1 As Integer
'check1 cho phep mo lo 1 hay ko
'check2 cho phep mo lo 2 hay ko
'check3 cho phep mo lo 3 hay ko
'check4 mo do thi lo 1
'check5 mo do thi lo 2
'check6 mo do thi lo 3
'TIMER1 CHAY CHU TIEU DE
'TIMER2 CHAY THOI GIAN
'TIMER3 LAY MAU ADC -TIMER4 DUNG GHI DU LIEU SAU 1S
'*********************bat dau chuong trinh**************************
Private Sub CHAY_Click()
With TChart1.Series(0)
.Clear
End With
With TChart1.Series(1)
.Clear
End With
With TChart1.Series(2)
.Clear
End With
With TChart1.Series(3)
.Clear
End With
With TChart1.Series(4)
.Clear
End With
With TChart1.Series(5)
.Clear
End With
If (Text1.Text = "" Or Not (IsNumeric(Text1.Text)) Or Val(Text1.Text) 200) And Check1.Value = 0 Then
MsgBox "NHAP GIA TRI LO 1 TU 50 DEN 200 DO", vbInformation, "THONG BAO"
Text1.SetFocus
ElseIf (Text2.Text = "" Or Not (IsNumeric(Text2.Text)) Or Val(Text2.Text) 200) And Check2.Value = 0 Then
MsgBox "NHAP GIA TRI LO 2 TU 50 DEN 127 DO", vbInformation, "THONG BAO"
Text2.SetFocus
ElseIf (Text3.Text = "" Or Not (IsNumeric(Text3.Text)) Or Val(Text3.Text) 200) And Check3.Value = 0 Then
MsgBox "NHAP GIA TRI LO 3 TU 50 DEN 127 DO", vbInformation, "THONG BAO"
Text3.SetFocus
Else
MSComm1.CommPort = Combo1.ListIndex + 1 'CONG COM1
MSComm1.Settings = Combo2.Text 'TOC DO BAUD 9600
MSComm1.RThreshold = 4
MSComm1.InputLen = 4
MSComm1.DTREnable = False
MSComm1.PortOpen = True
DATA = MSComm1.Input 'kiem tra ket noi cong com
If DATA = "" Then
KNOI.Caption = "KIEÅM TRA KEÁT NOÁI COÅNG COM "
End If
nddat = Val(Text3.Text)
DUTY = 0
DUTY1 = 0
e0 = 0
e1 = 0
e2 = 0
Form2.Hide 'an 3 form - de dang chay
Form3.Hide
Form4.Hide
Check1.Enabled = False
Check2.Enabled = False
Check3.Enabled = False
Text1.Enabled = False
Text2.Enabled = False
Text3.Enabled = False
Timer3.Enabled = True 'CHO DOC ADC
Timer5.Enabled = True
End If
End Sub
Private Sub Check1_Click()
If Check1.Value = 1 Then
Check1.Caption = "Taét Loø"
Text1.Enabled = False
Text1.Text = 0
Text4.Text = 0
Else
Text1.Enabled = True
Check1.Caption = "Baät Loø"
End If
End Sub
Private Sub Check2_Click()
If Check2.Value = 1 Then
Check2.Caption = "Taét Loø"
Text2.Enabled = False
Text2.Text = 0
Text5.Text = 0
Else
Text2.Enabled = True
Check2.Caption = "Baät Loø"
End If
End Sub
Private Sub Check3_Click()
If Check3.Value = 1 Then 'khong hoat dong
Check3.Caption = "Taét Loø"
Text3.Enabled = False
Text3.Text = 0
Text6.Text = 0
Check7.Enabled = False
Check8.Enabled = False
TXTKP.Enabled = False
TXTKI.Enabled = False
TXTKD.Enabled = False
MACDINH.Enabled = False
Else
Check3.Caption = "Baät Loø"
Text3.Enabled = True
Check7.Enabled = True
Check8.Enabled = True
TXTKP.Enabled = True
TXTKI.Enabled = True
TXTKD.Enabled = True
MACDINH.Enabled = True
End If
End Sub
Private Sub Check4_Click() 'HIEN DO THI
If Check4.Value = 1 Then
Form2.Show
Else
Form2.Hide
End If
End Sub
Private Sub Check5_Click()
If Check5.Value = 1 Then
Form3.Show
Else
Form3.Hide
End If
End Sub
Private Sub Check6_Click()
If Check6.Value = 1 Then
Form4.Show
Else
Form4.Hide
End If
End Sub
Private Sub Check7_Click()
If Check7.Value = 1 Then 'nut chon dieu khien on/off lo 3
Check8.Value = 0
Check8.Enabled = False
TXTKP.Enabled = False
TXTKI.Enabled = False
TXTKD.Enabled = False
MACDINH.Enabled = False
Else
Check8.Value = 0
Check8.Enabled = True
TXTKP.Enabled = True
TXTKI.Enabled = True
TXTKD.Enabled = True
MACDINH.Enabled = True
End If
End Sub
Private Sub Check8_Click()
If Check8.Value = 1 Then 'nut chon dieu khien pid lo 3
Check7.Value = 0
Check7.Enabled = False
TXTKP.Enabled = True
TXTKI.Enabled = True
TXTKD.Enabled = True
MACDINH.Enabled = True
Else
Check7.Value = 0
Check7.Enabled = True
End If
End Sub
Private Sub DUNG_Click()
Timer5.Enabled = False
Timer4.Enabled = False 'CAP NHAT VAO BANG TIN
Check1.Enabled = True
Check2.Enabled = True
Check3.Enabled = True
Check8.Enabled = True
Check7.Enabled = True
TXTKP.Enabled = True
TXTKI.Enabled = True
TXTKD.Enabled = True
MACDINH.Enabled = True
ti = 0
If MSComm1.PortOpen = True Then
If CHAY.Enabled = False Then
'MSComm1.Output = Chr$(0) 'TAT TAT CA QUAT VA LO
MSComm1.Output = "T"
Timer3.Enabled = False 'NGUNG DOC ADC
MSComm1.PortOpen = False 'DONG CONG GIAO TIEP
Check1.Enabled = True
Check2.Enabled = True
Check3.Enabled = True
Text1.Enabled = True
Text2.Enabled = True
Text3.Enabled = True
CHAY.Enabled = True
Label4.Caption = "OFF"
Label6.Caption = "OFF"
Label8.Caption = "OFF"
Label10.Caption = "OFF"
Label12.Caption = "OFF"
Label14.Caption = "OFF"
KNOI.Caption = " DÖØNG KEÁT NOÁI"
Shape1.FillColor = vbBlack
Shape2.FillColor = vbBlack
Shape3.FillColor = vbBlack
Shape4.FillColor = vbBlack
Shape5.FillColor = vbBlack
Shape6.FillColor = vbBlack
End If
End If
End Sub
Private Sub Form_Load()
With TChart1.Series(0)
.Clear
End With
With TChart1.Series(1)
.Clear
End With
With TChart1.Series(2)
.Clear
End With
With TChart1.Series(3)
.Clear
End With
With TChart1.Series(4)
.Clear
End With
With TChart1.Series(5)
.Clear
End With
Form1.Height = 18000
Form1.Width = 18000
Check7.Value = 1
DUNG.Enabled = False
MO_FILE.Enabled = False
XOA.Enabled = False
Check1.Value = 0
Check2.Value = 0
Check3.Value = 0
Check4.Value = 0 'THE HIEN DO THI LO 1
Check5.Value = 0 'THE HIEN DOTHI LO 2
Check6.Value = 0 'THE HIEN DO THI LO3
Check1.Caption = "Baät Loø"
Check2.Caption = "Baät Loø"
Check3.Caption = "Baät Loø"
Timer4.Enabled = False
Call setFlex 'goi chuong trinh luu data
Call fillGrid
T11 = 0
T1 = 0
T2 = 0
T3 = 0
T4 = 0
ti = 0
Timer5.Enabled = False
Timer3.Enabled = False
KNOI.Caption = " KIEÅM TRA KEÁT NOÁI"
note = True
DES2 = " TRÖÔØNG ÑAÏI HOÏC COÂNG NGHIEÄP TPHCM- KHOA COÂNG NGHEÄ ÑIEÄN TÖÛ"
Des = " HEÄ THOÁNG THU THAÄP DÖÕ LIEÄU NHIEÀU KEÂNH "
DES1 = "SVTH: VOÕ HOAØNG MINH GVHD: THS HUYØNH MINH NGOÏC "
DES3 = "DO AN TOT NGHIEP-TRUONG DAI HOC CONG NGHIEP TP.HCM-KHOA CONG NGHE DIEN TU"
Combo1.ListIndex = 0
Combo2.ListIndex = 0
Label4.ForeColor = vbRed
Label6.ForeColor = vbRed
Label8.ForeColor = vbRed
Label10.ForeColor = vbRed
Label12.ForeColor = vbRed
Label14.ForeColor = vbRed
Label4.Caption = "OFF" 'lo1
Label6.Caption = "OFF" 'lo2
Label8.Caption = "OFF" 'lo3
Label10.Caption = "OFF" 'quat1
Label12.Caption = "OFF" 'quat2
Label14.Caption = "OFF" 'quat3
kp = 10 'Nap gia tri PID vao 3 bien
ki = 4
kd = 0.00001
TXTKP.Text = kp 'hien thi len
TXTKI.Text = ki
TXTKD.Text = kd
End Sub
Private Sub Form_Unload(Cancel As Integer)
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End Sub
Private Sub MACDINH_Click()
TXTKP.Text = kp 'nap gia tri mac dinh
TXTKI.Text = ki
TXTKD.Text = kd
End Sub
Private Sub MClose_Click()
Dim TH As Integer
If MSComm1.PortOpen = True Then
MSComm1.Output = "T" 'TAT TAT CA QUAT VA LO
Timer3.Enabled = False
MSComm1.PortOpen = False
End If
TH = MsgBox("BAN CO MUON THOAT KHOI CHUONG TRINH KHONG ?", vbInformation + vbOKCancel, "THONG BAO!!!!")
If TH = vbOK Then
End
End If
End Sub
Private Sub MEXit_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
Timer3.Enabled = False
End
End Sub
Private Sub MHelp_Topic_Click()
Form5.Show
End Sub
Private Sub MInfo_Click()
MsgBox "MULTI CHANNEL DATA ACQUISITION SYSTEM" & vbCrLf _
& "Copyright " & Chr$(169) & " 2009 DESIGNER BY : VO HOANG MINH", , _
"INFORMATION"
End Sub
Private Sub MO_FILE_Click()
Timer4.Enabled = False
Call Shell("C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE ""D:\do an\DO AN TOT NGHIEP\daq.mdb")
End Sub
Private Sub MOpen_Click()
Call Shell("C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE ""D:\do an\DO AN TOT NGHIEP\daq.mdb")
End Sub
Private Sub MPrint_Click()
If blnAboveVer4 Then
keybd_event VK_SNAPSHOT, 0, 0, 0
Else
keybd_event VK_SNAPSHOT, 1, 0, 0
End If
Picture1.Picture = Clipboard.GetData(vbCFBitmap)
DoEvents
If Picture1.Picture 0 Then
SavePicture Picture1.Picture, "D:\Hinh.JPG"
End If
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
CHAY.Enabled = False
Timer4.Enabled = True 'DUNG DE GHI TAP TIN
DUNG.Enabled = True
MO_FILE.Enabled = True
XOA.Enabled = True
DATA = MSComm1.Input
KNOI.Caption = " ÑANG KEÁT NOÁI"
T1 = Asc(Mid$(DATA, 1, 1))
T2 = Asc(Mid$(DATA, 2, 1))
T3 = Asc(Mid$(DATA, 3, 1))
T4 = Asc(Mid$(DATA, 4, 1))
MT.Caption = T4 / 2 'nhiet do moi truong
If Check1.Value = 0 Then
T11 = T1 - 24
Text4.Text = T11 'NHIET DO THUC TE lo 1
End If
If Check2.Value = 0 Then
Text5.Text = T2 / 2 'NHIET DO THUC TE lo 2
T22 = T2 / 2
End If
If Check3.Value = 0 Then
Text6.Text = T3 / 2 'NHIET DO THUC TE lo 3
T33 = T3 / 2
End If
If Check7.Value = 1 Then
Call KIEMTRA1 'KIEM TRA ND DO VA ND DAT
End If
If Check8.Value = 1 Then
Shape3.FillColor = vbYellow
PID Val(TXTKP.Text), Val(TXTKI.Text), Val(TXTKD.Text) 'Tính DUTY
MSComm1.Output = Chr$(DUTY) 'GOI DUTY cho VDK LO 3
End If
Call VEDOTHI1
Call KIEMTRA
End If
End Sub
Function VEDOTHI1()
'***************VE DO THI LO 1***************
If Check1.Value = 0 Then
'I = I + 1
With TChart1.Series(0)
.AddXY ti * 10, Val(Text1.Text), "", vbRed 'NHIET DO DAT LO1
End With
With TChart1.Series(3)
.AddXY ti * 10, (T11), "", vbBlue 'NHIET DO THUC TE
End With
End If
'*************VE DO THI LO 2***********"***********
If Check2.Value = 0 Then
With TChart1.Series(1)
.AddXY ti * 10, Val(Text2.Text), "", vbBlack 'NHIET DO DAT LO 1
End With
With TChart1.Series(4) 'NHIET DO THUC TE LO2
.AddXY ti * 10, Val(T2 / 2), "", vbRed
End With
End If
'**********VE DO THI LO 3**************
If Check3.Value = 0 Then
With TChart1.Series(2)
.AddXY ti * 10, Val(Text3.Text), "", vbGreen 'NHIET DO DAT LO3
End With
With TChart1.Series(5)
.AddXY ti * 10, (T3 / 2), "", vbBlack 'NHIET DO DO LO3
End With
End If
End Function
Function KIEMTRA()
'CAC GIA TRI T LA NHIET DO THUC TE
dat1 = Val(Text1.Text) + 1 'sai so delta cua lo 1 la 1 do
dat2 = Val(Text1.Text) - 1
dat3 = Val(Text2.Text) + 1 'sai so delta cua lo 2 la 1 do
dat4 = Val(Text2.Text) - 1
If T11 < dat2 Then
Shape1.FillColor = vbYellow 'QUAT 1
Shape4.FillColor = vbBlack 'LO 1
Label10.ForeColor = vbRed
Label4.ForeColor = vbRed
Label4.Caption = "ON"
Label10.Caption = "OFF"
' MO LO TAT QUAT 1
MSComm1.Output = "A"
End If
If Check1.Value = 0 Then
If T11 > dat1 Then
Shape1.FillColor = vbBlack
Shape4.FillColor = vbYellow
Label10.ForeColor = vbRed
Label4.ForeColor = vbRed
Label10.Caption = "ON"
Label4.Caption = "OFF" 'DONG LO MO QUAT 1
' TAT LO MO QUAT 1
MSComm1.Output = "B"
End If
End If
If Check2.Value = 0 Then
If T22 < dat4 Then
Shape2.FillColor = vbYellow
Shape5.FillColor = vbBlack 'MO LO 2 DONG QUAT 2
Label6.ForeColor = vbRed
Label12.ForeColor = vbRed
Label6.Caption = "ON"
Label12.Caption = "OFF"
' MO LO TAT QUAT 2
MSComm1.Output = "C"
End If
End If
If Check2.Value = 0 Then
If T22 > dat3 Then
Shape2.FillColor = vbBlack
Shape5.FillColor = vbYellow
Label6.ForeColor = vbRed
Label12.ForeColor = vbRed 'DONG LO MO QUAT 2
Label6.Caption = "OFF"
Label12.Caption = "ON"
MSComm1.Output = "D"
End If
End If
End Function
Function KIEMTRA1()
dat5 = Val(Text3.Text) + 1 'sai so delta cua lo 3 la 1 do
dat6 = Val(Text3.Text) - 1
If T33 < dat6 Then 'MUC DUOI
Shape3.FillColor = vbYellow
Shape6.FillColor = vbBlack
Label8.ForeColor = vbRed
Label14.ForeColor = vbRed
Label8.Caption = "ON"
Label14.Caption = "OFF"
' MO LO TAT QUAT 3
MSComm1.Output = "E"
End If
If T33 > dat5 Then 'MUC TREN
Shape3.FillColor = vbBlack
Shape6.FillColor = vbYellow
Label8.ForeColor = vbRed
Label14.ForeColor = vbRed
Label8.Caption = "OFF"
Label14.Caption = "ON"
' MO QUAT TAT LO 3
MSComm1.Output = "F"
End If
End Function
Private Sub Text1_Change()
ti = 0
VScroll1.Value = Val(Text1.Text)
With TChart1.Series(0) 'XOA MAN HINH TCHART KHI THAY DOI GIA TRI DAT
.Clear
End With
With TChart1.Series(3)
.Clear
End With
End Sub
Private Sub Text2_Change()
ti = 0
VScroll2.Value = Val(Text2.Text)
With TChart1.Series(1) 'XOA MAN HINH TCHART
.Clear
End With
With TChart1.Series(4)
.Clear
End With
End Sub
Private Sub Text3_Change()
ti = 0
VScroll3.Value = Val(Text3.Text)
With TChart1.Series(2) 'XOA MAN HINH TCHART
.Clear
End With
With TChart1.Series(5)
.Clear
End With
End Sub
Private Sub THOAT_Click()
Dim TH As Integer
If MSComm1.PortOpen = True Then
MSComm1.Output = "T" 'Chr$(0) 'TAT TAT CA QUAT VA LO
Timer5.Enabled = False
Timer3.Enabled = False
MSComm1.PortOpen = False
End If
TH = MsgBox("BAN CO MUON THOAT KHOI CHUONG TRINH KHONG ?", vbInformation + vbOKCancel, "THONG BAO!!!!")
If TH = vbOK Then
End
End If
End Sub
Private Sub Timer1_Timer()
If note = True Then
Form1.Caption = Right(DES3, J)
note = IIf(J > Len(DES3), False, True)
TEN.Caption = Right(Des, J)
note = IIf(J > Len(Des), False, True)
TEN1.Caption = Right(DES1, J)
note = IIf(J > Len(Des), False, True)
TIEUDE.Caption = Right(DES2, J)
note = IIf(J > Len(DES2), False, True)
J = J + 1
Else
Form1.Caption = Left(DES3, J)
note = IIf(J > 0, False, True)
TEN.Caption = Left(Des, J)
note = IIf(J > 0, False, True)
TEN1.Caption = Left(DES1, J)
note = IIf(J > 0, False, True)
TIEUDE.Caption = Left(DES2, J)
note = IIf(J > 0, False, True)
J = IIf(J > 0, J - 1, 0)
End If
End Sub
Private Sub Timer2_Timer()
GIO.Caption = Now
End Sub
Private Sub Timer3_Timer()
MSComm1.Output = "M" 'Chr$(7) 'CHO PHEP DOC ADC
End Sub
'THU THAP VAO BANG GHI DATA
Public Sub setFlex()
'Dim T As Single
Set db = OpenDatabase(App.Path & "\daq.mdb")
Set rs = db.OpenRecordset("log", dbOpenDynaset)
fg.TextMatrix(0, 0) = "Sr No"
fg.TextMatrix(0, 1) = "Time And Date"
fg.TextMatrix(0, 2) = "Temp1"
fg.TextMatrix(0, 3) = "Temp2"
fg.TextMatrix(0, 4) = "Temp3"
fg.TextMatrix(0, 5) = "Temp4"
fg.ColWidth(0) = 600
fg.ColWidth(1) = 2000
fg.ColWidth(2) = 1000
fg.ColWidth(3) = 1000
fg.ColWidth(4) = 1000
fg.ColWidth(5) = 1000
For L = 0 To 5
fg.Row = 0
fg.Col = L
fg.CellFontBold = True
fg.ColAlignment(L) = 3
Next L
End Sub
Sub fillGrid()
Do While Not rs.EOF
T = T + 1
fg.TextMatrix(T, 0) = rs.Fields("Sr No")
fg.TextMatrix(T, 1) = rs.Fields("TimeAndDate")
fg.TextMatrix(T, 2) = rs.Fields("Temp1")
fg.TextMatrix(T, 3) = rs.Fields("Temp2")
fg.TextMatrix(T, 4) = rs.Fields("Temp3")
fg.TextMatrix(T, 5) = rs.Fields("Temp4")
TAP.Caption = "Total Records: " + CStr(fg.Rows - 1)
If Not rs.EOF Then rs.MoveNext
If fg.TextMatrix(fg.Rows - 1, 2) "" Then
fg.Rows = fg.Rows + 1
End If
Loop
End Sub
'GHI DULIEU VAO ASCESS
Private Sub Timer4_Timer()
fg.TextMatrix(fg.Rows - 1, 0) = CStr(fg.Rows - 1)
fg.TextMatrix(fg.Rows - 1, 1) = CStr(Now)
fg.TextMatrix(fg.Rows - 1, 2) = Text4.Text
fg.TextMatrix(fg.Rows - 1, 3) = Text5.Text
fg.TextMatrix(fg.Rows - 1, 4) = Text6.Text
fg.TextMatrix(fg.Rows - 1, 5) = MT.Caption
TAP.Caption = "Total Records: " + CStr(fg.Rows - 1)
rs.AddNew
rs.Fields("Sr No").Value = CStr(fg.Rows - 1)
rs.Fields("TimeAndDate").Value = Now
rs.Fields("Temp1").Value = Val(fg.TextMatrix(fg.Rows - 1, 2))
rs.Fields("Temp2").Value = Val(fg.TextMatrix(fg.Rows - 1, 3))
rs.Fields("Temp3").Value = Val(fg.TextMatrix(fg.Rows - 1, 4))
rs.Fields("Temp4").Value = Val(fg.TextMatrix(fg.Rows - 1, 5))
rs.Update
fg.Rows = fg.Rows + 1
End Sub
'XOA TAP TIN
Sub delRec()
db.Execute ("Delete * from log")
fg.Clear
fg.Rows = 2
Call setFlex
TAP.Caption = "Total Records: 0"
End Sub
Private Sub Timer5_Timer()
ti = ti + 1
Timer5.Enabled = False
Timer5.Enabled = True
End Sub
Private Sub VScroll1_Change()
Text1.Text = CStr(VScroll1.Value)
End Sub
Private Sub VScroll2_Change()
Text2.Text = CStr(VScroll2.Value)
End Sub
Private Sub VScroll3_Change()
Text3.Text = CStr(VScroll3.Value)
End Sub
Private Sub XOA_Click()
Dim Msg, Style, Title, Response, MyString
Msg = "CO MUON XOA TAP TIN KHONG ?..??"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "THONG BAO!!!!!!"
Response = MsgBox(Msg, Style, Title)
If Response = vbYes Then
Call delRec
End If
End Sub
'**************THUAT TOAN PID*****************
Sub PID(kp1 As Single, ki1 As Single, kd1 As Single)
Dim TT As Single
TT = 1
nddat = Val(Text3.Text)
e2 = nddat - T33 'Tính sai so e(k) lo 3
A0 = kp1 + ki1 * TT + kd1 / TT
A1 = -kp1 - ((2 * kd1) / TT)
A2 = kd1 / TT
DUTY = Round(DUTY1 + A0 * e2 + A1 * e1 + A2 * e0, 0)
If DUTY >= 255 Then
DUTY = 255
ElseIf DUTY <= 0 Then
DUTY = 0
End If
DUTY1 = DUTY 'NaP DUTY(k) cho DUTY(k-1) PID sau
e0 = e1 'Nap e(k-1) cho e(k-2)
e1 = e2 'Nap e(k) cho e(k-1)
End Sub
‘***********’Code hien thi do thi lo 1 tren form 2’*********’’
Option Explicit
Dim I1, S1 As Double
Dim P0 As Boolean
Dim tg As Double
Private Sub THOAT_Click()
Form2.Hide
End Sub
Private Sub Form_Load()
Form2.Height = 7560
Form2.Width = 10395
Timer2.Enabled = False
tg = 0
End Sub
Private Sub Timer1_Timer()
S1 = Form1.Check1.Value
P0 = Form1.CHAY.Enabled
If S1 = 0 And P0 = False Then
Timer2.Enabled = True
N1 = Form1.Text1.Text
N2 = Form1.Text4.Text
With TChart1.Series(0)
.AddXY tg * 10, Val(N1), "", vbRed 'NHIET DO DAT LO1
End With
With TChart1.Series(1)
.AddXY tg * 10, Val(N2), "", vbBlue 'NHIET DO DO LO1
End With
Else
End If
End Sub
Private Sub Timer2_Timer()
tg = tg + 1
Timer2.Enabled = False
Timer2.Enabled = True
End Sub
‘’******** Code hien thi do thi lo 2 tren form 3’**********’’
Option Explicit
Dim M1, M2 As String
Dim I2, S2 As Double
Dim P1 As Boolean
Dim tg1 As Double
Private Sub Form_Load()
Form3.Height = 7560
Form3.Width = 10395
Timer2.Enabled = False
tg1 = 0
End Sub
Private Sub THOAT_Click()
Form3.Hide
End Sub
Private Sub Timer1_Timer()
S2 = Form1.Check2.Value
P1 = Form1.CHAY.Enabled
If S2 = 0 And P1 = False Then
M1 = Form1.Text2.Text
M2 = Form1.Text5.Text
Timer2.Enabled = True
With TChart1.Series(0)
.AddXY tg1 * 10, Val(M1), "", vbRed 'NHIET DO DAT LO 2
End With
With TChart1.Series(1)
.AddXY tg1 * 10, Val(M2), "", vbBlue 'NHIET DO DO LO 2
End With
Else
End If
End Sub
Private Sub Timer2_Timer()
tg1 = tg1 + 1
Timer2.Enabled = False
Timer2.Enabled = True
End Sub
‘***********’Code hien thi do thi lo 3 tren form 4’*********’’
Option Explicit
Dim K1, K2 As String
Dim I3, S3 As Integer
Dim P2 As Boolean
Dim tg2 As Double
Private Sub Form_Load()
Form4.Height = 7560
Form4.Width = 10395
Timer2.Enabled = False
tg2 = 0
End Sub
Private Sub THOAT_Click()
Form4.Hide
End Sub
Private Sub Timer1_Timer()
S3 = Form1.Check3.Value
P2 = Form1.CHAY.Enabled
If S3 = 0 And P2 = False Then
Timer2.Enabled = True
K1 = Form1.Text3.Text
K2 = Form1.Text6.Text
With TChart1.Series(0)
.AddXY tg2 * 10, Val(K1), "", vbRed 'NHIET DO DAT LO3
End With
With TChart1.Series(1)
.AddXY tg2 * 10, Val(K2), "", vbBlue 'NHIET DO DO LO3
End With
Else
End If
End Sub
Private Sub Timer2_Timer()
tg2 = tg2 + 1
Timer2.Enabled = False
Timer2.Enabled = True
End Sub
2 Code chương trình Asemmbly
$MOD51
;CHUONG TRINH HOA CHINH
;****************************CHU THICH****************
; LO1 DIEU KHIEN ON/OFF
; LO2 DIEU KHIEN ON/OFF
; LO3 DIEU KHIEN ON/OFF VA PID BANG PWM
KHAI BAOCACBIEN*******************************************
QUAT1 BIT P1.0 ; DIEU KHIEN QUAT CHO QUAT
QUAT2 BIT P1.1
QUAT3 BIT P1.2
;**************************&&&&&&&&&&&&&&*****************************
SEL1 BIT P3.7 ;DIEU KHIEN CHO LO DONG MO
SEL2 BIT P1.3
SEL3 BIT P1.4
;*******************&&&&&&&&&&&&&&&&&&********************************
DK1 BIT P1.5 ;CAC BIEN LUON O TRANG THAI 0 (CHE DO ON/OFF)
DK2 BIT P1.6
DK3 BIT P1.7 ;DIEU KHIEN ON/OFF VA PID
;**************^^^^^^^^^^^^^^^^^^^***********************
EOC BIT P3.4 ;DIEU KHIEN ADC
OE BIT P3.5
START BIT P3.6 ;ALE CHUNG
DA0 BIT P3.2 ;CHAN QUET KENH CHON NGO VAO ADC
DA1 BIT P3.3
;*******************CAC BIEN DU LIEU********************
ADC1 EQU 30H
ADC2 EQU 31H
ADC3 EQU 32H
ADC4 EQU 33H
TAM EQU 20H
;*******************^^^^^^^^^^^^^^^^*********************
CHUYEN_ADC BIT 00H ;CHO PHEP CHUYEN DOI ADC
;****************&&&&&&&&&&&&&&&**************************
ORG 0000h
LJMP MAIN
ORG 0023H
LJMP NGATNOITIEP
ORG 0030H
MAIN:
CLR QUAT1 ;TAT 3 QUAT
CLR QUAT2
CLR QUAT3
SETB SEL1 ;TAT 3 LO
SETB SEL2
SETB SEL3
CLR DK1
CLR DK2
CLR DK3
MOV P0,#00H ; DAC LA 5V-TRANG THAI DONG 3 LO-DAC 0
MOV R7,#0
CLR DA0
CLR DA1
CLR START
CLR OE
SETB EOC
MOV P2,#0FFH ;NHAP DATA ADC VAO
MOV TMOD,#20H
MOV TH1,#0FDH
MOV SCON,#50H
SETB TR1
SETB EA
SETB ES ;BIT DK CONG-CHO PHEP NGAT
SETB PS ;UU TIEN NGAT NOI TIEP
;****** ***CHUONG TRINH CHINH***********************
MAIN1:
JB CHUYEN_ADC,MAIN1
SETB CHUYEN_ADC
LCALL LAYMAU ;LAY MAU DU LIEU O 4 KENH
CLR ES
MOV SBUF,ADC1 ;PHAT DU LIEU LEN MAY TINH
JNB TI,$
CLR TI
MOV SBUF,ADC2
JNB TI,$
CLR TI
MOV SBUF,ADC3
JNB TI,$
CLR TI
MOV SBUF,ADC4
JNB TI,$
CLR TI
SETB ES ;CHO PHEP NGAT TRO LAI
LJMP MAIN1
;****** * **CHON KENH VA THU DATA TU ADC***********************
LAYMAU:
CLR DA0 ;NGO VAO IN0-KENH 1
CLR DA1
LCALL BIENDOI
MOV ADC1,TAM
CLR DA1
SETB DA0 ;NGO VAO IN1 -KENH 2
LCALL BIENDOI
MOV ADC2,TAM
CLR DA0 ;NGO VAO IN2-KENH 3
SETB DA1
LCALL BIENDOI
MOV ADC3,TAM
SETB DA0 ;NGO VAO IN3-KENH 4
SETB DA1
LCALL BIENDOI
MOV ADC4,TAM
CLR DA0
CLR DA1
RET
;************************^^^^^^^BIEN DOADC^^^^^^^^^^^^********
BIENDOI:
SETB START
NOP
CLR START ;BAO BAT DAU BIEN DOI
JB EOC,$ ;NEU OEC = 1 THI CHO
JNB EOC,$ ;TIEP TUC CHO DEN KHI EOC = 1
SETB OE
MOV TAM,P2 ;DOC GIA TRI BIEN DOI
CLR OE ;KHONG CHO PHEP XUAT DU LIEU
RET
;****** **CHUONG TRINH NHAN DATA PC^^^^^^^^^^^^^^^^^^^**********
NGATNOITIEP:
CLR RI ;XOA CO NGAT CHUAN BI CHO LAN THU KE
MOV A,SBUF ;DOC DU LIEU TU CONG NOI TIEP VAO A
MOV R7,A
MOV P0,#0FFH ;NGO RA ANALOG LA 5V
;**********DIEU KHIEN LO 1 ON/OFF ************
CJNE A,#'M',KE ;CHO PHEP CHUYEN DOI ADC
CLR CHUYEN_ADC
LJMP EXIT
KE:
CJNE A,#'A',KE1
CLR DK1 ;DIEU KHIEN LO 1-MUC 0
CLR QUAT1
CLR SEL1 ;MO LO 1,TAT QUAT 1 -DK ON/OFF
LJMP EXIT
KE1:
CJNE A,#'B',KE2
CLR DK1 ;MUC 0
SETB QUAT1 ;MO QUAT 1
SETB SEL1 ;TAT LO 1 -DK ON/OFF LO1
SJMP EXIT
;********DIEU KHIEN LO 2 ON/OFF*********
KE2:
CJNE A,#'C',KE3 ;MUC 0
CLR DK2
CLR QUAT2 ;TAT QUAT 2
CLR SEL2 ;MO LO2 -DK ON/OFF
LJMP EXIT
KE3:
CJNE A,#'D',KE4
CLR DK2
SETB QUAT2 ;MO QUAT 2
SETB SEL2 ;TAT LO 2
LJMP EXIT
;**********DIEU KHIEN LO 3***** PP ON /OFF*********
KE4:
CJNE A,#'E',KE5
CLR DK3
CLR QUAT3 ;TAT QUAT 3
CLR SEL3 ;MO LO 3
SJMP EXIT
KE5:
CJNE A,#'F',KE6
CLR DK3
SETB QUAT3 ;MO QUAT 3
SETB SEL3 ;TAT LO 3
SJMP EXIT
;*****GUI MA TAT HOAT DONG CAC THIET BI*********
KE6:
CJNE A,#'T',KE7
CLR QUAT1
CLR QUAT2
CLR QUAT3
SETB SEL1
SETB SEL2
SETB SEL3
CLR DK1
CLR DK2
CLR DK3
MOV P0,#00H
LJMP EXIT
KE7:
PUSH 00H
PUSH ACC
CJNE R7,#00H,CCC
SETB DK3
SJMP KT
CCC: CJNE R7,#255,DDD
CLR DK3
SJMP KT
DDD: MOV A,R7
MOV R0,A
CLR DK3
AAA: LCALL DELAY_XUNG
DJNZ R0,AAA
SETB DK3
MOV A,#255
CLR C
SUBB A,R7
MOV R0,A
BBB: LCALL DELAY_XUNG
DJNZ R0,BBB
KT:
POP ACC
POP 00H
EXIT:
RETI
DELAY_XUNG:
PUSH 00H
MOV R0,#20
DJNZ R0,$
POP 00H
RET
END
Tài Liệu Tham Khảo
Tiếng Việt:
1. Đo lường và điiều khiển bằng máy tính, Ngô Diên Tập-NXB Khoa Học Kỹ Thuật
2.Đo lường và đièu khiển bằng máy tính –Nguyễn Đức Thành- NXB ĐH Quốc Gia TP.Hồ Chí Minh
3.Họ Vi Điều Khiển 8051,Tống Văn On-Hoàng Đức Hải- NXB Lao Động-Xã Hội
4.Lập Trình Ghép Nối Máy Tính Trong Windows, Ngô Diên Tập -NXB Khoa Học Kỹ Thuật.
5.Giáo trình vi xử lý - Phạm Quang Trí
6.Thí nghiệm Vi điều khiển Mcs-51 – Phạm Quang Trí
Tiếng Anh:
1.G.C. Barney, Intelligent instrumentation, Prentice Hall – NJ, 1990.
2.G.Olsson and G.Piani, Computer system for automation and control, Prentice Hall – NJ, 1992.
3. I scolt Mackezie, the 8051 microcontroller, Prentice Hall,1999, 3rd
4.
5.