1. Trang chủ
  2. » Tất cả

Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ

185 752 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 185
Dung lượng 4,96 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nhưng đây không phải chỉ là chỗ nối với máy in mà khi sử dụng máy tính vào việc khác, như truyền dữ liệu từ máy tính tới một thiết bị khác, hay điều khiển thiết bị bằng máy tính thì việc

Trang 1

NỘI DUNG Trang

Chương 2 CƠ SỞ LÝ THUYẾT VỀ MÁY TÍNH VÀ GIAO TIẾP 1

2.1.2 Nguyên lý hoạt động của các thành phần trong máy tính 1

2.2.1 Giao tiếp song song – giao tiếp qua cổng máy in 5

2.3.5 Định dạng và phương thức truyền dữ liệu nối tiếp 10

2.4 Khái quát về giao tiếp nối tiếp trong Matlab 13 2.4.1 Trình tự thực hiện giao tiếp giữa thiết bị với cổng nối tiếp 13 2.4.2 Thiết lập và hiển thị các thuộc tính cấu hình 14

Trang 2

2.8 Ghi thông tin lên đĩa 31

Chương 3 CƠ SỞ LÝ THUYẾT VỀØ LINH KIỆN THIẾT KẾ BỘ GIAO

TIẾP

34

3.1 Giới thiệu khái quát về họ vi điều khiển MSC-51 34

3.3 Hoạt động của bộ định thời và cách ngắt 45

Chương 4 KHẢO SÁT HỆ THỐNG ĐIỀU KHIỂN ĐỘNG CƠ 61

4.1 Cấu trúc hệ thống điều khiển lập trình và thuật toán điều

khiển

61

4.1.1 Sơ đồ cấu trúc và các khối chức năng 61

4.2.2 Cảm biến áp suất tuyệt đối trên đường ống nạp 70

4.4.7 Cảm biến tốc độ động cơ và vị trí piston 74

Trang 3

4.3.3 Cấu trúc ECU 79

4.4.3 Điều khiển chế độ không tải và kiểm soát khí thải 94

4.6.5 Những ứng dụng và hạn chế của máy quét dữ liệu nối tiếp trong

Chương 5 THIẾT KẾ GIAO DIỆN GIAO TIẾP BẰNG MATLAB 103

5.3.3 Thiết lập thuộc tính cho các thành phần 108

Trang 4

5.6 Ứng dụng thiết kế giao diện giao tiếp 123

5.6.3 Thiết kế hộp thoại hiển thị thông báo kết thúc chương trình 133

Chương 6 THIẾT KẾ BỘ GIAO TIẾP 134

6.1.4 Thực nghiệm xác định đặc tuyến làm việc của các cảm biến trên

động cơ

136

Chương 7 THỰC NGHIỆM 146

7.4.2 Nhập dữ liệu điều khiển động cơ từ máy tính 151

Chương 8 KẾT LUẬN VÀ ĐỀ NGHỊ

Phụ lục 1 Chương trình Matlab sử dụng trong giao diện và giao tiếp

Phụ lục 2 Chương trình vi điều khiển của bộ giao tiếp

Phụ lục 3 Bảng thông số dữ liệu động cơ theo thực nghiệm

Trang 5

Chương 1:

DẪN NHẬP

1.1 Đặt vấn đề

Đã hơn 118 năm kể từ khi chiếc ô tô đầu tiên trên thế giới ra đời, đến nay ô tô đã trở thành một phương tiện vận chuyển cần thiết không gì thay thế được trong xã hội loài người So với các phương tiện giao thông khác, ô tô có vị trí vô cùng quan trọng vì tỉ lệ hành khách tham gia giao thông bằng đường bộ cao hơn hẳn so với các loại phương tiện giao thông khác, hằng năm tỷ lệ tăng trưởng trong sản xuất ôtô đạt xấp xỉ 3%

Cùng với xu hướng phát triển của thế giới, khoa học kỹ thuật và công nghệ cũng phát triển không ngừng, nhiều thành tựu nổi bật góp phần thúc đẩy sự phát triển các ngành công nghiệp Nền công nghiệp ô tô cũng không nằm ngoài quy luật đó, từ những năm 80 của thế kỷ XX, công nghệ điện tử đã được ứng dụng trên ô tô dần dần thay thế các cơ cấu điều khiển bằng cơ khí Qua nhiều thập niên, điện tử trở thành một trong những nhân tố quan trọng không thể thiếu được trên ô tô Nó không những giúp động cơ ô tô điều khiển chính xác hơn nhằm giảm ô nhiễm môi trường, tiết kiệm nhiên liệu, tăng công suất động cơ mà còn là thước đo giá trị về tính êm dịu, mức độ tiện nghi của chiếc ô tô hiện đại, từ đó, quyết định khả năng sống còn của chiếc ô tô đó

Song song với việc hiện đại hóa chiếc ô tô ngày càng hoàn hảo hơn thì vấn đề bảo trì, chẩn đoán, sửa chữa cũng ngày càng phức tạp hơn Với những chiếc ô tô hiện đại hiện nay, lượng dữ liệu điều khiển xe ngày càng nhiều Vì vậy, chẩn đoán, sửa chữa theo phương pháp thủ công đã trở nên hết sức khó khăn nếu không muốn nói là không tưởng Do đó, để giúp cho người kỹ thuật viên thực hiện tốt công việc chẩn đoán và sữa chữa, các ô tô đời mới đã trang bị hệ thống tự chẩn đoán Tuy nhiên, hệ thống tự chẩn đoán chỉ phát hiện được lỗi hệ thống khi các tín hiệu nằm ngoài khoảng xác định cho phép Vì thế, khi tín hiệu đó sai lệch với thực tế nhưng vẫn nằm trong khoảng xác định đó thì hệ thống tự chẩn đoán vẫn không phát hiện được Điều này dẫn đến động cơ hoạt động không đạt hiệu quả cao

Mặt khác, với cương vị là người giáo viên kỹ thuật, người nghiên cứu luôn mong muốn đạt hiệu quả cao trong công tác giảng dạy Ngoài kiến thức chuyên môn, lòng say mê công việc cộng với phương pháp sư phạm hiện đại thì thiết bị dạy học cũng góp phần rất lớn trong việc nâng cao hiệu quả giảng dạy, đặc biệt là giảng dạy kỹ thuật Nghiên cứu, thiết kế, chế tạo mô hình dạy học là một minh chứng cụ thể và đề tài này cũng không ngoài mục đích đó Sản phẩm của đề tài là mô hình dạy học minh họa sự thay đổi các thông số động cơ và đặc biệt là ảnh hưởng của các tín hiệu đầu vào đến hoạt động của động cơ như thế nào

Song song với công tác giảng dạy, công tác nghiên cứu của người giáo viên kỹ thuật cũng không kém phần quan trọng Hầu hết các dữ liệu điều khiển động cơ

Trang 6

được xác định từ thực nghiệm Nhưng do tín hiệu đầu vào khá nhiều, thiết bị trong nước còn khiêm tốn nên chúng ta không thể xác định được sự ảnh hưởng của từng tín hiệu đến các chế độ hoạt động của động cơ Điều này ảnh hưởng rất lớn đến công tác nghiên cứu

Với những trăn trở, khúc mắt trong chuyên môn cùng với khát vọng nâng cao trình độ, cải tiến, phát triển kỹ thuật Người nghiên cứu đã tìm được hướng giải

quyết trong đề tài: “Nghiên cứu, thiết kế, chế tạo mạch giao tiếp giữa máy tính và ECU điều khiển động cơ “ do PGS TS Đỗ Văn Dũng hướng dẫn Đề tài này được thực hiện với ba nội dung chính:

ƒ Nghiên cứu lý thuyết về giao tiếp giữa máy tính và động cơ bằng Matlab

ƒ Thiết kế bộ giao tiếp giữa máy tính cá nhân và ECU điều khiển động

ƒ Chế tạo bộ giao tiếp giữa máy tính cá nhân và ECU điều khiển động cơ

1.2 Mục tiêu và nhiệm vụ

Đề tài “Nghiên cứu, thiết kế, chế tạo mạch giao tiếp giữa máy tính và ECU điều khiển động cơ “ nhằm thiết kế và chế tạo mạch giao tiếp hai chiều giữa máy tính và ECU điều khiển động cơ nhằm hiển thị các thông số hoạt động của động

cơ, đồng thời, điều khiển động cơ từ máy tính Việc tính toán mô phỏng và điều khiển động cơ được thực hiện thông qua phần mềm Matlab Trên cơ sở mạch giao tiếp này, ta có thể phát triển thành các thiết bị chẩn đoán và sửa chữa động cơ

Các bước thực hiện đề tài:

ƒ Nghiên cứu cấu trúc vi điều khiển

ƒ Nghiên cứu nguôn ngữ lập trình Assembly

ƒ Nghiên cứu cấu trúc máy tính cá nhân

ƒ Khảo sát các dạng dữ liệu của động cơ

ƒ Nghiên cứu về truyền dữ liệu nối tiếp trong Matlab

ƒ Nghiên cứu thiết kế giao diện giao tiếp bằng Matlab

ƒ Nghiên cứu thiết kế phần cứng bộ giao tiếp

ƒ Lập trình vi điều khiển bằng ngôn ngữ Assembly

ƒ Lập trình điều khiển giao diện giao tiếp bằng Matlab

ƒ Thực nghiệm và kiểm tra độ chính xác của của thí nghiệm thông qua máy chẩn đoán

1.3 Phạm vi nghiên cứu

Do chủng loại động cơ khá đa dạng và thời gian thực hiện đề tài có hạn, người nghiên cứu chỉ tập trung thực hiện trong phạm vi sau:

Nghiên cứu cơ sở lý thuyết về linh kiện thiết kế bộ giao tiếp và ngôn ngữ lập trình Assembly

Trang 7

Khảo sát các dạng tín hiệu trên hệ thống điều khiển động cơ

Nghiên cứu cơ sở lý thuyết về cấu trúc máy tính và phương pháp truyền dữ liệu nối tiếp trong Matlab Thiết kế giao diện và lập trình giao tiếp bằng Matlab

Ứng dụng lý thuyết này, thiết kế, chế tạo bộ giao tiếp giữa máy tính cá nhân và ECU điều khiển động cơ 4E-FE trên xe Toyota corolla với giao diện giao tiếp bằng Matlab Sau đó, tiến hành thực nghiệm để so sánh với thiết bị đã có để đánh giá khả năng ổn định và mức độ chính xác của thiết bị

1.4 Đối tượng nghiên cứu

Đề tài này liên quan đến bốn đối tượng chính:

ƒ Hệ thống điều khiển động cơ bằng điện tử

ƒ Cấu trúc máy tính và phương phương pháp truyền dữ liệu nối tiếp

ƒ Thiết kế giao diện và giao tiếp thông qua việc ứng dụng phần mềm Matlab

ƒ Mạch giao tiếp giữa máy tính và ECU

1.5 Phương pháp nghiên cứu

Để thực hiện đề tài, tác giả đã vận dụng nhiều phương pháp nghiên cứu khác nhau:

Phương pháp tham khảo tài liệu: từ Internet, các sách chuyên ngành ô tô, điện tử, tin học, …

Phương pháp thực nghiệm: Đo các thông số từ động cơ thực tế và tiến hành xử lý số liệu đo

Phương pháp thử và sai: ứng dụng trong thiết kế mạch, lập trình vi điều khiển và lập trình Matlab

1.6 Ứng dụng thực tiễn

Đề tài hoàn thành là cơ sở lý thuyết (đã qua kiểm chứng là sản phẩm đề tài) của việc ứng dụng điều khiển động cơ bằng máy tính cá nhân với chương trình Matlab, là nền tảng cho việc phát triển ứng dụng Matlab trong tính toán, mô phỏng, và điều khiển

Sản phẩm của đề tài là mô hình ứng dụng hữu ích, tăng tính trực quan trong công tác giảng dạy kỹ thuật, đặc biệt là vấn đề điều khiển động cơ Vì vậy sản phẩm có thể ứng dụng rộng rãi cho các trường đại học, cao đẳng, công nhân kỹ thuật, …

Sản phẩm đề tài có thể ứng dụng kiểm tra, chẩn đoán, sửa chữa các xe ô tô hiện đại

Ngoài ra, nếu đề tài được tiếp tục phát triển, thì sản phẩm có thể được ứng dụng làm thiết bị thí nghiệm động cơ và ô tô

1.7 Điểm mới của luận văn

Trang 8

Đề tài là bước đột phá trong việc ứng dụng phần mềm Matlab, một phần mềm rất mạnh về đồ họa, tính toán, mô phỏng toán học các hệ thống, điều khiển, giao tiếp, … để điều khiển giao tiếp giữa động cơ và máy tính mà hiện nay chưa có công trình nào nghiên cứu, hoặc chỉ dừng lại ở từng ứng dụng đơn chiếc Đề tài này thành công đã mở cho tác giả hướng phát triển mới là kết hợp các phần tính toán, điều khiển trong Matlab có thể tiến hành đo đạc, lựa chọn thông số tối ưu của động cơ Hay nói cách khác, đề tài có thể phát triển thành thiết bị thí nghiệm để xác định bảng đồ dữ liệu tối ưu cho động cơ

1.8 Bố cục của luận văn

Với nội dụng đề tài như đã trình bày, luận văn được trình bày theo bố cục sau:

Chương 1. Dẫn nhập

Giới thiệu về đề tài, tầm quan trọng đề tài, giới hạn đề tài

Chương 2 Cơ sở lý thuyết về máy tính và giao tiếp

Trình bày về cấu trúc máy tính và phương thức truyền dữ liệu nối tiếp trong Matlab

Chương 3 Cơ sở lý thuyết về linh kiện thiết kế bộ giao tiếp

Trình bày lý thuyết về cấu trúc vi điều khiển, ngôn ngữ assembly và các linh kiện liên quan

Chương 4 Khảo sát các tín hiệu của hệ thống điều khiển động cơ

Trình bày dạng xung của các tín hiệu trong hệ thống điều khiển động cơ

Chương 5 Thiết kế giao diện giao tiếp bằng matlab

Trình bày lý thuyết thiết kế giao diện bằng matlab và ứng dụng trong thiết kế giao diện giao tiếp của đề tài

Chương 6 Thiết kế bộ giao tiếp

Trình bày phương pháp thiết kế và nội dung thiết kế bộ giao tiếp và sản phẩm thiết kế

Trình bày bảng số liệu thực nghiệm

Trang 9

Chương 2:

CƠ SỞ LÝ THUYẾT VỀ MÁY TÍNH VÀ GIAO TIẾP

2.1 KIẾN TRÚC MÁY TÍNH TỔNG QUÁT

2.1.1 Sơ đồ khối tổng quát máy tính

Một máy tính có ba khối chức năng chính:

I/O

CPU

MEM

Hình 2.1 Sơ đồ khối chức năng

ƒ CPU (Central Processing Unit): Xử lý các thông tin và điều khiển toàn

bộ hoạt động của một máy tính Có chức năng đọc lệnh, phân tích lệnh, thực hiện lệnh

ƒ MEM (Memory) khối bộ nhớ: Lưu trữ thông tin, chứa chương trình, được

đọc dữ liệu

ƒ I/O (Input/ Output) khối ngoại vi: Trao đổi thông tin giữa máy tính và

môi trường bên ngoài

Để máy tính hoạt động thì ba khối chức năng này phải liên kết chặt chẽ với nhau

2.1.2 Nguyên lý hoạt động của các thành phần trong máy tính

Control Unit (CU)

Arithmetic Logic Unit (ALU)

Khối bộ nhớ (Memory- MEM)

Hình 2.2 Sơ đồ tổng quát hoạt động của máy tính

ƒ Thanh ghi (Register): là thiết bị có khả năng lưu trữ thông tin trong kỹ

thuật số

Các loại thanh ghi nằm trong bộ xử lý trung tâm phục vụ cho hoạt động xử lý thông tin Bao gồm các thanh ghi sau:

Trang 10

- Thanh ghi lệnh: Chứa các câu lệnh đọc vào

- Thanh ghi dữ liệu: Chứa dữ liệu đọc và ghi

- Thanh ghi điều khiển: Chứa các tín hiệu điều khiển

- Thanh ghi trạng thái (Flag Register): Chứa các cờ như cờ Zero, cờ nhớ …

ƒ Bộ nhớ

- Bộ nhớ được xây dựng từ các ô nhớ được ghép lại liên tục nhau để tạo thành vùng nhớ

- Kích thước mỗi ô nhớ là một byte

- Mỗi ô nhớ được gán cho một địa chỉ có thứ tự để phân biệt chúng với nhau Mỗi ô nhớ có 2 thông tin khác nhau là: Địa chỉ (@) ô nhớ và nội dung ô nhớ

- Ô nhớ có 2 hoạt động khác nhau là đọc dữ liệu và ghi dữ liệu Dữ liệu trong bộ nhớ được lưu trữ ở dạng số nhị phân

- Các loại bộ nhớ:

+ Bộ nhớ chỉ đọc ROM (Read Only Memory)

+ Bộ nhớ ghi đọc RAM (Random Access Memory)

Sơ đồ khối bộ nhớ như sau:

Thanh ghi dữ liệuThanh ghi địa chỉ

Khối giải mã

Hình 2.3 Sơ đồ cấu trúc bộ nhớ

Quá trình đọc dữ liệu diễn ra theo trình tự sau:

- Gởi địa chỉ (@) của ô nhớ cần đọc đến thanh ghi địa chỉ

- Khối giải mã có nhiệm vụ phân tích địa chỉ trong thanh địa chỉ để tìm ra

ô nhớ tương ứng với địa chỉ truyền vào

- Gởi tín hiệu điều khiển yêu cầu đọc đến bộ nhớ

- Gởi nội dung ô nhớ đã xác định địa chỉ đến thanh ghi dữ liệu

- Lấy dữ liệu trong thanh ghi dữ liệu

Trang 11

Quá trình ghi dữ liệu diễn ra theo trình tự sau:

- Gởi địa chỉ đến thanh ghi địa chỉ

- Gởi dữ liệu cần ghi đến thanh ghi dữ liệu

- Gởi tín hiệu cần ghi đến bộ nhớ

- Chuyển nội dung của thanh ghi dữ liệu vào ô nhớ đã xác định địa chỉ ROM: Chứa những chương trình khởi động hệ thống, chương trình chứa trong ROM được định sẵn tại thời điểm chế tạo vì thông tin trong ROM không thay đổi được Đối với ROM thì thông tin đã ghi vào ROM vẫn tồn tại ngay cả khi không có nguồn điện CPU có thể đọc trực tiếp dễ dàng các thông tin chứa trong ROM

ƒ Bộ xử lý trung tâm

Nhiệm vụ của bộ xử lý trung tâm như sau:

- Đọc lệnh, thực hiện lệnh

- Các thuật toán số học và luận lý

- Kiểm tra trạng thái hoạt động của các khối chức năng trong máy tính cũng như gởi các tín hiệu điều khiển trong các khối chức năng này gồm các khối chức năng nhỏ sau:

+ Đơn vị điều khiển (Control Unit)

+ Đơn vị số học luận lý (ALU: Arithmetic Logic Unit)

Đơn vị điều khiển (CU)

@

PC

Thanh ghi lệnh

Điều khiểnMạch tuần tựï

Hình 2.4 Cấu trúc của CPU

- PC (Program Counter: Bộ đếm chương trình): Là thanh ghi chứa địa chỉ

câu lệnh cần đọc Giá trị đầu tiên tuỳ thuộc vào CPU cung cấp để quyết định xem

vị trí chương trình được đặt ở vị trí nào trong bộ nhớ Nội dung của bộ đếm sẽ tăng lên sau mỗi câu lệnh được đọc để chuyển qua câu lệnh kế tiếp

- Thanh ghi lệnh (Instruction Register): Chứa nội dung câu lệnh được đọc

- Mạch tuần tự (Sequencer): Có chức năng sau:

+ Phân tích câu lệnh và gởi các tín hiệu điều khiển để thực hiện câu lệnh

+ Phát tín hiệu đọc lệnh và tín hiệu điều khiển khác

Trang 12

Đơn vị số học luận lý ALU: thực hiện phép toán số học và luận lý

Để xác định phép toán cần có đủ các thông tin như: toán hạng, phép toán, kết quả, vì vậy sinh ra dạng thức lệnh 3@ như sau

Mã lệnh Nội dung, Địa chỉ toán hạng Địa chỉ kết quả

OP3 OP2

OP1Opcode

ƒ Khối ngoại vi (I/O)

Trong giai đoạn đầu tiên của máy tính, các thiết bị ngoại vi nối trực tiếp với CPU và bộ nhớ (MEM) CPU nhận trực tiếp tín hiệu của các thiết bị ngoại vi cho nên cấu trúc máy tính rất đơn giản nhưng làm giảm hiệu suất sử dụng CPU vì CPU phải tốn nhiều thời gian phục vụ cho các thiết bị ngoại vi Để giảm thời gian CPU phục vụ cho thiết bị ngoại vi, các khối giao tiếp đã ra đời Các khối này trực tiếp quản lý và điều hành tất các các hoạt động liên quan đến thiết bị ngoại vi Khối giao tiếp nhận chỉ thị từ CPU để biết thực hiện nhiệm vụ gì

Khối giao tiếp Khối giao tiếp

Hình 2.5 Sơ đồ hoạt động khối ngoại vi

ƒ Khối giao tiếp (Interface)

-1+1

Hình 2.6 Sơ đồ hoạt động khối giao tiếp

Khối giao tiếp bao gồm:

- Thanh ghi địa chỉ đầu: Chứa địa chỉ dữ liệu đầu tiên của khối

Trang 13

- Thanh ghi Counter: Chứa số byte dữ liệu khối

- Cờ hướng (Direction flag): Có 2 hướng là hướng tăng và hướng giảm trong việc truyền khối dữ liệu

Bộ giao tiếp dựa vào 3 thanh ghi trên để truy xuất dữ liệu

Nội dung của 3 thanh ghi được CPU gởi đến khối giao tiếp, công việc này được coi như chỉ thị được gởi đi từ khối vi xử lý trung tâm đến khối giao tiếp Công việc gửi thông tin được gọi là lập trình khối giao tiếp

Mỗi lần truy xuất 1 byte dữ liệu thì nội dung thanh ghi counter giảm xuống

1 Khi nội dung thanh ghi này bằng 0 thì quá trình truy xuất dữ liệu kết thúc

Sau mỗi lần truy xuất dữ liệu, thanh ghi địa chỉ đầu sẽ tăng 1 hoặc giảm 1 tùy thuộc vào cờ hướng tăng hay giảm

2.2 CHUẨN GIAO TIẾP MÁY TÍNH

2.2.1 Giao tiếp song song - giao tiếp qua cổng máy in

Việc nối máy in với máy tính được thực hiện qua ổ cắm 15 chân phía sau máy tính Nhưng đây không phải chỉ là chỗ nối với máy in mà khi sử dụng máy tính vào việc khác, như truyền dữ liệu từ máy tính tới một thiết bị khác, hay điều khiển thiết bị bằng máy tính thì việc ghép nối cũng được ghép nối qua cổng máy in

Qua cổng này dữ liệu được truyền đi song song, nên đôi khi còn được gọi là cổng ghép nối song song và tốc độ truyền cũng đạt đến mức đáng kể Tất cả các đường dẫn của cổng máy in đều tương thích với TTL Nghĩa là chúng đều cung cấp mức điện áp nằm giữa 0V đến 5V Do đó, ta cần lưu ý là các đường dẫn vào cổng này không được đặt mức điện áp quá lớn

Khoảng cách cực đại giữa cổâng song song của máy tính PC và thiết bị ngoại

vi bị hạn chế vì điện dung ký sinh và hiện tượng cảm ứng giữa các đường dẫn có thể làm biến dạng tín hiệu Khoảng cách giới hạn là 8m, thông thường chỉ cỡ 1,5m – 2m Mặc khác, dữ liệu trao đổi qua cổng song song chỉ theo một chiều Đây là hạn chế đáng kể khi sử dụng cổng song song vào mục đích đo lường Để khắc phục hạn chế trên ta phải lắp thêm card giao diện song song hai hướng

2.2.2 Giao tiếp qua slot card (có địa chỉ từ 300 31fh)

Trong máy tính người ta chế tạo sẵn các slot cho phép người sử dụng tính năng của máy vi tính bằng cách gắn thêm các thiết bị vào nó

Mỗi slot đều có các đường dữ liệu (data), địa chỉ (address), các đường +5V, – 5V, + 12V, -12V và các đường điều khiển như CLK, IRQ, RESET, /IOW, IOR,…

Vì vậy, nếu thiết kế mạch giao tiếp qua slot sẽ giảm được rất nhiều linh kiện, giảm được bộ nguồn bên ngoài, dễ điều khiển, giá thành thấp và đồng thời tốc độ truyền dữ liệu cũng khá nhanh

Tuy nhiên, bên cạnh những ưu điểm nó cũng có những nhược điểm như: do slot card giao tiếp được gắn bên trong máy nên cách giao tiếp này khó nhận được

Trang 14

dữ liệu từ bên ngoài Nó bị hạn chế về khoảng cách làm việc đồng thời mỗi lần sử dụng phải mở ráp máy gây bất tiện cho người sử dụng

2.2.3 Giao tiếp nối tiếp qua cổng RS-232

Cổng nối tiếp RS-232 là một loại giao diện phổ biến rộng rãi nhất, ta còn gọi là cổng COM1, COM2 để tự do cho các ứng dụng khác nhau

Giống như cổng máy in, cổng nối tiếp RS-232 cũng được sử dụng rất thuận tiện trong việc ghép nối máy tính với các thiết bị ngoại vi Việc truyền dữ liệu qua cổng RS-232 được tiến hành theo cách nối tiếp, nghĩa là các bít dữ liệu được gởi đi nối tiếp nhau trên một đường dẫn

Trước hết, loại truyền này có khả năng dùng cho những khoảng cách lớn hơn, bởi khả năng gây nhiễu nhỏ hơn nhiều so với cổng song song Việc dùng cổng song song có một nhược điểm đáng kể là cáp truyền nhiều sợi nên đắt tiền, hơn nữa mức tín hiệu nằm trong khoảng 0 5V không thích ứng với khoảng cách lớn

2.3 TỔNG QUAN VỀ CỔNG NỐI TIẾP

2.3.1 Khái niệm về giao tiếp nối tiếp

Giao tiếp nối tiếp là giao thức thông dụng nhất cho việc giao tiếp giữa hai hay nhiều thiết bị Thông thường, một thiết bị là một máy tính, trong khi thiết bị khác có thể là một bộ kết nối, một máy in, một máy vi tính khác hoặc là một máy hiển thị sóng,…

Cổng nối tiếp truyền và nhận những byte thông tin dưới dạng nối tiếp nhau – trong một thời điểm chỉ nhận một bít dữ liệu Những byte này được truyền đi dưới dạng nhị phân (dạng số) hoặc dạng văn bản (text)

2.3.2 Tiêu chuẩn giao tiếp cổng nối tiếp

Hiệp hội công nghiệp viễn thông (Telecommunications Industry Assosiation

- TIA) đưa ra tiêu chuẩn giao tiếp nối tiếp dùng cho việc kết nối hai thiết bị, được chỉ rõ bằng tiêu chuẩn TIA/EIA-232

Tiêu chuẩn giao tiếp cổng nối tiếp đầu tiên là RS–232 (Recommended Standard number 232) Thuật ngữ “RS–232” vẫn được sử dụng phổ biến và có các đặc tính sau:

- Tốc độ truyền bít và độ dài cáp lớn nhất

- Tên gọi, những đặc tính về điện và các hàm tín hiệu

- Các đầu nối và chức năng của các chân

Sự giao tiếp chủ yếu được thực hiện với 3 chân: Chân truyền dữ liệu, chân nhận dữ liệu và chân mát Các chân khác dùng để điều khiển dòng dữ liệu, nhưng không bắt buộc

Những dạng chuẩn khác như là RS–485 cũng tương tự như RS-232 nhưng được thêm vào một số chức năng như: Tốc độ truyền bít cao hơn, chiều dài của cáp dài hơn và số thiết bị có thể kết nối nhiều hơn (256 thiết bị)

Trang 15

2.3.3 Phương pháp kết nối thiết bị

2.3.3.1 Chức năng các chân

Các cổng nối tiếp gồm hai loại tín hiệu, tín hiệu dữ liệu và tín hiệu điều khiển, để hỗ trợ những loại tín hiệu này cũng như tín hiệu mass, chuẩn RS-232 có

25 chân để kết nối Tuy nhiên, hầu hết các máy tính cá nhân chỉ sử dụng đầu nối 9 chân để kết nối Thực tế, chỉ có 3 chân được sử dụng cho việc giao tiếp cổng nối tiếp: Một chân nhận dữ liệu, một chân truyền dữõ liệu và một chân nối mát Sơ đồ chân của bộ kết nối 9 chân và 25 chân của một DTE được thể hiện ở hình 2.7

Hình 2.7 Sơ đồ chân cổng COM 9 chân và 25 chân

Chức năng của từng chân trong đầu nối 9 chân và 25 chân từ cổng nối tiếp được mô tả bảng 2-1

Bảng 2-1 Chức năng các chân trong cổng nối tiếp

Chân Chân

(25 chân) (9 chân) Ký hiệu Chức năng Loại tín hiệu

8 1 CD Phát tín hiệu mang dữ liệu Điều khiển

20 4 DTR Báo dữ liệu đầu cuối sẵn sàng Điều khiển

2.3.3.2 Phương pháp kết nối

Chuẩn RS–232 xác định hai thiết bị được kết nối với một cáp nối tiếp như là thiết bị dữ liệu đầu cuối (Data Terminal Equipment - DTE) và Thiết bị dữ liệu mạch đầu cuối (Data Circuit-terminating Equipment - DCE) Thuật ngữ này phản

ánh chuẩn RS-232 như là một chuẩn giao tiếp giữa một máy tính và một modem

Trang 16

Do RS-232 chủ yếu sử dụng cho việc kết nối giữa một DTE tới một DCE, những chân trong các giắc nối được nối thẳng với nhau Chẳng hạn như: chân 1 của DTE được nối với chân 1 của DCE và chân 2 đuợc nối với chân 2, … Hình 2.8 giới thiệu sơ đồ kết nối nối tiếp giữa DTE và DCE sử dụng chân truyền dữ liệu (TD) và chân nhận dữ liệu (RD)

Hình 2.8 Sơ đồ kết nối giữa DTE và DCE

Nếu muốn kết nối hai DTE hoặc hai DCE với nhau, sử dụng một cáp nối tiếp thẳng thì chân TD, RD trên thiết bị này lần lượt được kết nối với chân TD, RD trên thiết bị kia, vì vậy việc giao tiếp sẽ không thực hiện được Do đó, để kết nối hai thiết bị giống nhau chúng ta phải sử dụng một bộ cáp nối tiếp hai máy tính (không cần modem) như hình 2.9

Hình 2.9 Sơ đồ kết nối giữa hai DTE (hay hai DCE) với nhau

Chú ý: Có thể kết nối nhiều thiết bị RS-422 hoặc RS-485 tới một cổng nối tiếp Nếu có một bộ chuyển đổi RS-232/RS-485 thì có thể dùng cổng nối tiếp

Matlab cho những thiết bị này

2.3.4 Trạng thái tín hiệu

Trong truyền nối tiếp, các tín hiệu có hai trạng thái: Trạng thái tích cực và trạng thái không tích cực Trạng thái tích cực tương ứng với giá trị nhị phân là 1 hay được mô tả mức logic 1, ON, TRUE hoặc một dấu (x) Trạng thái không tích cực tương ứng với giá trị nhị phân là 0 hay được mô tả như là logic 0, OFF, FALSE, ø một ký tự rỗng ( ) hoặc là một điểm

Đối với tín hiệu dữ liệu, trạng thái tín hiệu là “ON” khi điện áp tín hiệu nhận được nhỏ hơn –3V, trạng thái tín hiệu là “OFF” khi điện áp tín hiệu nhận được lớn hơn +3V Đối với tín hiệu điều khiển, trạng thái tín hiệu là “ON” khi điện áp tín hiệu nhận được lớn hơn +3V, trạng thái tín hiệu là “OFF” khi điện áp tín hiệu nhận được nhỏ hơn -3V Điện áp giữa –3V và +3V được gọi là vùng chuyển tiếp, ở vùng này trạng thái tín hiệu không được xác định

Trang 17

Để đưa tín hiệu này đạt trang thái “ON” thiết bị điều khiển hạ thấp giá trị dành cho chân dữ liệu và nâng cao giá trị dành cho chân điều khiển Ngược lại, để đưa tín hiệu tới trạng thái “OFF”, thiết bị điều khiển nâng cao giá trị cho chân dữ liệu và hạ thấp giá trị cho chân điều khiển Hình 2.10 biểu diễn trạng thái “ON” và “OFF” cho một tín hiệu dữ liệu và một tín hiệu điều khiển

Hình 2.10 Trạng thái tín hiệu của các chân trong cổng nối tiếp

Chân TD mang dữ liệu từ DTE truyền tới một DCE Ngược lại, chân RD nhận dữ liệu từ một DCE do một DTE truyền

2.3.4.2 Chân điều khiển

Các chân điều khiển của cổng nối tiếp 9 chân bao gồm RTS và CTS, DTR và DSR, CD và RI chúng được dùng để:

- Xác định tình trạng của tín hiệu

- Điều khiển dòng dữ liệu

ƒ Chân RTS và CTS: Cặp chân RTS và CTS được dùng để báo hiệu thiết

bị đã sẵn sàng gởi hay nhận dữ liệu Kiểu điều khiển dòng dữ liệu này được dùng để ngăn cản sự mất mát dữ liệu trong suốt thời gian truyền và được gọi là thiết lập quan hệ bắt tay phần cứng (hardware handshaking) Sau khi thực hiện kết nối giữa DTE và DCE chúng được hoạt động theo trình tự sau:

- DTE xác nhận chân RTS để báo cho DCE biết nó đã sẵn sàng để nhận dữ liệu

Trang 18

- DCE xác nhận chân CTS báo hiệu đã xóa sạch để gởi dữ liệu từ chân

TD, nếu dữ liệu có chiều dài không vượt quá giới hạn cho phép thì chân CTS không được xác nhận

- Dữ liệu được truyền từ chân TD tới DTE, nếu dữ liệu có chiều dài không vượt quá giới hạn cho phép thì DTE không xác nhận tín hiệu từ chân CTS Vì vậy quá trình truyền dữ liệu không được tiếp tục

ƒ Chân DTR và DSR: Nhiều thiết bị sử dụng chân DSR và DTR để báo

tình trạng kết nối và nguồn cung cấp Tín hiệu của những thiết bị được kết nối dùng DTR và DSR hoạt động theo hai bước:

- DTE xác nhận chân DTR để yêu cầu sự kết nối DCE với đường truyền

- DCE xác nhận chân DSR để báo hiệu tình trạng đã kết nối, DCE không xác nhận chân DSR khi không được kết nối với đường truyền

Đầu tiên chân DTR và DSR được thiết kế nhằm thay thế phương pháp kết nối bắt tay phần cứng, tuy nhiên, theo phương thức này chỉ sử dụng chân RTS và CTS mà không dùng chân DSR và DTR

ƒ Chân CD và RI: Được sử dụng để báo hiệu trạng thái tín hiệu sẵn sàng

trong suốt quá trình kết nối giữa hai bộ kết nối

Chân CD dùng để báo hiệu tình trạng kết nối giữa hai modem hoặc tín hiệu

sóng dạng số Chân CD được xác nhận khi DCE nhận tín hiệu với tần số thích hợp, ngược lại, không xác nhận nếu như DCE không nhận được tín hiệu thích hợp

Chân RI được dùng để báo hiệu sự hiện diện của một tín hiệu chuông RI được xác nhận khi DCE nhận một tín hiệu chuông, ngược lại, không được xác nhận khi DCE không nhận tín hiệu chuông

2.3.5 Định dạng và phương thức truyền dữ liệu nối tiếp

2.3.5.1 Định dạng dữ liệu

Dạng dữ liệu nối tiếp gồm một bít khởi đầu, ở giữa là 5 đến 8 bít dữ liệu và cuối cùng là 1 hoặc 2 bít dừng, cũng có thể có thêm một bít chẵn lẻ nằm trước bít dừng Dạng dữ liệu nối tiếp truyền được minh hoạ trong sơ đồ hình 2.11

Hình 2.11 Giao thức truyền nối tiếp

Định dạng dữ liệu nối tiếp thường được biểu diễn ký hiệu như sau: số bít dữ liệu – bít chẵn lẻ – số bít dừng Chẳng hạn, ký hiệu 8–N-1 có nghĩa là 8 bít dữ liệu, không có bít chẵn lẻ, một bít dừng Trong khi 7-E-2 có nghĩa là 7 bít dữ liệu – có bít chẵn lẻ và 2 bít dừng

Trang 19

Những bít dữ liệu thường được biểu diễn như một ký tự bởi những bít này thường đại diện cho một ký tự mã ASCII Những bít còn lại được gọi là những bít khung bởi chúng chỉ có chức năng đóng khung bít dữ liệu

Chú ý: Khi truyền dữ liệu, thiết bị nhận và thiết bị truyền phải có cùng định dạng dữ liệu

2.3.5.2 Phương thức truyền dữ liệu

Tiêu chuẩn RS-232 cung cấp 2 loại định chuẩn truyền thông: Đồng bộ và bất đồng bộ

Với định chuẩn đồng bộ, tất cả những bít truyền được đồng bộ hóa với một

xung clock Đầu tiên, hai thiết bị phải được đồng bộ hóa với nhau và sau đó tiếp

tục gửi những ký tự đồng bộ hóa Ngay cả khi không truyền dữ liệu, dòng bít không đổi được truyền đi để các thiết bị xác định được trạng thái làm việc của nhau trong bất kỳ thời điểm nào Mỗi bít được gửi hoặc là dữ liệu thực hoặc là một ký tự rỗng (vô ích) Phương pháp truyền đồng bộ cho phép tốc độ truyền dữ liệu nhanh hơn phương pháp bất đồng bộ do không thêm vào các bít khung để xác định điểm bắt đầu và kết thúc của mỗi byte dữ liệu

Với giao thức bất đồng bộ, mỗi thiết bị sử dụng xung clock riêng của nó trong các bytes dữ liệu, dữ liệu được truyền ở bất kỳ thời điểm nào Do đó, thay vì trong truyền đồng bộ người ta sử dụng thời gian để đồng bộ hóa các bít dữ liệu, trong truyền bất đồng bộ người ta sử dụng phương pháp định dạng dữ liệu Điển hình, dữ liệu truyền được đồng bộ hóa bằng cách sử dụng bít khởi đầu và một hoặc nhiều bít kết thúc để báo hiệu kết thúc một byte dữ liệu

Với việc thêm vào các bít khung này là nguyên nhân làm cho phương pháp truyền bất đồng bộ chậm hơn truyền đồng bộ Tuy nhiên, nó có lợi thế lớn là bộ xử lý không phải xử lý các ký tự rỗng được thêm vào như trong truyền đồng bộ Hiện nay, hầu hết những cổng nối tiếp sử dụng phương pháp truyền dữ liệu bất đồng bộ

2.3.6 Nguyên lý truyền dữ liệu

Dữ liệu nối tiếp được truyền từng bít một và theo thứ tự truyền như sau:

1 Bít khởi đầu được truyền với giá trị 0

2 Truyền các bít dữ liệu

3 Bít dữ liệu đầu tiên thì tương ứng với bít có trọng số nhỏ nhất (LSB), trong khi bít dữ liệu cuối cùng tương ứng với bít có trọng số lớn nhất (MSB)

4 Bít chẵn lẻ (nếu có) được truyền tiếp theo

5 Một hoặc hai bít dừng được truyền, mỗi lần truyền với giá trị là 1 Số bít truyền trong một giây được gọi là tốc độ baud Những bít được truyền bao gồm bít khởi đầu, các bít dữ liệu, bít chẵn lẻ (nếu có) và những bít dừng

ƒ Bít khởi đầu và những bít dừng

Trong giao tiếp đồng bộ và bất đồng bộ, hầu hết những cổng nối tiếp truyền theo phương pháp bất đồng bộ Điều này có nghĩa là các byte dữ liệu truyền phải

Trang 20

được xác định bằng bít khởi đầu và bít kết thúc Bít khởi đầu báo hiệu byte dữ liệu bắt đầu truyền và những bít kết thúc báo hiệu byte dữ liệu đã truyền thành công Quá trình nhận dạng byte theo định dạng dữ liệu nối tiếp được tiến hành theo các bước sau:

1 Khi một chân cổng nối tiếp rỗng (dữ liệu không được truyền) thì nó

ở trạng thái “ON”

2 Khi dữ liệu được truyền, chân cổng nối tiếp chuyển sang trạng thái

“OFF” nhờ có bít khởi đầu

3 Chân cổng nối tiếp chuyển trở lại trạng thái “ON” nhờ có bít dừng, báo hiệu kết thúc quá trình truyền một byte dữ liệu

ƒ Các bít dữ liệu

Bít dữ liệu truyền qua cổng nối tiếp có thể là những dòng lệnh, tín hiệu cảm

biến, các câu thông báo lỗi, v v Dữ liệu truyền có thể ở dạng nhị phân hoặc mã ASCII

Hầu hết, truyền dữ liệu nối tiếp sử dụng từ 5 đến 8 bít dữ liệu Dữ liệu dạng nhị phân đặc trưng là truyền 8 bít Dữ liệu dạng văn bản truyền là 7 bít hoặc 8 bít Nếu dữ liệu dựa vào bộ kí tự ASCII với 27 hay 128 ký tự khác nhau thì số bít tối thiểu phải đạt được là 7 bít, bít thứ 8 nếu có phải có giá trị là 0 Nếu như dữ liệu dựa vào bộ kí tự ASCII mở rộng với 28 hay 256 ký tự khác nhau thì số bít truyền tối thiểu là 8 bít

ƒ Bít chẵn lẻ

Bít chẵn lẻ dùng để kiểm tra những lỗi đơn giản trong quá trình truyền dữ liệu Các loại kiểm tra chẵn lẻ mô tả trong bảng 2-2

Bảng 2-2 Chức năng các loại bít chẵn lẻ

Even Các bít dữ liệu cộng với bít chẵn lẻ tạo thành số chẵn Mark Bít chẵn lẻ luôn có giá trị bằng 1

Odd Các bít dữ liệu cộng với bít chẵn lẻ tạo thành số lẻ

Space Bít chẵn lẻ luôn có giá trị bằng 0

Quy trình kiểm tra bằng bít chẵn lẻ được thực hiện như sau:

- Thiết bị truyền đặt bít chẵn lẻ là 0 hoặc 1 tùy thuộc vào giá trị bít dữ liệu và loại bít kiểm tra chẵn lẻ đã chọn

- Thiết bị nhận, kiểm tra nếu như bít chẵn lẻ phù hợp với dữ liệu được truyền thì những bít dữ liệu được chấp nhận, ngược lại sẽ báo lỗi

Chú ý: Việc kiểm tra bít chẵn lẻ có thể phát hiện khi chỉ cần một bít bị lỗi Nhưng dữ liệu truyền vẫn có thể được chấp nhận nếu lỗi xảy ra ở nhiều bít Ví dụ: giả sử, để truyền bít dữ liệu gồm 01110001 tới máy tính Nếu ta chọn bít chẵn lẻ là

Trang 21

even, thiết bị truyền tạo ra một số chẵn của 1 và bít chẵn lẻ có giá trị là 0 Nếu ta

chọn bít chẵn lẻ là odd, thiết bị truyền tạo ra một số lẻ của 1 và bít chẵn lẻ có giá

trị là 1

Do khả năng phát hiện lỗi bằng việc kiểm tra Mark và Space là rất nhỏ nên

ít khi sử dụng bít chẵn lẻ

2.4 KHÁI QUÁT VỀ GIAO TIẾP NỐI TIẾP TRONG MATLAB

Giao tiếp nối tiếp trong MATLAB cung cấp phương pháp truy xuất đến thiết

bị ngoại vi như là bộ kết nối, máy in, … Được thực hiện qua cổng nối tiếp của máy

vi tính Việc giao tiếp này được thiết lập thông qua cổng nối tiếp, cổng nối tiếp này cung cấp những chức năng và thuộc tính cho phép ta có thể:

- Thiết lập cấu hình giao tiếp nối tiếp

- Sử dụng những chân điều khiển cổng nối tiếp

- Viết và đọc dữ liệu

- Sử dụng những sự kiện (events) và những hàm callbacks

- Lưu thông tin lên đĩa

Giao tiếp nối tiếp trong Matlab được hỗ trợ trên những hệ điều hành Microsoft Windows, Linux, và Sun Solaris

2.4.1 Trình tự thực hiện giao tiếp giữa thiết bị với cổng nối tiếp

1 Tạo một cổng nối tiếp – Có thể tạo cổng nối tiếp bằng cách sử dụng các hàm tạo cổng nối tiếp serial

Ta cũng có thể hiệu chỉnh các thuộc tính trong suốt quá trình tạo đối tượng Đặc biệt, có thể hiệu chỉnh các thuộc tính của cổng nối tiếp như tốc độ baud, số bít dữ liệu, …

2 Kết nối thiết bị – Để kết nối cổng nối tiếp đến thiết bị, sử dụng hàm

fopen Sau khi đối tượng được kết nối, có thể thay đổi giá trị mặc định của thiết bị bằng cách hiệu chỉnh những giá trị thuộc tính riêng như đọc dữ liệu, viết dữ liệu

3 Hiệu chỉnh thuộc tính – Để thiết lập hoạt động của cổng nối tiếp như mong muốn, cần hiệu chỉnh các giá trị thuộc tính với hàm set hay dấu chấm Ngoài

ra, có thể hiệu chỉnh nhiều thuộc tính tại cùng một thời điểm trong suốt quá trình tạo cổng nối tiếp hoặc sau khi tạo cổng nối tiếp

4 Viết và đọc dữ liệu – Có thể viết dữ liệu tới thiết bị với hàm fprintf hoặc

fwrite và đọc dữ liệu từ thiết bị sử dụng hàm fgetl, fread, fscanf hoặc là readasync

Cổng nối tiếp xử lý theo giá trị được thiết lập trước đó hoặc là giá trị mặc định

5 Dừng kết nối và ngắt thiết bị – Khi không sử dụng cổng nối tiếp, ta nên ngưng kết nối với thiết bị, sử dụng hàm fclose; xóa khỏi bộ nhớ, sử dụng hàm delete và xóa khỏi vùng làm việc Matlab (workspace) sử dụng lệnh clear

Trang 22

2.4.2 Thiết lập và hiển thị các thuộc tính cấu hình

Từ những giá trị thuộc tính riêng, có thể thiết lập những đáp ứng của cổng

nối tiếp theo mong muốn Đồng thời, có thể hiển thị những giá trị này bằng hàm set,

get hay dấu chấm (.).

2.4.2.1 Hiển thị tên và giá trị thuộc tính

Khi cổng nối tiếp được tạo ra, sử dụng hàm set để hiển thị tất cả những thuộc

tính cấu hình Ngoài ra, nếu một thuộc tính có tập hợp hữu hạn những giá trị chuỗi thì tập hợp này cũng được hiển thị:

s = serial('COM1');

set(s)

Để hiển thị một giá trị hiện hành cho một thuộc tính, chúng ta khai báo tên

thuộc tính đó trong lệnh get

ans = 'none' 'idle'

Có thể dùng dấu chấm để hiển thị giá trị thuộc tính riêng

Để hiệu chỉnh những giá trị cho nhiều thuộc tính, chúng ta có thể khai báo

nhiều cặp tên/ giá trị thuộc tính trong lệnh set

set(s,'DataBíts',7,'Name','Test1-serial')

Thực tế, ta có thể hiệu chỉnh một hoặc nhiều thuộc tính ở bất kỳ thời điểm nào trong khi cổng nối tiếp đã được khởi tạo – kể cả trong suốt quá trình tạo đối tượng Tuy nhiên, một vài thuộc tính không thể hiệu chỉnh trong khi đối tượng được kết nối đến thiết bị hoặc trong thời gian ghi thông tin lên đĩa

2.4.2.2 Xác định tên thuộc tính

Tên thuộc tính của cổng nối tiếp có nhiều cách ký hiệu Điều này làm cho tên thuộc tính dễ đọc hơn và có thể sử dụng bất cứ tình huống nào nếu chúng ta muốn xác định tên thuộc tính Vì thế, chúng ta có thể sử dụng tên đầy đủ hoặc tên rút gọn Ví dụ, chúng ta có thể hiệu chỉnh thuộc tính tốc độ BAUD bằng ba cách sau:

Trang 23

set(s,'BaudRate',4800) set(s,'baudrate',4800) set(s,'BAUD',4800)

Chú ý: Khi chúng ta dùng nhiều tên thuộc tính trong M-file, nên sử dụng tên đầy đủ để ngăn ngừa những vấn đề nhầm lẫn tên với phiên bản khác của Matlab

2.4.2.3 Những giá trị thuộc tính mặc định

Tất cả những thuộc tính cấu hình đều có một giá trị mặc định, nếu không xác lập lại giá trị thuộc tính đó thì chúng sẽ sử dụng giá trị mặc định

Nếu một thuộc tính có nhiều giá trị lựa chọn thì giá trị nào nằm trong dấu {} là giá trị mặc định Chẳng hạn, giá trị mặc định để cho thuộc tính chẵn lẻ là none

set(s,'Parity') [ {none} | odd | even | mark | space ]

2.5 THIẾT LẬP CỔNG GIAO TIẾP VỚI MATLAB

2.5.1 Tạo cổng nối tiếp

Để tạo một cổng nối tiếp ta dùng hàm serial Hàm serial yêu cầu tên của

cổng nối tiếp được kết nối tới thiết bị như là một đối số đầu vào Ngoài ra, có thể hiệu chỉnh những giá trị thuộc tính trong suốt quá trình tạo đối tượng Ví dụ, để tạo đối tượng cổng nối tiếp kết hợp với cổng nối tiếp COM1

Bảng 2-3 Mô tả thuộc tính chung

Name (tên) Xác định tên đối tượng cổng nối tiếp

Port (cổng) Xác định tên cổng nối tiếp trên hệ điều hành sử dụng Type (loại) Xác định loại đối tượng

Có thể hiển thị giá trị của những thuộc tính đối tượng s với hàm get

get(s,{'Name','Port','Type'}) ans = 'Serial-COM1' 'COM1' 'serial'

2.5.1.1 Thiết lập thuộc tính cấu hình trong quá trình tạo đối tượng

Trong suốt quá trình tạo đối tượng, có thể thiết lập lại cấu hình thuộc tính

cổng nối tiếp hàm Serial chấp nhận những tên và giá trị thuộc tính trong cùng một định dạng như hàm set Ví dụ, thiết lập cặp tên / giá trị thuộc tính

Trang 24

s = serial('COM1','BaudRate',4800,'Parity','even');

Nếu tên thuộc tính thiết lập không phù hợp thì sẽ không tạo được đối tượng Tuy nhiên, nếu có một vài giá trị thuộc tính thiết lập không hợp lệ (ví dụ: Baudrate đặt ở 50) thì đối tượng vẫn được tạo ra nhưng giá trị không hợp lệ này được hiển thị

đến khi thực hiện kết nối đối tượng và thiết bị với hàm fopen

2.5.1.2 Hiển thị đối tượng cổng nối tiếp

Đối tượng cổng nối tiếp hiển thị những thông tin tóm tắt quan trọng về cấu hình và trạng thái bằng 3 cách sau:

- Gõ tên biến của cổng nối tiếp tại command line

- Không dùng dấu chấm phẩy (;) khi đang tạo một đối tượng cổng nối tiếp

- Không dùng dấu chấm phẩy (;) khi đang cấu hình những thuộc tính sử dụng ký hiệu dấu chấm (.)

Các thuộc tính cơ bản và trạng thái làm việc của đối tượng cổng nối tiếp s được hiển thị

Đối tượng cổng nối tiếp: Serial-COM1

Đặc tính cổng nối tiếp

Port: COM1 BaudRate: 9600 Terminator: 'LF' Trạng thái cổng nối tiếp

Status: closed RecordStatus: off Trạng thái truyền và nhận dữ liệu

TransferStatus: idle BytesAvailable: 0 ValuesReceived: 0 ValuesSent: 0

2.5.1 3 Tạo nhiều đối tượng cổng nối tiếp

Trong Matlab, để thiết lập nhiều đối tượng cổng nối tiếp, ta tạo chúng trong một cấu trúc mảng Ví dụ: Để tạo các đối tượng cổng nối tiếp là s1 và s2

Trang 25

Ma trận đối tượng cổng nối tiếp chứa các thuộc tính cổng nối tiếp được mô tả trong bảng 2-4

Bảng 2-4 Thuộc tính cổng nối tiếp

Có thể tạo ma trận cột y như sau:

y = [s1;s2];

Chú ý: Không thể tạo một ma trận của những đối tượng cổng nối tiếp Ví dụ: Chỉ có thể tạo được một vectơ hàng hoặc cột của những đối tượng cổng nối tiếp mà không thể tạo ma trận

z = [s1 s2;s1 s2];

??? Error using ==> serial/vertcat % lỗi sử dụng hàm serial/vertcat

2.5.2 Kết nối thiết bị

Trước khi sử dụng đối tượng cổng nối tiếp để viết và đọc dữ liệu, phải nối thiết bị với cổng nối tiếp được chỉ định trong hàm serial Để kết nối một đối tượng

cổng nối tiếp tới thiết bị, dùng hàm fopen

fopen(s) Một vài thuộc tính chỉ đọc trong khi đối tượng cổng nối tiếp đã được kết nối và phải được thiết lập cấu hình trước khi sử dụng lệnh fopen Chẳng hạn như những thuộc tính InputBufferSize và OutputBufferSize

Chú ý: Ta có thể cùng lúc tạo nhiều đối tượng cổng nối tiếp với một cổng nối tiếp Tuy nhiên, chỉ nên kết nối một đối tượng cổng nối tiếp với một cổng nối tiếp

Để kiểm tra tình trạng kết nối thuộc tính Status của đối tượng cổng nối tiếp và thiết bị, thực hiện như sau:

s.Status ans = open Khi việc kết nối giữa đối tượng cổng nối tiếp và thiết bị hoàn tất chúng ta có thể viết và đọc dữ liệu từ thiết bị đó

2.5.3 Thiết lập cấu hình giao tiếp

Trước khi viết và đọc dữ liệu thì cấu hình của cả đối tượng cổng nối tiếp và thiết bị phải giống nhau Cấu hình đường truyền cổng nối tiếp bao gồm những giá trị cho thuộc tính điều khiển tốc độ baud và định dạng dữ liệu nối tiếp Những thuộc tính được mô tả trong bảng 2-5:

Bảng 2-5 Thuộc tính truyền thông

Trang 26

Tên thuộc tính Mô tả

BaudRate Tốc độ truyền dữ liệu baud (bít/s)

DataBits Số bít dữ liệu được truyền trong một chuỗi nối tiếp Parity Loại bít chẵn lẻ sử dụng

StopBits Số bít dừng sử dụng hiện thị kết thúc một byte dữ liệu Terminator Hiển thị định dạng khi in

ƒ BaudRate: Là tốc độ truyền bít (bao gồm cả bít khởi đầu, bít chẵn lẻ

(nếu có) và bít kết thúc) trong một giây Tốc độ baud tiêu chuẩn trong Matlab gồm:

110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 38400, 57600, 115200, 128000 và 256000 Giá trị mặc định là 9600 Baud

ƒ DataBit: Số bít dữ liệu truyền trong một chuỗi nối tiếp bằng Matlab có

thể là 5, 6, 7 hoặc 8 bít Khi truyền các chuỗi ký tự ASCII thì số bít truyền dữ liệu phải ít nhất là 7 bít Khi truyền các dữ liệu số, yêu cầu số bít truyền dữ liệu là 8 bít Định dạng truyền 5 hoặc 7 bít dữ liệu chỉ ứng dụng đối với các thiết bị giao tiếp

đặc biệt Giá trị mặc định của Databit trong Matlab là 8 bít

ƒ Parity: Bít chẵn lẻ dùng để kiểm tra những lỗi đơn giản trong quá trình

truyền dữ liệu Bít chẵn lẻ có thể chọn là Even, Mark, Odd hoặc Space

ƒ StopBits: Dùng để báo hiệu kết thúc quá trính truyền một byte dữ liệu

Bít dừng có thể chọn là 1, 1.5 hoặc 2 bít

ƒ Terminator: Mô tả định dạng ký tự khi in Thiết lập Terminator là số

nguyên (từ 0 đến 127) biểu thị mã ký tự ASCII hoặc là một ký tự ASCII

Bảng 2-6 Mô tả các loại định dạng ký tự cuối (ký tự định dạng in)

Loại định dạng Chức năng

LF (13) Xuống dòng trước khi hiển thị dòng mới

CR (10) Hiển thị dòng mới bắt đầu từ đầu dòng

CR\LF Hiển thị dòng mới bắt đầu từ đầu dòng và dòng tiếp theo

sẽ xuống dòng

LF\CR Xuống dòng trước khi hiển thị dòng mới và dòng mới này

được bắt đầu ở đầu dòng

2.5.4 Viết và đọc dữ liệu

Tùy theo ứng dụng cổng nối tiếp, khi viết và đọc dữ liệu có 3 vấn đề chính cần quan tâm:

- Sẽ đọc và viết dữ liệu từ các hàm truy xuất dữ liệu được thực hiện trong cửa sổ command line hay không?

- Dạng dữ liệu được truyền là nhị phân (số) hay văn bản?

Trang 27

- Với những điều kiện nào thì việc đọc và viết hoàn tất?

Quá trình viết và đọc dữ liệu không đồng bộ có hai thuận lợi chính:

Trong khi đang viết và đọc dữ liệu có thể thực thi công việc khác Ngoài ra, còn sử dụng được tất cả những thuộc tính hỗ trợ trong hàm callback

Do các chân đọc và viết độc lập, nên có thể đọc và viết dữ liệu đồng thời với nhau Quá trình đọc và viết dữ liệu được minh họa trên hình 2.12

Hình 2.12 Sơ đồ truy xuất dữ liệu trong Matlab

2.5.4.1 Viết dữ liệu

Những hàm liên quan đến viết dữ liệu được mô tả trong bảng 2-7:

Bảng 2-7 Những hàm liên quan đến viết dữ liệu

fprintf Viết dữ liệu dạng text đến thiết bị

fwrite Viết dữ liệu dạng số đến thiết bị

stopasync Ngừng việc thi hành đọc và viết dữ liệu không đồng bộ Những thuộc tính liên quan đến viết dữ liệu được mô tả trong bảng 2-8:

Bảng 2-8 Những thuộc tính liên quan đến viết dữ liệu

BytesToOutput Số byte hiện có trong outputbuffer

OutputBufferSize Kích thước lớn nhất của outputbuffer

Timeout Thời gian chờ để hoàn thành thao tác đọc và viết dữ liệu TransferStatus Báo trạng thái đọc hoặc viết dữ liệu không đồng bộ đang

tiến hành ValuesSent Tổng số giá trị viết đến thiết bị

ƒ Dòng dữ liệu truyền khi viết (Data flow)

OutputBuffer là bộ nhớ máy tính được chỉ định bởi đối tượng cổng nối tiếp để lưu trữ dữ liệu được viết tới thiết bị Khi viết dữ liệu tới thiết bị, dòng dữ liệu đi theo hai bước:

Trang 28

- Dữ liệu được chỉ định bởi hàm fwrite sẽ được gởi tới outputbuffer (bộ

nhớ tạm thời khi truyền dữ liệu) (hình 2.13)

Hình 2.13 Sơ đồ truyền dữ liệu đến outputbuffer

- Dữ liệu trong outputbuffer sẽ được gởi tới thiết bị (hình 2.14)

Hình 2.14 Sơ đồ truyền dữ liệu từ outputbuffer đến thiết bị

Thuộc tính OutputBufferSize chỉ rõ số byte lớn nhất có thể lưu trữ trong outputbuffer Thuộc tính BytesToOutput cho biết số byte hiện hữu trong outputbuffer Những thuộc tính này có giá trị mặc định như sau:

s = serial('COM1');

get(s,{'OutputBufferSize','BytesToOutput'})

ans = [512] [0]

Nếu viết dữ liệu nhiều hơn so với dung lượng của Outputbuffer thì quá trình

viết dữ liệu sẽ không thực hiện và sẽ báo lỗi

ƒ Viết dữ liệu văn bản

Sử dụng hàm fprintf để viết dữ liệu văn bản đến thiết bị Dữ liệu văn bản có

thể là những lệnh thiết lập lại cấu hình thiết bị, báo thiết bị tiếp tục nhận dữ liệu hoặc trạng thái thông tin

Theo mặc định, fprintf chỉ viết dữ liệu bằng định dạng chuỗi Do nhiều thiết

bị cổng nối tiếp chỉ chấp nhận những lệnh có dạng văn bản Tuy nhiên, cũng có thể tạo nhiều định dạng khác

Chúng ta có thể xác định số giá trị được gởi tới thiết bị với thuộc tính ValuesSent

Trang 29

s ValuesSent

ans = 20

Chú ý: Giá trị thuộc tính ValuesSent bao gồm cả ký tự định dạng kiểu in vì mỗi lần xuất hiện “\n” trong dòng lệnh gởi tới thiết bị, nó được thay thế bởi giá trị thuộc tính ký tự định dạng kiểu in (Terminator property value)

s.Terminator

ans = LF Giá trị mặc định của ký tự định dạng kiểu in (Terminator) là ký tự xuống dòng

Theo mặc định fprintf truyền dữ liệu theo phương pháp đồng bộ Vì vậy, sẽ gây trở ngại cho Matlab command line cho tới khi quá trình truyền hoàn tất Để ghi

dữ liệu văn bản không đồng bộ tới thiết bị, trong hàm fprintf phải khai báo async

như là thông số vào

fprintf(s,'Display:Contrast 45','async')

Có thể xác định trạng thái hoạt động của truyền không đồng bộ với thuộc tính TransferStatus Nếu không thực hiện việc truyền và nhận dữ liệu thì TransferStatus nhàn rỗi (idle)

s.TransferStatus

Một thao tác ghi đồng bộ hay không đồng bộ sử dụng fprintf hoàn tất khi:

- Xác nhận dữ liệu được ghi

- Thời gian được xác định qua thuộc tính Timeout

Ngoài ra, cũng có thể ngừng một thao tác ghi không đồng bộ với hàm

stopasync.

ƒ Viết dữ liệu nhị phân

Dùng hàm fwrite để viết dữ liệu nhị phân đến thiết bị Viết dữ liệu nhị phân

nghĩa là viết dữ liệu có dạng số Chẳng hạn, chúng ta cần truyền các thông số của một số thiết bị đo

Chú ý: Một vài thiết bị cổng nối tiếp chỉ chấp nhận những lệnh có định

dạng văn bản (text-based) Do đó, chúng ta nên dùng hàm fprintf cho tất cả các

thao tác viết dữ liệu

Theo mặc định, fwrite dịch những giá trị sử dụng độ chính xác uchar Tuy

nhiên, ta có thể định lại theo nhiều độ chính xác khác nhau

Theo mặc định, fwrite cũng viết dữ liệu theo kiểu đồng bộ Vì vậy, để ghi dữ liệu nhị phân không đồng bộ tới thiết bị, chúng ta phải khai báo async như những thông số vào tới fwrite

fwrite(s,120,'async')

Trang 30

2.5.4.2 Đọc dữ liệu

Những thuộc tính liên quan đến đọc dữ liệu được mô tả trong bảng 2-9:

Bảng 2-9 Những thuộc tính liên quan việc đọc dữ liệu

BytesAvailable Số byte hiện có trong inputbuffer

InputBufferSize Kích thước lớn nhất của inputbuffer

ReadAsyncMode Xác định thao tác đọc dữ liệu không đồng bộ là continuous

ƒ Dòng dữ liệu truyền khi đọc

Inputbuffer là bộ nhớ máy tính được định bởi đối tượng cổng nối tiếp để lưu dữ liệu đọc từ thiết bị Khi đọc dữ liệu từ thiết bị, dòng dữ liệu được truyền theo 2 bước sau:

- Dữ liệu đọc từ thiết bị được lưu trữ trong inputbuffer (hình 2.15)

Hình 2.15 Sơ đồ đọc dữ liệu từ thiết bị đến inputbuffer

- Dữ liệu trong inputbuffer được trả về biến Matlab nhờ hàm đọc dữ liệu (hình 2.16)

Hình 2.16 Sơ đồ đọc dữ liệu từ inputbuffer để hiển thị

Trang 31

Thuộc tính InputBufferSize xác định số byte lớn nhất có thể lưu trữ trong inputbuffer Thuộc tính BytesAvailable báo số byte hiện hữu có thể đọc trong inputbuffer Giá trị mặc định cho những thuộc tính này được mô tả như sau

ƒ Đọc dữ liệu văn bản

Sử dụng các hàm fgetl, fgets, và fscanf để đọc dữ liệu có định dạng văn bản

từ thiết bị

s = serial('COM1');

fopen(s) fprintf(s,'*IDN?') out = fscanf(s)

Theo mặc định, fscanf đọc dữ liệu dùng định dạng ký tự bởi dữ liệu trả về

của nhiều thiết bị cổng nối tiếp có dạng văn bản Tuy nhiên, có thể thiết lập lại nhiều định dạng khác

Có thể xác định số giá trị đọc được từ thiết bị – bao gồm ký tự định dạng kiểu in – với thuộc tính ValuesReceived

s.ValuesReceived

ans = 56 Các hàm đọc dữ liệu trên có thể đọc đồng bộ và bất đồng bộ nhưng cho dù thao tác đọc là đồng bộ hay bất đồng bộ thì với thuộc tính ReadAsyncMode chúng

ta có thể thiết lập ReadAsyncMode là “continuous” hay “manual”

Nếu ReadAsyncMode là “continuous” (giá trị mặc định), đối tượng cổng nối tiếp liên tục yêu cầu thiết bị xác định sự hiện diện của dữ liệu để đọc Nếu có sự hiện diện của dữ liệu thì nó tự động đọc dữ liệu không đồng bộ và lưu trong InputBuffer Để truyền dữ liệu từ InputBuffer tới MATLAB, dùng hàm đọc đồng

bộ như là fgetl hay fscanf Nếu dữ liệu có trong InputBuffer, những hàm này có giá

trị trả về rất nhanh

Trang 32

này, phải sử dụng hàm readasync Sau đó, sử dụng một trong những hàm đọc đồng

bộ để chuyển dữ liệu từ InputBuffer tới MATLAB

s.TransferStatus ans =idle

Qui tắt để hoàn tất một thao tác đọc với fscanf

Quá trình đọc dữ liệu với hàm fscanf ngăn cản việc truy nhập tới Matlab

command cho tới khi:

- Ký tự định dạng kiểu in của thuộc tính Terminator được đọc

- Hết thời gian timeout do thuộc tính TimeOut quy định

- Số giá trị xác định được đọc

- InputBuffer đã đầy

ƒ Đọc dữ liệu nhị phân

Hàm fread dùng để đọc dữ liệu nhị phân từ thiết bị Đọc dữ liệu nhị phân

nghĩa là giá trị trả về cho Matlab là có dạng số

Giá trị mặc định của thuộc tính ReadAsyncMode là “continuous”, nên dữ liệu không đồng bộ được gởi đến InputBuffer ngay khi nó hiện diện trong thiết bị Số giá trị đọc được có thể hiển thị khi dùng thuộc tính BytesAvailable

s.BytesAvailable

ans = 69 Chuyển dữ liệu về Matlab có thể sử dụng bất kỳ một trong những hàm đọc

đồng bộ nào Tuy nhiên, nếu dùng fgetl, fgets, hoặc fscanf thì phải gọi hàm hai lần

bởi có hai ký tự định dạng kiểu in được lưu trữ trong inputbuffer Nếu dùng hàm

fread thì chúng ta có thể trả về tất cả dữ liệu đến Matlab trong một lần gọi hàm

Theo mặt định, hàm fread trả về những giá trị số trong những ma trận với độ

chính xác theo định dạng double Tuy nhiên, cũng có thể thiết lập lại với độï chính

Trang 33

xác khác nhau và có thể chuyển đổi dữ liệu số thành văn bản sử dụng hàm char

của Matlab

out = fread(s,69);

val = char(out)'

ƒ Xem dữ liệu ảnh bitmap

Để xem dữ liệu ảnh định dạng bitmap ta thực hiện theo những bước sau:

- Mở một tập tin ở ổ đĩa

- Viết dữ liệu tới tập tin ổ đĩa

- Đóng tập tin ổ đĩa

- Đọc dữ liệu vào Matlab dùng hàm imread

- Chỉnh tỷ lệ và hiển thị dữ liệu dùng hàm imagesc

Chú ý: Những phiên bản tập tin I/O của hàm fopen, fwrite, fclose được sử dụng

mymap = [0 0 0; 1 1 1];

colormap(mymap)

2.5.5 Ngưng kết nối và ngắt thiết bị

Khi không sử dụng đối tượng cổng nối tiếp trong thời gian dài, chúng ta nên ngưng kết nối với thiết bị và ngắt nó khỏi môi trường MATLAB bằng cách tách đối tượng khỏi bộ nhớ và vùng làm việc

Ngưng kết nối đối tượng cổng nối tiếp

Khi không cần truyền thông với thiết bị nữa, chúng ta nên ngưng kết nối với

đối tượng cổng nối tiếp dùng hàm fclose

fclose(s)

Ngắt khỏi môi trường MATLAB 7

Khi không cần truyền thông với thiết bị nữa, chúng ta nên xóa khỏi bộ nhớ

với hàm delete

delete(s)

Trước khi dùng hàm delete phải ngưng kết nối đối tượng cổng nối tiếp từ thiết bị với hàm fclose

Trang 34

Một đối tượng cổng nối tiếp đã được xóa thì không hợp lệ, điều này nghĩa là chúng ta không thể kết nối nó tới thiết bị Trong trường hợp này, chúng ta nên ngắt

đối tượng khỏi vùng làm việc MATLAB bằng lệnh clear

clear s

2.6 SỰ KIỆN (EVENTS) VÀ HÀM CALLBACKS

Matlab hỗ trợ nâng cao khả năng và tính linh họat của ứng dụng cổng nối tiếp bằng việc dùng những sự kiện (event) Khi có một điều kiện xảy ra, một sự kiện sẽ xuất hiện và tạo ra một hoặc nhiều callback

Trong khi đối tượng cổng nối tiếp được kết nối với thiết bị, chúng ta có thể sử dụng những sự kiện (events) để hiển thị một thông báo, dữ liệu hiển thị, phân tích dữ liệu, v.v… Callbacks được điều khiển qua những thuộc tính callback và những hàm trong callback Tất cả các loại sự kiện đều có thuộc tính callback tương ứng Những hàm callback là những hàm chứa trong M-file, vì vậy chúng ta có thể lập trình lại cho phù hợp với từng ứng dụng

Khi thực thi một sự kiện trong callback, ta xác định tên hàm callback trong M-file cũng như giá trị thuộc tính callback tương ứng của nó

2.6.1 Loại sự kiện và thuộc tính callback

Những loại sự kiện cổng nối tiếp và những thuộc tính callback được mô tả bảng 2-10

Bảng 2-10 Những loại sự kiện cổng nối tiếp và những thuộc tính callback

Các loại sự kiện Các thuộc tính tương ứng

BytesAvailableFcnCount BytesAvailableFcnMode Error ErrorFcn

Timer TimerFcn

TimerPeriod

ƒ Sự kiện Break–interrupt: Một sự kiện ngắt – sự gián đoạn phát ra tức

thời sau khi một ngắt được tạo ra bởi cổng nối tiếp Cổng nối tiếp phát ra một ngắt khi dữ liệu nhận được ở trong trạng thái không tích cực (inactive) lâu hơn thời gian truyền một ký tự

Trang 35

Sự kiện này thực thi hàm callback được chỉ định trong thuộc tính BreakInterruptFcn, nó có thể tạo ra ngay cả khi đọc và viết đồng bộ hay không đồng bộ

ƒ Sự kiện Bytes–Available: Một sự kiện byte hiện hữu phát ra tức thời sau

khi số byte được định trước xuất hiện trong inputbuffer hay xuất hiện ký tự định dạng kiểu in tùy theo thuộc tính BytesAvailableFcnMode

Nếu như BytesAvailableFcnMode là “byte” thì sự kiện những byte hiện hữu chỉ thực thi hàm callback khi số byte được chỉ định theo BytesAvailableFcnCount được lưu trữ trong inputbuffer Nếu BytesAvailableFcnMode là “terminal” thì hàm callback chỉ thực thi khi quá trình đọc ký tự định dạng kiểu in trong thuộc tính

“terminal” hoàn tất

Sự kiện này chỉ phát ra trong suốt quá trình đọc không đồng bộ

ƒ Sự kiện Error: Một sự kiện lỗi được phát ra tức thời khi lỗi xuất hiện

Sự kiện này thi hành hàm callback được chỉ định trong thuộc tính ErrorFcn Lỗi chỉ phát ra trong suốt quá trình đọc và viết không đồng bộ

Sự kiện lỗi được phát ra khi hiện tượng timeout xảy ra Hiện tượng timeout xuất hiện khi trong một thao tác đọc hoặc viết dữ liệu không thành công trong khoảng thời gian được xác định trong thuộc tính Timeout Sự kiện lỗi sẽ không được phát ra khi thiết lập các giá trị thuộc tính không hợp lệ

ƒ Sự kiện output–empty: Một sự kiện Output-Empty được phát ra lập tức

khi outputbuffer rỗng

Sự kiện này thi hành hàm callback được chỉ định trong thuộc tính OutputEmptyFcn Nó chỉ phát ra trong suốt thời gian thực hiện một thao tác viết không đồng bộ

ƒ Sự kiện Pin Status: Sự kiện trạng thái chân phát ra ngay khi trạng thái

các chân CD, CTS, DSR, RI biến đổi

Sự kiện này thi hành hàm callback đã được chỉ định trong thuộc tính PinStatusFcn Nó có thể được phát ra trong cả những thao tác đọc và viết đồng bộ hay không đồng bộ

ƒ Sự kiện Time: Một sự kiện đồng hồ thời gian phát ra khi vượt quá thời

gian được chỉ định trong thuộc tính TimerPeriod Thời gian này bắt đầu tính khi đối tượng cổng nối tiếp được kết nối tới thiết bị

Sự kiện này thi hành hàm callback đã được chỉ định trong thuộc tính TimerFcn Chú ý rằng, có một số sự kiện đồng hồ thời gian có thể không xử lý nếu như hệ thống máy tính hoạt động quá chậm hoặc giá trị TimerPeriod quá nhỏ

2.6.2 Lưu trữ thông tin sự kiện

Thông tin sự kiện có thể lưu trữ trong một hàm callback hoặc trong một tập tin lưu trữ Thông tin sự kiện được lưu trữ trong hàm callback dùng hai trường khác

Trang 36

nhau: loại (Type) và dữ liệu (Data) Type chứa loại biến cố, trong khi trường dữ liệu chứa thông tin cụ thể của sự kiện

Những loại và giá trị sự kiện cho trong trường Type và Data được liệt kê trong bảng 2-11

Bảng 2-11 Thông tin sự kiện

Type BreakInterrupt Break interrupt

Data.AbsTime day-month-year hour:minute:second Type BytesAvailable

Data.AbsTime day-month-year hour:minute:second Type PinStatus

Data.AbsTime day-month-year hour:minute:second Data.Pin CarrierDetect, ClearToSend, DataSetReady,

or RingIndicator Pin status

Data.PinValue on or off Type Timer Timer

Data.AbsTime day-month-year hour:minute:second

ƒ Trường AbsTime: AbsTime được định nghĩa cho tất cả những sự kiện và

báo hiệu thời gian xuất hiện sự kiện Thời gian này được khai báo lại trong đồng hồ theo dạng

Ngày - tháng - năm giờ: phút: giây

ƒ Trường Pin: Được sử dụng cho sự kiện trạng thái chân để báo hiệu sự

thay đổi trạng thái các chân CD , CTS , DSR , RI

ƒ Trường PinValue: Được sử dụng cho sự kiện trạng thái chân để báo

hiệu trạng thái của các chân CD, CTS, DSR, RI Các giá trị chân có thể là ON hoặc OFF

ƒ Trường Message: Được sử dụng cho sự kiện lỗi để lưu trữ thông báo mô

tả lỗi, nó sẽ phát ra khi xuất hiện lỗi

Trang 37

2.6.3 Tạo và thực thi các hàm callback

Khi một sự kiện xảy ra, có thể chỉ định hàm callback để được thực thi sự kiện đó bằng việc dùng tên của M-file hay giá trị thuộc tính callback tương ứng Ngoài ra, cũng có thể tạo hàm callback như hàm điều khiển (function handle) hoặc như một phần tử mảng của chuỗi

Ví dụ: Để thi hành hàm mycallback khi ký tự định dạng kiểu in được đọc:

function mycallback(obj,event)

2.7 SỬ DỤNG NHỮNG CHÂN ĐIỀU KHIỂN

Đối với cổng nối tiếp 9 chân, có 6 chân điều khiển Những chân điều khiển này có thể:

- Báo hiệu trạng thái kết nối thiết bị

- Điều khiển dòng dữ liệu

Những thuộc tính tương ứng với những chân điều khiển cổng nối tiếp mô tả bảng 2.12

Bảng 2-12 Các thuộc tính của chân điều khiển

DataTerminalReady Xác định tình trạng chân DTR

FlowControl Xác định phương pháp điều khiển luồng dữ liệu sử dụng PinStatus Hiển thị trạng thái chân CD, CTS, DSR, and RI

RequestToSend Xác định trạng thái chân RTS pin

2.7.1 Báo hiệu trạng thái kết nối thiết bị

DTE (máy tính) và DCE (thiết bị) thường sử dụng các chân CD, DSR, RI, DTR để báo hiệu sự kết nối giữa những thiết bị và đối tượng cổng nối tiếp, sau đó có thể bắt đầu viết và đọc dữ liệu khi sự kết nối được thiết lập

Với thuộc tính PinStatus, có thể giám sát trạng thái của các chân CD, DSR,

RI Tương tự, cũng có thể xác định trạng thái của chân DTR với thuộc tính DataTerminalReady

Trang 38

2.7.2 Điều khiển dòng dữ liệu

Điều khiển dòng dữ liệu hay bắt tay là một phương pháp sử dụng giao tiếp giữa một DCE và một DTE để ngăn ngừa dữ liệu bị mất trong suốt quá trình truyền Chẳng hạn, máy tính chỉ có thể nhận một lượng dữ liệu giới hạn trước khi nó được xử lý Khi giới hạn này đạt được, một tín hiệu bắt tay được truyền tới DCE để ngừng gởi dữ liệu Khi máy tính có thể nhận tiếp dữ liệu mới, tín hiệu bắt tay khác được truyền tới DCE để lại tiếp tục gởi dữ liệu

Dòng dữ liệu nếu được hỗ trợ của thiết bị, có thể điều khiển bằng một trong những phương pháp sau:

- Bắt tay phần cứng (hardware handshaking)

- Bắt tay phần mềm (software handshaking)

Phương pháp điều khiển dòng dữ liệu có thể thiết lập từ thuộc tính

FlowControl Nếu như FlowControl là “hardware” thì dòng dữ liệu được điều khiển theo kiểu bắt tay phần cứng Nếu như FlowControl là “software” thì luồng dữ liệu được điều khiển theo kiểu bắt tay phần mềm Nếu như FlowControl là “none” thì

không sử dụng phương pháp bắt tay nào

2.7.2.1 Bắt tay phần cứng (Hardware Handshaking)

Bắt tay phần cứng: Dùng các chân điều khiển của cổng nối tiếp để điều khiển dòng dữ liệu Trong hầu hết các trường hợp đều sử dụng các chân RTS và CTS

Nếu như FlowControl là Hardware thì các chân RTS và CTS được quản lý tự

động bởi DTE và DCE Trong thuộc tính PinStatus có thể khai báo lại giá trị chân CTS và cũng có thể thiết lập lại giá trị chân RTS trong thuộc tính RequestToSend

Chú ý: Một vài thiết bị cũng sử dụng chân DTR và DSR cho việc bắt tay phần cứng Tuy nhiên, đó là những chân tiêu biểu dùng để báo hiệu hệ thống sẵn sàng truyền thông mà không dùng để điều khiển truyền dữ liệu Trong matlab, bắt tay phần cứng luôn sử dụng những chân RTS và CTS

Nếu thiết bị không dùng tiêu chuẩn bắt tay phần cứng, chúng ta cần phải

thiết lập lại thuộc tính RequestToSend Trong trường hợp này, nên thiết lập

FlowControl là none Nếu FlowControl là hardware thì giá trị RequestToSend được

chỉ định có thể không thực hiện đúng

2.7.2.2 Bắt tay phần mềm (Software Handshaking)

Bắt tay phần mềm: Dùng những ký tự ASCII xác định để điều khiển dòng dữ liệu Những ký tự này Xon và Xoff (XON và XOFF) được mô tả bảng 2-13

Bảng 2-13 Những ký tự điều khiển trong bắt tay phần mềm

Trang 39

Xoff (XOFF) 19 Ngừng truyền dữ liệu

Khi dùng bắt tay phần mềm những ký tự gởi trên đường truyền giống như gởi dữ liệu thông thường Do đó, chúng ta chỉ cần những chân TD, RD và GND

Bất lợi chính khi sử dụng bắt tay phần mềm là chúng ta không thể viết ký tự Xon hoặc Xoff trong khi dữ liệu cần viết tới thiết bị là dữ liệu số Bởi dữ liệu số được phép chứa số 17 hoặc 19, điều này làm chúng không thể phân biệt giữa những ký tự điều khiển và dữ liệu Tuy nhiên, trong khi dữ liệu đang đọc không đồng bộ từ thiết bị chúng ta vẫn có thể viết Xon hoặc Xoff bởi chúng ta đang dùng cả hai chân TD và RD

2.8 GHI THÔNG TIN LÊN ĐĨA

Trong khi đối tượng cổng nối tiếp được kết nối với thiết bị, ta có thể ghi thông tin này thành một tập tin trên đĩa Nội dung thông tin ghi được bao gồm:

- Số lượng giá trị được viết tới thiết bị, số lượng giá trị được đọc từ thiết bị, và kiểu giá trị dữ liệu

- Dữ liệu được viết tới thiết bị và dữ liệu đọc từ thiết bị

- Thông tin sự kiện

Ghi thông tin lên đĩa cung cấp một bản ghi thông tin của cổng nối tiếp, là một phương pháp gỡ lỗi dễ dàng cho chương trình ứng dụng Trong Matlab hàm

record được dùng để ghi thông tin lên một tập tin trên đĩa Các thuộc tính tương ứng với việc ghi thông tin lên đĩa được trình bày ở bảng 2-14:

Bảng 2-14 Thuộc tính ghi

Tên thuộc tính Mô tả

RecordDetail Chỉ lượng thông tin được lưu đến tập tin ghi

RecordMode Chỉ có dữ liệu và thông tin sự kiện được lưu đến một hoặc

nhiều tập tin ghi RecordName Chỉ tên của tập tin ghi

RecordStatus Báo hiệu khi dữ liệu và thông tin sự kiện được lưu vào tập

tin ghi

2.8.1 Phương pháp ghi tập tin

Khi bắt đầu ghi với hàm record, thuộc tính RecordMode xác định nếu tập tin

ghi mới thì tập tin mới được tạo ra hoặc nếu thông tin mới thì đuợc ghi tiếp theo trong tập tin ghi hiện hành

Có thể thiết lập RecordMode để ghi đè, ghi tiếp theo, hoặc theo chỉ mục

Nếu như RecordMode là overwrite thì tập tin được ghi đè lên tập tin cũ Nếu như RecordMode là append, thì thông tin mới được ghi tiếp theo tập tin được xác định trong RecordName Nếu như RecordMode là index thì một tập tin mới được ghi

trên đĩa nhưng không đè lên tập tin trước

Trang 40

2.8.2 Xác định tên tập tin

Để xác định tên của tập tin ghi ta dùng thuộc tính RecordName Ta có thể xác định bất kỳ loại giá trị nào đối với RecordName – Bao gồm đường dẫn thư mục

– Tên tập tin Ngoài ra, Nếu như RecordMode là index thì tên tập tin phải theo

những qui tắt sau:

- Những tên chỉ mục tập tin có dạng số Con số này đứng trước phần mở rộng của tên tập tin và được tăng lên 1 cho tập tin ghi kế tiếp

- Nếu như tên tập tin ban đầu không chỉ rõ con số nào thì tên tập tin ghi đầu tiên không có con số đi theo Ví dụ, nếu như RecordName là myfile.txt thì myfile.txt là tên của tập tin ghi đầu tiên, myfile01.txt là tên của tập tin ghi thứ hai, v.v…

- RecordName được cập nhật sau khi tập tin ghi đóng

- Nếu như tên tập tin được chỉ định đã tồn tại rồi thì tập tin tồn tại đó bị ghi đè

2.8.3 Định dạng tập tin

Tập tin ghi là một tập tin ASCII chứa đựng một hồ sơ của một hoặc nhiều phiên bản cổng nối tiếp Thuộc tính RecordDetail xác định lượng thông tin trong tập tin ghi

RecordDetail có thể chọn là “compact” hay “verbose” Nếu chọn compact thì

nội dung tập tin sẽ ghi gồm: Số lượng giá trị viết tới thiết bị, số lượng giá trị đọc từ

thiết bị, kiểu giá trị dữ liệu và thông tin sự kiện Nếu chọn verbose thì nội dung tập

tin sẽ ghi là: Những thông tin trước đó cũng như dữ liệu được truyền tới thiết bị và truyền đi từ thiết bị

Dữ liệu nhị phân với độ chính xác: uchar, schar, (u)int8, (u)int16 hoặc

(u)int32 được ghi theo định dạng hệ đếm 16(hexadecimal)

2.9 LƯU VÀ XUẤT DỮ LIỆU

Có thể lưu những đối tượng cổng nối tiếp tới MAT-file như chọn bất kỳ sự

thay đổi nào trong vùng làm việc (workspace) – sử dụng lệnh save Giả sử để tạo đối tượng cổng nối tiếp s kết hợp với cổng nối tiếp COM1, thiết lập các giá trị

thuộc tính và thực hiện một thao tác viết và đọc:

s = serial('COM1');

s.BaudRate = 19200;

s.Tag = 'My serial object';

fopen(s) fprintf(s, '*IDN?') out = fscanf(s);

Ngày đăng: 18/11/2020, 14:00

HÌNH ẢNH LIÊN QUAN

Hình 3.2. Sơ đồ khối AT89S52. - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 3.2. Sơ đồ khối AT89S52 (Trang 44)
Hình 3.13. Mạch điện ứng dụng thông dụng của vi mạch M62358 - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 3.13. Mạch điện ứng dụng thông dụng của vi mạch M62358 (Trang 66)
Hình 4.1.  Sơ đồ cấu trúc của hệ thống điều khiển lập trình - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 4.1. Sơ đồ cấu trúc của hệ thống điều khiển lập trình (Trang 69)
Hình 4.3. Thuật toán điều khiển động cơ. - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 4.3. Thuật toán điều khiển động cơ (Trang 73)
Hình 4.40. Sơ đồ hệ thống đánh lửa với cơ cấu điều khiển góc đánh lửa sớm - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 4.40. Sơ đồ hệ thống đánh lửa với cơ cấu điều khiển góc đánh lửa sớm (Trang 92)
Hình 4.46. Xung điều khiển kim phun ứng với từng chế độ làm việc - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 4.46. Xung điều khiển kim phun ứng với từng chế độ làm việc (Trang 96)
Hình 4.49. Điều khiển thời gian phun nhiên liệu  Lượng nhiên liệu phun vào một xy lanh: - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 4.49. Điều khiển thời gian phun nhiên liệu Lượng nhiên liệu phun vào một xy lanh: (Trang 97)
Hình 5.25. Trang chủ khi hiệu chỉnh thuộc tính của các thành phần - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 5.25. Trang chủ khi hiệu chỉnh thuộc tính của các thành phần (Trang 137)
Hình 6.7. Sơ đồ nguyên lý mạch điện bộ giao tiếp - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 6.7. Sơ đồ nguyên lý mạch điện bộ giao tiếp (Trang 148)
6.2.2. Sơ đồ bố trí linh kiện. - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
6.2.2. Sơ đồ bố trí linh kiện (Trang 148)
Hình 7.2. Sơ đồ đấu dây giữa bộ giao tiếp và động cơ - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 7.2. Sơ đồ đấu dây giữa bộ giao tiếp và động cơ (Trang 155)
7.2.2. Sơ đồ bố trí thí nghiệm. - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
7.2.2. Sơ đồ bố trí thí nghiệm (Trang 156)
Hình 7.4. Dữ liệu động cơ hiển thị trên máy tính - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 7.4. Dữ liệu động cơ hiển thị trên máy tính (Trang 158)
Hình 7.7. Dữ liệu động cơ hiển thị trên máy chẩn đoán DCN-PRO - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 7.7. Dữ liệu động cơ hiển thị trên máy chẩn đoán DCN-PRO (Trang 160)
Hình 7.8. Mã lỗi động cơ hiển thị trên giao diện máy tính - Nghiên cứu thiết kế chế tạo mạch giao tiếp giữa máy tính và ecu điều khiển động cơ
Hình 7.8. Mã lỗi động cơ hiển thị trên giao diện máy tính (Trang 161)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm